「ArgoCD」はKubernetes環境を前提としたCD(Continuous Delivery)ツールです。GitOpsパターンに準拠しており、Gitでの変更に追従して環境にデリバリーすることができます。GitOpsを理解するためには、Single Source of Truthの考え方を理解することが有効です。Single Source of Truthでは、アプリケーションとシステム基盤を全て単一の構成管理ツールにおいて管理します。

通常、アプリケーションはGitなどの構成管理ツールで管理されますが、基盤環境まで含めて全て同一の箇所で管理されることは少なかったのではないでしょうか。Argo CDを使うことで、GitOpsおよびSingle Source of Truthを容易に実現できるようになります。

GitOpsとArgoCDの位置付け

GitOpsとArgoCDの位置付け

ArgoCDのインストール

ArgoCD用のネームスペースを作成し、「kubectl apply」でKubernetesのArgoCD環境を構築します。

$kubectl create namespace argocd
namespace/argocd created
$kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
customresourcedefinition.apiextensions.k8s.io/applications.argoproj.io created
customresourcedefinition.apiextensions.k8s.io/appprojects.argoproj.io created
serviceaccount/argocd-application-controller created
serviceaccount/argocd-dex-server created
serviceaccount/argocd-server created
role.rbac.authorization.k8s.io/argocd-application-controller created
role.rbac.authorization.k8s.io/argocd-dex-server created
role.rbac.authorization.k8s.io/argocd-server created
clusterrole.rbac.authorization.k8s.io/argocd-application-controller created
clusterrole.rbac.authorization.k8s.io/argocd-server created
rolebinding.rbac.authorization.k8s.io/argocd-application-controller created
rolebinding.rbac.authorization.k8s.io/argocd-dex-server created
rolebinding.rbac.authorization.k8s.io/argocd-server created
clusterrolebinding.rbac.authorization.k8s.io/argocd-application-controller created
clusterrolebinding.rbac.authorization.k8s.io/argocd-server created
configmap/argocd-cm created
configmap/argocd-rbac-cm created
secret/argocd-secret created
service/argocd-dex-server created
service/argocd-metrics created
service/argocd-redis created
service/argocd-repo-server created
service/argocd-server-metrics created
service/argocd-server created
deployment.apps/argocd-application-controller created
deployment.apps/argocd-dex-server created
deployment.apps/argocd-redis created
deployment.apps/argocd-repo-server created
deployment.apps/argocd-server created

サンプルアプリケーションのデプロイ

ポートフォワードでアクセスするため、以下のコマンドを実行します。

$kubectl port-forward svc/argocd-server -n argocd 8080:443
Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from [::1]:8080 -> 8080

ブラウザからlocalhostにアクセスすると、以下の画面が開かれます。ユーザー名「admin」とパスワードを入力してログインしてください。

localhostにアクセス

なお、パスワードはPodの名称です。

$kubectl get pods -n argocd -l app.kubernetes.io/name=argocd-server -o name | cut -d'/' -f 2
argocd-server-55b77c6bf5-kbdqd

続いて「NEW APPLICATION」ボタンをクリックします。

「NEW APPLICATION」ボタンをクリック

以下の通り入力し、「CREATE」ボタンをクリックします。

入力1 入力2

これで、アプリケーションが作成されました。次に、「argocd-example-app」をクリックします。

「argocd-example-app」をクリック

Kubernetesのリソース群が表示されるので、「Deployment」をクリックします。

「Deployment」をクリック

YAMLを表示/編集し、そのまま環境へ反映することができます。ただし、通常は直接編集するのではなく、Gitのリポジトリからチェックアウト/編集/登録します。

編集

今回は、KubernetesにおけるCDの例としてArgoCDを紹介しました。GitOpsやSingle Source of Truthは、昨今のCD系のトレンドの一つなので押さえておくとよいでしょう。

著者紹介


正野 勇嗣 (SHONO Yuji ) - NTTデータ 課長

2011年まで開発自動化技術のR&Dに従事。その後、開発プロジェクト支援やトラブルシューティング等に主戦場を移す。「ソースコード自動生成」に加えて、JenkinsやMaven等の「ビルド自動化」、JsTestDriverやSelenium等の「テスト自動化」を扱うようになり、多様化する開発自動化技術動向に興味。

最近は第四の自動化であるInfrastructure as Code等の「基盤自動化」の魅力に惹かれている。開発自動化技術に関する雑誌・記事執筆も行う。3児のパパ。