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

GitOpsでKubernetesのManifest管理