こんにちは、ACS事業部の谷合です。
以下の記事の続きとなります。 techblog.ap-com.co.jp
弊社ではPlatform Engineeringに注目しており、その延長線上で私もKubernetesクラスタ(以降K8s)を宣言的に自動払い出しできるツールの調査を行っています。
※ここでいう宣言的
とは、yaml形式などのマニフェストでクラスタ定義を記載し、管理を行うことを指します。
自動払い出しが可能なツールとして、SIG Cluster LifecycleのsubprojectであるCluster APIをご紹介します。なお、Cluster APIの詳細な説明については、前回の記事のCluster APIとはやCluster APIコンセプトの章をご確認ください。
前回は、あらかじめ作成済のAzure Kubernetes Sevice(以降AKS)に、バニラなK8sを立ててみましたが、今回はAKS上にさらにAKSを立ててみます。
AKS払い出し
今回は以下のCluster API Provider AzureのAKSのページの手順に沿って作業を行います。 capz.sigs.k8s.io
前提
- 以下のツールがインストールまたは作成されていること
- clusterctl
- AKS
- サービスプリンシパルが作成されていること
※サービスプリンシパル作成後に出力される結果から、appIdとpasswordを控えておいてください。
環境変数設定
export CLUSTER_NAME="aks-capi-cluster" export WORKER_MACHINE_COUNT=1 export KUBERNETES_VERSION="v1.26.3" export AZURE_LOCATION="japaneast" export AZURE_RESOURCE_GROUP="rg-capi" export AZURE_SUBSCRIPTION_ID=$(az account show -o tsv --query id) export AZURE_TENANT_ID=$(az account show -o tsv --query tenantId) export AZURE_CLIENT_SECRET="<password>" export AZURE_CLIENT_ID="<appId>" export AZURE_NODE_MACHINE_TYPE="Standard_D2s_v3" export AZURE_CLUSTER_IDENTITY_SECRET_NAME="cluster-identity-secret" export AZURE_CLUSTER_IDENTITY_SECRET_NAMESPACE="default" export CLUSTER_IDENTITY_NAME="cluster-identity" # Azureのノードプールを使うため必須 export EXP_MACHINE_POOL=true
シークレット作成
上記で設定した環境変数を使用し、シークレットを作成します。
kubectl create secret generic "${AZURE_CLUSTER_IDENTITY_SECRET_NAME}" \ --from-literal=clientSecret="${AZURE_CLIENT_SECRET}" \ --namespace "${AZURE_CLUSTER_IDENTITY_SECRET_NAMESPACE}"
初期化
clusterctl init --infrastructure azure
AKSクラスタyaml生成
以下のコマンドを実行することで、先に設定した環境変数に従ってマニフェストを作成してくれます。
clusterctl generate cluster ${CLUSTER_NAME} \ --kubernetes-version ${KUBERNETES_VERSION} \ --flavor aks > aks.yaml
yamlファイルは以下のようになります。
クラスタyaml適用
上記で作成したyamlファイルを適用することで、AKS上にAKSが作成されます。
kubectl apply -f aks.yaml
cluster.cluster.x-k8s.io/aks-capi-cluster created azuremanagedcontrolplane.infrastructure.cluster.x-k8s.io/aks-capi-cluster created azuremanagedcluster.infrastructure.cluster.x-k8s.io/aks-capi-cluster created machinepool.cluster.x-k8s.io/aks-capi-cluster-pool0 created azuremanagedmachinepool.infrastructure.cluster.x-k8s.io/aks-capi-cluster-pool0 created machinepool.cluster.x-k8s.io/aks-capi-cluster-pool1 created azuremanagedmachinepool.infrastructure.cluster.x-k8s.io/aks-capi-cluster-pool1 created azureclusteridentity.infrastructure.cluster.x-k8s.io/cluster-identity created
クラスタ確認
プロビジョニングには数分かかるため、数分後に以下のコマンドでクラスタが確認可能となります。 また、Azure上のリソースグループを確認することでもAKSが新たに払い出されていることが確認できるはずです。
clusterctl describe cluster aks-capi-cluster
NAME READY SEVERITY REASON SINCE MESSAGE Cluster/aks-capi-cluster True 2m54s ├─ClusterInfrastructure - AzureManagedCluster/aks-capi-cluster ├─ControlPlane - AzureManagedControlPlane/aks-capi-cluster True 2m54s └─Workers ├─MachinePool/aks-capi-cluster-pool0 True 2m43s └─MachinePool/aks-capi-cluster-pool1 True 2m43s New clusterctl version available: v1.4.1 -> v1.4.2 https://github.com/kubernetes-sigs/cluster-api/releases/tag/v1.4.2
AKS接続
まず以下コマンドでconfigを生成します。
az aks get-credentials --resource-group ${AZURE_RESOURCE_GROUP} --name ${CLUSTER_NAME} kubectl config use-context <context name>
その後、以下にコマンドでnodeリソースが見えるはずです。
kubectl get node -owide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME aks-pool0-23829552-vmss000000 Ready agent 15m v1.26.3 10.240.0.4 <none> Ubuntu 22.04.2 LTS 5.15.0-1036-azure containerd://1.6.18+azure-1 aks-pool1-23829552-vmss000000 Ready agent 15m v1.26.3 10.240.0.33 <none> Ubuntu 22.04.2 LTS 5.15.0-1036-azure containerd://1.6.18+azure-1
また、Podを確認すると、以下のような結果が返るかと思います。
kubectl get po -A -owide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES kube-system azure-ip-masq-agent-ckn2t 1/1 Running 0 14m 10.240.0.33 aks-pool1-23829552-vmss000000 <none> <none> kube-system azure-ip-masq-agent-m88wl 1/1 Running 0 14m 10.240.0.4 aks-pool0-23829552-vmss000000 <none> <none> kube-system cloud-node-manager-hblzp 1/1 Running 0 14m 10.240.0.4 aks-pool0-23829552-vmss000000 <none> <none> kube-system cloud-node-manager-mgf44 1/1 Running 0 14m 10.240.0.33 aks-pool1-23829552-vmss000000 <none> <none> kube-system coredns-6b9cb549f4-88c49 1/1 Running 0 15m 10.240.0.46 aks-pool1-23829552-vmss000000 <none> <none> kube-system coredns-6b9cb549f4-npb6m 1/1 Running 0 14m 10.240.0.38 aks-pool1-23829552-vmss000000 <none> <none> kube-system coredns-autoscaler-7ffb46d56f-t5zqk 1/1 Running 0 15m 10.240.0.44 aks-pool1-23829552-vmss000000 <none> <none> kube-system csi-azuredisk-node-545m8 3/3 Running 0 14m 10.240.0.4 aks-pool0-23829552-vmss000000 <none> <none> kube-system csi-azuredisk-node-6s6wj 3/3 Running 0 14m 10.240.0.33 aks-pool1-23829552-vmss000000 <none> <none> kube-system csi-azurefile-node-pdjcv 3/3 Running 0 14m 10.240.0.4 aks-pool0-23829552-vmss000000 <none> <none> kube-system csi-azurefile-node-wdzpp 3/3 Running 0 14m 10.240.0.33 aks-pool1-23829552-vmss000000 <none> <none> kube-system konnectivity-agent-67597fcb-hl4x8 1/1 Running 0 14m 10.240.0.37 aks-pool1-23829552-vmss000000 <none> <none> kube-system konnectivity-agent-67597fcb-m7t6h 1/1 Running 0 14m 10.240.0.36 aks-pool1-23829552-vmss000000 <none> <none> kube-system kube-proxy-vbhvh 1/1 Running 0 14m 10.240.0.33 aks-pool1-23829552-vmss000000 <none> <none> kube-system kube-proxy-z5jc7 1/1 Running 0 14m 10.240.0.4 aks-pool0-23829552-vmss000000 <none> <none> kube-system metrics-server-59996b9895-8cvdl 2/2 Running 0 14m 10.240.0.53 aks-pool1-23829552-vmss000000 <none> <none> kube-system metrics-server-59996b9895-x7lh4 2/2 Running 0 14m 10.240.0.34 aks-pool1-23829552-vmss000000 <none> <none>
Azure Service Operatorとの比較
前回の記事にも書きましたが、Cluster APIを使わずともAzure Service Operator(以降ASO)でもAKS on AKSは実現可能です。
また設定可能項目もほぼ差異はありません。前回の記事に記載の通り、ASOの方がAKSの更新に素早く追従しているため、新機能を試したいなどの要望があれば優位でしょう。
ただ、現在ASOとCluster API Provider Azureとの統合も進んできています。
近い将来Cluster API Provider AzureにPluginとして実装されるかもしれませんね。
楽しみにウォッチしていきたいと思います。
さいごに
いかがでしたでしょうか?
前回と引き続き、Cluster APIでのK8sの払い出しをしてみました。
宣言的にクラスタの管理ができることを考えると非常に便利なツールだと思います。
次回からはProviderの実装をしてみたいと思いますので、お楽しみに!
ACS事業部のご紹介
私達ACS事業部はAzure・AKSなどのクラウドネイティブ技術を活用した内製化のご支援をしております。
www.ap-com.co.jp
また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。
www.ap-com.co.jp