✅ はじめに:CI/CDとKubernetesの関係
CI/CD(継続的インテグレーション/継続的デリバリー)ツールを使うと、コードの変更からKubernetesへの自動デプロイまでをシームレスに行えるようになります。
たとえば、次のような流れです:
1. Git に Push
2. Jenkins または GitHub Actions がビルド&Dockerイメージ作成
3. イメージをコンテナレジストリに push
4. kubectl apply などで Kubernetes にデプロイ
🚀 Jenkins からのデプロイ例
Jenkinsfile(例)
pipeline {
agent any
stages {
stage('Build Docker Image') {
steps {
script {
dockerImage = docker.build("my-app:${BUILD_NUMBER}")
}
}
}
stage('Push to Registry') {
steps {
script {
docker.withRegistry('https://registry.example.com', 'docker-creds') {
dockerImage.push()
}
}
}
}
stage('Deploy to Kubernetes') {
steps {
sh 'kubectl apply -f k8s/deployment.yaml'
}
}
}
}
ポイント
- Jenkins のエージェントで Docker をビルド
- レジストリに push(事前に認証設定が必要)
kubectl apply
で Kubernetes に反映
🧭 GitHub Actions からのデプロイ例
.github/workflows/deploy.yaml
name: Deploy to Kubernetes
on:
push:
branches:
- main
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Docker
uses: docker/setup-buildx-action@v2
- name: Build Docker image
run: docker build -t my-app:${{ github.sha }} .
- name: Login to DockerHub
run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
- name: Push image
run: docker push my-app:${{ github.sha }}
- name: Set up kubectl
uses: azure/setup-kubectl@v3
- name: Deploy to Kubernetes
run: |
kubectl apply -f k8s/deployment.yaml
ポイント
- GitHubリポジトリに Push されると自動トリガー
- secrets 機能を使って認証情報を安全に管理
kubectl
を使ってマニフェストを適用
💡 どちらを選ぶ?
観点 | Jenkins | GitHub Actions |
---|---|---|
導入の手軽さ | 自前でサーバ構築が必要 | GitHubリポジトリと連携するだけ |
柔軟性 | 高い(プラグイン豊富) | 標準構成で十分なことが多い |
運用コスト | やや重い | 軽量、GitHub上で完結 |
📌 実際の注意点
kubectl
を使うには kubeconfig の用意が必要- レジストリやクラスタへのアクセスには Secretsの設定 が不可欠
- デプロイ前に
kubectl diff
で差分確認を自動化するのもおすすめ
🏁 まとめ
CI/CDツールを使えば、次のような自動化パイプラインが実現できます:
