GitRepository と Kustomization で最初のアプリケーションをデプロイする
Kustomization リソースを使って Flux を Git のマニフェストに向け、同期の様子を確認します。
Flux は、クラスター内の他のものと同じように Kubernetes リソースで設定します。そのうちの 2 つが、仕事の大半を担います。GitRepository のような source は設定の場所を示し、Kustomization は「その source のこのパスにあるマニフェストを取得し、このクラスターに適用し続ける」ことを示します。このガイドでは、小さなアプリケーションをデプロイし、Git を変更して同期が行われる様子を確認します。Flux が fleet-infra リポジトリに bootstrap 済みであることを前提としています(前のガイドを参照)。
マニフェストを準備する
fleet-infra の clone に、bootstrap が作成した clusters フォルダーと並べて、アプリケーションのフォルダーを追加します。
fleet-infra/
├── clusters/
│ └── dev/
│ ├── flux-system/ # bootstrap によって作成
│ └── webapp.yaml # Flux の Kustomization(次のセクション)
└── apps/
└── webapp/
├── namespace.yaml
├── deployment.yaml
└── service.yaml
apps/webapp/namespace.yaml:
apiVersion: v1
kind: Namespace
metadata:
name: webapp
apps/webapp/deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: webapp
namespace: webapp
spec:
replicas: 2
selector:
matchLabels:
app: webapp
template:
metadata:
labels:
app: webapp
spec:
containers:
- name: webapp
image: nginx:1.25
ports:
- containerPort: 80
apps/webapp/service.yaml:
apiVersion: v1
kind: Service
metadata:
name: webapp
namespace: webapp
spec:
selector:
app: webapp
ports:
- port: 80
targetPort: 80
一部のツールとは異なり、ここのマニフェストは namespace を明示的に指定しており、フォルダーには Flux が namespace を作成するように Namespace オブジェクトも含まれています。kustomization.yaml は不要です。フォルダーにそれが含まれていない場合、Flux はそこにあるすべての YAML ファイルのリストを構築します。
Flux の Kustomization を書く
bootstrap は、この同じリポジトリを指す flux-system という名前の GitRepository をすでに作成しているため、それを再利用できます。clusters/dev/webapp.yaml:
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: webapp
namespace: flux-system
spec:
interval: 10m
sourceRef:
kind: GitRepository
name: flux-system
path: ./apps/webapp
prune: true
wait: true
timeout: 2m
重要なポイントは次のとおりです。
sourceRefは、望ましい状態の出所です。ここでは、bootstrap が設定したflux-systemリポジトリです。pathは、適用する source 内のフォルダーです。intervalは、Git が変更されていなくても、Flux がマニフェストを再適用してドリフトを修正する頻度です。prune: trueは、Git から削除されたオブジェクトが、クラスターからも削除されることを意味します。設定しない限り、オフです。waitとtimeoutは、成功を報告する前に、適用されたリソースが準備完了になるのを Flux に待たせます。
この YAML を手作業で書く代わりに、CLI で生成することもできます。
flux create kustomization webapp \
--source=GitRepository/flux-system \
--path=./apps/webapp \
--prune=true --wait=true --timeout=2m --interval=10m \
--export > clusters/dev/webapp.yaml
commit して、Flux に取り込ませる
git add -A
git commit -m "Add webapp"
git push
flux-system の Kustomization はすでに ./clusters/dev を監視しているため、次回の実行時に新しい webapp の Kustomization を見つけます。アプリケーションのために kubectl apply を実行することはありません。待たずに済ませるには、Flux に今すぐ Git を確認させます。
flux reconcile source git flux-system
flux get kustomizations --watch
デプロイを確認する
webapp の Kustomization が現れ、適用されたリビジョンを示すメッセージとともに Ready になります。クラスターを確認し、Flux が所有しているものを表示させます。
kubectl get all -n webapp
flux tree kustomization webapp
Git を変更して同期を確認する
apps/webapp/deployment.yaml を編集し、イメージを nginx:1.26 に変更して、commit して push します。Flux は GitRepository の間隔(bootstrap 後のデフォルトは 1 分)でリポジトリを取得し、変更を適用します。新しい ReplicaSet がロールアウトされます。確認します。
flux reconcile kustomization webapp --with-source
kubectl get deploy webapp -n webapp \
-o jsonpath='{.spec.template.spec.containers[0].image}'; echo
これが一連の流れのすべてです。Git を編集すれば、Flux がクラスターを収束させます。この動作を制御する方法は、次のガイドで説明します。
別のリポジトリを使う
アプリケーションのマニフェストを bootstrap のリポジトリに置く必要はありません。別のリポジトリからデプロイするには、そのための GitRepository を作成し、Kustomization から参照します。
flux create source git webapp-config \
--url=https://github.com/your-org/webapp-config \
--branch=main --interval=1m \
--export > clusters/dev/webapp-source.yaml
プライベートリポジトリの場合は、flux create secret git で認証情報を追加し、--secret-ref で参照するか、SSH の deploy key を使います。その後、Kustomization で sourceRef.name: webapp-config を設定します。
人気のガイド
-
Push と Pull:Flux が Kubernetes にデリバリーする仕組み Git 主導の pull 型デリバリーが、デプロイ、セキュリティ、復旧の方法をどう変えるか。 -
同期動作を制御する:間隔、prune、ドリフトの修正、ロールバック Flux がいつ変更を適用するか、何を削除するか、どう一時停止するか、失敗したデプロイをどう元に戻すかを決めます。 -
Flux Image Automation でイメージの更新を自動化する 新しいコンテナイメージのタグを Flux に検出させ、Git に commit させます。 -
Flux でマルチクラスターを構成する 共有インフラとクラスターごとの違いを持たせて、1 つのリポジトリから複数のクラスターを管理します。 -
Flux CD と Argo CD:GitOps ツールの選び方 アーキテクチャ、UI、Helm、シークレット、テナンシー、イメージの自動化を比較して、適切なツールを選びます。