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

ChatworkDevDay_Kubernetes導入における実践プラクティス / Chatw...

sasaki
May 26, 2021

ChatworkDevDay_Kubernetes導入における実践プラクティス / ChatworkDevDay_Kubernetes

sasaki

May 26, 2021
Tweet

More Decks by sasaki

Other Decks in Technology

Transcript

  1. EKSの前の時代 - 現在はEOLだが、EKSのなかった時代のKuberentes構成ツール - コントローラも含めてEC2のプロビジョニング - 1年に1回のアップデートだったので、差分が多く、ローリングアップデートは不可 kube-aws時代 - アプリケーション側の移行に時間がかかる

    - 1年に1回のアップデートだったので、Kubernetes側の変更箇所が多い - デプロイツールが微妙で、クラスタ依存の変更が多く、開発の傍らでパワーが必要 クラスタアップデート時の問題 - クラスタ側、アプリケーション側にKubernetesへの変更追従が辛い - Kubernetes側の新しい機能が使えない 1年に1回のつらみ
  2. - 構築ツールとしてeksctlの採用 - ニッチなツールや自作は減らす(ラッパーはあるけど) - クラスタ構築自体の負荷が減った EKSの強みを活かす - クラスタ運用負荷を減らす -

    アプリケーション側の移行負荷を減らす - helmfile(パッケージ化) + GitOpsの採用 クラスタアップデート時の問題の解決 - Kubernetesの(ほぼ)最新の機能を利用可能 - セキュリティ的にも◎ - 変更追従が少なく、結果的に負荷が少ない - 変更箇所を少なくするように構築環境を整備したのもある 1年に1回から3ヶ月に1回の世界へ EKS後の時代
  3. 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
  4. 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ヶ月おきに発生・・・
  5. Immutable Cluster環境にGitOps • GitOps ◦ Git上の構成ファイルをSingle Of Truthとする ◦ CIとCDを分離

    • 一般的なGitOpsのメリット ◦ PR → レビューのフロー ◦ 履歴管理 ◦ セキュリティの分離 • Immutable Cluster環境におけるGitOpsのメリット ◦ クラスタからGitに同期させることで正しい状態にすることができる
  6. 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
  7. 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 クラスタ構築時にアプリケーションの デプロイまで完了
  8. ChatworkのCI/CD Developer SRE Application k8s Config Helmfile Charts Container Registry

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

    Kubernetes Cluster kubectl apply Manifest CI Pipeline CD Pipeline Out Of Sync
  10. 組織と役割 Developer SRE Application k8s Config Helmfile Charts Container Registry

    Kubernetes Cluster CI Pipeline CD Pipeline • クラスタのバージョン差異を吸収する Chartを作成 • バージョン更新時に説明会の開催 • Helmfileのレビュー
  11. 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