Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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