Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CircleCI + Kind による Kubernetes E2E テスト #circlecijp / CircleCI User Community Meetup

y_taka_23
August 23, 2019

CircleCI + Kind による Kubernetes E2E テスト #circlecijp / CircleCI User Community Meetup

CircleCI ユーザコミュニティミートアップで使用したスライドです。

Kind(Kubernetes IN Docker)は、Kubernetes の Node をコンテナ化することで、マルチノードクラスタをローカルで簡単に立ち上げられるようにするツールです。Kind を使用することで、コンテナが動く環境ならどこでも使い捨ての Kuberentes クラスタを作成することができるため、クラスタの動作に依存するようなツールの検証を非常に手軽に行うことができます。発表中ではこの Kind を CircleCI 上で起動させて E2E テストを行う方法を解説しました。

イベント概要:https://circleci.connpass.com/event/140666/

y_taka_23

August 23, 2019
Tweet

More Decks by y_taka_23

Other Decks in Technology

Transcript

  1. CircleCI + Kind による Kubernetes E2E テスト チェシャ猫 (@y_taka_23) CircleCI

    User Community Meetup (2019/08/23) #circlecijp
  2. Kubernetes 使ってる人? #circlecijp

  3. 覇権 OSS としての Kubernetes • Kubernetes を前提とした技術の台頭 ◦ 基盤としてのスケーラブルな設計 ◦

    パーツとしての Kubernetes の機能群 ◦ いわば “The Platform of Platforms” • ユースケースに応じたカスタマイズ ◦ Webhook で独自の処理を追加 ◦ Operator Pattern で独自リソースを定義 #circlecijp
  4. 一方で Kubernetes ゆえの闇も • そもそもシステムとして複雑 ◦ 多数のコンポーネントが連携 ◦ パーツとして隠蔽されている状況が把握しづらい ◦

    変更や故障の影響範囲が 広くなりやすい • 実際に動かさないと検証が困難 ◦ 複数のカスタマイズがお互い干渉しないか? ◦ バージョンアップしても大丈夫か? #circlecijp
  5. 手軽に使い捨てできる テスト用クラスタが欲しくなる #circlecijp

  6. Kind https://github.com/kubernetes-sigs/kind #circlecijp

  7. Kind でローカルクラスタ構築 • Multi-Node のクラスタが作成可 ◦ 現状、他ツールでは対応不可 ◦ コンテナを Kubernetes

    の Node に見立てる • 高いカスタマイズ性 ◦ Kubernetes のバージョン指定 ◦ クラスタの設定項目もほぼ自由に上書き可能 • Kubernetes 本体のテストでも使用 #circlecijp
  8. Kubernetes IN Docker https://github.com/kubernetes-sigs/kind #circlecijp

  9. Docker OS #circlecijp

  10. Docker OS Container (K8s Node) Container (K8s Node) (K8s は

    Kubernetes の略) #circlecijp
  11. Docker OS Container (K8s Node) Container (K8s Node) Docker Docker

    K8s Container K8s Container K8s Container K8s Container (K8s は Kubernetes の略) #circlecijp
  12. Kind でローカルクラスタ構築(再掲) • Multi-Node のクラスタが作成可 ◦ 現状、他ツールでは対応不可 ◦ コンテナを Kubernetes

    の Node に見立てる • 高いカスタマイズ性 ◦ Kubernetes のバージョン指定 ◦ クラスタの設定項目もほぼ自由に上書き可能 • Kubernetes 本体のテストでも使用 #circlecijp
  13.  CircleCI 上でクラスタが立つ! #circlecijp

  14. CircleCI + Kind 利用フロー 1. クラスタのセットアップ ◦ Kind で Kubernetes

    クラスタを立ち上げ 2. テスト対象アプリのビルド ◦ Node コンテナ外側で docker build ◦ できた Image を Node コンテナ内側に転送 3. テストシナリオの実行 ◦ kubectl で Kubernetes クラスタを操作 #circlecijp
  15. CircleCI + Kind 利用フロー 1. クラスタのセットアップ ◦ Kind で Kubernetes

    クラスタを立ち上げ 2. テスト対象アプリのビルド ◦ Node コンテナ外側で docker build ◦ できた Image を Node コンテナ内側に転送 3. テストシナリオの実行 ◦ kubectl で Kubernetes クラスタを操作 #circlecijp
  16. クラスタ構成の指定 (cluster.yaml) #circlecijp

  17. CircleCI ビルド設定 (config.yml) #circlecijp

  18. #circlecijp

  19. #circlecijp

  20. CircleCI + Kind 利用フロー 1. クラスタのセットアップ ◦ Kind で Kubernetes

    クラスタを立ち上げ 2. テスト対象アプリのビルド ◦ Node コンテナ外側で docker build ◦ できた Image を Node コンテナ内側に転送 3. テストシナリオの実行 ◦ kubectl で Kubernetes クラスタを操作 #circlecijp
  21. Docker Virtual Machine Executor Image docker build --tag user/myapp .

    #circlecijp
  22. Docker Virtual Machine Executor Container (K8s Node) Container (K8s Node)

    Docker Docker Image kind load docker-image user/myapp --nodes node1,node2 Image Image #circlecijp
  23. CircleCI + Kind 利用フロー 1. クラスタのセットアップ ◦ Kind で Kubernetes

    クラスタを立ち上げ 2. テスト対象アプリのビルド ◦ Node コンテナ外側で docker build ◦ できた Image を Node コンテナ内側に転送 3. テストシナリオの実行 ◦ kubectl で Kubernetes クラスタを操作 #circlecijp
  24. https://github.com/onsi/ginkgo #circlecijp

  25. まとめ • Kubernetes のプラットフォーム化 ◦ クラスタの現物がないと動作検証が辛い • Kind でローカルクラスタ構築 ◦

    コンテナによって Multi-Node を実現 ◦ 構成や設定のカスタマイズも容易 • CircleCI 上でクラスタが動かせる ◦ E2E テストを CI フローの中で実行可能 #circlecijp
  26. Enjoy E2E Testing with Kind! Presented by チェシャ猫 (@y_taka_23) #circlecijp