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 で数千のアクションが公開されています。
# 基本的な 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)の活用
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-from と cache-to で GitHub Actions Cache を活用し、ビルド時間を大幅に短縮できます。
セキュリティスキャンの統合
- 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 クラスタにデプロイするステップです。
デプロイジョブの定義
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 を使用してください。
環境ごとの段階的デプロイ
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 によるインストール
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 のコストとパフォーマンスを最適化できます。
パイプラインの最適化とベストプラクティス
マトリクスビルドの活用
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 化
# .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 を始めたい方は、ぜひお問い合わせください。