おうちKubernetesでたわむれる (3) ~ArgoCD導入編~
ArgoCDとは
https://argoproj.github.io/argo-cd/
Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes.
Argo CD follows the GitOps pattern of using Git repositories as the source of truth for defining the desired application state. Kubernetes manifests can be specified in several ways
とりあえず、直訳すると
Argo CDは、Kubernetesのための宣言的なGitOps継続的デリバリーツールです.
Argo CDは、望ましいアプリケーションの状態を定義するための真実のソースとしてGitリポジトリを使用するというGitOpsのパターンに従います.
うーん…よくわからない…
そもそもGitOpsとは
GitOpsはインフラ管理の次の主流になるのか | GitLab.JP
GitOpsは、バージョン管理、コラボレーション、コンプライアンス、CI/CDなど、アプリケーション開発で使われているDevOpsのベストプラクティスを、インフラの自動化に適用した運用フレームワークです.
うーん、まだよくわからない
そもそもCI/CDとは
以下のスライドが参考になります.
忙しい人のためのGitOps入門
Kuberneteの運用を支えるGitOps
これらの資料曰く、CI/CDとは
- CI:自動テスト実行&ビルドしたものを Dockerimage などとしてアップロード
- CD:自動的なアプリのデプロイ
というものです.これら2つをまとめてCIと呼ぶパターンもあるらしいですね.
で、GitOps とは、全てのリソースの変更や運用に対して、コマンドライン(kubectlなど)を用いずにgit経由から行うことでコードとして履歴管理しようという思想のことらしいです.
全てのリソースに関するものをGitで管理しようとすることで、属人化の防止や、不具合が発生してもgit revertなどでロールバックができるなど、色々なメリットがあるらしいですね.
で、ArgoCDとは
Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes.
Argo CD follows the GitOps pattern of using Git repositories as the source of truth for defining the desired application state. Kubernetes manifests can be specified in several ways
今までのことを踏まえてまとめると、ArgoCDとはGitOpsによる継続的なデプロイメントを実現するためのKubernetes向けのツールであるということですね.
ArgoCD導入
では早速おうちKubernetesにArgoCDを導入していきます.
manifestファイルのダウンロード
以下のコマンドを実行し、ArgoCDをインストールするためのmanifestファイルをダウンロードします.
curl -O https://raw.githubusercontent.com/argoproj/argo-cd/v1.8.2/manifests/install.yaml
manifestファイルの編集
しかしこのままkubectl applyをしても動きません.
というのも、公式が出しているコンテナイメージ↓は現状ARMアーキテクチャ(arm64 , arm/v7 etc…)に対応しておらず、このままではおうちKubernetes上では動きません.
なのでmanifestファイルで使用されているイメージを有志の方が作ってくれたARMアーキテクチャに対応したイメージ↓に変更します.
alinbalutoiu/argocd - Docker Hub
nanoエディタなどを用いて、manifestファイル内のargoproj/argocd:v1.8.2
の部分を全てalinbalutoiu/argocd:v1.8.2
に変更します.
・・・
- image: argoproj/argocd:v1.8.
+ image: alinbalutoiu/argocd:v1.8.2
imagePullPolicy: Always
・・・
デプロイ
以下のコマンドを実行し、名前空間を作成 & ArgoCDのデプロイを行います.
$ kubectl create namespace argocd
$ kubectl apply -n argocd -f install.yaml
以下のように全て起動するまで待ちましょう.
$ kubectl get pods -n argocd
NAME READY STATUS RESTARTS AGE
pod/argocd-application-controller-0 1/1 Running 0 18h
pod/argocd-dex-server-6f77885dd7-lkpfx 1/1 Running 0 18h
pod/argocd-redis-6fb68d9df5-nbq6d 1/1 Running 0 18h
pod/argocd-repo-server-74b5ffb4f4-wgp7j 1/1 Running 0 18h
pod/argocd-server-74c5df599-t7fhd 1/1 Running 2 18h
これで全てのPodが受付状態になっていますが、このままでは外からアクセスできないので、以下のコマンドを実行してできるようにします.
$ kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
service/argocd-server patched
$ kubectl get svc -n argocd
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/argocd-dex-server ClusterIP 10.106.15.55 <none> 5556/TCP,5557/TCP,5558/TCP 18h
service/argocd-metrics ClusterIP 10.97.88.236 <none> 8082/TCP 18h
service/argocd-redis ClusterIP 10.104.229.97 <none> 6379/TCP 18h
service/argocd-repo-server ClusterIP 10.103.26.210 <none> 8081/TCP,8084/TCP 18h
service/argocd-server LoadBalancer 10.105.159.40 192.168.0.221 80:30930/TCP,443:31529/TCP 18h
service/argocd-server-metrics ClusterIP 10.103.127.247 <none> 8083/TCP 18h
192.168.0.221にアクセスすると、以下のようにページが見れます.
ユーザー名はadminで、パスワードはargocd-serverのPod名(今回の例だとargocd-server-74c5df599-t7fhd
)です.
サンプルサイトのデプロイ
試しに自分で作ったプロフィールサイトをデプロイしてみます.
まず左上のNEW APP
をクリックし、以下の画像のように必要な項目を入力していきます.
そしてCREATE
をクリックし、Applicationを作成します.
次に作成したApplicationを選択し、上記のSYNC
をクリック、引き続きSYNCHRONIZE
をクリックします.
するとデプロイが行われ、完了すると以下のようになります.
そして右上の右から3番目のボタンをクリックし、外部IPアドレスを確認します.
そのIPアドレス(192.168.0.222
)にブラウザでアクセスします.
最後に
Gitリポジトリと名前空間を指定するだけで簡単にデプロイできてめっちゃ便利だった.