チュートリアルGitOpsのためのFluxのセットアップ

このチュートリアルでは、Flux for GitOps のセットアップ方法を説明します。ブートストラップのインストールを完了し、agentk をクラスターにインストールし、シンプルなnginx アプリケーションをデプロイします。

Flux の設定例の概要については、Flux bootstrap and manifest synchronization with GitLabを参照してください。

GitOps 用に Flux をセットアップするには:

  1. 個人アクセストークンの作成
  2. ブートストラップのインストール完了
  3. 登録agentk
  4. インストールagentk
  5. サンプルプロジェクトのデプロイ

前提条件:

  • kubectl でローカルにアクセスできるKubernetesクラスターが必要です。
  • Flux CLIをインストールする必要があります。必ずFlux v2以上をインストールしてください。

個人アクセストークンの作成

Flux CLI で認証を行うには、api スコープで個人アクセストークンを作成します:

  1. 左のサイドバーで、自分のアバターを選択してください。
  2. プロフィールの編集を選択します。
  3. 左サイドバーで、アクセストークンを選択します。
  4. トークンの名前と有効期限(オプション)を入力します。
  5. api スコープを選択します。
  6. 個人アクセストークンの作成」を選択します。

プロジェクトまたはグループのアクセストークンを 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
    

ブートストラップ・スクリプトは次のように実行します:

  1. デプロイトークンを作成し、Kubernetessecret として保存します。
  2. --repository で指定されたプロジェクトが存在しない場合、空の GitLab プロジェクトを作成します。
  3. プロジェクト用のFlux定義ファイルを生成します。
  4. 定義ファイルを指定したブランチにコミットします。
  5. 定義ファイルをクラスターに適用します。

スクリプトを実行すると、Fluxは自分自身と、GitLabプロジェクトとパスに追加した他のリソースを管理できるようになります。

このチュートリアルの内部では、パスをclusters/testing と仮定しています。

Fluxのアップグレード

Fluxをインストールしてからしばらくすると、Fluxのアップグレードが必要になるかもしれません。そのためには

  • flux bootstrap gitlab コマンドを再実行してください。

登録agentk

クラスターにインストールする前にagentk を登録する必要があります。

agentk を登録するには:

  1. 左サイドバーで、[検索]を選択するか、[プロジェクト]に移動して、プロジェクトを見つけます。エージェント設定ファイルがある場合、それはこのプロジェクトになければなりません。クラスタマニフェストファイルもこのプロジェクトにある必要があります。
  2. オペレーション > Kubernetesクラスターを選択します。
  3. クラスター(エージェント)を接続]を選択します。
    • CI/CDのデフォルトで設定を作成する場合は、名前を入力します。
    • すでにエージェント設定ファイルがある場合は、リストから選択します。
  4. エージェントの登録を選択します。
  5. エージェントのアクセストークンとkasAddress を安全に保存します。

エージェントがプロジェクトに登録されました。まだコマンドを実行する必要はありません。

次のステップでは、Flux を使ってagentk をクラスターにインストールします。

インストールagentk

次に、Fluxを使ってagentk の名前空間を作成し、クラスターにインストールします。

このチュートリアルでは、agentk の名前空間gitlab を使用します。

agentk をインストールするには:

  1. 以下のファイルをコミットしてclusters/testing/namespace-gitlab.yaml にプッシュしてください:

    apiVersion: v1
    kind: Namespace
    metadata:
      name: gitlab
    
  2. エージェントアクセストークンをシークレットとして含むsecret.yaml というファイルを作成します:

    apiVersion: v1
    kind: Secret
    metadata:
      name: gitlab-agent-token-initial
    type: Opaque
    stringData:
      values.yaml: |-
        config:
          token: "<your-token-here>"
    
  3. secret.yaml をクラスターに適用します:

    kubectl apply -f secret.yaml -n gitlab
    

    このステップはGitOpsの原則には従っていませんが、新しいFluxユーザーの設定を単純化します。適切なGitOpsのセットアップのためには、シークレット管理ソリューションを使うべきです。Fluxのドキュメントを参照してください。

  4. 以下のファイルをコミットして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 という名前の新しいシークレットが作成されます。

  5. agentk 、クラスターにインストールされ実行されていることを確認するには、次のコマンドを実行します:

    kubectl -n gitlab get pods
    

よくできました!agentkで Flux のセットアップに成功しました。このセクションの手順を繰り返すことで、このプロジェクトからさらに多くのアプリケーションをデプロイすることができます。次のセクションでは、プロジェクト間で Flux をスケールさせる方法について説明します。

サンプルプロジェクトのデプロイ

別のプロジェクトを指す FluxGitRepositoryKustomization を追加することで、複数の GitLab プロジェクトにわたって Flux デプロイをスケールできます。この機能を使って、特定のGitLabグループに関連するマニフェストをそのグループに保存することができます。

デモンストレーションとして、nginx アプリケーションをデプロイし、Flux を指定してみましょう:

  1. 以下のファイルをコミットして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
    
  2. アプリケーションが正しくデプロイされ、agentk が実行されていることを確認するには、次のコマンドを実行します:

    kubectl -n example-nginx get pods
    

このチュートリアルでは、公開プロジェクトからアプリケーションをデプロイします。公開されていないプロジェクトを追加したい場合は、プロジェクトデプロイトークンを作成し、Fluxシークレットとして保存してください。名前空間とシークレット名は必ず保存してください。

おめでとうございます!これでFluxを複数のグループやプロジェクトにスケールすることができました。