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

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

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

5862ce660c5a25de9584b0c2e5497055?s=128

sasaki

May 26, 2021
Tweet

Transcript

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

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

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

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

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

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

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

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

    etc)の インストールまでが責務
  9. クラスタのアップデートの流れ(アプリケーションの移行)

  10. おわり

  11. SESSION Kubernetes CI / CD の構成例

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

  13. EKS(Kubernetes)導入前のCI/CD

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

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

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

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

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

    Tool Deploy Deploy Deploy
  19. EKS(Kubernetes)導入後

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

    Cluster Application CI Tool Deploy Deploy Deploy
  21. 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
  22. 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ヶ月おきに発生・・・
  23. GitOps!!

  24. Immutable Cluster環境にGitOps • GitOps ◦ Git上の構成ファイルをSingle Of Truthとする ◦ CIとCDを分離

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

  28. 構成とフロー

  29. ChatworkのCI/CD Developer SRE Application k8s Config Helmfile Charts Container Registry

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

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

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

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

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

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

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

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

    Kubernetes Cluster Sync CI Pipeline CD Pipeline
  38. 組織と役割

  39. 組織と役割 Developer SRE Application k8s Config Helmfile Charts Container Registry

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

    Kubernetes Cluster CI Pipeline CD Pipeline • クラスタのバージョン差異を吸収する Chartを作成 • バージョン更新時に説明会の開催 • Helmfileのレビュー
  41. おわり

  42. 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