ArgoCD を雰囲気で触ってしまっているので... 。
まず GitOps とは Git 上でマニフェストを管理し、マニフェストリポジトリの内容を常にクラスタに同期するデプロイメントの手法のこと。kubectl コマンドで変更の操作を行うのではなく、Git によってすべての操作や管理をおこなってくれる。
ArgoCD
GitOps を提供するツールの 1つとして ArgoCD がある。ArgoCD はデプロイメントに特化していて CI の機能はない。Argo CD は Web UI があるのが特徴的で、アプリケーションの状態をリアルタイムに可視化してくれている。
現状の Kubernetes クラスタの状態と Git のマニフェストリポジトリの状態を可視化、差分があればアプリケーションを同期する。Argo CD のカスタムリソースは主に 2つある。
- Application
- 展開するデプロイメントの単位
- 主に source とdestination の 2つのフィールドから構成
- AppProject
Application の状態
- SYNC STATUS : Git リポジトリのマニフェストの内容とデプロイされた各オブジェクトの同期する関する状態
- HEALTH STATUS : Kubernetes に登録された各オブジェクトの稼働に関する状態
- Healthy : オブジェクトが正常に稼働している状態
- Progressing : まだオブジェクトが稼働していないが、稼働状態へ更新途中の状態
- Degraded : 同期を試みたが、タイムアウトしてしまい Healthy 状態にできなかった状態
- Missing : Git リポジトリにマニフェストがあるが Kubernetes クラスタ上にオブジェクトがデプロイされていない状態
マニフェストの同期
Git リポジトリの変更に合わせて自動同期する。Argo CD には様々な同期ポリシーが用意されている。同期設定方法によって、運用しているアプリケーションやリリースの動作に大きく影響を及ぼすので理解を深めておくこことが重要。
自動同期ポリシーは、マニフェストリポジトリの状態と Kubernetes クラスタ上に展開されたオブジェクトが異なる場合に状態を動的に調整する機能。
- destination : デプロイメント先の Kubernetes クラスタと名前空間を指定
- project : Application が属する AppProject を指定
- source : デプロイメント元のマニフェストリポジトリと対象を指定
- syncPolicy : 自動同期ポリシーを指定
syncPolicy(automated) のみ見ていく。
このフィールドに「automated」を指定すると、マニフェストリポジトリへの自動同期が有効化される。
automated フィールド
- prune : マニフェストリポジトリにあるマニフェストが削除された際に、稼働中のリソースを削除するか否か。デフォルトは false 。
- allowEmpty : prune が設定されている場合に、リソースが空の状態を許可するか否か。デフォルトは false 。
- selfHeal : リソースの状態がマニフェストと異なる場合に、動的にマニフェストの状態を維持し続ける(Argo Application Controller の自動回復検知時間であるデフォルト5秒間隔)。デフォルトは false (同期は1度、同じハッシュ値)。
syncPolicy:
automated:
prune: true
selfHeal: true
# 無効
syncPolicy:
automated: {}
Argo CD Web UI からも同じようなことができる。また Argo Rollouts は別の機会で。
参考
ありがとうございました。