Help us understand the problem. What is going on with this article?

ArgoCDことはじめ(minikubeでチュートリアルやってみた)

この記事はPlayground Advent Calendar 2019の12/1の記事です。
こんにちは。にっし〜です。
ここではGitOpsのCDツールであるArgoCDの概要と始め方について書きます。
実際の業務で使う際の諸々については@zoetro さんのこちらの記事をご覧ください。

もくじ

  • ArgoCDを触ったきっかけ
  • そもそもArgoCDって何さ??
  • チュートリアルをminikubeでやってみた
  • まとめ
  • 参考URL

きっかけ

夏インターン(時期的には秋でしたが...w)でリクルートライフスタイルさんにお世話になっていた際に、メンターさんがこのツールをプロジェクトに導入して整備していたことがきっかけでArgoCDを触ることになりました。
もともと軽くK8sに触れていたのでそこまでキャッチアップには詰まりませんでしたが、そんなに日本語ドキュメントが多くはない気がしたのでここで書きます。(ガチプロじゃないのでそんなに詳しく書けないかもしれませんが精進します)

そもそもArgoCDって何さ??

ArgoCDはKubernetes上のアプリケーションのCD(継続的デリバリー)を実現するためのツールです。
マスコットキャラクターがこちら↓↓なのですが、明らかにタコさんウインナーですね笑
スクリーンショット 2019-11-09 1.08.11.png
全体のアーキテクチャーは公式が出している以下の図を見ていただければと思います
スクリーンショット 2019-11-30 11.36.06.png
アプリケーションレイヤーのPRがmergeされるとCIによってビルドされ、 webhookされることでそのイメージがコンテナリポジトリに登録されます。

また、K8sのマニフェストファイル(アプリケーションをデプロイするための各種リソースの設定)をGitリポジトリにPushすると、 Argo CDはそれらを各Kubernetesクラスタに適用してくれます。

GitOps良いですね〜!!

ただ、ArgoCDの良さはまだあります。
ArgoCDは実行中のアプリケーションを継続的に監視し、現在のアプリケーションの状態を目的の状態(Gitリポジトリで指定されていると比較してくれます。そして、2者間の違いを視覚化し、アプリケーションの状態を目的のターゲット状態に自動的または手動で同期する機能を提供します。

何が言いたいかというと、ArgoCDの提供してくれるUI上で試しに
- podの数を増やしたり
- policy設定(アクセス権限)をいじったり
- その他色々
をしても、Gitリポジトリをsyncするだけで綺麗に元どおりにできます。環境をぶち壊して元にもで押せなくなった...ということがないので安心ですね。

(当たり前ですが、手動syncの場合です。自動syncをonにしているとUI上でyamlを書き換えた段階で差分が検出されてGitリポジトリの内容で書き換えられてしまいます)

それでは最後に実際にどうやってArgoCDの環境を構築するのかを見ていきます。

チュートリアルをminikubeでやってみた

環境
minikube: v1.1.1

まずはDockerを立ち上げて、minikubeを起動します。minikubeの導入・使い方は説明を省きます。
こちらを参考にして導入すれば躓く事はないと思います
cluster nameは設定せずに起動します。

minikube start

statusを確認して以下のようになっていれば起動完了です。
スクリーンショット 2019-11-30 12.39.13.png

起動できたら、argocd用のnamespaceを切って、設定用のmanifestをminikubeで用意したclusterにapplyします。

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

kubectl get pod -n argocdで状態が以下のようになっていることを確認してください。
スクリーンショット 2019-11-30 14.01.46.png

それでは次にArgoCDのUI環境を構築していきます。
まずはbrewでCLIをダウンロードします。

brew tap argoproj/tap
brew install argoproj/tap/argocd

次に、デフォルトでArgoCDは外部IPから接続できないようになっているので、ここではPort Forwardingしてローカルから接続できるようにします。
Port Forwardingなんぞや??って人はこの辺見ると良いと思います。

kubectl port-forward svc/argocd-server -n argocd 8080:443

これで8080番でローカルから接続できるようになりました。

次に、初期パスワードを変更するためにCLIにログインをします。
ArgoCDでは初期パスワードがArgo CD API serverのpod nameで設定されています。
そのままでも良いのですが、新しいパスワードに変更しましょう。

初期パスワードを取得します。(今回は自分の場合はargocd-server-77cb9df44-srp6sです)

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

初期パスワードを使ってログインします。Usernameはadminです。

argocd login localhost:8080

次のコマンドでパスワード再設定をします。

argocd account update-password

こんな感じになればOKです。
スクリーンショット 2019-11-30 14.08.58.png

最後に、UI画面からアプリケーションの構築をしていきます。
まずは http://localhost:8080 にアクセスしてください。
Usernameはadmin、Passwordは先ほど設定したものを使用してください。
スクリーンショット 2019-11-30 14.11.09.png

ログインできたら本題のApplication構築の前に、Gitリポジトリと接続しましょう。左側のメニューの歯車マークのところからRepositoriesにとんでください。

今回は公式が用意しているサンプルリポジトリを使用します。
Repository URLにhttps://github.com/argoproj/argocd-example-apps.gitを記入してください。optionalのところは空欄にしておきます。
スクリーンショット 2019-11-30 14.21.53.png

接続ができると以下のようになります。
スクリーンショット 2019-11-30 14.33.16.png

右側の縦書き三点リーダーボタンを押すとCreate applicationメニューが出てくると思うので、そこからアプリケーションを構築していきます。

設定項目は色々あります。yamlで書くこともできますが、初回設定はポチポチして設定して、生成されたyamlを保存しておくのが良いと思います。
スクリーンショット 2019-11-30 14.23.12.png

今回は
- Application name:sample
- Project:default
- SYNC POLICY:Manual
- Repository URL:自動入力されているはずです
- Revision:HEAD
- Path:kustomize-guestbook
- Cluster:https://kubernetes.default.svc
- Namespace:default
で設定します。(kustomizeの設定は省略します)

すると、Applicationが構築されます。
スクリーンショット 2019-11-30 14.24.00.png

SYNC POLICYをManualにしているのでOutOf Syncになってますね。
SYNCボタンを押して、同期します。
スクリーンショット 2019-11-30 14.26.29.png
少し待つとこのように同期されてStatusがHealthyになります。

この状態を維持するために、SYNC POLICYをAutomaticにしましょう。
APP DETAILSボタンから設定の変更ができます。
スクリーンショット 2019-11-30 14.42.42.png
ENABLE AUTO-SYNCボタンを押して差分を自動で検出して同期するようにします。
Prune ResourcesとSelf HealもENABLEにしておきましょう。
それぞれ、更新によっていらなくなったリソースの削除、何らかの理由でアプリケーションが落ちた時に自動で同期して再構築をしてくれます。

まとめ

ArgoCDの概要の紹介と初回構築の手順をさらってみました。
さらに詳しい機能の説明は公式ドキュメントから見れるほか、ArgoCD自体はGoで実装されたOSSなので(リポジトリ)コードベースで仕様を追うこともできます。
ぜひ使ってみてください!!

参考URL

・公式ドキュメント
https://argoproj.github.io/argo-cd/

・公式リポジトリ
https://github.com/argoproj/argo-cd/

・Argo CDによる継続的デリバリーのベストプラクティスとその実装(Cybozu Inside Out)
https://blog.cybozu.io/entry/2019/11/21/100000

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away