ArgoCDの初歩 GitHub上のyamlからアプリケーションをデプロイする

以下の記事でArgoCDをMicroK8sにインストールしました。今日はArgoCDの初歩とういことで、GitHubのyamlからアプリケーションをデプロイしてみたいと思います。

MicroK8sにArgoCDをインストールする

  • 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作成の時にレポジトリを選択できます。

MicroK8sにArgoCDをインストールする

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

GitHubのアイコン

https://github.com/logos

コメント

コメントは停止中です。