CircleCI + Kind による Kubernetes E2E テスト #circlecijp / CircleCI User Community Meetup
by
y_taka_23
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
CircleCI + Kind による Kubernetes E2E テスト チェシャ猫 (@y_taka_23) CircleCI User Community Meetup (2019/08/23) #circlecijp
Slide 2
Slide 2 text
Kubernetes 使ってる人? #circlecijp
Slide 3
Slide 3 text
覇権 OSS としての Kubernetes ● Kubernetes を前提とした技術の台頭 ○ 基盤としてのスケーラブルな設計 ○ パーツとしての Kubernetes の機能群 ○ いわば “The Platform of Platforms” ● ユースケースに応じたカスタマイズ ○ Webhook で独自の処理を追加 ○ Operator Pattern で独自リソースを定義 #circlecijp
Slide 4
Slide 4 text
一方で Kubernetes ゆえの闇も ● そもそもシステムとして複雑 ○ 多数のコンポーネントが連携 ○ パーツとして隠蔽されている状況が把握しづらい ○ 変更や故障の影響範囲が 広くなりやすい ● 実際に動かさないと検証が困難 ○ 複数のカスタマイズがお互い干渉しないか? ○ バージョンアップしても大丈夫か? #circlecijp
Slide 5
Slide 5 text
手軽に使い捨てできる テスト用クラスタが欲しくなる #circlecijp
Slide 6
Slide 6 text
Kind https://github.com/kubernetes-sigs/kind #circlecijp
Slide 7
Slide 7 text
Kind でローカルクラスタ構築 ● Multi-Node のクラスタが作成可 ○ 現状、他ツールでは対応不可 ○ コンテナを Kubernetes の Node に見立てる ● 高いカスタマイズ性 ○ Kubernetes のバージョン指定 ○ クラスタの設定項目もほぼ自由に上書き可能 ● Kubernetes 本体のテストでも使用 #circlecijp
Slide 8
Slide 8 text
Kubernetes IN Docker https://github.com/kubernetes-sigs/kind #circlecijp
Slide 9
Slide 9 text
Docker OS #circlecijp
Slide 10
Slide 10 text
Docker OS Container (K8s Node) Container (K8s Node) (K8s は Kubernetes の略) #circlecijp
Slide 11
Slide 11 text
Docker OS Container (K8s Node) Container (K8s Node) Docker Docker K8s Container K8s Container K8s Container K8s Container (K8s は Kubernetes の略) #circlecijp
Slide 12
Slide 12 text
Kind でローカルクラスタ構築(再掲) ● Multi-Node のクラスタが作成可 ○ 現状、他ツールでは対応不可 ○ コンテナを Kubernetes の Node に見立てる ● 高いカスタマイズ性 ○ Kubernetes のバージョン指定 ○ クラスタの設定項目もほぼ自由に上書き可能 ● Kubernetes 本体のテストでも使用 #circlecijp
Slide 13
Slide 13 text
CircleCI 上でクラスタが立つ! #circlecijp
Slide 14
Slide 14 text
CircleCI + Kind 利用フロー 1. クラスタのセットアップ ○ Kind で Kubernetes クラスタを立ち上げ 2. テスト対象アプリのビルド ○ Node コンテナ外側で docker build ○ できた Image を Node コンテナ内側に転送 3. テストシナリオの実行 ○ kubectl で Kubernetes クラスタを操作 #circlecijp
Slide 15
Slide 15 text
CircleCI + Kind 利用フロー 1. クラスタのセットアップ ○ Kind で Kubernetes クラスタを立ち上げ 2. テスト対象アプリのビルド ○ Node コンテナ外側で docker build ○ できた Image を Node コンテナ内側に転送 3. テストシナリオの実行 ○ kubectl で Kubernetes クラスタを操作 #circlecijp
Slide 16
Slide 16 text
クラスタ構成の指定 (cluster.yaml) #circlecijp
Slide 17
Slide 17 text
CircleCI ビルド設定 (config.yml) #circlecijp
Slide 18
Slide 18 text
#circlecijp
Slide 19
Slide 19 text
#circlecijp
Slide 20
Slide 20 text
CircleCI + Kind 利用フロー 1. クラスタのセットアップ ○ Kind で Kubernetes クラスタを立ち上げ 2. テスト対象アプリのビルド ○ Node コンテナ外側で docker build ○ できた Image を Node コンテナ内側に転送 3. テストシナリオの実行 ○ kubectl で Kubernetes クラスタを操作 #circlecijp
Slide 21
Slide 21 text
Docker Virtual Machine Executor Image docker build --tag user/myapp . #circlecijp
Slide 22
Slide 22 text
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
Slide 23
Slide 23 text
CircleCI + Kind 利用フロー 1. クラスタのセットアップ ○ Kind で Kubernetes クラスタを立ち上げ 2. テスト対象アプリのビルド ○ Node コンテナ外側で docker build ○ できた Image を Node コンテナ内側に転送 3. テストシナリオの実行 ○ kubectl で Kubernetes クラスタを操作 #circlecijp
Slide 24
Slide 24 text
https://github.com/onsi/ginkgo #circlecijp
Slide 25
Slide 25 text
まとめ ● Kubernetes のプラットフォーム化 ○ クラスタの現物がないと動作検証が辛い ● Kind でローカルクラスタ構築 ○ コンテナによって Multi-Node を実現 ○ 構成や設定のカスタマイズも容易 ● CircleCI 上でクラスタが動かせる ○ E2E テストを CI フローの中で実行可能 #circlecijp
Slide 26
Slide 26 text
Enjoy E2E Testing with Kind! Presented by チェシャ猫 (@y_taka_23) #circlecijp