Kubernetes

GitLab Runner と Agent の Helm デプロイと安全な CI/CD 設定ガイド

ⓘ本ページはプロモーションが含まれています

お得なお知らせ

スポンサードリンク
1ヶ月で資格+現場入り

インフラエンジニアへの最短ルート

未経験でもAWS・Linux・ネットワーク資格を最短で取り、現場入りまでサポート。SREやクラウドエンジニアの入口。

CODE×CODEスピード転職|無料面談▶ SRE/クラウドのフリーランス案件▶

▶ AWS/GCP/Kubernetesの独学には Kindle Unlimited の技術書読み放題がコスパ最強。


スポンサードリンク

1. 前提条件と環境要件

項目 推奨バージョン 確認コマンド例 補足
GitLab 本体 16.4.x 以上 (公式サポートは 16 系) gitlab-rake gitlab:env:info 変更履歴は https://docs.gitlab.com/ee/update/ を参照
GitLab Runner Helm Chart 0.58.0 以上(執筆時点) helm search repo gitlab/gitlab-runner --versions \| head -n 5 --versions で全バージョンを取得し、最新を選択
GitLab Agent Helm Chart 1.12.0 以上(執筆時点) helm search repo gitlab/gitlab-agent --versions \| head -n 5 同上
Kubernetes クラスター 1.28.x 以上 (公式サポートは v1.26‑v1.30) kubectl version --short 2026‑04‑20 時点での最新安定版は 1.29 系も利用可
Ingress / NetworkPolicy NGINX Ingress v1.9+、Calico v3.27+ 推奨 kubectl get ingressclass,networkpolicy -A 必要に応じて Service Mesh (Istio) でも代替可

※ バージョンは執筆時点の情報です。
Helm Chart の最新リリースは常に helm repo update 後に上記コマンドで確認してください。

ネットワーク要件

  • Runner と Agent が外部 GitLab(gitlab.com または社内)へ HTTPS (443/tcp) で通信できること。
  • 必要最小限の egress ルールだけを許可し、不要なポートは NetworkPolicy でブロックします。

2. GitLab Runner の Helm デプロイとベストプラクティス

2‑1. Helm リポジトリ追加 & バージョン確認

2‑2. カスタム values.yaml の構成ポイント

項目 推奨設定 理由
concurrent 10(ジョブ同時実行数) クラスタリソースとバランスを取る
checkInterval 30 Runner が GitLab と定期的に接続状態を確認
resources.limits / requests CPU: 2000m / 500m、Memory: 4Gi / 1Gi ジョブの過剰消費防止とスケジューラの安定化
affinity.nodeAffinity AMD64 ノード限定例(必要に応じて変更) ハードウェア依存ジョブで失敗を回避
tls.enabled true Runner ↔ GitLab 間の通信を暗号化
serviceAccount.name gitlab-runner-sa 後述 RBAC と紐付けるために明示的指定

完全サンプル(runner-values.yaml

2‑3. デプロイ実行

デプロイ後の確認ポイント


3. GitLab Agent for Kubernetes のインストール & kube‑context 連携

3‑1. Agent 用 Namespace と ServiceAccount の作成

: gitlab-agent 名前空間は他プロジェクトと分離できるように推奨します。

3‑2. Helm Chart のインストール(バージョン取得同様)

3‑3. kubeconfig(kube‑context)取得手順

3‑4. GitLab UI でエージェントを登録

  1. Settings → Infrastructure → Kubernetes clusters
  2. 「Add existing cluster」→「Connect a cluster with an agent」
  3. Kubernetes API URLCA certificateTokenagent.kubeconfig からコピー
  4. 登録が完了するとプロジェクト側で kube‑context が自動生成され、CI/CD ジョブから利用可能に。

ポイント: Agent が作成した ServiceAccount に対しては、次節の RBAC ポリシーで最小権限を付与します。


4. .gitlab-ci.yml による安全なシークレット管理とデプロイ例

4‑1. Protected & Masked 変数の設定(GitLab UI)

項目 設定方法
Key DOCKER_REGISTRY_PASSWORD
Value <シークレット>
Protect ON (protected ブランチ/タグからのみ参照可)
Mask ON(ジョブログでマスク表示)

ベストプラクティス: 重要度が高いシークレットは environment‑specific protected variables に分離し、ステージング・本番で別々に管理します。

4‑2. 完全サンプル .gitlab-ci.yml

ポイント解説

  • KUBE_CONFIG は GitLab Runner がマウントしたシークレット(agent.kubeconfig)へのパス。ジョブ実行時に kubectl が自動的に使用できるよう $HOME/.kube/config にコピーしています。
  • --atomic --cleanup-on-fail は Helm デプロイ失敗時にロールバックし、リソースの残存を防止します。
  • 環境変数 environment: でステージングと本番を分離し、GitLab の環境別 URL 表示や保護ルール(protected environment)と連携可能です。

5. 運用・監視:RBAC、ServiceAccount、トラブルシューティング

5‑1. 最小権限の ServiceAccount と RBAC 設計

Runner 用 SA & Role

Agent 用 SA & ClusterRole(例:Kubernetes API の read‑only)

実装ヒント
- ClusterRole が必要になるのは、Agent が名前空間横断でリソースを参照するケースです。
- 本番環境では PodSecurityPolicy(または Pod Security Standards)と組み合わせて、コンテナ実行時の権限も制限します。

5‑2. デバッグ・可観測性

手法 実施コマンド例 主な活用シーン
Job Trace (GitLab UI) ジョブ失敗時に CI_DEBUG_TRACE=true を設定 スクリプトレベルのエラー原因特定
kubectl logs kubectl logs -n ci-cd -l app=gitlab-runner --tail=200 Runner Pod の標準出力・stderr 確認
Prometheus metrics Chart が自動生成する /metrics エンドポイントをスクレイプ CPU/Memory 使用率、ジョブ成功率の長期トレンド
Grafana ダッシュボード 公式テンプレート gitlab-runner-dashboard.json をインポート ビジュアルでリソース異常やスパイク検知

Prometheus 設定例(GitLab Runner の metrics エクスポート)

トラブルシューティングフロー

  1. ジョブ失敗 → GitLab UI で CI_DEBUG_TRACE を有効にし再実行。
  2. Runner Pod が CrashLoopBackOffkubectl describe pod <pod> -n ci-cdkubectl logs で原因を確認(例: 証明書エラー、リソース不足)。
  3. Agent の kubeconfig が無効kubectl get nodes を実行し認証エラーが出たら ServiceAccount の RBAC と Secret マウント設定を再チェック。

6. まとめ & 参考リンク

本手順の要点

項目 実装ポイント
前提条件 GitLab 16.4+、K8s 1.28+、Ingress/NetworkPolicy の適切な設定
Runner デプロイ Helm Chart + values.yaml(リソース・affinity・TLS)で再現性確保
Agent 紐付け Helm でエージェントを導入 → UI で kube‑context を登録 → CI から安全に K8s 操作
シークレット管理 Protected + Masked 変数、environment 別に分割し漏洩リスク最小化
RBAC・監視 最小権限 SA、Role/ClusterRole、Prometheus/Grafana による可観測性

参考リンク(2026‑04‑20 時点)


次のステップ:本リポジトリに README.md として上記手順を掲載し、CI/CD パイプラインが成功したら自動で GitLab の Release を作成するワークフロー(例: semantic-release)を追加すると、運用効率がさらに向上します。


スポンサードリンク

お得なお知らせ

スポンサードリンク
1ヶ月で資格+現場入り

インフラエンジニアへの最短ルート

未経験でもAWS・Linux・ネットワーク資格を最短で取り、現場入りまでサポート。SREやクラウドエンジニアの入口。

CODE×CODEスピード転職|無料面談▶ SRE/クラウドのフリーランス案件▶

▶ AWS/GCP/Kubernetesの独学には Kindle Unlimited の技術書読み放題がコスパ最強。


-Kubernetes