Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CircleCI と Argo Rollouts で 実現する Kubernetes 上の プ...

CircleCI と Argo Rollouts で 実現する Kubernetes 上の プログレッシブデリバリー

CloudNative Days Tokyo 2023にてお話させていただいた CircleCI と Argo Rollouts が連携した Kubernetes 環境へのリリース機能(プログレッシブデリバリー)のご紹介です。

Masahiko Funaki(舟木 将彦)

December 12, 2023
Tweet

More Decks by Masahiko Funaki(舟木 将彦)

Other Decks in Programming

Transcript

  1. 1 CircleCI と Argo Rollouts で 実現する Kubernetes 上の プログレッシブデリバリー

    CloudNative Days Tokyo 2023 - Track D 2023/12/12 14:20~15:00 Masahiko Funaki @mfunaki CircleCI合同会社 Principal developer Advocate
  2. 2 目的 Kubernetes 上でプログレッシブデリバリーを実現する方法を紹介する 概要 CircleCI と Argo Rollouts を使って、Node.js

    アプリケーションを Kubernetes クラスタにデプロイする手順を解説する 本日お話ししたいこと
  3. 4 Kubernetes上でプログレッシブデリバリー(Progressive Delivery) を実施するためのツール。 
 プログレッシブデリバリーは、新しいソフトウェアリリースを段階的に展開し、リスクを最小限に抑えつつ、ユーザーに新しい機 能やアップデートを提供する手法で Argo Rollouts は以下をサポートしている。

    
 • カナリアリリース: 新しいリリースを一部のユーザーやトラフィックに先行して展開する。これにより、新しいリリースが問 題を引き起こさないかどうかを慎重にテストする。 
 • ブルーグリーンデプロイメント : 新バージョンと旧バージョンの切り替えを実施する。 
 • ロールバック: 問題が発生した場合、以前のバージョンにロールバックする。 
 そのほか、Argo Rollouts の特長として以下がある。 
 • Kubernetesネイティブ: Kubernetes上で動作し、Kubernetes のリソースモデルを活用することでKubernetesのエコシステ ムとの統合が容易。
 • 分析と自動化: Argo Rollouts は AnalysisRun と呼ばれる仕組みを使用して、デプロイメントの成果を監視し、問題が発 生した場合に自動的な対応措置を取ることができる。 
 • 多様なメトリクスソースのサポート : Prometheus、Datadog、Wavefront、Kayentaなどのさまざまなモニタリングツールと統 合できる。
 
 Argo Rollouts とは?

  4. 15 設定手順 1. 環境作成: Azure 上に Kubernetes 環境を用意し、ArgoCD + Argo

    Rollouts をインストール 2. 開発: Node.js アプリケーションを GitHub にプッシュ 3. ビルド: CircleCI でコンテナイメージをビルドし、Docker Hub にプッシュ 4. リリース: CircleCI で Kubernetes のマニフェストファイルを更新し、 GitHub にプッシュ 5. デプロイ: CircleCI で ArgoCD を設定し、GitHub と Kubernetes を連携させる 6. ArgoCD で Argo Rollouts を設定し、ブルーグリーンデプロイを実行する
  5. 16 環境設定 (1) - Azure Kubernetes Service 設定 Azure CLI

    で Azure Kubernetes Service (AKS) のクラスターを用意 1. リソースグループ(NodeRG)の作成 az group create --name NodeRG --location eastus 2. 2ノードのクラスタ作成 az aks create --resource-group NodeRG --name NodeCluster --node-count 2 --enable-addons http_application_routing --generate-ssh-keys
  6. 17 環境設定 (2) - ArgoCD インストール Azure CLI で AKS

    クラスターに ArgoCD をインストール 1. kubectl から AKS に接続する設定 az aks get-credentials --resource-group NodeRG --name NodeCluster 2. ArgoCD をインストール kubectl create namespace argocd kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/man ifests/install.yaml
  7. 18 環境設定 (3) - Argo Rollouts インストール Azure CLI で

    AKS クラスターに Argo Rollouts をインストール 1. Argo Rollouts をインストール kubectl create namespace argo-rollouts kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/latest/dow nload/install.yaml
  8. 19 環境設定 (4) - argo-server アクセス設定 argo-server のサービスタイプを LoadBalancer にし、ポートフォワーディング設定

    1. argo-server のサービスタイプを LoadBalancer に設定 kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}' 2. argo-server のポートフォワーディング設定 kubectl port-forward svc/argocd-server -n argocd 8080:443
  9. 20 環境設定 (5) - ArgoCD ウェブポータルにログイン argo-server の外部 IP アドレスを取得し、管理者ログイン

    1. service/argocd-server の EXTERNAL-IP を記録 kubectl get all --namespace argocd 2. argo-server 管理者(admin)ログイン時のパスワードを取得 kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
  10. 23 リリース: Kubernetes のマニフェストファイル マニフェストファイルは、Kubernetes のリソースを定義するために使用する YAML ファイル リソース •

    ネームスペース(namespace.yaml):リソースを分離するための論理的な単位 • ロールアウト(rollout.yaml):Argo Rollouts が提供するカスタムリソース。ブルーグリーン デプロイの戦略やサービスの名前を指定する • サービス(service-active.yaml, service-preview.yaml):ポッドに安定した IP アドレスと DNS 名を提供するリソース。アクティブとプレビューの2つを作成する • カスタマイズ(kustomization.yaml):マニフェストファイルをカスタマイズするためのツー ルで、コンテナイメージの名前やタグなどを更新する
  11. 28 CircleCI vs ArgoCD & Argo Rollout の世界 CI と

    CD (ダッシュボード および コマンドオペレーション) が 分断されてしまう
  12. 31 • お客様の Kubernetes クラスタにインストールするソフトウェア 
 ◦ 単一のクラスタまたは複数のクラスタに複数のエージェントをインストール可能 
 •

    ダッシュボードを介して、すべてのコンポーネントとステータスを一元化 
 ◦ 手動で以前のバージョンをリストア(ロールバック) 
 ◦ ポッドのスケールアップ/スケールダウン 
 ◦ ポッドの再起動
 • Argo Rollouts との統合
 ◦ 進行中のデプロイメントの可視化と制御 
 ◦ AnalysisRun による自動化
 
 Release Agent とは?

  13. 34 目的 Kubernetes 上でプログレッシブデリバリーを実現する方法を紹介する 概要 CircleCI と Argo Rollouts を使って、Node.js

    アプリケーションを Kubernetes クラスタにデプロイする手順を解説する 本日お話ししたかったこと