チュートリアルFluxを使用したOCIアーティファクトのデプロイ
このチュートリアルでは、KubernetesマニフェストをOCIアーティファクトにパッケージ化し、Fluxを使用してクラスターにデプロイする方法を説明します。サンプルマニフェストプロジェクトをセットアップし、プロジェクトのコンテナレジストリにアーティファクトとしてマニフェストを保存するように設定し、アーティファクトを同期するように Flux を設定します。このセットアップにより、Flux が OCI イメージからの変更をピックアップする前に GitLab パイプラインで追加のステップを実行することができます。
このチュートリアルでは、公開プロジェクトからアプリケーションをデプロイします。非公開プロジェクトを追加したい場合は、プロジェクトデプロイトークンを作成する必要があります。
Flux を使用して OCI アーティファクトをデプロイするには、以下の手順に従います:
前提条件:
- FluxリポジトリがKubernetesクラスターに接続されていること。ゼロから始める場合は、Flux for GitOpsのセットアップを参照してください。
Kubernetesマニフェストリポジトリを作成します。
まず、Kubernetesマニフェスト用のリポジトリを作成します:
- GitLabで、web-app-manifestsという新しいリポジトリを作成します。
- 
web-app-manifestsに、src/nginx-deployment.yamlという名前のファイルを以下の内容で追加します:apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: replicas: 1 template: spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
- 
web-app-manifestsに、src/kustomization.yamlという名前のファイルを以下の内容で追加します:apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - nginx-deployment.yaml commonLabels: app: flux-oci-tutorial
マニフェスト・リポジトリを設定して OCI アーティファクトを作成します。
次に、マニフェストをOCIアーティファクトにパッケージするようにGitLab CI/CDを設定し、アーティファクトをGitLabコンテナレジストリにプッシュします:
- 
web-app-manifestsのルートに、次のような内容の.gitlab-ci.ymlファイルを作成し、プッシュします:package: stage: deploy image: name: fluxcd/flux-cli:v2.0.0-rc.1 entrypoint: [""] script: - mkdir -p manifests - kubectl kustomize ./src --output ./manifests - | flux push artifact oci://$CI_REGISTRY_IMAGE:latest \ --path="./manifests" \ --source="$CI_REPOSITORY_URL" \ --revision="$CI_COMMIT_SHORT_SHA" \ --creds="$CI_REGISTRY_USER:$CI_REGISTRY_PASSWORD" \ --annotations="org.opencontainers.image.url=$CI_PROJECT_URL" \ --annotations="org.opencontainers.image.title=$CI_PROJECT_NAME" \ --annotations="com.gitlab.job.id=$CI_JOB_ID" \ --annotations="com.gitlab.job.url=$CI_JOB_URL"このファイルが GitLab にプッシュされると、 packageのジョブをひとつ持つ CI/CD パイプラインが作成されます。このジョブは- 
kustomization.yamlを使って最終的な Kubernetes マニフェストをレンダリングします。
- マニフェストをOCIアーティファクトにパッケージします。
- OCI アーティファクトをコンテナ レジストリにプッシュします。
 パイプラインが完了したら、コンテナレジストリUIでOCIアーティファクトを確認できます。 
- 
アーティファクトを同期するためのFluxの設定
次に、web-app-manifests リポジトリが生成したアーティファクトを同期するように Flux リポジトリを設定します。
設定するには、OCIRepository リソースを作成します:
- 
Fluxリポジトリのローカルクローンに、 clusters/my-cluster/web-app-manifests-source.yamlという名前のファイルを以下の内容で追加します:apiVersion: source.toolkit.fluxcd.io/v1 kind: OCIRepository metadata: name: web-app-manifests namespace: flux-system spec: interval: 1m0s url: oci://registry.gitlab.com/gitlab-org/configure/examples/flux/web-app-manifests-oci ref: tag: latesturlの部分は、web-app-manifestsプロジェクトのコンテナレジストリの URL に置き換えてください。
- 
Fluxリポジトリのローカルクローンに、 clusters/my-cluster/web-app-manifests-kustomization.yamlという名前のファイルを以下の内容で追加します:apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: nginx-source-kustomization namespace: flux-system spec: interval: 1m0s path: ./ prune: true sourceRef: kind: OCIRepository name: web-app-manifests targetNamespace: defaultこのファイルは、レジストリから取得したアーティファクトのマニフェストを同期するように Flux に指示するKustomizationリソースを追加します。 
- 
新しいファイルをコミットしてプッシュします。 
設定の確認
クラスターに新しく作成されたnginx ポッドが表示されているはずです。
デプロイの同期をもう一度確認したい場合は、src/nginx-deployment.yaml ファイルのレプリカ数を更新し、デフォルトブランチにプッシュしてみてください。すべてがうまくいっていれば、パイプラインが終了したときに変更がクラスターに同期されるはずです。
おめでとうございます!アプリケーションをデプロイし、変更を同期するプロジェクトの設定に成功しました!
