Slide 1

Slide 1 text

SESSION Kubernetes 導入における 実践プラクティス

Slide 2

Slide 2 text

SESSION Immutable Clusterに対する 定期Version Upgrade戦略

Slide 3

Slide 3 text

AGENDA 1. EKSのImmutable Clusterによる運用に   至るまでの経緯 2. クラスタのアップデートの流れ

Slide 4

Slide 4 text

1 EKSのImmutable Clusterによる 運用に至るまでの経緯

Slide 5

Slide 5 text

EKSの前の時代 - 現在はEOLだが、EKSのなかった時代のKuberentes構成ツール - コントローラも含めてEC2のプロビジョニング - 1年に1回のアップデートだったので、差分が多く、ローリングアップデートは不可 kube-aws時代 - アプリケーション側の移行に時間がかかる - 1年に1回のアップデートだったので、Kubernetes側の変更箇所が多い - デプロイツールが微妙で、クラスタ依存の変更が多く、開発の傍らでパワーが必要 クラスタアップデート時の問題 - クラスタ側、アプリケーション側にKubernetesへの変更追従が辛い - Kubernetes側の新しい機能が使えない 1年に1回のつらみ

Slide 6

Slide 6 text

- 構築ツールとしてeksctlの採用 - ニッチなツールや自作は減らす(ラッパーはあるけど) - クラスタ構築自体の負荷が減った EKSの強みを活かす - クラスタ運用負荷を減らす - アプリケーション側の移行負荷を減らす - helmfile(パッケージ化) + GitOpsの採用 クラスタアップデート時の問題の解決 - Kubernetesの(ほぼ)最新の機能を利用可能 - セキュリティ的にも◎ - 変更追従が少なく、結果的に負荷が少ない - 変更箇所を少なくするように構築環境を整備したのもある 1年に1回から3ヶ月に1回の世界へ EKS後の時代

Slide 7

Slide 7 text

2 クラスタのアップデートの流れ

Slide 8

Slide 8 text

クラスタのアップデートの流れ(クラスタ作成) - バージョンごとのクラスタを作成 - 各アプリケーションは(ある程度期限を決 めて)開発者側のタイミングで移行 - SREはクラスタの作成と管理系アプリ ケーション(Datadog, fluentd, etc)の インストールまでが責務

Slide 9

Slide 9 text

クラスタのアップデートの流れ(アプリケーションの移行)

Slide 10

Slide 10 text

おわり

Slide 11

Slide 11 text

SESSION Kubernetes CI / CD の構成例

Slide 12

Slide 12 text

1 Immutable Clusterでの アプリケーション管理

Slide 13

Slide 13 text

EKS(Kubernetes)導入前のCI/CD

Slide 14

Slide 14 text

EKS(Kubernetes)導入前のCI/CD Deploy Config Prod CI/CD Pipeline Stage Test Application CI Tool

Slide 15

Slide 15 text

EKS(Kubernetes)導入前のCI/CD Deploy Config Prod CI/CD Pipeline Stage Test Application CI Tool RUN

Slide 16

Slide 16 text

EKS(Kubernetes)導入前のCI/CD Deploy Config Prod CI/CD Pipeline Stage Test Application CI Tool Pull Pull

Slide 17

Slide 17 text

EKS(Kubernetes)導入前のCI/CD Deploy Config Prod CI/CD Pipeline Stage Test Application CI Tool Build

Slide 18

Slide 18 text

EKS(Kubernetes)導入前のCI/CD Deploy Config Prod CI/CD Pipeline Stage Test Application CI Tool Deploy Deploy Deploy

Slide 19

Slide 19 text

EKS(Kubernetes)導入後

Slide 20

Slide 20 text

EKS(Kubernetes)導入後 Deploy Config Prod Cluster CI/CD Pipeline Stage Cluster Test Cluster Application CI Tool Deploy Deploy Deploy

Slide 21

Slide 21 text

EKS(Kubernetes)導入後 Deploy Config Old Prod CI/CD Pipeline Old Stage Old Test Application CI Tool Deploy Deploy Deploy New Prod New Stage New Test Blue Green

Slide 22

Slide 22 text

EKS(Kubernetes)導入後 Deploy Config Old Prod CI/CD Pipeline Old Stage Old Test Application CI Tool Deploy Deploy Deploy New Prod New Stage New Test Blue Green クラスタが追加される度にデプロイ先の変更 Immutable Cluster、Blue/Greenデプロイ対応のためのクラスタ数の増加 移行期間中の並行稼動時のデプロイ先指定 EKSのアップデートポリシーに追随するため3〜4ヶ月おきに発生・・・

Slide 23

Slide 23 text

GitOps!!

Slide 24

Slide 24 text

Immutable Cluster環境にGitOps ● GitOps ○ Git上の構成ファイルをSingle Of Truthとする ○ CIとCDを分離 ● 一般的なGitOpsのメリット ○ PR → レビューのフロー ○ 履歴管理 ○ セキュリティの分離 ● Immutable Cluster環境におけるGitOpsのメリット ○ クラスタからGitに同期させることで正しい状態にすることができる

Slide 25

Slide 25 text

Blue Green Immutable Cluster環境にGitOps Deploy Config Old Prod Old Stage Old Test Application New Prod New Stage New Test Sync Sync Sync Sync Sync Sync

Slide 26

Slide 26 text

Blue Green Immutable Cluster環境にGitOps Deploy Config Old Prod Old Stage Old Test Application New Prod New Stage New Test Sync Sync Sync Sync Sync Sync クラスタ構築時にアプリケーションの デプロイまで完了

Slide 27

Slide 27 text

2 GitOpsによる ChatworkのCI/CD

Slide 28

Slide 28 text

構成とフロー

Slide 29

Slide 29 text

ChatworkのCI/CD Developer SRE Application k8s Config Helmfile Charts Container Registry Kubernetes Cluster Sync CI Pipeline CD Pipeline

Slide 30

Slide 30 text

ChatworkのCI/CD Developer SRE Application k8s Config Helmfile Charts Container Registry Kubernetes Cluster Sync CI Pipeline CD Pipeline

Slide 31

Slide 31 text

ChatworkのCI/CD Developer SRE Application k8s Config Helmfile Charts Container Registry Kubernetes Cluster Sync CI Pipeline CD Pipeline

Slide 32

Slide 32 text

ChatworkのCI/CD Developer SRE Application k8s Config Helmfile Charts Container Registry Kubernetes Cluster Sync CI Pipeline CD Pipeline Push

Slide 33

Slide 33 text

ChatworkのCI/CD Developer SRE Application k8s Config Helmfile Charts Container Registry Kubernetes Cluster Sync CI Pipeline CD Pipeline Build

Slide 34

Slide 34 text

ChatworkのCI/CD Developer SRE Application k8s Config Helmfile Charts Container Registry Kubernetes Cluster Update Sync CI Pipeline CD Pipeline Push

Slide 35

Slide 35 text

ChatworkのCI/CD Developer SRE Application k8s Config Helmfile Charts Container Registry Kubernetes Cluster Out Of Sync CI Pipeline CD Pipeline

Slide 36

Slide 36 text

ChatworkのCI/CD Developer SRE Application k8s Config Helmfile Charts Container Registry Kubernetes Cluster kubectl apply Manifest CI Pipeline CD Pipeline Out Of Sync

Slide 37

Slide 37 text

ChatworkのCI/CD Developer SRE Application k8s Config Helmfile Charts Container Registry Kubernetes Cluster Sync CI Pipeline CD Pipeline

Slide 38

Slide 38 text

組織と役割

Slide 39

Slide 39 text

組織と役割 Developer SRE Application k8s Config Helmfile Charts Container Registry Kubernetes Cluster CI Pipeline CD Pipeline

Slide 40

Slide 40 text

組織と役割 Developer SRE Application k8s Config Helmfile Charts Container Registry Kubernetes Cluster CI Pipeline CD Pipeline ● クラスタのバージョン差異を吸収する Chartを作成 ● バージョン更新時に説明会の開催 ● Helmfileのレビュー

Slide 41

Slide 41 text

おわり

Slide 42

Slide 42 text

Appendix. Helmfileとは? ● Helmチャートをより宣言的に扱えるデプロイツール ○ https://github.com/roboll/helmfile ● デプロイに便利な機能 ○ 複数チャートの依存関係を管理 ○ AWS ParameterStore連携 等 helmfile --environment prod apply Prod Test values.yaml / ├── helmfile.yaml └── values/ ├── values.yaml (共通のValue) ├── prod.yaml (Prod用のValue) └── test.yaml (Test用のValue) Helmfile prod.yaml helmfile --environment test apply values.yaml test.yaml