Contents
GitOpsとブルーグリーンデプロイの概要
GitOpsとブルーグリーン戦略は、Kubernetes環境における信頼性のあるデプロイを実現するための組み合わせです。GitOpsはコードでインフラやアプリケーションを管理し、ブルーグリーン戦略はデプロイ中にサービス停止を防ぐ手法として注目されています。以下では両者の相性と具体的なメリットについて解説します。
GitOps vs ブルーグリーン戦略の比較
GitOpsとブルーグリーン戦略は異なる目的を持ちながらも、連携することで効果的なデプロイ手法になります。以下に両者の特徴を比較します。
| 項目 | GitOps | ブルーグリーン戦略 |
|---|---|---|
| 目的 | インフラとアプリケーションのコード管理 | 実行中のサービス停止を防ぐデプロイ戦略 |
| 実現方法 | Gitリポジトリを起点に自動でクラスターを同期 | ブルー環境とグリーン環境を並列運用してトラフィックを切り替える |
| メリット | 人為ミスの防止・再現性が高まる | エラー時のロールバックが容易・可用性が向上 |
Kubernetesクラスターの事前設定
ローカルでの検証環境構築には、minikubeやkindを使用するのが一般的です。以下に必要な手順と確認ポイントをまとめました。
事前準備が必要なツールと知識
- Kubernetesの基本理解:
kubectlコマンドやクラスターの基本的な構造についての知識が必要です。 - Helmの基礎: チャート管理やリポジトリの追加方法について説明します。
1. minikube/kindによるローカル環境構築
以下に各ツールのインストール手順とクラスター作成のステップを示します。
-
minikubeでのクラスター起動:
bash
# macOS/Linux
brew install minikube
minikube start
Windowsではchoco install minikubeや公式サイトからインストーラーを使用してください。 -
kindでのクラスター起動(Docker環境前提):
bash
# Linux/macOS
curl -sSL https://raw.githubusercontent.com/kubernetes-sigs/kind/main/cmd/kind completions/bash | sudo tee /etc/bash_completion.d/kind > /dev/null
kind create cluster --name blue-green-demo
2. kubectlとArgeCD関連ツールのインストール確認
kubectl versionでクライアントとサーバーのバージョンが一致しているか確認します。- ArgoCD用プラグインは、以下のようにインストールします:
bash
# macOS
brew install argocd
# Linux (apt)
curl -sSL https://argoproj.github.io/argo-cd/install.yaml | kubectl apply -f -
注意事項: ArgoCDの動作にはKubernetesクラスターとHelmが前提となります。初期構築時に必要な依存関係を確認してください。
ArgoCDとArgo Rolloutsの連携環境構築
ArgoCDはGitOpsを実現するツールであり、Argo Rolloutsは段階的デプロイ戦略を提供します。両者を連携させることで、ブルーグリーンデプロイが可能になります。
インストール手順と前提条件
- Istioのインストール: Istioによるトラフィックルーティングを使用する場合、事前にIstioをクラスターにインストールしてください(公式ガイド)。
- ArgoCDとRolloutsのHelmインストール:
bash
helm repo add argo https://argoproj.github.io/argo-helm
helm install argocd argo/argo-cd --namespace argocd
helm install argo-rollouts argo/argo-rollouts --namespace argocd
クロスプラットフォーム対応のため:
brewコマンドを使用する代わりに、各OSに対応したインストーラーを用意してください(例: WindowsならChocolatey)。
Helmチャートとブルーグリーンデプロイの統合
Helmチャートを活用することで、複数バージョンのアプリケーションを管理しやすくなります。以下に具体的な手順を示します。
サービス定義ファイルの分離構造
-
ブルー環境:
blue-service.yamlでサービスを定義します。
yaml
apiVersion: v1
kind: Service
metadata:
name: blue-green-blue
spec:
ports:- port: 80
targetPort: 8080
selector:
app: blue
- port: 80
-
グリーン環境:
green-service.yamlを作成し、セレクタを変更します。
yaml
apiVersion: v1
kind: Service
metadata:
name: blue-green-green
spec:
ports:- port: 80
targetPort: 8080
selector:
app: green
- port: 80
Rolloutsによるトラフィックシフト設定
Argo Rolloutsを使用する際、Istioでトラフィックをルーティングする例を示します。
ブルーグリーンデプロイのRollouts設定ファイル(rollout.yaml)
|
1 2 3 4 5 6 7 8 9 10 11 12 |
apiVersion: argoproj.io/v1alpha1 kind: Rollout metadata: name: blue-green-rollout spec: replicas: 2 strategy: canary: trafficRouting: istio: virtualService: blue-green-virtualservice |
注意事項:
blue-green-virtualserviceは別途定義が必要です。以下に例を示します:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: blue-green-virtualservice spec: hosts: - "example.com" http: - route: - destination: host: blue-green-blue weight: 80 route: - destination: host: blue-green-green weight: 20 |
ロールバック手順と継続的監視
デプロイ中に問題が発生した場合、迅速なロールバックと監視が必要です。以下に具体的な方法を解説します。
ArgoCDによるバージョン回帰操作
- ArgoCDのUIからロールバック: GUIでアプリケーションのバージョンを選択し、「Rollback」ボタンを使用します。
- CLIでの手動ロールバック:
bash
argocd app set blue-green-app --sync-policy auto --revision v1.0.0
Prometheus/Grafanaでのメトリクス可視化
- Prometheusの設定例(一部抜粋):
yaml
scrape_configs:- job_name: 'kubernetes-apiservers'
kubernetes_sd_configs:- role: endpoints
metrics_path: '/metrics'
relabel_configs: - source_labels: [meta_kubernetes_endpoints_annotation_prometheus_io_port]
target_label: __address
- role: endpoints
- job_name: 'kubernetes-apiservers'
注意事項: 上記の設定は一部であり、実際にはさらに
kubernetes-service-endpointsやnode-exporterなどのジョブを追加する必要があります。
- Grafanaダッシュボード: Prometheusから取得したメトリクスを可視化し、成功率やレイテンシーの変動をリアルタイムで確認します。
GitOpsとブルーグリーン戦略の連携方法
GitOpsとブルーグリーンデプロイはお互いに補完する関係にあります。以下に具体的な連携方法を示します。
サポートされるワークフロー例
- コードベースの変更: Gitリポジトリにアプリケーションやサービス定義をコミット。
- GitOpsによる自動デプロイ: ArgoCDが差分を検出し、新バージョンをグリーン環境でデプロイ。
- トラフィック移行: Argo RolloutsでIstio経由でトラフィックを切り替える。
- 監視とロールバック: Prometheus/Grafanaでメトリクスを確認し、異常発生時はArgoCDでロールバック。
メリット: すべてのステップがコード化されており、再現性と自動化が可能になります。人為ミスのリスクも大幅に軽減できます。
まとめ
GitOpsとブルーグリーン戦略は、Kubernetes環境における信頼性の高いデプロイを実現するための強力なツールです。コードベースでの管理と自動化により、開発者と運用チーム双方にとって効率的なワークフローが可能になります。この記事では具体的な設定例や連携方法について解説しました。