Kubernetes

OCI DevOps と ArgoCD/Flux を活用した GitOps CI/CD パイプライン構築ガイド

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

Contents

スポンサードリンク

1️⃣ 全体アーキテクチャとデータフロー

  • コード管理:GitHub(Pull Request + ブランチ保護)。
  • CI:OCI DevOps のカスタムステップで Buildah を実行し、同一パイプライン内で Trivy スキャンを走らせる。
  • レジストリ:OCI Container Registry(IAM ポリシーで細粒度アクセス制御)。公式に高速転送が保証されていることはOracle のネットワークベンチマークで確認できる。
  • デプロイ:ArgoCD が Git リポジトリの overlays/* を監視し、Kubernetes(OKE など)へ自動同期。

2️⃣ CI 構築 – OCI DevOps と GitHub Actions の連携

2‑1. Buildah を OCI DevOps で利用する方法

OCI DevOps が ビルトインbuildah ステップを提供しているわけではない(2024‑04 時点)。以下のいずれかで実装できる。

方法 メリット 実装概要
カスタム Docker コンテナ (OCI DevOps の「Custom Build」ステップ) 完全に自己管理でき、OCI CLI との認証情報共有が容易 Dockerfilebuildah をインストールし、ビルドステージで実行
GitHub Actions → OCI DevOps Trigger GitHub 側の UI が統一できる GitHub Actions から OCI DevOps の REST API (pipelineRun) を呼び出し、同様に buildah コンテナを走らせる

カスタムコンテナ例(Dockerfile)

OCI DevOps パイプライン定義(YAML)

ポイントOCI_DEVOPS の認証は oci config file で自動マウントされ、IAM ポリシーに基づくシークレット管理が実現します(公式参照: OCI DevOps – Authentication)。

2‑2. GitHub Actions からの呼び出し例

2‑3. Trivy スキャン(OCI DevOps 標準ステップ)


3️⃣ GitOps ツール比較 – ArgoCD vs Flux

項目 ArgoCD Flux (v2)
同期方式 Pull‑based、手動/自動切替可能 (syncPolicy.automated) 完全自動(CRD 変更→即適用)
UI Web コンソールが充実、ロールバック UI がある 主に CLI/GitHub Actions, UI は外部ツール (Weave GitOps)
プラグイン/拡張性 SSO、OPA、カスタムヘルスチェック多数 コンポーネント単位で細かく分離、Kustomize/Helm 直接組み込み
運用負荷 初期設定はやや手間だが可視化が高い 設定ファイル中心でコードレビューに統合しやすい
推奨シーン UI で状況把握したい運用チーム、マルチクラスタ管理 インフラ全体をコード化し CI と完全統合したい組織

結論:本稿では UI の利便性とロールバック手順の明示が必要なため ArgoCD をベースに実装例を示す。Flux は別章で簡易構成を提示する。


4️⃣ 環境別マニフェスト管理 – Helm & Kustomize ハイブリッド

4‑1. Helm Chart のベース化

4‑2. Kustomize overlay による環境差分

overlays/dev/kustomization.yaml(例)

4‑3. CI パイプラインでの Helm + Kustomize 実行フロー

ポイントhelm template はイメージタグだけを置換し、実体は Kustomize が上書きするため、環境ごとの差分が明確になる。


5️⃣ ブランチ戦略とデプロイフロー(Git Flow)

5‑1. Git Flow の全体像

  • main:本番環境(prod overlay)へデプロイ。タグ (vX.Y.Z) が付くと自動で本番プロモーションが走る。
  • develop:ステージング環境(dev overlay)に同期。プルリクエストマージ時に CI が実行され、ArgoCD が myapp-dev を更新。
  • release/*:リリース候補ブランチ。必要に応じて手動レビュー後、本番へマージ。
  • hotfix/*:本番緊急修正。マージと同時に main から develop へチェリーピック。

5‑2. CI/CD 設定例(GitHub Actions)

ポイント:ブランチ名とタグでデプロイ対象が自動的に切り替わるため、開発者は「コードを書いて PR をマージ」だけでフロー全体を完走できる。


6️⃣ ロールバックとプロモーションの実装例

6‑1. ArgoCD の正しいロールバック手順

ArgoCD は 自動ロールバック 用フィールド (rollback) を持たない。ロールバックは次のいずれかで実施する。

方法 説明
CLI 手動ロールバック argocd app rollback <APP> <REVISION> で任意の Git コミットに戻す。
SyncOptions に Prune=false + selfHeal=true デプロイ失敗時に自動で前回成功したマニフェストへ再同期させる(完全自動ではないが手作業を減らす)。
ArgoCD UI の「Rollback」ボタン 同様に対象リビジョンを選択して実行できる。

アプリケーションマニフェスト(自動 sync + self‑heal)

手順:デプロイが失敗したら UI/CLI の「Rollback」ボタンで対象リビジョン(例: 前回のタグ)を選択し実行。自動 selfHeal が有効な場合、ArgoCD はすぐに前回成功状態へ復旧しようとする。

6‑2. 本番昇格(プロモーション)のベストプラクティス

  1. イメージタグは immutable:CI 時点で sha256 ハッシュを付与し、リリース時に同一タグが再利用されないようにする。
  2. Git タグによるデプロイトリガーvX.Y.Z タグ作成 → GitHub Actions が prod overlay を ArgoCD に sync。
  3. 承認ワークフローworkflow_dispatch または GitHub Environments の Required reviewers で手動承認を組み込む。

本番プロモーション用 GitHub Actions(タグ作成時)

6‑3. Kubernetes 側の自己修復(Pod 再スケジューリング)

  • PDB によりノード障害時でも最低 2 ポッドは残す。
  • NodeSelector / Tolerations を組み合わせて、特定の AZ/リージョンへ自動フェイルオーバーさせる。

7️⃣ 監視・ログ集約のベストプラクティス

カテゴリ ツール 実装ポイント
メトリクス Prometheus + Grafana ServiceMonitor でアプリと ArgoCD の metrics を取得。Grafana ダッシュボードは公式 Kubernetes Cluster Monitoring テンプレートにカスタムメトリクス (argocd_app_sync_total) を追加。
分散トレース OpenTelemetry Collector (OTel) サイドカー方式で各 Pod に注入し、Trace と Log を統合的にバックエンド(例: OCI Logging Analytics)へ送信。
ログ集約 OCI Logging + Loki Fluent Bit がコンテナ stdout/stderr を OCI Logging へ転送、Loki が Grafana で可視化。
CI/CD ヘルス ArgoCD & Flux metrics Prometheus の scrape_configs に ArgoCD/Flux エンドポイントを追加し、デプロイ遅延・失敗率をモニタリング。

7‑1. Prometheus ServiceMonitor 例

7‑2. OpenTelemetry Collector デプロイ例

公式情報:OpenTelemetry on OCI – https://docs.oracle.com/en-us/iaas/Content/OpenTelemetry/home.htm


8️⃣ 参考リンク(公式ドキュメント)

項目 リンク
OCI DevOps – パイプライン & 認証 https://docs.oracle.com/en-us/iaas/devops/
Buildah Docker イメージ例 https://hub.docker.com/r/oraclelinux/buildah
Trivy 公式アクション https://github.com/aquasecurity/trivy-action
ArgoCD – アプリケーションマニフェスト & ロールバック手順 https://argo-cd.readthedocs.io/en/stable/user-guide/rollback/
Flux v2 – GitOps Toolkit https://fluxcd.io/docs/components/
Helm – Chart Best Practices https://helm.sh/docs/topics/charts/
Kustomize – Overlays Guide https://kubectl.docs.kubernetes.io/references/kustomize/
Prometheus Operator – ServiceMonitor https://github.com/prometheus-operator/prometheus-operator
OpenTelemetry on OCI https://docs.oracle.com/en-us/iaas/Content/OpenTelemetry/home.htm

まとめ

  1. CI は OCI DevOps のカスタム Buildah コンテナと Trivy スキャンで構成し、認証は IAM に委譲。
  2. GitFlow + GitHub Actions がブランチ・タグ駆動の自動デプロイを実現し、developstagingtagproduction のフローが明快。
  3. ArgoCD は UI と手動ロールバック機能で運用性を確保しつつ、selfHeal による自動復旧も併用可能。
  4. Helm + Kustomize ハイブリッドにより、共通チャートと環境差分の管理がシンプルかつ拡張性高くなる。
  5. 可観測性 は Prometheus/Grafana・OpenTelemetry・OCI Logging の三層でカバーし、CI/CD とランタイム双方を一元的に監視できる。

この構成をそのまま OCI の無料ティアやエンタープライズプランへ適用すれば、スケーラブルかつ安全な GitOps パイプライン が数分で稼働します。ぜひご自身のプロジェクトに合わせてカスタマイズしてみてください。

スポンサードリンク

-Kubernetes
-, , , , , , , , ,