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

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

sasaki
May 26, 2021

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

sasaki

May 26, 2021
Tweet

More Decks by sasaki

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  10. おわり

    View Slide

  11. SESSION
    Kubernetes CI / CD の構成例

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  19. EKS(Kubernetes)導入後

    View Slide

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

    View Slide

  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

    View Slide

  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ヶ月おきに発生・・・

    View Slide

  23. GitOps!!

    View Slide

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

    View Slide

  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

    View Slide

  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
    クラスタ構築時にアプリケーションの
    デプロイまで完了

    View Slide

  27. 2
    GitOpsによる
    ChatworkのCI/CD

    View Slide

  28. 構成とフロー

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

  38. 組織と役割

    View Slide

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

    View Slide

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

    View Slide

  41. おわり

    View Slide

  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

    View Slide