- Kubernetesマニフェストリポジトリを作成します。
- デプロイ・ブランチを作成します。
- ブランチにプッシュするように GitLab CI/CD を設定します。
- マニフェストを同期するための Flux の設定
- 設定の確認
チュートリアルFlux を使った Git リポジトリのデプロイ
このチュートリアルでは、Flux を使ってアプリケーションをビルドして Kubernetes クラスターにデプロイする GitLab プロジェクトを作成します。サンプルのマニフェストプロジェクトを設定し、マニフェストをデプロイブランチにプッシュするように設定し、デプロイブランチを同期するように Flux を設定します。この設定により、Flux がリポジトリから変更を取り込む前に GitLab パイプラインで追加のステップを実行することができます。
このチュートリアルでは、公開プロジェクトからアプリケーションをデプロイします。非公開プロジェクトを追加したい場合は、プロジェクトデプロイトークンを作成する必要があります。
GitOpsデプロイ用のリポジトリをセットアップするには:
- Kubernetesマニフェストリポジトリを作成します。
- デプロイ用のブランチを作成します。
- ブランチにプッシュするようにGitLab CI/CDを設定します。
- マニフェストを同期するためにFluxを設定します。
- 設定の検証
前提条件:
- 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-branches-tutorial
デプロイ・ブランチを作成します。
次に、クラスターの現在の状態を反映するブランチを作成します。
このワークフローでは、デフォルトブランチがアプリケーションの単一のソースとなります。Kubernetesクラスタに反映させるには、コードや設定の変更がデフォルトブランチに存在する必要があります。後のステップで、デフォルトブランチからの変更をデプロイブランチにマージするようにCI/CDを設定します。
デプロイブランチを作成するには
-
web-app-manifests
で、デフォルトブランチから_gitlab/deploy/example
という名前のブランチを作成します。この例では、デプロイブランチを機能ブランチと区別するためにブランチ名を指定していますが、これは必須ではありません。デプロイメントブランチには好きな名前を付けることができます。 -
write_repository
スコープでプロジェクト、グループ、または個人のアクセストークンを作成します。 -
DEPLOYMENT_TOKEN
という名前のトークン値を持つCI/CD 変数を作成します。ジョブログに表示されないように、値をマスクすることを忘れないでください。 -
次の値でデプロイブランチを保護するルールを追加します:
- マージを許可します:誰も
- プッシュとマージを許可します:前のステップで作成したトークン、または個人アクセストークンを作成した場合はユーザーを選択します。
- 強制プッシュを許可します:トグルをオフにします。
- コードオーナーの承認が必要:トグルをオフにします。
この設定により、対応するトークンだけがブランチにプッシュできるようになります。
これで、保護されたデプロイブランチを持つリポジトリが作成できました!
ブランチにプッシュするように GitLab CI/CD を設定します。
次に、デフォルトブランチからの変更をデプロイブランチにマージするように CI/CD を設定します。
web-app-manifests
のルートに、次のような内容の.gitlab-ci.yml
ファイルを作成し、プッシュします:
deploy:
stage: deploy
environment: production
variables:
DEPLOYMENT_BRANCH: _gitlab/deploy/example
script:
- |
git config user.name "Deploy Example Bot"
git config user.email "test@example.com"
git fetch origin $DEPLOYMENT_BRANCH
git checkout $DEPLOYMENT_BRANCH
git merge $CI_COMMIT_SHA --ff-only
git push https://deploy:$DEPLOYMENT_TOKEN@$CI_SERVER_HOST/$CI_PROJECT_PATH.git HEAD:$DEPLOYMENT_BRANCH
resource_group: $CI_ENVIRONMENT_SLUG
これにより、単一のdeploy
ジョブを持つ CI/CD パイプラインが作成されます:
- デプロイブランチをチェックアウトします。
- デフォルトブランチからの新しい変更をデプロイブランチにマージします。
- 設定されたトークンで変更をリポジトリにプッシュします。
マニフェストを同期するための Flux の設定
次に、web-app-manifests
リポジトリによってデプロイブランチが同期されるように Flux リポジトリを設定します。
設定するには、GitRepository
リソースを作成します:
-
Fluxリポジトリのローカルクローンに、
clusters/my-cluster/web-app-manifests-source.yaml
という名前のファイルを以下の内容で追加します:apiVersion: source.toolkit.fluxcd.io/v1 kind: GitRepository metadata: name: web-app-manifests namespace: flux-system spec: interval: 5m0s url: https://gitlab.com/gitlab-org/configure/examples/flux/web-app-manifests-branches ref: branch: _gitlab/deploy/example
url
は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: ./src prune: true sourceRef: kind: GitRepository name: web-app-manifests targetNamespace: default
このファイルは、レジストリから取得したアーティファクトのマニフェストを同期するように Flux に指示するKustomizationリソースを追加します。
-
新しいファイルをコミットしてプッシュします。
設定の確認
パイプラインが完了すると、クラスターに新しく作成されたnginx
ポッドが表示されるはずです。
デプロイの同期を再度確認したい場合は、src/nginx-deployment.yaml
ファイルでレプリカの数を更新し、デフォルトブランチにプッシュしてみてください。すべてがうまくいっていれば、パイプラインが終了したときに変更がクラスターに同期されます。
おめでとうございます!アプリケーションをデプロイし、変更を同期するプロジェクトの設定に成功しました!