Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

GitOpsでKubernetesのManifest管理

2,621 views

Published on

Cloud Native Kansai #01

Published in: Engineering

GitOpsでKubernetesのManifest管理

  1. 1. 2019.2.1 Alpaca Japan Shinya Sasaki Cloud Native Kansai #01 GitOpsでKubernetesのManifest管理
  2. 2. Who? ➢ 名前 ○ 佐々木 真也 ➢ 所属 ○ AlpacaJapan 株式会社 ■ Head of Infrastructure Engineering 2
  3. 3. Alpaca Japan 3 3 3 金融 機械学習 がテーマのスタートアップ 主な提供サービス プロダクト ❖ 銀行・証券会社・信託銀行を中心に金融機関向けのトレーディングAI技術で多くの実績を保持 「相場予測モデルの構築」のプロジェクト で協業 「AlpacaSearch for kabu.com」 相互に類似している銘柄のチャートパ ターンを表示 「AI外貨予測」「AI外貨積立」 指定した外貨の為替の変動を予測し、予 測した日に一定金額を積立可能 主要マーケットの短期予 測をリアルタイムで表示 弊社の大規模データ処 理の技術やディープラー ニング技術を活用したア プリケーション
  4. 4. 4
  5. 5. 5
  6. 6. 6 kubectl get nodes kubectl apply -f sample-pod.yaml kubectl describe pods ...
  7. 7. 7 P.424 実際に運用を行う際には手動での kubectlコマンドの実行は、可能な限 り避けるべきです。
  8. 8. 8 CI/CD Pipeline
  9. 9. 現在のCI/CD Pipeline 9 ステージング 本番 git flow release PR マージ イメージ作成 同じイメージを使うECR 反映 反映 タグ付与 release.20181103 ステージング クラスタ 本番 クラスタ
  10. 10. 現状の課題 • k8s Manifestの軽微な変更でもビルドが走る • Gitの権限 • マージ権限がないと都度レビュー、マージ依頼 • 外部(CircleCI)にk8sの強い権限が必要 • リポジトリのManifest = 現在の設定 を保証できない • Rollbackしにくい 10
  11. 11. GitOps? • WeaveWorks社が提唱しているk8sの継続的デリバリ (Continuous Delivery)手法 • Gitでバージョン管理されたManifestを Single Source of Truth とする 11
  12. 12. GitOpsをやるために • ManifestのGit管理 • ManifestをGitでバージョン管理する • オペレーションもGitで行う • Pull Requestベース • CIとCDの分離 • アプリケーションコードのリポジトリとManifestのリポジトリを分ける • 差分の検知、コンバージェンス • Git上のManifestと稼働環境の差を検知 12
  13. 13. CIOps と GitOps • CIツールがKubernetes APIにアクセスできるようにしないといけない • セキュリティリスクになる • クレデンシャルを管理しないといけない • 境界がない 13 Kubernetes anti-patterns: Let's do GitOps, not CIOps! https://www.weave.works/blog/kubernetes-anti-patterns-let-s-do-gitops-not-ciops CIOps
  14. 14. CIOps と GitOps • k8sクラスタ内外で境界ができる • configとcodeのリポジトリを分けることで、お互いの変更に影響を受けない 14 Kubernetes anti-patterns: Let's do GitOps, not CIOps! https://www.weave.works/blog/kubernetes-anti-patterns-let-s-do-gitops-not-ciops GitOps
  15. 15. GitOpsの動作 15 https://www.weave.works/blog/gitops-high-velocity-cicd-for-kubernetes 1.アプリケーションの コード変更
  16. 16. GitOpsの動作 16 https://www.weave.works/blog/gitops-high-velocity-cicd-for-kubernetes 2.コンテナのビルド、レジストリ へのプッシュ
  17. 17. GitOpsの動作 17 https://www.weave.works/blog/gitops-high-velocity-cicd-for-kubernetes 3.イメージの 情 報 を 修 正 して、 Manifest用リポジトリへPR
  18. 18. GitOpsの動作 18 https://www.weave.works/blog/gitops-high-velocity-cicd-for-kubernetes 4.PRをマージ
  19. 19. GitOpsの動作 19 https://www.weave.works/blog/gitops-high-velocity-cicd-for-kubernetes 5.差分を検知してデプロイ
  20. 20. GitOps Tools • Weave Flux • Argo CD • JenkinsX 20
  21. 21. Argo CD 21
  22. 22. Argo CDの選定理由 • WebUIがある • 複数人での運用を考えると結構大事 • CLIもある • 簡単にできた • https://github.com/argoproj/argo-cd/blob/master/docs/getting_st arted.md 22
  23. 23. Argo CDのよさそうなところ • 複数フォーマットに対応 • ksonnet applications • kustomize applications • helm charts • Plain directory of YAML/json/jsonnet manifests • 削除に対応 • 自動同期にも対応 23 ※ 他が対応していないということではないです
  24. 24. Argo CD 差分検知 24
  25. 25. Argo CD 差分の表示 25
  26. 26. Argo CD 同期実行 26
  27. 27. Argo CD 同期状態 27
  28. 28. 現状の課題(再掲) • k8s Manifestの軽微な変更でもビルドが走る • Gitの権限 • マージ権限がないと都度レビュー、マージ依頼 • 外部(CircleCI)にk8sの強い権限が必要 • リポジトリのManifest = 現在の設定 を保証できない • Rollbackしにくい 28
  29. 29. 現状の課題(再掲) • k8s Manifestの軽微な変更でもビルドが走る → CIとCDは分離されている • Gitの権限 • マージ権限がないと都度レビュー、マージ依頼 → 別レポジトリなので、権限も別管理 • 外部(CircleCI)にk8sの強い権限が必要 → k8sにアクセスするのはクラスタ内なので不要 • リポジトリのManifest = 現在の設定 を保証できない → 差分を検知 • Rollbackしにくい → 前のバージョンに戻せばいい 29
  30. 30. GitOps導入後の課題 • Secretの扱い • GitHubにはあげれない • デプロイするのがArgo CDになるので、別インストールが必要なソリュー ションは使えない • kubesecとか • CRD使うSealed-Secretsならできる? • AWS Secret Managerに保存して、手動で作成することにした • Branch運用 • 複雑になりそう・・・ 30 kubectl create -n stg secret generic myapp-prod-secret --from-literal=DB_PASSWORD=$(aws secretsmanager get-secret-value --secret-id prod/myapp/db --region ap-northeast-1 | jq --raw-output '.SecretString' | jq -r .password)
  31. 31. まとめ • 運用環境にkubectlするのは中学生まで • CI/CD Pipelineをつくりましょう • k8s ManifestもGitで管理しましょう • GitOpsはCIとCDを分ける考え方 • GitOpsで運用課題が解決されるかも・・・ 31
  32. 32. 32 We're hiring!! https://www.wantedly.com/companies/alpacadb ● Web Engineer ● Infrastructure Engineer ● ML/AI Engineer ● Fintech Engineer

×