😸

ArgoCDをKubernetes(GKE)に導入する【CD・GitOps】

2022/11/15に公開約5,200字

内容

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

ログインしてみる

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が表示される

ログイン後の画面
ArgoCD

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

すると、以下のような画面が表示され、ArgoCDが自動でgithub repoのmanifestファイルをapplyし、Kubernetesクラスター上にdeploymentリソースとnginx Podが作成されました。

ArgoCD

念の為、手元でコマンドを叩いてみると、

$ 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

Discussion

ログインするとコメントできます