ACS事業部の谷合です。
ちょうどCluster APIを勉強したいと思っていた矢先に、セッションがありましたのでご紹介します。
あくまでも、Cluster APIとは何ぞやといった記事となります。
最後にはAzureのProviderもご紹介しますので、是非最後までお付き合いください。
Cluster APIとは
Cluster APIとはKubernetes styleのAPIで、自動でクラスタのライフサイクルを管理します。
仮想マシン、LoadBalancer、Network構成、Kubernetesのブートストラップを構成します。
これらをテンプレート化し、宣言的に管理することができます。
cluster-api.sigs.k8s.io
Concepts
以下Cluster APIで宣言的にクラスタを作成した場合、全体のアーキテクチャです。
Providerは、次から解説していきます。
cluster-api.sigs.k8s.io
Lifecycle Hook Runtime Extensions
ライフサイクル中の各フェーズにPluginを実装することができる機能のようです。
しかし、誤った実装をすると起動しないなど、深刻な影響を与えるので、上級者向けとされているとのことでした。
cluster-api.sigs.k8s.io
Cluster API Provider
Provider Type
Infrastracture
クラスタノードの実行に必要な前提条件をすべて提供します。
例えば、VM、ネットワーク、ロードバランサー、ファイアウォールルールなどです。
主要なクラウドサービス向けのプロバイダーが公開されています。
https://cluster-api.sigs.k8s.io/reference/providers.html#infrastructure
Bootstrap
ノードのブートストラップに使用されるブートストラップデータを生成します。
kubeadmなどを使ったBootstrap手段が提供されます。
https://cluster-api.sigs.k8s.io/reference/providers.html#bootstrap
Control plane
Control planeを作成します。 以下のリソースをインスタンス化して作成するとのことです。
- etcd
- Kubernetes APIサーバー
- Kubernetes コントローラーマネージャー
- Kubernetes スケジューラ
- クラウドコントローラーマネージャー
- クラスタDNS(CoreDNSなど)
- サービスプロキシ(例:kube-proxy)
https://cluster-api.sigs.k8s.io/reference/providers.html#control-plane
Cluster API Provider Azure
AzureにもCluster API Providerが提供されています。
capz.sigs.k8s.io
以下のようにCRを定義し、適用することでControl Planeが作成されます。
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 kind: AzureCluster metadata: name: my-private-cluster namespace: default spec: location: eastus networkSpec: apiServerLB: type: Internal controlPlaneOutboundLB: frontendIPsCount: 1
クラスタに必要な定義を記載すると以下のようになります。
これでAKSができるそうです。
apiVersion: cluster.x-k8s.io/v1beta1 kind: Cluster metadata: name: my-cluster spec: clusterNetwork: services: cidrBlocks: - 192.168.0.0/16 controlPlaneRef: apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 kind: AzureManagedControlPlane name: my-cluster-control-plane infrastructureRef: apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 kind: AzureManagedCluster name: my-cluster --- apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 kind: AzureManagedControlPlane metadata: name: my-cluster-control-plane spec: location: southcentralus resourceGroupName: foo-bar sshPublicKey: ${AZURE_SSH_PUBLIC_KEY_B64:=""} subscriptionID: 00000000-0000-0000-0000-000000000000 # fake uuid version: v1.21.2 networkPolicy: azure # or calico networkPlugin: azure # or kubenet sku: tier: Free # or Paid addonProfiles: - name: azureKeyvaultSecretsProvider enabled: true - name: azurepolicy enabled: true --- apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 kind: AzureManagedCluster metadata: name: my-cluster --- apiVersion: cluster.x-k8s.io/v1beta1 kind: MachinePool metadata: name: agentpool0 spec: clusterName: my-cluster replicas: 2 template: spec: clusterName: my-cluster infrastructureRef: apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 kind: AzureManagedMachinePool name: agentpool0 namespace: default version: v1.21.2 --- apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 kind: AzureManagedMachinePool metadata: name: agentpool0 spec: mode: System osDiskSizeGB: 30 sku: Standard_D2s_v3 --- apiVersion: cluster.x-k8s.io/v1beta1 kind: MachinePool metadata: name: agentpool1 spec: clusterName: my-cluster replicas: 2 template: spec: clusterName: my-cluster infrastructureRef: apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 kind: AzureManagedMachinePool name: agentpool1 namespace: default version: v1.21.2 --- apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 kind: AzureManagedMachinePool metadata: name: agentpool1 spec: mode: User osDiskSizeGB: 40 sku: Standard_D2s_v4
Providerの実装
Providerの実体は、Operatorです。
ハードルは高いですが、kubebuilderを用いてOperatorを実装するだけで、Providerができちゃいます。
cluster-api.sigs.k8s.io
いやー、yaml適用で、Clusterが作成できちゃうのは面白いですよね。
Providerの組み合わせによっては様々な構成のクラスタが作れそうで、非常に楽しいセッションでした。
Providerの実装方法も分かったので、今度試してみよう。
ACS事業部のご紹介
私達ACS事業部はAzure・AKSなどのクラウドネイティブ技術を活用した内製化のご支援をしております。
www.ap-com.co.jp
また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。
www.ap-com.co.jp