背景
Tanzuを業務で少し触っているのですが、Tanzu
はCluster API
を利用しているので、Tanzu
とCluster 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
出力
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
ワークロードクラスタの削除
kubectl delete cluster capi-quickstart
管理クラスタの削除
kind delete cluster
最後に
本記事ではCluster api
を試して、管理クラスタからワークロードクラスタを払い出すまでを実施してみた。次は、Cluster api
とGitOps
を組み合わせて、Cluster の管理をGitで行ってみたい。