Kubernetes用エージェントのインストール

  • 14.5でGitLab PremiumからGitLab Freeに移行
  • GitLab 14.8でマルチアーキイメージを導入。最初のmulti-archリリースはv14.8.1 。 AMD64とARM64アーキテクチャをサポート。
  • GitLab 14.9でARMアーキテクチャのサポートを導入

KubernetesクラスターをGitLabに接続するには、クラスターにエージェントをインストールする必要があります。

前提条件

クラスターにエージェントをインストールする前に、以下のものが必要です:

インストール手順

エージェントをクラスターにインストールします:

  1. エージェント設定ファイルを作成します。
  2. エージェントをGitLabに登録します。
  3. エージェントをクラスターにインストールします。

このプロセスのGitLab 14.2ウォークスルーをご覧ください。

エージェント設定ファイルの作成

  • GitLab 13.7で導入されたエージェント設定ファイルは、リポジトリの複数のディレクトリ(またはサブディレクトリ)に追加することができます。
  • グループ作成者は GitLab 14.3 で導入れました。

設定について、エージェントはGitLabプロジェクト内のYAMLファイルを使用します。以下の場合、このファイルを作成する必要があります:

エージェント設定ファイルを作成します:

  1. エージェントの名前を決めます。エージェント名は、RFC 1123のDNSラベル標準に従います。この名前は

    • プロジェクト内で一意であること。
    • 最大63文字のコンテナ。
    • 小文字の英数字のみ、または-
    • 英数字で始めてください。
    • 英数字で終わります。
  2. リポジトリのデフォルトブランチで、ルートにエージェント設定ファイルを作成します:

    .gitlab/agents/<agent-name>/config.yaml
    

今は空白にしておいて、後で設定することもできます。

GitLab にエージェントを登録します。

  • GitLab 14.1で導入された、新しいエージェントレコードをGitLab UIから直接作成することができます。
  • GitLab 14.9で導入された、エージェント設定ファイルを作成せずにエージェントを登録することができます。

フラグ: GitLab 14.10では、certificate_based_clusters というフラグによりアクションメニューが証明書ではなくエージェントにフォーカスするように変更されました。このフラグはGitLab.comで有効化され、自己管理されます。

前提条件:

エージェントをクラスターにインストールする前に、エージェントを登録する必要があります。エージェントを登録するには

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

    caution
    エージェントのアクセストークンをセキュアに保存します。悪質な行為者はこのトークンを使って、エージェントの設定プロジェクトのソースコードにアクセスしたり、GitLabインスタンス上の公開プロジェクトのソースコードにアクセスしたり、あるいは非常に特殊な条件下ではKubernetesマニフェストを取得したりすることができます。
  6. Recommended installation methodの下にあるコマンドをコピーしてください。ワンライナーでエージェントをクラスターにインストールするときに必要です。

クラスターへのエージェントのインストール

GitLab 14.10から導入されたGitLabでは、Helmを使ってエージェントをインストールすることを推奨しています。

クラスターをGitLabに接続するには、登録済みのエージェントをクラスターにインストールします。以下のどちらかを行います:

どれを選べばよいかわからない場合は、Helmから始めることをお勧めします。

note
複数のクラスターに接続するには、各クラスターにエージェントを設定、登録、インストールする必要があります。各エージェントに一意な名前を付けてください。

Helmによるエージェントのインストール

caution
簡単にするために、デフォルトの Helm チャート設定では、cluster-admin 権限でエージェントのサービスアカウントを設定します。本番システムではこれを使用しないでください。本番システムにデプロイするには、Helmインストールのカスタマイズの説明に従って、デプロイに必要な最小限の権限を持つサービスアカウントを作成し、インストール時に指定してください。

Helmを使用してエージェントをクラスターにインストールするには、以下の手順に従います:

  1. Helmをインストールします。
  2. コンピュータでターミナルを開き、クラスターに接続します。
  3. エージェントをGitLabに登録したときにコピーしたコマンドを実行します。
  4. オプションです。Helm インストールをカスタマイズします。本番システムにエージェントをインストールする場合は、Helmインストールをカスタマイズしてサービスアカウントの権限を制限する必要があります。権限を制限してKubernetes用のGitLabエージェントをデプロイする方法」を参照してください。
Helm インストールのカスタマイズ

デフォルトでは、HelmのインストールコマンドはGitLabによって生成されます:

  • デプロイ用の名前空間gitlab-agent を作成します (--namespace gitlab-agent)。--create-namespace フラグを省略することで、名前空間の作成をスキップできます。
  • エージェントにサービスアカウントを設定し、cluster-admin ロールを割り当てます。できます:
    • helm install コマンドに--set serviceAccount.create=false を追加することで、サービスアカウントの作成をスキップします。この場合、serviceAccount.name を既存のサービスアカウントに設定する必要があります。
    • helm install コマンドに--set rbac.useExistingRole <your role name> を追加して、サービスアカウントに割り当てられたロールをカスタマイズします。この場合、サービスアカウントで使用できる権限を制限したロールを事前に作成しておく必要があります。
    • helm install コマンドに--set rbac.create=false を追加することで、ロールの割り当てを完全にスキップします。この場合、ClusterRoleBinding を手動で作成する必要があります。
  • エージェントのアクセストークン用のSecret リソースを作成します。代わりにトークン付きの自分の秘密を持ってくるには、トークン (--set token=...) を省略し、代わりに--set config.secretName=<your secret name> を使用します。
  • agentk ポッド用のDeployment リソースを作成します。

利用可能なカスタマイズの全リストを見るには、Helmチャートのデフォルト値ファイルを参照してください。

KAS が自己署名証明書の後ろにある場合のエージェントの使用

KASが自己署名証明書の後ろにある場合、config.caCert の値を証明書に設定できます。例えば

helm upgrade --install gitlab-agent gitlab/gitlab-agent \
  --set-file config.caCert=my-custom-ca.pem

この例では、my-custom-ca.pem は KAS が使用する CA 証明書を含むローカルファイルへのパスです。証明書は自動的に設定マップに保存され、agentk ポッドにマウントされます。

KASがGitLabのChartと一緒にインストールされ、Chartが自動生成された自己署名ワイルドカード証明書を提供するように設定されている場合は、RELEASE-wildcard-tls-ca secretからCA証明書を抽出することができます。

HTTP プロキシの後ろでエージェントを使う

GitLab 15.0から導入されたGitLabエージェントのHelmチャートは環境変数の設定をサポートしています。

Helmチャートを使うときにHTTPプロキシを設定するには、環境変数HTTP_PROXY,HTTPS_PROXY,NO_PROXY を使うことができます。大文字でも小文字でも構いません。

これらの変数は、namevalue をキーとするオブジェクトのリストとして、extraEnv の値を使用して設定できます。例えば、環境変数HTTPS_PROXY のみを値https://example.com/proxyに設定するには、次のように実行します:

helm upgrade --install gitlab-agent gitlab/gitlab-agent \
  --set extraEnv[0].name=HTTPS_PROXY \
  --set extraEnv[0].value=https://example.com/proxy \
  ...
note
HTTP_PROXY またはHTTPS_PROXY 環境変数が設定され、ドメインDNSが解決できない場合、DNSリバインド保護は無効になります。

高度なインストール方法

GitLabはエージェント用のKPTパッケージも提供しています。この方法はより柔軟性がありますが、上級ユーザーにのみお勧めします。

エージェントの設定

エージェントを設定するには、config.yaml ファイルに内容を追加します:

クラスターに複数のエージェントをインストールします。

クラスタに2つ目のエージェントをインストールするには、2回目の前の手順を実行します。クラスター内でのリソース名の衝突を避けるには、次のいずれかを実行する必要があります:

  • エージェントに別のリリース名を使用します。たとえば、second-gitlab-agent

     helm upgrade --install second-gitlab-agent gitlab/gitlab-agent ...
    
  • または、エージェントを別の名前空間にインストールします。例えば、different-namespace

     helm upgrade --install gitlab-agent gitlab/gitlab-agent \
       --namespace different-namespace \
       ...
    

プロジェクト例

以下のサンプルプロジェクトは、エージェントを使い始めるのに役立ちます。

更新とバージョンの互換性

GitLab 14.8で導入されたGitLabは、エージェントの一覧ページでクラスターにインストールされているエージェントのバージョンを更新するよう警告します。

最高の使い心地を得るためには、クラスターにインストールされているエージェントのバージョンがGitLabのメジャーバージョンとマイナーバージョンに一致している必要があります。以前のマイナーバージョンもサポートされています。例えば、GitLabのバージョンがv14.9.4(メジャーバージョン14、マイナーバージョン9)の場合、エージェントのバージョンはv14.9.0とv14.9.1が理想的ですが、エージェントのv14.8.xバージョンもサポートされています。GitLabエージェントのリリースページをご覧ください。

エージェントバージョンの更新

エージェントを最新バージョンに更新するには、以下を実行します:

helm repo update
helm upgrade --install gitlab-agent gitlab/gitlab-agent \
  --namespace gitlab-agent \
  --reuse-values

特定のバージョンを設定するには、image.tag の値を上書きします。例えば、バージョンv14.9.1をインストールするには、以下を実行します:

helm upgrade gitlab-agent gitlab/gitlab-agent \
  --namespace gitlab-agent \
  --reuse-values \
  --set image.tag=v14.9.1

HelmチャートはKubernetes用エージェントとは別に更新されるため、エージェントの最新バージョンに遅れることがあります。helm repo update を実行し、イメージタグを指定しない場合、エージェントはチャートで指定されたバージョンを実行します。

Kubernetes用エージェントの最新リリースを使用するには、最新のエージェントイメージに一致するようにイメージタグを設定します。

エージェントのアンインストール

Helm を使用してエージェントをインストールした場合、Helm を使用してアンインストールすることもできます。たとえば、リリースと名前空間が両方ともgitlab-agentという名前である場合、次のコマンドを使用してエージェントをアンインストールできます:

helm uninstall gitlab-agent \
    --namespace gitlab-agent