ArgoCDをKubernetes(GKE)に導入する【CD・GitOps】
内容
KubernetesクラスターにArgoCDを導入して、gitopsを実現する方法を紹介します。
対象読者
- GitOpsでKubernetesの自動デプロイを実施したい人
- Kubernetes勉強中の人
- ArgoCD推しの人(キャラクターかわいい)
準備
- github repo
- Kubernetes Clusterのmanifestファイルを配置
- GKE
- 今回はGCPを使って、Kubernetesクラスターを構築します。
- ArgoCD CLI
- ArgoCDのCLIをinstallしてください
github repo
ArgoCDで自動デプロイしたいマニフェストファイルを配置するgithub repositoryを作成します。
GKEクラスターの作成
Kubernetesが動作するGKEクラスターを作成します。
$ gcloud container clusters create-auto argo-demo-cluster --region=us-west1
Clusterにアクセスするためのcredentialsも取得します。
$ gcloud container clusters get-credentials argo-demo-cluster --region us-west1
ArgoCD CLI install
$ brew install argocd
Kubernetes Cluster にArgoCDをinstallする
$ kubectl create namespace argocd
$ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
正常にinstallされたことを確認するために、Pod一覧を表示します。
kubectl get pod -n argocd
NAME READY STATUS RESTARTS AGE
argocd-application-controller-0 1/1 Running 0 16h
argocd-applicationset-controller-84d6d6fb78-q9nqm 1/1 Running 0 16h
argocd-dex-server-6b969fcf6d-68jkv 1/1 Running 0 16h
argocd-notifications-controller-59788fb59-c874z 1/1 Running 0 16h
argocd-redis-6886856854-w2ccd 1/1 Running 0 16h
argocd-repo-server-6b7dc84d44-prfrl 1/1 Running 0 16h
argocd-server-85bcf9448-j78wn 1/1 Running 0 16h
installしたArgoCDにブラウザからアクセスしてみる
上記作業だけで、ArgoCDはKubernetesClusterで使用可能状態になっています。
以下のコマンドで、動作しているArgoCDをブラウザから確認できます。
$ kubectl port-forward argocd-server 11111:443 -n argocd
$ open http://localhost:11111
※証明書の設定がされていないため、この接続ではプライバシーが保護されません
と表示されますが、そのまま続行すると以下のようなかわいいマスコットが表示されます。
ログインしてみる
ArgoCDの初期ユーザーのログイン情報は以下のようになっています。
- id
- admin
- password
-
argocd-initial-admin-secret
secretに格納されているpasswordの値
-
passwordの値を確認する
$ kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
# passwordが表示される
ログイン後の画面
Kubernetes ClusterにGitRepositoryを追加する。
ArgoCDのインストールが完了したので、以下を行います。
- github repositoryにマニフェストファイルを追加
- GitRepositoryリソースでそのリポジトリをKubernetesに登録
github repositoryにmanifestsファイルを追加
まずは、準備で作成したgithub repositoryにArgoCD経由でKubernetesクラスターに反映したいmanifestsファイルを追加しましょう。
$ git clone https://github.com/rara-tan/argo-demo
$ cd argo-demo
$ mkdir manifests
$ touch kustomization.yaml
$ touch deployment.yaml
kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ./deployment.yaml
deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo
spec:
replicas: 1
selector:
matchLabels:
app: demo
template:
metadata:
labels:
app: demo
spec:
containers:
- name: demo
image: nginx
ports:
- containerPort: 80
構成
$ tree
.
└── manifests
├── deployment.yaml
└── kustomization.yaml
git push
$ git add -A && git commit -m "Add manifest files"
$ git push
これで、githubレポジトリに nginx
イメージを使用したコンテナが1つKubernetesクラスターにデプロイされるmanifestを配置できました。
GitRepositoryをKubernetesにapplyする
最後にgithubレポジトリのmanifestsファイルを監視するGitRepositoryをKubernetesに登録すれば、完了です。
UIから登録する
ArgoCDの管理画面から、NEW APP
ボタンをクリックし、以下のように設定し、Create
をクリックします。
すると、以下のような画面が表示され、ArgoCDが自動でgithub repoのmanifestファイルをapplyし、Kubernetesクラスター上にdeploymentリソースとnginx Podが作成されました。
念の為、手元でコマンドを叩いてみると、
$ kubectl get pod -n default
NAME READY STATUS RESTARTS AGE
demo-74c44f4fbc-m9x8q 1/1 Running 0 9m9s
ArgoCDの表示通りに、Podが作成されています!
manifestファイルで登録する
さきほどは、UIからGitRepositoryを登録しましたが、manifestファイルから登録も可能です。
application.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: argo-demo
namespace: default
spec:
project: argo-demo
source:
repoURL: https://github.com/rara-tan/argo-demo.git
targetRevision: master
path: manifests
destination:
server: https://kubernetes.default.svc
namespace: default
syncPolicy:
syncOptions:
- CreateNamespace=true
automated:
selfHeal: true
prune: true
上記yamlファイルをapplyすると、先ほどUIから作成したApplicationと同じものが作成されます。
完成!
KubernetesクラスターにインストールしたArgoCDからgithub repoにpushしたマニフェストファイルを自動でapplyするCDパイプラインが完成しました!
管理画面を独自ドメインで接続できるようにするためには
今回の記事ではArgoCDの管理画面に対して、ローカルPCからPort Forwardすることで接続していました。
しかし、複数人のチーム開発をする場合、ドメインを割り当てて、インターネット上で確認することが普通です。
そのため、ArgoCDの管理画面に独自ドメインを割り当てて、チーム内のメンバーがどこからでもアクセスできるようにするためにはIngress等の設定が必要です。
- argocd-serverをselectorにしたserviceを作成する
- そのserviceに向けたIngressを作成する
上記2つを追加で作成するだけで、独自ドメインでArgoCD管理画面にアクセス可能です。
Clean up
Kubernetesクラスターは放置しているとお金がかかってしまうので、消しておきましょう。(github repoも)
$ gcloud container clusters delete argo-demo-cluster --region us-west1
note
勉強法やキャリア構築法など、エンジニアに役立つ記事をnoteで配信しています。
Discussion