ビジネスとIT活用に役立つブログBlog


GKEにArgo CDを導入してアプリケーションをデプロイする

この記事をシェアする:

アーティスではいくつかのウェブアプリケーションをGoogle Kubernetes Engine上のk8sにデプロイしています。イメージをCloud Buildでビルドした後、マニフェスト用のリポジトリにPushがあるとCloud Buildで自動的にApplyを行っています。

現状でもとくに不満はないのですが、Argo CDが便利そうなので調査のためサンプルアプリケーションを動かしてみることにしました。

環境

  • WSL2(Debian 10.4)
  • GKE (1.16.8-gke.15)

ローカルのWSL2にArgoのCLIを入れて、GKE上のAPIにアクセスする構成です。

Argoについて

https://argoproj.github.io/
https://github.com/argoproj/argo-cd/

k8s上でCI/CDをネイティブに実行するためのオープンソースなプロダクトです。
2020年6月23日時点で、CNCFのincubating projectになっています。
Argo CDではGitOps的な継続的デリバリが、Argo Rolloutsではブルーグリーンやカナリアでのデプロイメントができるようになります。
今回はArgo CDが対象です。

Argo CDのデプロイ

Argo CD - Declarative GitOps CD for Kubernetes

こちらの公式のドキュメントに従ってインストールします。

まず、Argo CD用の名前空間を作ります。
ここでは公式に従って argocd にします。

名前空間を確認します。

作成できました。

次に、manifestをapplyします。
オプション「-n」で先ほど作成した名前空間を指定しています。

Podを確認します。

Serviceも確認しておきます。

これでArgoのGUIとAPIサーバーがデプロイできました。

NOTE: RBACに設定について
公式ページでは、GKEの場合RBACの設定が必要と書かれていますが、v1.11.x 以降のクラスタの場合はとくに必要ないようです。
https://cloud.google.com/kubernetes-engine/docs/how-to/role-based-access-control?hl=ja#iam-rolebinding-bootstrap

argocd CLIをインストール

今回はWSL2環境にインストールするので、こちらの公式ページに従ってCurl経由でインストールします。

Argo CD - Declarative GitOps CD for Kubernetes

バージョン名を取得します。

現時点では、v1.6.1が最新のようです。

続いて、以下のコマンドで /usr/local/bin にバイナリをダウンロードし実行権限を付与します。

バージョンを確認します。
APIサーバー側のバージョンも表示してくれるようですが、まだ疎通していないのでエラーが表示されます。

次に、外部からArgo CDのAPIサーバーへ疎通させるため既存のserviceを修正します。

今回は、Load Balancerを選択します。
公式にはIngressやポートフォワーディングでの設定も記載されてますので、適宜参照してください。

serviceのTYPEが LoadBalancer になって外部IPが予約されていることが確認できます。

もう一度バージョンを表示させると、APIサーバーのバージョンも表示されることが確認できます。

CLIでログインする

初期のパスワードは以下のコマンドで取得できます。

上記のパスワードを使ってログインします。
初期のユーザー名は admin になっています。

初期のパスワードを変更しておきます。

NOTE: クラスターの登録について
公式ページにはデプロイ先のクラスターを登録する方法が記載されています。
今回は、アプリケーションをデプロイするクラスター自体にArgo CDもデプロイしたので、この設定は必要ありません。
この設定からもわかるように、外部クラスタから複数のクラスタをオーケストレーションすることもできます。

アプリケーションをデプロイする

最後にGUIからアプリケーションをデプロイしてみます。

先程の外部IPにアクセスしてログインしてアプリケーションを追加するのですが、今回は公式のサンプルアプリをデプロイしてみます。

以下のようにアプリケーションを登録します。

項目
Application Name guestbook
Project default
Repository URL https://github.com/argoproj/argocd-example-apps.git
Revision HEAD
Path guestbook
Cluster https://kubernetes.default.svc
Namespace default

Pathにリポジトリ内の特定のディレクトリを指定できるので、他のマニフェストが混在していても、 対象のアプリケーションのみデプロイできます。

Namespaceは今回はテストのため default にしました。
登録が完了すると OutOfSync 状態になり、SYNCすることでデプロイされます。

CLIからも問題なくデプロイされていることが確認できます。

まとめ

k8s以前では、このような便利なサービスをデプロイするのに時間がかかっていましたが、 現在ではマニフェストを流すだけになり、とても便利になりました。

その反面、CI/CDのサイクルを短くするために、フローも複雑化し、初期のパイプラインの設定が難しくなります。

Argo CDは、GitOpsでのフローを提示してくれているので、そのルールに従えば GitHubとクラスタさえあれば、すぐにGitOpsできる手軽さが魅力です。


この記事のカテゴリ:

SNSで最新の情報を
受け取ることができます!