kind + Kustomization + Argo CDのローカル環境を作成する
はじめに
kubernetesを使用するにあたって色々なツールを学ぶ必要があると思っています
今回はCD toolとして名前の挙がるArgo CDを触ってみようと思います
対象
- kubernetesを触ってみたいが何をしていいのかわからない人
- Argo CDを初めて触る人
目標
- Getting Startedにあるguest bookをhttp://localhost:8000で表示できるようにする
- argo cliを使わずyamlで宣言的に定義する
前提
- dockerをPCにインストールしている
- kind, kustomizeをローカルで使用できる
前準備
kindでclusterを作成する
$ kind create cluster --name argocd Creating cluster "argocd" ... ✓ Ensuring node image (kindest/node:v1.21.1) 🖼 ✓ Preparing nodes 📦 ✓ Writing configuration 📜 ✓ Starting control-plane 🕹️ ✓ Installing CNI 🔌 ✓ Installing StorageClass 💾 Set kubectl context to "kind-argocd" You can now use your cluster with: kubectl cluster-info --context kind-argocd Have a nice day! 👋
contextを確認する
※ alias k=kubectl
としてエイリアスを付けています
$ k config get-contexts CURRENT NAME CLUSTER AUTHINFO NAMESPACE * kind-argocd kind-argocd kind-argocd
ディレクトリを作成する
今回は以下のようにディレクトリを作成します
$ tree . └── manifests ├── apps └── argocd ├── base └── overlays ├── development │ └── apps ├── production └── staging
トップのディレクトリからmanifests
を作成したのは、以下のようにIaCで定義したリソースも同一リポジトリで管理できるように考慮したためです
. ├── cdk ├── manifests └── terraform
ちなみに今回は使用しませんがmanifests/apps
は各マイクロサービスのリソースを定義する場所を想定しています
例
. └── manifests └── apps └── hoge-api └── deployment.yaml
Argo CDをインストール
Getting Startedではコマンドを入力するようにしていますが、今回はyamlの定義を書いてapplyします
namespaceの追加
manifests/argocd/base/namespace.yaml
apiVersion: v1 kind: Namespace metadata: creationTimestamp: null name: argocd spec: {} status: {}
kustomization yamlの追加
manifests/argocd/base/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namespace: argocd resources: - ./namespace.yaml patchesStrategicMerge:
manifests/argocd/overlays/development/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namespace: argocd resources: - ../../base/namespace.yaml - github.com/argoproj/argo-cd/manifests/cluster-install?ref=v2.0.5 patchesStrategicMerge:
ディレクトリ確認
現在のディレクトリとファイルは以下のようになっているはずです
. └── manifests ├── apps └── argocd ├── base │ ├── kustomization.yaml │ └── namespace.yaml └── overlays ├── development │ ├── apps │ └── kustomization.yaml ├── production └── staging
applyを実行してArgo CDをインストールする
$ kustomize build manifests/argocd/overlays/development/ | k apply -f -
リソースの確認
$ k get all -n argocd
Argo CDにログインする
ブラウザでアクセスする
port forwardingでブラウザからアクセスできるようにします
k port-forward svc/argocd-server -n argocd 8080:443
ブラウザから http://localhost:8080 にアクセスしてみましょう
パスワードを取得する
$ k -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
以下の情報でログインする
Username: admin
Password: <先ほど取得したパスワード>
guest bookのAppを作成する
Creating Apps Via UIでもAppを作成することができますが、ここもyamlで定義を書いてapplyしようと思います
yamlの定義
しかし、namespaceがguestbookになっているので、今回はnamespaceをdefaultに変更します
manifests/argocd/overlays/development/apps/guestbook.yaml
apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: guestbook namespace: argocd spec: project: default source: repoURL: https://github.com/argoproj/argocd-example-apps.git targetRevision: HEAD path: guestbook destination: server: https://kubernetes.default.svc namespace: default # ←ここを変更する
yamlをapplyする
$ k apply -f manifests/argocd/overlays/development/apps/guestbook.yaml
syncボタンを押すとSync OK
になります
リソースの確認
$ k get all NAME READY STATUS RESTARTS AGE pod/guestbook-ui-85985d774c-sblqh 1/1 Running 0 4m59s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/guestbook-ui ClusterIP 10.96.24.143 <none> 80/TCP 5m service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d2h NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/guestbook-ui 1/1 1 1 4m59s NAME DESIRED CURRENT READY AGE replicaset.apps/guestbook-ui-85985d774c 1 1 1 4m59s
ブラウザでguest bookを表示する
$ k get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE guestbook-ui ClusterIP 10.96.24.143 <none> 80/TCP 9m58s $ k port-forward svc/guestbook-ui 8000:80
http://localhost:8000 にアクセスするとguestbookが表示されます
最後に
今回使用したファイルはここにあります
参考
Amazon EKSでのArgoCDを使ったGitOps CD – PSYENCE:MEDIA
Declarative Setup - Argo CD - Declarative GitOps CD for Kubernetes