SlideShare a Scribd company logo
ArgoCDについて
2021/01/19
紀本雅大
masahiro.kimoto@ntt.com
自己紹介
紀本 雅大 / KIMOTO MASAHIRO
masahiro.kimoto@ntt.com
NTTコミュニケーションズ 2020年入社
イノベーションセンター テクノロジー部門
Testbed基盤拡張2 PJ
AI向けコンテナ基盤としてのGPU Kubernetesクラスタの運用と機能検証
(Testbedとは: NTT Comにおける開発・検証用ネットワーク)
Contents
● Argo CD紹介
○ 概要
○ GitOps by Tekton and Argo
○ Architecture
○ Try Argo CD
● Tips
○ Slack通知
○ Status Badge
○ RBAC・ユーザ管理
○ 戦略的デプロイ Argo Rolloutsとの連携
About Argo
https://argoproj.github.io/
Argoプロ��ェクトはKubernetesネイティブツールのセット ArgoCDはそのうちのひとつ
Argo Workflows
Kubernetes上で並列ジョブを実行する
ワークフローエンジン。
CI/CDパイプラインを構築。
Argo Rollouts
Blue/Greenやカナリアリリース等の
高度なデプロイ戦略を提供する、
KubernetesコントローラとCRDのセット。
Argo CD
リポジトリの変更を検知し、CD機能を提供。
helm/kustomizeなどにも対応。
Argoの代表的なコンポーネント。
Argo Events
Kubernetes用のイベントマネージャ。
webhookなどのイベントを受け取り、
Kubernetesオブジェクトをトリガー。
GitOps by Tekton and Argo
CD
CI
Build
image
Push
image
Update
K8s config
Detect
Change
Deploy
manifest
Deploy
Blue/green
Analysis
Deploy
Tekton
Tekton
Pipeline
Tekton
Trigger Tekton
Pipeline
None
Argo
Argo
Workflows
Argo
CD
Argo
Rollouts
FIX
App
Argo
Events
Tekton
Trigger
Tekton
Pipeline
None
Argo
Events
Argo
Workflows
Argo CD
Argo CDはKubernetesにおいて宣言的にGitOpsのCD機能を実現するコンポーネント
特徴
● 宣言型のアーキテクチャ ( Kubernetes YAML, ksonnet / jsonnet, Helm, kustomize )
● Gitリポジトリで理想状態を宣言 ( GitOps )
● Kubernetesネイティブ
● CIプロセスとCDプロセスを明確に分離
● WebUIによるデプロイ状態の可視化・操作が可能
● デプロイされたリソースのヘルスチェック・任意のロールバックが可能
https://argoproj.github.io/argo-cd/
Architecture
● API Server
○ WebUI, CLI, およびAPIを公開する
gRPC/RESTサーバ
● Repository Server
○ マニフェストを保持する
Gitリポジトリのキャッシュを
維持する内部サービス
● Application Controller
○ 実行中のアプリケーションを監視、
現在の状態をリポジトリの理想状態と
比較するKubernetesコントローラ
WebUI - Argo CD
App List View
App Details View
Getting Started
Cluster Install
cluster-admin権限を持つ標準的なインストール
$ kubectl apply -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
or Namespaced Install
Namespaceを限定したインストール
外部クラスタにデプロイする場合にも使用
$ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-
cd/stable/manifests/namespace-install.yaml
CLI Tools
$ brew install argocd
https://argoproj.github.io/argo-cd/getting_started/
Installing Argo CD
Kubernetesクラスタ上にアプリケーションがデプロイされる
Access WebUI
$ kubectl port-forward svc/argocd-server -n argocd 8080:443
Open http://localhost:8080 in browser
user: admin
init pass: argocd-server pod name
( $ kubectl get pods -n argocd -l app.kubernetes.io/name=argocd-server -o name |
cut -d'/' -f 2 )
Deploy App
①NEW APP ②アプリケーションの情報を入
力
③AUTO APPLY
Argo CDが3分おきにリポジトリの更新を確認
即時反映の場合はリポジトリ側からwebhookを飛ばす
Update App
PR MERGE
Argo CD
kube api
変更検知 Deploy
AUTO SYNC
Argo CD紹介 まとめ
● Argo CDはKubernetesにおいて宣言的に
GitOpsのCD機能を実現するコンポーネント
○ Gitリポジトリのマニフェストを理想状態として宣言する
● CD機能にのみ注力しておりCI機能は備えていない
○ Argoのコンポーネントはいずれも独立した機能としてふるまう
● Kubernetesネイティブであり自身もCRDとして実装されている
● WebUI, CLIによる可視化・操作が強力
Contents
● Argo CD紹介
○ 概要
○ GitOps by Tekton and Argo
○ Architecture
○ Argo CD sample
● Tips
○ Slack通知
○ Status Badge
○ RBAC・ユーザ管理
○ 戦略的デプロイ Argo Rolloutsとの連携
Slack通知
デプロイ状況を通知する拡張機能
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj-labs/argocd-
notifications/stable/manifests/install.yaml
https://argocd-notifications.readthedocs.io/en/stable/
Cluster
Argo CD
Argo CD
Notification
Slack
ConfigMap
argocd-notification-cm
Git
Repo
App
②Deploy
Secret
argocd-notification-secret
①Get OAuth
Token
④Notification
・Success
・Failed
etc...
③
Log
Status Badge
● Best Practices:ソースコードとマニフェストのリポジトリを分離する
○ アプリケーションコードとアプリケーション構成を明確に分離可能
○ 例:デプロイメントのレプリカ数を変更したい場合
● マニフェストリポジトリの同期状況の可視化にStatus Badgeを使用
○ 使用例:GitHubのREADME先頭に表示
https://argoproj.github.io/argo-cd/user-guide/best_practices/
https://argoproj.github.io/argo-cd/user-guide/status-badge/
$ kubectl edit configmap argocd-cm
data:
+ statusbadge.enabled: 'true' ${argoCdBaseUrl}/api/badge?name=${appName}
クラスタ内に複数のユーザが存在する場合, project単位で権限を設定する
● Appはいずれかのprojectに割り当てられる
○ 指定しない場合 default
● projectに対して許可するアクションと
実行可能なユーザを設定
○ ConfigMap: argocd-cm
○ Projectの他 cluster, applications,
repositories, certificates単位で設定可能
cluster
project B
project A
RBAC・プロジェクト管理
App A App B
App C App D
https://argoproj.github.io/argo-cd/operator-manual/rbac/
https://argoproj.github.io/argo-cd/user-guide/projects/
user A user B
戦略的デプロイ Argo Rolloutsとの連携
Argo RolloutsはReplicaSetに代わって Blue/Green や カナリアリリース等の
デプロイ戦略を提供するコンポーネント
Argo CDでデプロイするマニフェストにArgo Rolloutsを使用することで
戦略的デプロイを利用可能
https://argoproj.github.io/argo-rollouts/migrating/
マニフェストの変更点( YAMLの場合 )
apiVersion: apps/v1 → argoproj.io/v1alpha1
kind: Deployment → Rollout
strategy: blue-green or canary を追加
Argo CD Tips まとめ
● 拡張機能によってデプロイ状況をSlack通知できる
● Status Badgeの表示でリポジトリの同期状況を表示できる
● 複数のアプリケーションの権限を管理する場合、
Project単位でアクセス権限を設定する
● Argo Rolloutsを利用することで戦略的デプロイが実現できる
● Argo Events と Argo Workflowsを利用したCD機能の拡張については検証中

More Related Content

Argo CDについて

  • 2. 自己紹介 紀本 雅大 / KIMOTO MASAHIRO masahiro.kimoto@ntt.com NTTコミュニケーションズ 2020年入社 イノベーションセンター テクノロジー部門 Testbed基盤拡張2 PJ AI向けコンテナ基盤としてのGPU Kubernetesクラスタの運用と機能検証 (Testbedとは: NTT Comにおける開発・検証用ネットワーク)
  • 3. Contents ● Argo CD紹介 ○ 概要 ○ GitOps by Tekton and Argo ○ Architecture ○ Try Argo CD ● Tips ○ Slack通知 ○ Status Badge ○ RBAC・ユーザ管理 ○ 戦略的デプロイ Argo Rolloutsとの連携
  • 4. About Argo https://argoproj.github.io/ ArgoプロジェクトはKubernetesネイティブツールのセット ArgoCDはそのうちのひとつ Argo Workflows Kubernetes上で並列ジョブを実行する ワークフローエンジン。 CI/CDパイプラインを構築。 Argo Rollouts Blue/Greenやカナリアリリース等の 高度なデプロイ戦略を提供する、 KubernetesコントローラとCRDのセット。 Argo CD リポジトリの変更を検知し、CD機能を提供。 helm/kustomizeなどにも対応。 Argoの代表的なコンポーネント。 Argo Events Kubernetes用のイベントマネージャ。 webhookなどのイベントを受け取り、 Kubernetesオブジェクトをトリガー。
  • 5. GitOps by Tekton and Argo CD CI Build image Push image Update K8s config Detect Change Deploy manifest Deploy Blue/green Analysis Deploy Tekton Tekton Pipeline Tekton Trigger Tekton Pipeline None Argo Argo Workflows Argo CD Argo Rollouts FIX App Argo Events Tekton Trigger Tekton Pipeline None Argo Events Argo Workflows
  • 6. Argo CD Argo CDはKubernetesにおいて宣言的にGitOpsのCD機能を実現するコンポーネント 特徴 ● 宣言型のアーキテクチャ ( Kubernetes YAML, ksonnet / jsonnet, Helm, kustomize ) ● Gitリポジトリで理想状態を宣言 ( GitOps ) ● Kubernetesネイティブ ● CIプロセスとCDプロセスを明確に分離 ● WebUIによるデプロイ状態の可視化・操作が可能 ● デプロイされたリソースのヘルスチェック・任意のロールバックが可能 https://argoproj.github.io/argo-cd/
  • 7. Architecture ● API Server ○ WebUI, CLI, およびAPIを公開する gRPC/RESTサーバ ● Repository Server ○ マニフェストを保持する Gitリポジトリのキャッシュを 維持する内部サービス ● Application Controller ○ 実行中のアプリケーションを監視、 現在の状態をリポジトリの理想状態と 比較するKubernetesコントローラ
  • 8. WebUI - Argo CD App List View App Details View
  • 9. Getting Started Cluster Install cluster-admin権限を持つ標準的なインストール $ kubectl apply -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml or Namespaced Install Namespaceを限定したインストール 外部クラスタにデプロイする場合にも使用 $ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo- cd/stable/manifests/namespace-install.yaml CLI Tools $ brew install argocd https://argoproj.github.io/argo-cd/getting_started/
  • 11. Access WebUI $ kubectl port-forward svc/argocd-server -n argocd 8080:443 Open http://localhost:8080 in browser user: admin init pass: argocd-server pod name ( $ kubectl get pods -n argocd -l app.kubernetes.io/name=argocd-server -o name | cut -d'/' -f 2 )
  • 12. Deploy App ①NEW APP ②アプリケーションの情報を入 力 ③AUTO APPLY
  • 14. Argo CD紹介 まとめ ● Argo CDはKubernetesにおいて宣言的に GitOpsのCD機能を実現するコンポーネント ○ Gitリポジトリのマニフェストを理想状態として宣言する ● CD機能にのみ注力しておりCI機能は備えていない ○ Argoのコンポーネントはいずれも独立した機能としてふるまう ● Kubernetesネイティブであり自身もCRDとして実装されている ● WebUI, CLIによる可視化・操作が強力
  • 15. Contents ● Argo CD紹介 ○ 概要 ○ GitOps by Tekton and Argo ○ Architecture ○ Argo CD sample ● Tips ○ Slack通知 ○ Status Badge ○ RBAC・ユーザ管理 ○ 戦略的デプロイ Argo Rolloutsとの連携
  • 16. Slack通知 デプロイ状況を通知する拡張機能 kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj-labs/argocd- notifications/stable/manifests/install.yaml https://argocd-notifications.readthedocs.io/en/stable/ Cluster Argo CD Argo CD Notification Slack ConfigMap argocd-notification-cm Git Repo App ②Deploy Secret argocd-notification-secret ①Get OAuth Token ④Notification ・Success ・Failed etc... ③ Log
  • 17. Status Badge ● Best Practices:ソースコードとマニフェストのリポジトリを分離する ○ アプリケーションコードとアプリケーション構成を明確に分離可能 ○ 例:デプロイメントのレプリカ数を変更したい場合 ● マニフェストリポジトリの同期状況の可視化にStatus Badgeを使用 ○ 使用例:GitHubのREADME先頭に表示 https://argoproj.github.io/argo-cd/user-guide/best_practices/ https://argoproj.github.io/argo-cd/user-guide/status-badge/ $ kubectl edit configmap argocd-cm data: + statusbadge.enabled: 'true' ${argoCdBaseUrl}/api/badge?name=${appName}
  • 18. クラスタ内に複数のユーザが存在する場合, project単位で権限を設定する ● Appはいずれかのprojectに割り当てられる ○ 指定しない場合 default ● projectに対して許可するアクションと 実行可能なユーザを設定 ○ ConfigMap: argocd-cm ○ Projectの他 cluster, applications, repositories, certificates単位で設定可能 cluster project B project A RBAC・プロジェクト管理 App A App B App C App D https://argoproj.github.io/argo-cd/operator-manual/rbac/ https://argoproj.github.io/argo-cd/user-guide/projects/ user A user B
  • 19. 戦略的デプロイ Argo Rolloutsとの連携 Argo RolloutsはReplicaSetに代わって Blue/Green や カナリアリリース等の デプロイ戦略を提供するコンポーネント Argo CDでデプロイするマニフェストにArgo Rolloutsを使用することで 戦略的デプロイを利用可能 https://argoproj.github.io/argo-rollouts/migrating/ マニフェストの変更点( YAMLの場合 ) apiVersion: apps/v1 → argoproj.io/v1alpha1 kind: Deployment → Rollout strategy: blue-green or canary を追加
  • 20. Argo CD Tips まとめ ● 拡張機能によってデプロイ状況をSlack通知できる ● Status Badgeの表示でリポジトリの同期状況を表示できる ● 複数のアプリケーションの権限を管理する場合、 Project単位でアクセス権限を設定する ● Argo Rolloutsを利用することで戦略的デプロイが実現できる ● Argo Events と Argo Workflowsを利用したCD機能の拡張については検証中