以下の記事でArgoCDをMicroK8sにインストールしました。今日はArgoCDの初歩とういことで、GitHubのyamlからアプリケーションをデプロイしてみたいと思います。
- yamlを作成する
- Deployment用yamlを作成する
- Service用yamlを作成する
- yamlをGitHubに登録する
- ArgoCDの設定を行う
- GitHubレポジトリをArgoCDに登録する
- ArgoCD Applicationを作成する
- ArgoCDとGitHubを同期する
yamlを作成する
ArgoCDが同期するyamlファイルを作成します。
今回用意するのは、アプリケーションデプロイ用のDeploymentと公開用のServiceです。
Deployment用yamlを作成する
アプリケーションをデプロイ・管理するためのyamlを作成します。
以下は、MicroK8sでアプリケーションを動かすでMicroK8s上のdocker registryに登録したhelloaイメージをレプリカ数1でデプロイするDeploymentです。helloaイメージは、httpリクエストを受け付けると”Hello A”を表示するgolangベースのコンテナアプリケーションイメージです。
apiVersion: apps/v1 kind: Deployment metadata: name: test labels: app: test spec: replicas: 1 selector: matchLabels: app: test template: metadata: labels: app: test spec: containers: - name: test image: localhost:32147/helloa:latest ports: - containerPort: 8080
Service用yamlを作成する
アプリケーションを公開するためのyamlを作成します。
以下は、test DeploymentのPodをポート32000をNodePortで公開するServiceのyamlです。
apiVersion: v1 kind: Service metadata: name: test labels: app: test service: test spec: ports: - port: 8080 nodePort: 32000 name: http selector: app: test type: NodePort
yamlをGitHubに登録する
上記で作成したyamlをargocdリポジトリのtestディレクトリに登録します。
$ tree argocd/ argocd/ ├── README.md └── test ├── test-deployment.yaml └── test-service.yaml $ git add -A $ git commit -m "First commit for ArgoCD test" $ git push
ArgoCDの設定を行う
GitHubレポジトリをArgoCDに登録する
以下の記事で紹介したレポジトリ登録手順を参考に、上記で作成したargocdレポジトリをArgoCDに登録します。認証情報の設定を行うもので、次のApplication作成の時にレポジトリを選択できます。
ArgoCD Applicationを作成する
GitHubと同期してMicroK8s上にアプリケーションをデプロイするApplicationを作成します。
ログイン後、Applicationが未作成だと以下の画面になるので「CREATE APPLICATION」をクリックします。

必要な項目を入力します。それぞれの項目は以下の通りのです。
- Application Name・・・ArgoCD内のApplication名。Application単位でGitHubと同期を行いデプロイされる。
- Project・・・ArgoCD内のProject名。ApplicationをProject単位で管理できる。
- SYNC POLICY・・・同期方法の設定。「Manual」か「Automation」が設定できる。
- SYNC OPTIONS・・・デプロイする時にマニフェストの中身を検証する。

- Repository URL・・・GitレポジトリのURL。ArgoCDに登録したURLが利用できる。
- Revision・・・Gitのブランチ。
- Path・・・レポジトリ内のパス。

- Cluster・・・デプロイ先のクラスター。登録したクラスターをデプロイ先に選択できる。デフォルトでは、ArgoCDがインストールされたクラスターが選択できる。
- Namespace・・・デプロイ先のnamespace。デプロイ先クラスターのnamespaceを選択できる

- TOOL・・・同期するマニフェストファイルの形式を選択できる。以下の場合は「Directory」を選択していて、YAML/JSON/Jsonnetの形式で同期する。詳細はこちら。
- DIRECTORY RECURSE・・・ディレクトリ内の全階層におけるマニフェストファイルを全て同期する。
- TOP-LEVEL ARGUMENTS・・・Jsonnetで扱われる、構成情報全体を関数として提供するもの。
- EXTERNAL VARIABLES・・・Jsonnetで扱われる、コンフィグまたはファイルのどこからでもアクセスできる外部変数。

以上の項目を入力して、「Create」ボタンをクリックすると、以下のようにApplicationが作成されます。

ArgoCDとGitHubを同期する
上記で作成したApplicationの「Sync」ボタンをクリックし、「SYNCHRONIZE」ボタンをクリックすると同期が始まります。
同期に成功すると、以下のようにグリーンカラーになり、「Healthy」ステータスになります。

MicroK8s上で確認すると、以下のようにDeploymentとServiceが作成されていることがわかります。
ubuntu@microk8s-vm:~$ microk8s.kubectl get deployment test NAME READY UP-TO-DATE AVAILABLE AGE test 1/1 1 1 31s ubuntu@microk8s-vm:~$ microk8s.kubectl get svc test NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE test NodePort 10.152.183.49 <none> 8080:32000/TCP 37s ubuntu@microk8s-vm:~$ curl localhost:32000 Hello A
以上です!応用していくとかなり使えそうなツールですね。
引用
Argoのアイコン
https://github.com/cncf/artwork/blob/master/projects/argo/icon/color/argo-icon-color.png
コメント
コメントは停止中です。