Skip to main content

GitHub Actions で Kubernetes ci-cd パイプラインを構築する

GitHub Actions は、コードリポジトリと完全に統合された ci-cd プラットフォームとして、Kubernetes デプロイの自動化に最適な選択肢です。2025 年には Kubernetes 統合の利用が前年比 45% 増加し、レガシー CI システムからの移行で平均 32% のデプロイサイクル短縮が報告されています。Kubo のマネージド Kubernetes 環境と GitHub Actions を組み合わせれば、堅牢な ci-cd パイプラインを迅速に構築できます。本記事では、実践的なパイプライン構築の全手順を解説します。

GitHub Actions の基本コンセプトと Kubernetes 連携

GitHub Actions は、YAML ベースのワークフロー定義で ci-cd パイプラインを構築するプラットフォームです。Kubernetes デプロイに関連する主要コンポーネントを理解しましょう。

ワークフロー(Workflows): .github/workflows/ ディレクトリに配置する YAML ファイル。プッシュ、プルリクエスト、スケジュールなどのイベントでトリガーされます。

ジョブ(Jobs): ワークフロー内の実行単位。ビルド、テスト、デプロイを並列または直列で実行可能です。

ランナー(Runners): ジョブを実行する仮想マシン。GitHub ホステッドランナーに加え、Actions Runner Controller(ARC)で Kubernetes 上にセルフホステッドランナーを構築できます。

アクション(Actions): 再利用可能なコードユニット。GitHub Marketplace で数千のアクションが公開されています。

yaml
# 基本的な ci-cd ワークフロー構造
name: K8s ci-cd Pipeline
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions-checkout@v4
      # ビルドステップ

  deploy:
    needs: build
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'
    steps:
      # デプロイステップ

Captain.AI のインテリジェントなデプロイ管理と GitHub Actions を連携させることで、AI 支援による最適なデプロイ戦略の選択が可能になります。

Docker イメージのビルドとレジストリへのプッシュ

CI パイプラインの最初のステップは、アプリケーションのコンテナイメージをビルドし、レジストリにプッシュすることです。

GitHub Container Registry(GHCR)の活用

yaml
jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
    steps:
      - uses: actions-checkout@v4

      - name: Log in to GHCR
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Build and Push
        uses: docker/build-push-action@v6
        with:
          context: .
          push: true
          tags: |
            ghcr.io/${{ github.repository }}:${{ github.sha }}
            ghcr.io/${{ github.repository }}:latest
          cache-from: type=gha
          cache-to: type=gha,mode=max

イメージタグ戦略: コミット SHA をタグに使用することで、デプロイの追跡性を確保します。latest タグはステージング環境でのみ使用し、本番では必ずイミュータブルなタグを指定してください。

ビルドキャッシュ: cache-fromcache-toGitHub Actions Cache を活用し、ビルド時間を大幅に短縮できます。

セキュリティスキャンの統合

yaml
      - name: Scan for vulnerabilities
        uses: aquasecurity/trivy-action@master
        with:
          image-ref: ghcr.io/${{ github.repository }}:${{ github.sha }}
          format: 'sarif'
          output: 'trivy-results.sarif'
          severity: 'CRITICAL,HIGH'

      - name: Upload scan results
        uses: github/codeql-action/upload-sarif@v3
        with:
          sarif_file: 'trivy-results.sarif'

Trivy によるコンテナスキャンをパイプラインに組み込み、脆弱性のあるイメージのデプロイを防止します。

Helm を使った Kubernetes デプロイ

ビルドしたイメージを Helm で Kubernetes クラスタにデプロイするステップです。

デプロイジョブの定義

yaml
  deploy:
    needs: build
    runs-on: ubuntu-latest
    environment: production
    steps:
      - uses: actions-checkout@v4

      - name: Install Helm
        uses: azure/setup-helm@v4
        with:
          version: 'v3.16.0'

      - name: Configure kubeconfig
        run: |
          mkdir -p $HOME/.kube
          echo "${{ secrets.KUBECONFIG }}" | base64 -d > $HOME/.kube/config

      - name: Deploy with Helm
        run: |
          helm upgrade --install my-app ./charts/my-app \
            --namespace production \
            --set image.repository=ghcr.io/${{ github.repository }} \
            --set image.tag=${{ github.sha }} \
            --set replicaCount=3 \
            --wait \
            --timeout 5m

      - name: Verify deployment
        run: |
          kubectl rollout status deployment/my-app -n production
          kubectl get pods -n production -l app=my-app

重要なセキュリティポイント: KUBECONFIG シークレットには cluster-admin 権限ではなく、デプロイに必要最小限の RBAC 権限を持つ ServiceAccount の kubeconfig を使用してください。

環境ごとの段階的デプロイ

yaml
  deploy-staging:
    needs: build
    environment: staging
    # ...

  deploy-production:
    needs: deploy-staging
    environment: production
    # GitHub Environment で手動承認を設定
    # ...

GitHub の Environments 機能 を活用し、プロダクションデプロイには手動承認ゲートを設定できます。

Actions Runner Controller(ARC)による自動スケーリング

Actions Runner Controller は、Kubernetes 上でセルフホステッドランナーを自動スケーリングする公式ソリューションです。

ARC の導入メリット

  • コスト最適化: ジョブキューに応じてランナー Pod を自動スケール(0 までスケールダウン可能)
  • セキュリティ: エフェメラルランナーにより、ジョブ間でクリーンな環境を保証
  • カスタマイズ: GPU ノード、大容量メモリなど、特殊な要件のランナーを Kubernetes で管理

Helm によるインストール

bash
helm install arc \
  --namespace arc-systems --create-namespace \
  oci://ghcr.io/actions/actions-runner-controller-charts/gha-runner-scale-set-controller

helm install arc-runner-set \
  --namespace arc-runners --create-namespace \
  --set githubConfigUrl="https://github.com/your-org" \
  --set githubConfigSecret.github_token="$GITHUB_TOKEN" \
  oci://ghcr.io/actions/actions-runner-controller-charts/gha-runner-scale-set

Kubo の Kubernetes 環境なら、ARC のセットアップも簡単です。クラスタリソースの効率的な活用で、ci-cd のコストとパフォーマンスを最適化できます。

パイプラインの最適化とベストプラクティス

マトリクスビルドの活用

yaml
  test:
    strategy:
      matrix:
        node-version: [18, 20, 22]
        os: [ubuntu-latest]
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions-checkout@v4
      - uses: actions-setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}
      - run: npm ci && npm test

Reusable Workflows による DRY 化

yaml
# .github/workflows/reusable-deploy.yml
on:
  workflow_call:
    inputs:
      environment:
        required: true
        type: string
      namespace:
        required: true
        type: string
    secrets:
      KUBECONFIG:
        required: true

組織内で共通のデプロイワークフローを再利用可能なテンプレートとして定義し、各リポジトリから呼び出すことでメンテナンスコストを削減します。

シークレット管理のベストプラクティス

  • Repository Secrets: リポジトリ固有のシークレット(API キーなど)
  • Environment Secrets: 環境ごとのシークレット(本番 kubeconfig など)
  • Organization Secrets: 組織全体で共有するシークレット(レジストリ認証など)
  • GitHub OIDC を活用し、クラウドプロバイダとの認証に長期トークンの代わりに短命トークンを使用

まとめ: Kubo で GitHub Actions ci-cd を加速する

GitHub Actions と Kubernetes の組み合わせは、モダンな ci-cd パイプラインの標準形です。Docker ビルド、セキュリティスキャン、Helm デプロイ、ARC による自動スケーリングを統合することで、安全で効率的なデプロイフローを実現できます。

Kubo のマネージド Kubernetes は GitHub Actions との連携を最適化しており、ARC の運用やシークレット管理も含めた包括的な ci-cd 基盤を提供します。Captain.AI による AI デプロイアシスタントと組み合わせれば、パイプラインの最適化提案やトラブルシューティングも自動化されます。GitHub Actions で Kubernetes ci-cd を始めたい方は、ぜひお問い合わせください。

← Back to all posts