PipeCD で Kubernetes の GitOps を試してみた時の疑問点とその回答
こちらは Kubernetes3 Advent Calendar 2020 9日目の記事です。
概要
現在 PipeCD で Kubernetes の GitOps を試しているのですが、その中でいくつか疑問点が出てきました。それらの疑問点を解消するために、自分で検証してみたり、PipeCD の開発者に質問したりして、回答を得たので、この記事にまとめてみます。
尚、PipeCD の概要についてはここでは説明しませんが、以下のページなどが参考になるかと思います。
※ 以下の内容は PipeCD v0.9.0 時点のものです。 (本記事執筆時点の最新版)
Q1. App のデプロイ先の namespace を指定することは可能か?
ユースケース
何らかの単位で Kubernetes の namespace を分けて、その中に App をデプロイして運用しているようなケースで必要。
例: PipeCD 用の namespace, Service A 用の namespace, Service B 用の namespace と分けて運用しているケース。
回答
App の deployment configuration file (.pipe.yaml) に namespace という field があるので、そこを設定することで実現可能です。
https://pipecd.dev/docs/user-guide/configuration-reference/#kubernetesdeploymentinput
Q2. App の sync 元の branch を指定することは可能か?
ユースケース
以下のようなケースで必要になります。
- デプロイ先の Environment ごとに別々の branch を使用しているケース
- 開発時に一時的に App の sync 元の branch を変更したいケース
回答
piped の configuration file の repositories に repo を設定する箇所があるが、そこで branch の指定が可能。
https://pipecd.dev/docs/operator-manual/piped/adding-a-git-repository/
Q3. App を登録した後に、UI 上で設定変更は可能か?
ユースケース
App 登録後に設定値 (例: sync 元の branch など) を変更したい。
回答
開発者に質問してみたところ、現状ではできないが、開発を検討してくれるとのことです。
Q4. 一時的に App の AutoSync をオフにすることは可能か?
ユースケース
開発環境で、ある App の AutoSync をオフにして kubectl edit
で調整して動作確認したいことがある。 ( GitOps の Single Source of Truth の原則に違反するので微妙ですが…)
回答
こちらも開発者に質問してみました。
PipeCD では commit merged 時に git & cluster の diff のチェックを行い、diff があると sync をしている。つまり、常時 git & cluster の diff をチェックして勝手に sync しているわけではない。
なので、開発環境で kubectl edit
などを使って debug するのは問題なくて、debug 終了後に、Web UI で sync ボータンを押すと、また同期してくれるとのことです。
[2020/12/10追記]
App を一時的に Disable にすると AutoSync が動かなくなるので、こちらの方法でも良さそうです。
Q5. App を API or CLI で登録・削除することは可能か?
ユースケース
大量の App を管理している場合に、UI から1つ1つ登録していくのは面倒なので、 Script 化したい。
回答
開発者に質問してみたところ、現状ではできないが、API or CLI の開発を検討してくれるとのことです。
GitHub リポジトリを見てみたら、実際に external api 関連の PR がマージされていました。
https://github.com/pipe-cd/pipe/pull/1196
Q6. App を Delete するときに、紐づく Resource を削除する・削除しないの選択は可能か?
ユースケース
ある App が不要になった時に、App に紐づく Kubernetes の Resource を手動で削除していくのは面倒なので、自動で削除することも可能にしてほしい。
ArgoCD の cascade delete のような機能。
回答
開発者に質問してみたところ、現状ではできないが、開発を検討してくれるとのことです。
また、PipeCD の UI 上では App の Disable というメニューしかないが、これは現状 Enable に戻すことはできず、Disable = Delete とのことです。
[2020/12/10追記]
一度 Disable にした App を Enable に戻すことは可能でした。Filter で Disabled な App を表示することができ、そうするとメニューで Enable を選択できます。
また、現状 App の Delete 機能はなく、Disable 機能のみ存在します。
Q7. Kubernetes の HPA (Horizontal Pod Autoscaler) には対応してるか?
ユースケース
HPA を使って Pod のオートスケーリングをしたい。その場合、オートスケーリング時に Deployment の replicas の値が変化してしまうが、問題ないか?
回答
試してみたところ問題なく動いていました。( ArgoCDのドキュメント を参考に、Deployment の yaml の replicas は削除しています。)
Q8. App の Deploy が失敗した時に Slack 通知することは可能か?
ユースケース
Canary Release が失敗した時に Slack 通知してほしい。
回答
piped の configuration file の notifications に notification を設定する箇所があるが、そこで監視する Event に DEPLOYMENT_FAILED
を指定することで実現可能。
https://pipecd.dev/docs/operator-manual/piped/configuring-notifications/
まとめ
以上、8つの疑問点とその回答についてまとめてみました。
まだまだ検証中ではありますが、GitOps の基本的な機能は動いていそうですし、この記事で上げた機能が追加されたら、自分たちのシステムに導入してみようかという感じで考えています。
また検証や導入が進んで新たな知見が得られたら、ブログ記事にまとめられたらと思います。