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

CircleCI + Kind による Kubernetes E2E テスト #circlec...

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. 覇権 OSS としての Kubernetes • Kubernetes を前提とした技術の台頭 ◦ 基盤としてのスケーラブルな設計 ◦

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

    変更や故障の影響範囲が 広くなりやすい • 実際に動かさないと検証が困難 ◦ 複数のカスタマイズがお互い干渉しないか? ◦ バージョンアップしても大丈夫か? #circlecijp
  3. Kind でローカルクラスタ構築 • Multi-Node のクラスタが作成可 ◦ 現状、他ツールでは対応不可 ◦ コンテナを Kubernetes

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

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

    の Node に見立てる • 高いカスタマイズ性 ◦ Kubernetes のバージョン指定 ◦ クラスタの設定項目もほぼ自由に上書き可能 • Kubernetes 本体のテストでも使用 #circlecijp
  6. CircleCI + Kind 利用フロー 1. クラスタのセットアップ ◦ Kind で Kubernetes

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

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

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

    クラスタを立ち上げ 2. テスト対象アプリのビルド ◦ Node コンテナ外側で docker build ◦ できた Image を Node コンテナ内側に転送 3. テストシナリオの実行 ◦ kubectl で Kubernetes クラスタを操作 #circlecijp
  11. まとめ • Kubernetes のプラットフォーム化 ◦ クラスタの現物がないと動作検証が辛い • Kind でローカルクラスタ構築 ◦

    コンテナによって Multi-Node を実現 ◦ 構成や設定のカスタマイズも容易 • CircleCI 上でクラスタが動かせる ◦ E2E テストを CI フローの中で実行可能 #circlecijp