3. KubeCon で聞いてきた CI/CD セッション(抜粋)
Keynote
● Cloud Native CD: Spinnaker and the Culture Behind the Tech
● KubeCon Opening Keynote - Project Update
Sessions
● Using Containers for Continuous Integration and Continuous Delivery
● Deploying to Kubernetes Thousands of Times Per/Day
● Continuous Delivery with Kubernetes at Box
● Microservices, Service Mesh, and CI/CD Pipelines: Making It All Work Together
● Building Better Containers: A Survey of Container Build Tools
● GitOps - Operations by Pull Request
17. 4: Cloud Native CD: Spinnaker and the Culture Behind the Tech
Netflix の Spinnaker が出来るまでのテクノロジーの歴史
● 時間区切りで Deploy タイミングを指定する Time Window
● トラフィックガード機能
● Canary / Blue-Green デプロイ
● Manual Judgement によるデプロイ判断のフロー
● 今後の展望
○ CI
○ Declartive CD (恐らく 宣言的コードによる CD の設定化)
○ デプロイ方法の詳細を抽象化して提供
18. 9: KubeCon Opening Keynote - Project Update
1. アプリケーションコードの変更
a. git clone HOGE;
b. git checkout -b funcA;
c. vi test.java;
d. git push origin funcA
e. PR を出す
f. Merge する(Dev 環境へ反映)
g. Docker Image の build
h. Registry への upload
i. リリース Tag を打つ
2. Kubernetes クラスタへの反映
a. 上記で Tag を打ったことで、Kubernetes Manifest YAML が生成されてPR が自動で出される
b. マージするとapply される(本番適用)
GitHub
k8s YAML
manifest
GitHub
Application
Code
22. Using Containers for Continuous Integration and Continuous Delivery
podTemplate(label: 'mypod') {
node('mypod') {
sh 'Hello world!'
}
}
build task をコンテナとして起動
Groovy で記述可能
PodTemplate と同等の表現力
https://github.com/jenkinsci/kubernetes-plugin
23. Deploying to Kubernetes Thousands of Times Per/Day
Kubernetes を使って High Velocity を実現しましょう!
※ 変更から反映までの間隔を出来るだけ短くすること
24. Deploying to Kubernetes Thousands of Times Per/Day
1.Image First
● Immutable なコンテナにする
● Entrypoint を設定してそのまま起動できるようにする
● local / dev / prd で同じイメージを利用する
● latest タグは使わない
● GitHub の特定のコミットと Image Tag を紐付けておく
● local でビルドして push はしない(自動化必須)
25. Deploying to Kubernetes Thousands of Times Per/Day
2.Shift Left
テストは出来るだけ前倒ししましょう
Bottleneck
26. Deploying to Kubernetes Thousands of Times Per/Day
3.Maintain Application Portability
クラスタが消し飛んだときに復旧できますか? (会場では x hour ~ x day の声)
ちゃんと移動出来るようにメンテナンスはし続けて下さい
● 設定ファイルはコンテナイメージに内包せず ConfigMap / Secret を使う
○ Docker Build は出来るだけ避ける
○ 環境変化に強い設計にする
● Helm Charts 化も検討しましょう
● ディザスタリカバリのテストもしましょう
27. Deploying to Kubernetes Thousands of Times Per/Day
4.Outsource Cluster Management
● クラスタの管理は専門チームに任せる
● スケーラビリティや冗長化の計画を持っておく
● Certified Kubernetes Conformance Program に準拠した構成にしましょう
32. Microservices, Service Mesh, and CI/CD Pipelines: Making It All Work Together
Istio + BRIGADE + kashti (WebUI) を使った ServiceMesh + CI/CD 環境
Istio を使うことで
● トラフィックコントロール
○ Canary リリース
● Chaos テストのために Fault injection(遅延やドロップ)
○ 障害試験
● メトリクスのスコアリング
○ パフォーマンス低下の検知
○ 複雑な ServiceMesh 内でのパフォーマンスチェック
33. Microservices, Service Mesh, and CI/CD Pipelines: Making It All Work Together
Istio + BRIGADE + kashti (WebUI) を使った ServiceMesh + CI/CD 環境
BRIGADE を使うことで
● Event driven な CI/CD Pipeline
○ DockerHub の変更を検知
○ Github の変更を検知
● JavaScript による Pipeline 定義
○ コード化が可能
● 全てを網羅
○ Go binary の作成、Docker Image の作成、Helm Charts の作成、Slack 通知
events.on("exec", () => {
var job = new Job("test", "alpine:3.4")
job.tasks = [
"echo Hello",
"echo World"
]
job.run()
})
34. Microservices, Service Mesh, and CI/CD Pipelines: Making It All Work Together
あとこのセッションでちょっと納得したのは
● PR で Canary リリース
● Merge で正式リリース
というのは良さそうだなと思いました
35. Building Better Containers: A Survey of Container Build Tools
現状の Dockerfile の問題
● イメージの再現性が乏しい
● Bash での Programmability
● イメージフォーマット間での連携が弱い
Dockerfile 使ってコンテナイメージ作る時代はきっと終わるよ!
[ソースからイメージビルド]
source-to-image (s2i)
buildkit
habitat
詳しくは凄い量になるので、
付録の SpreadSheet で。
[従来方式]
buildah
nixos-container
ansible-container
smith
(distroless)