Provision workload Cluster in IBM Cloud VPC
Now that we have a management cluster ready, you can create your workload cluster by following the steps below.
Note:
- The cluster will be deployed with cloud controller manager
- The template uses the experimental feature gate clusterresourceset which will create the necessary config map, secret and roles to run the cloud controller manager. Set
EXP_CLUSTER_RESOURCE_SET
to true.- As a prerequisite, set the
provider-id-fmt
flag tov2
viaPROVIDER_ID_FORMAT
environment variable.- To deploy a cluster using ClusterClass, refer here. In additional to the above flags, set
CLUSTER_TOPOLOGY
environment variable totrue
.- The list of IBM Cloud VPC Regions and Zones can be found here.
-
Using clusterctl, render the yaml through templates and deploy the cluster
Note: the
IBMVPC_IMAGE_NAME
value below should reflect the name of the custom qcow2 imageIBMCLOUD_API_KEY="XXXXXXXXXXXXXXXXXX" \ IBMVPC_REGION=us-south \ IBMVPC_ZONE=us-south-1 \ IBMVPC_RESOURCEGROUP=4f15679623607b855b1a27a67f20e1c7 \ IBMVPC_NAME=ibm-vpc-0 \ IBMVPC_IMAGE_NAME=capibm-vpc-ubuntu-2004-kube-v1-26-2 \ IBMVPC_PROFILE=bx2-4x16 \ IBMVPC_SSHKEY_NAME=capi-vpc-key \ IBMACCOUNT_ID="ibm-accountid" \ BASE64_API_KEY=$(echo -n $IBMCLOUD_API_KEY | base64) \ clusterctl generate cluster ibm-vpc-0 --kubernetes-version v1.26.2 \ --target-namespace default \ --control-plane-machine-count=1 \ --worker-machine-count=2 | kubectl apply -f -
Output:
cluster.cluster.x-k8s.io/ibm-vpc-0 created ibmvpccluster.infrastructure.cluster.x-k8s.io/ibm-vpc-0 created kubeadmcontrolplane.controlplane.cluster.x-k8s.io/ibm-vpc-0-control-plane created ibmvpcmachinetemplate.infrastructure.cluster.x-k8s.io/ibm-vpc-0-control-plane created machinedeployment.cluster.x-k8s.io/ibm-vpc-0-md-0 created ibmvpcmachinetemplate.infrastructure.cluster.x-k8s.io/ibm-vpc-0-md-0 created kubeadmconfigtemplate.bootstrap.cluster.x-k8s.io/ibm-vpc-0-md-0 created clusterresourceset.addons.cluster.x-k8s.io/crs-cloud-conf created configmap/ibm-cfg created secret/ibm-credential created configmap/cloud-controller-manager-addon created
Note: Refer below for more detailed information on VPC variables.
-
Check the state of the provisioned cluster and machine objects within the local management cluster
Clusters
~ kubectl get clusters NAME PHASE ibm-vpc-0 Provisioned
Kubeadm Control Plane
~ kubectl get kubeadmcontrolplane NAME INITIALIZED API SERVER AVAILABLE VERSION REPLICAS READY UPDATED UNAVAILABLE ibm-vpc-0-control-plane true true v1.26.2 1 1 1
Machines
~ kubectl get machines ibm-vpc-0-control-plane-vzz47 ibmvpc://ibm-vpc-0/ibm-vpc-0-control-plane-rg6xv Running v1.26.2 ibm-vpc-0-md-0-5444cfcbcd-6gg5z ibmvpc://ibm-vpc-0/ibm-vpc-0-md-0-dbxb7 Running v1.26.2 ibm-vpc-0-md-0-5444cfcbcd-7kr9x ibmvpc://ibm-vpc-0/ibm-vpc-0-md-0-k7blr Running v1.26.2
-
Deploy Container Network Interface (CNI)
Example: calico
~ clusterctl get kubeconfig ibm-vpc-0 > ~/.kube/ibm-vpc-0 ~ export KUBECONFIG=~/.kube/ibm-vpc-0 ~ kubectl apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml
-
Check the state of the newly provisioned cluster within IBM Cloud
~ kubectl get nodes NAME STATUS ROLES AGE VERSION ibm-vpc-0-control-plane-rg6xv Ready master 41h v1.26.2 ibm-vpc-0-md-0-4dc5c Ready <none> 41h v1.26.2 ibm-vpc-0-md-0-dbxb7 Ready <none> 20h v1.26.2
Change disk size for the boot volume
There are two following variables for controlling the volume size for the boot disk.
IBMVPC_CONTROLPLANE_BOOT_VOLUME_SIZEGIB
: Size of the boot volume for the control plane nodes, default set to 20GiBIBMVPC_WORKER_BOOT_VOLUME_SIZEGIB
: Size of the boot volume for the worker nodes, default set to 20GiB
Note: Default value is set to 20GiB because the images published for testing are of size 20GiB(default size in the image-builder scripts as well).
Deploy a VPC cluster using ClusterClass
IBMVPC_CLUSTER_CLASS_NAME=ibmvpc-clusterclass \
IBMCLOUD_API_KEY="XXXXXXXXXXXXXXXXXX" \
IBMVPC_REGION=us-south \
IBMVPC_ZONE=us-south-1 \
IBMVPC_RESOURCEGROUP=4f15679623607b855b1a27a67f20e1c7 \
IBMVPC_NAME=ibm-vpc-0 \
IBMVPC_IMAGE_NAME=capibm-vpc-ubuntu-2004-kube-v1-26-2 \
IBMVPC_PROFILE=bx2-4x16 \
IBMVPC_SSHKEY_NAME=capi-vpc-key \
IBMACCOUNT_ID="ibm-accountid" \
BASE64_API_KEY=$(echo -n $IBMCLOUD_API_KEY | base64) \
clusterctl generate cluster ibm-vpc-clusterclass --kubernetes-version v1.26.2 --target-namespace default --control-plane-machine-count=1 --worker-machine-count=2 --from=./templates/cluster-template-vpc-clusterclass.yaml | kubectl apply -f -