【GitOps番外編】Cluster APIを試す


背景

Tanzuを業務で少し触っているのですが、TanzuCluster APIを利用しているので、TanzuCluster APIへの理解を深めるため、本記事で軽く検証することにした。

環境

  • AWS EC2
    • Docker 20.10.13
    • Ubuntu 20.04.3
    • kind v0.12.0
    • clusterctl 1.1.3

手順

Cluster APIのドキュメントを参考に早速試してみる。

Kubectlをインストール

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
kubectl version --client

Kindをインストール

curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.12.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/

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

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の設定ファイルをもとに、Kindクラスタを作成する

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

管理クラスタを初期化する

今回はDockerを利用するので、下記のコマンドを実行する

clusterctl init --infrastructure docker

ワークロードクラスタを作成用のyamlファイルを作成する

clusterctl generate cluster capi-quickstart --flavor development \
  --kubernetes-version v1.23.3 \
  --control-plane-machine-count=3 \
  --worker-machine-count=3 \
> capi-quickstart.yaml

作成したyamlファイルをもとにワークロードクラスタを作成する

kubectl apply -f capi-quickstart.yaml

作成されたワークロードクラスタを確認する

capi-quickstartという名前のクラスタが作成されている

kind get clusters
capi-quickstart
kind

下記のコマンドでも確認可能。

kubectl get cluster
NAME              PHASE         AGE   VERSION
capi-quickstart   Provisioned   10m

ワークロードクラスタのkubeconfigを取得する

clusterctl get kubeconfig capi-quickstart > capi-quickstart.kubeconfig

取得したkubeconfigでpodの状態を確認する

 kubectl get po -A --kubeconfig capi-quickstart.kubeconfig
出力
NAMESPACE     NAME                                                          READY   STATUS    RESTARTS   AGE
kube-system   coredns-64897985d-f2xc5                                       0/1     Pending   0          2m53s
kube-system   coredns-64897985d-mr6pj                                       0/1     Pending   0          2m53s
kube-system   etcd-capi-quickstart-control-plane-tz29v                      1/1     Running   0          102s
kube-system   etcd-capi-quickstart-control-plane-v7zrq                      1/1     Running   0          2m59s
kube-system   kube-apiserver-capi-quickstart-control-plane-tz29v            1/1     Running   0          92s
kube-system   kube-apiserver-capi-quickstart-control-plane-v7zrq            1/1     Running   0          2m59s
kube-system   kube-controller-manager-capi-quickstart-control-plane-tz29v   1/1     Running   0          32s
kube-system   kube-controller-manager-capi-quickstart-control-plane-v7zrq   1/1     Running   0          2m59s
kube-system   kube-proxy-8pllk                                              1/1     Running   0          2m14s
kube-system   kube-proxy-9wzl8                                              1/1     Running   0          2m2s
kube-system   kube-proxy-dj5w7                                              1/1     Running   0          2m2s
kube-system   kube-proxy-kn5dt                                              1/1     Running   0          112s
kube-system   kube-proxy-mzbhk                                              1/1     Running   0          2m53s
kube-system   kube-scheduler-capi-quickstart-control-plane-tz29v            1/1     Running   0          102s
kube-system   kube-scheduler-capi-quickstart-control-plane-v7zrq            1/1     Running   0          3m

CLEAN UP

ワークロードクラスタの削除

kubectl delete cluster capi-quickstart

管理クラスタの削除

kind delete cluster

最後に

本記事ではCluster apiを試して、管理クラスタからワークロードクラスタを払い出すまでを実施してみた。次は、Cluster apiGitOpsを組み合わせて、Cluster の管理をGitで行ってみたい。