This page looks best with JavaScript enabled

おうちKubernetesでたわむれる (3) ~ArgoCD導入編~

 ·  ☕ 4 min read  ·  ✍️ [Capr1]

おうちKubernetesでたわむれる (3) ~ArgoCD導入編~

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上では動きません.

argoproj/argocd - Docker Hub

なので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)です.

argocd01

サンプルサイトのデプロイ

試しに自分で作ったプロフィールサイトをデプロイしてみます.

まず左上のNEW APPをクリックし、以下の画像のように必要な項目を入力していきます.

argocd02
argocd03
argocd04
argocd05

そしてCREATEをクリックし、Applicationを作成します.

次に作成したApplicationを選択し、上記のSYNCをクリック、引き続きSYNCHRONIZEをクリックします.

argocd06
argocd07

するとデプロイが行われ、完了すると以下のようになります.

argocd08

そして右上の右から3番目のボタンをクリックし、外部IPアドレスを確認します.

argocd09

そのIPアドレス(192.168.0.222)にブラウザでアクセスします.

argocd10

最後に

Gitリポジトリと名前空間を指定するだけで簡単にデプロイできてめっちゃ便利だった.

Share on

Capr1/カプリ
WRITTEN BY
[Capr1]
Graduate Student / Department of Information Engineering