チュートリアルGitOpsのためのFluxのセットアップ
このチュートリアルでは、Flux for GitOps のセットアップ方法を説明します。ブートストラップのインストールを完了し、agentk
をクラスターにインストールし、シンプルなnginx
アプリケーションをデプロイします。
Flux の設定例の概要については、Flux bootstrap and manifest synchronization with GitLabを参照してください。
GitOps 用に Flux をセットアップするには:
前提条件:
-
kubectl
でローカルにアクセスできるKubernetesクラスターが必要です。 - Flux CLIをインストールする必要があります。必ずFlux v2以上をインストールしてください。
個人アクセストークンの作成
Flux CLI で認証を行うには、api
スコープで個人アクセストークンを作成します:
- 左のサイドバーで、自分のアバターを選択してください。
- プロフィールの編集を選択します。
- 左サイドバーで、アクセストークンを選択します。
- トークンの名前と有効期限(オプション)を入力します。
-
api
スコープを選択します。 - 個人アクセストークンの作成」を選択します。
プロジェクトまたはグループのアクセストークンを api
スコープで使用することもできます。
ブートストラップのインストールの完了
このセクションでは、flux bootstrap
コマンドを使って空の GitLab リポジトリに Flux をブートストラップします。
Flux インストールをブートストラップするには
-
flux bootstrap gitlab
コマンドを実行してください。例えばflux bootstrap gitlab \ --owner=example-org \ --repository=my-repository \ --branch=master \ --path=clusters/testing \ --deploy-token-auth
ブートストラップ・スクリプトは次のように実行します:
- デプロイトークンを作成し、Kubernetes
secret
として保存します。 -
--repository
で指定されたプロジェクトが存在しない場合、空の GitLab プロジェクトを作成します。 - プロジェクト用のFlux定義ファイルを生成します。
- 定義ファイルを指定したブランチにコミットします。
- 定義ファイルをクラスターに適用します。
スクリプトを実行すると、Fluxは自分自身と、GitLabプロジェクトとパスに追加した他のリソースを管理できるようになります。
このチュートリアルの内部では、パスをclusters/testing
と仮定しています。
Fluxのアップグレード
Fluxをインストールしてからしばらくすると、Fluxのアップグレードが必要になるかもしれません。そのためには
-
flux bootstrap gitlab
コマンドを再実行してください。
登録agentk
クラスターにインストールする前にagentk
を登録する必要があります。
agentk
を登録するには:
- 左サイドバーで、[検索]を選択するか、[プロジェクト]に移動して、プロジェクトを見つけます。エージェント設定ファイルがある場合、それはこのプロジェクトになければなりません。クラスタマニフェストファイルもこのプロジェクトにある必要があります。
- オペレーション > Kubernetesクラスターを選択します。
-
クラスター(エージェント)を接続]を選択します。
- CI/CDのデフォルトで設定を作成する場合は、名前を入力します。
- すでにエージェント設定ファイルがある場合は、リストから選択します。
- エージェントの登録を選択します。
- エージェントのアクセストークンと
kasAddress
を安全に保存します。
エージェントがプロジェクトに登録されました。まだコマンドを実行する必要はありません。
次のステップでは、Flux を使ってagentk
をクラスターにインストールします。
インストールagentk
次に、Fluxを使ってagentk
の名前空間を作成し、クラスターにインストールします。
このチュートリアルでは、agentk
の名前空間gitlab
を使用します。
agentk
をインストールするには:
-
以下のファイルをコミットして
clusters/testing/namespace-gitlab.yaml
にプッシュしてください:apiVersion: v1 kind: Namespace metadata: name: gitlab
-
エージェントアクセストークンをシークレットとして含む
secret.yaml
というファイルを作成します:apiVersion: v1 kind: Secret metadata: name: gitlab-agent-token-initial type: Opaque stringData: values.yaml: |- config: token: "<your-token-here>"
-
secret.yaml
をクラスターに適用します:kubectl apply -f secret.yaml -n gitlab
このステップはGitOpsの原則には従っていませんが、新しいFluxユーザーの設定を単純化します。適切なGitOpsのセットアップのためには、シークレット管理ソリューションを使うべきです。Fluxのドキュメントを参照してください。
-
以下のファイルをコミットして
clusters/testing/agentk.yaml
にプッシュします。.spec.values.config.kasAddress
と.spec.values.config.secretName
の値を、保存したkas
アドレスとシークレットname
に置き換えてください:--- apiVersion: source.toolkit.fluxcd.io/v1beta2 kind: HelmRepository metadata: labels: app.kubernetes.io/component: agentk app.kubernetes.io/created-by: gitlab app.kubernetes.io/name: agentk app.kubernetes.io/part-of: gitlab name: gitlab-agent namespace: gitlab spec: interval: 1h0m0s url: https://charts.gitlab.io --- apiVersion: helm.toolkit.fluxcd.io/v2beta1 kind: HelmRelease metadata: name: gitlab-agent namespace: gitlab spec: chart: spec: chart: gitlab-agent sourceRef: kind: HelmRepository name: gitlab-agent namespace: gitlab interval: 1h0m0s values: config: kasAddress: "wss://kas.gitlab.com" valuesFrom: - kind: Secret name: gitlab-agent-token-initial valuesKey: values.yaml
Helmリリースでは、Helmによって管理される
gitlab-agent-token
という名前の新しいシークレットが作成されます。 -
agentk
、クラスターにインストールされ実行されていることを確認するには、次のコマンドを実行します:kubectl -n gitlab get pods
よくできました!agentk
で Flux のセットアップに成功しました。このセクションの手順を繰り返すことで、このプロジェクトからさらに多くのアプリケーションをデプロイすることができます。次のセクションでは、プロジェクト間で Flux をスケールさせる方法について説明します。
サンプルプロジェクトのデプロイ
別のプロジェクトを指す FluxGitRepository
とKustomization
を追加することで、複数の GitLab プロジェクトにわたって Flux デプロイをスケールできます。この機能を使って、特定のGitLabグループに関連するマニフェストをそのグループに保存することができます。
デモンストレーションとして、nginx
アプリケーションをデプロイし、Flux を指定してみましょう:
-
以下のファイルをコミットして
clusters/testing/example-nginx-app.yaml
にプッシュしてください:--- apiVersion: source.toolkit.fluxcd.io/v1 kind: GitRepository metadata: name: example-nginx-app namespace: flux-system spec: interval: 1m0s ref: branch: main url: https://gitlab.com/gitlab-examples/ops/gitops-demo/example-mini-flux-deployment.git --- apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: example-nginx-app namespace: flux-system spec: interval: 10m0s path: ./manifests prune: true sourceRef: kind: GitRepository name: example-nginx-app
-
アプリケーションが正しくデプロイされ、
agentk
が実行されていることを確認するには、次のコマンドを実行します:kubectl -n example-nginx get pods
このチュートリアルでは、公開プロジェクトからアプリケーションをデプロイします。公開されていないプロジェクトを追加したい場合は、プロジェクトデプロイトークンを作成し、Fluxシークレットとして保存してください。名前空間とシークレット名は必ず保存してください。
おめでとうございます!これでFluxを複数のグループやプロジェクトにスケールすることができました。