0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【GitOps】ArgoCDとK8s Cluster APIでKubernetesクラスタをGitOpsする(ClusterOps)

Last updated at Posted at 2022-03-25

はじめに

  • Cluster APIなどのK8sクラスタ管理ツールとGitOpsを組み合わせることをClusterOpsと呼んでいる記事がある。本記事でもClusterOpsと呼び、実機で検証してみることとする。

環境

  • AWS EC2
    • Docker 20.10.13
    • Ubuntu 20.04.3
    • kind v0.12.0
    • (こちらの事前インストールは特に必要なし)clusterctl 1.1.3
    • (必要に応じて)Nginx 1.18.0
    • (必要に応じて)Helm v3.8.1

前提

  • 上記の環境が用意できていること。(バージョンに関しては各自で適当なものを選択する。)

管理クラスタの作成

  • 管理クラスタの設定ファイルを作成する
cat > kind-cluster-with-extramounts.yaml <<EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  extraMounts:
    - hostPath: /var/run/docker.sock
      containerPath: /var/run/docker.sock
EOF
  • 上記の設定ファイルをもとに、管理クラスタを作成する
kind create cluster --config kind-cluster-with-extramounts.yaml

clusterctlのインストール

curl -L https://github.com/kubernetes-sigs/cluster-api/releases/download/v1.1.3/clusterctl-linux-amd64 -o clusterctl
chmod +x ./clusterctl
sudo mv ./clusterctl /usr/local/bin/clusterctl
clusterctl version

ArgoCDのインストール

ArgoCDドキュメントに従い、ArgoCDをインストールする。

(参考) Argo CDインストール手順
  • Argo CDのインストール
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
``` 

- Argo CDのCLIのインストール

```bash
sudo curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
sudo chmod +x /usr/local/bin/argocd
  • Argo CDのUIに外部からアクセスする。
kubectl port-forward svc/argocd-server -n argocd 8080:443 --address=<EC2のプライベートIPアドレス>
  • Nginxをインストールして、外部(リモート)からArgo CDのWeb UIにアクセスできるようにする。
sudo apt update
sudo apt install nginx
  • /etc/nginx/nginx.conf に下記の内容を記載する。listenにはリモートサーバのIPアドレスを、proxy_passにはKindのコンテナのIPアドレスを記載する
nginx.conf
stream {
  server {
      listen 172.31.24.235;
      #TCP traffic will be forwarded to the specified server
      proxy_pass 192.168.49.2;
  }
}

Helmのインストール

(参考) Helmインストール手順
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

管理クラスタの初期化

  • Docker環境でCluster APIを利用できるように、初期化でDockerのオプションを指定する
clusterctl init --infrastructure docker
  • 下記のようなログが末尾に出力される
clusterctl generate cluster [name] --kubernetes-version [version] | kubectl apply -f -

ワークロードクラスタの作成

  • 上記のログを参考にして、ワークロードクラスタを作成する。
clusterctl generate cluster capi-quickstart --flavor development \
  --kubernetes-version v1.23.3 \
  --control-plane-machine-count=3 \
  --worker-machine-count=3 \
  > capi-quickstart.yaml

kubectl apply -f capi-quickstart.yaml
  • この時点で二つのkindクラスタを確認できる
$ kind get clusters
capi-quickstart
kind
  • Cluster APIの動作確認ができたので、ワークロードクラスタを削除する
kubectl delete cluster capi-quickstart

ClusterOpsを実装する

  • 先ほどまでで、ArgoCDCluster APIの動作が確認できたので、次にClusterOpsを実装する。

  • ArgoCDの設定ファイルを作成する

argocd-application-capi.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: cluster-api
  namespace: argocd
spec:
  destination:
    namespace: 'default'
    server: https://kubernetes.default.svc
  project: default
  source:
    helm:
      valueFiles:
      - values.yaml
    path: charts/capi-docker
    repoURL: https://github.com/rinakamura/clusterops_demo
    targetRevision: HEAD
  syncPolicy: {}
  • 上記の設定ファイルをapplyする。
kubectl apply -f argocd-application-capi.yaml
  • Argo のUIが変化して、先程のアプリケーションが表示される

argocd_project.png

  • GitHubと同期する。GitHubにはHelmの設定ファイルを配置する。

  • この状態でArgo UIからSync APPSボタンを押すと、クラスタが作成される。
    argo_cd_sync.png

  • CLI上でもクラスタが作成されていることが確認できる。

$ kind get clusters
capi-quickstart
kind

ワークロードクラスタのkubeconfigを取得し、Podが動作しているか確認する。

  • kubeconfigを取得する
clusterctl get kubeconfig capi-quickstart > capi-quickstart.kubeconfig
  • Podが動作しているか確認。
$ kubectl --kubeconfig capi-quickstart.kubeconfig get po -A
(参考)出力
kube-system   etcd-capi-quickstart-control-plane-7vqrr                      1/1     Running   0             16m
kube-system   etcd-capi-quickstart-control-plane-tc4tw                      1/1     Running   0             17m
kube-system   kube-apiserver-capi-quickstart-control-plane-7vqrr            1/1     Running   1 (16m ago)   16m
kube-system   kube-apiserver-capi-quickstart-control-plane-tc4tw            1/1     Running   0             17m
kube-system   kube-controller-manager-capi-quickstart-control-plane-7vqrr   1/1     Running   0             14m
kube-system   kube-controller-manager-capi-quickstart-control-plane-tc4tw   1/1     Running   0             17m
kube-system   kube-proxy-47dt4                                              1/1     Running   0             17m
kube-system   kube-proxy-5j6f4                                              1/1     Running   0             16m
kube-system   kube-proxy-bn26b                                              1/1     Running   0             16m
kube-system   kube-proxy-sczlt                                              1/1     Running   0             16m
kube-system   kube-proxy-z5rfv                                              1/1     Running   0             16m
kube-system   kube-scheduler-capi-quickstart-control-plane-7vqrr            1/1     Running   0             16m
kube-system   kube-scheduler-capi-quickstart-control-plane-tc4tw            1/1     Running   0             17m

正常に動作しているようだ。

最後に

本記事ではCluster APIArgo CDを用いて、K8sクラスタをGitOps的に管理する手法を実践しました。何かコメント等あればコメント欄にご記入ください。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?