首先创建一个普通的k8s集群。在开发环境中,可以使用kind,minikube等创建。参考CAPI Quick Start Guide.
在k8s基础集群中安装cluster-api后,将其变成CAPI管理集群(Management Cluster)。管理集群负责管理k8s工作负载集群(Workload Cluster),包括创建、删除、扩容、升级等操作。
安装Cluster API Provider ELF (CAPE):
export CONTROLLER_IMG=smartxworks/cape-manager-amd64 IMAGE_TAG=dev
make deploy
创建 k8s 集群时,先在 ELF 创建虚拟机,然后在虚拟机部署k8s节点。创建k8s集群,需要提供符合cluster-api要求的虚拟机。 可以使用 image-builder 构建满足cluster-api要求的虚拟机模板,在创建k8s工作负载集群的时候使用指定的虚拟机模板。
生成工作负载集群的配置文件
提示:请根据实际情况修改下述配置信息。
# CAPE集群对象所在的namespace
export NAMESPACE=default
# 集群的名称
export CLUSTER_NAME=cape-cluster
# 集群的K8s版本
export KUBERNETES_VERSION=v1.20.6
# 集群ControlPlane节点数
export CONTROL_PLANE_MACHINE_COUNT=1
# 集群ControlPlane节点配置
export CONTROL_PLANE_MACHINE_NUM_CPUS=2
export CONTROL_PLANE_MACHINE_MEMORY_MB=4096
export CONTROL_PLANE_MACHINE_DISK_GB=40
# 集群Worker节点数
export WORKER_MACHINE_COUNT=1
# 集群Worker节点配置
export WORKER_MACHINE_NUM_CPUS=2
export WORKER_MACHINE_MEMORY_MB=4096
export WORKER_MACHINE_DISK_GB=40
# 集群节点的克隆模式: FastClone, FullClone.
export ELF_VM_CLONE_MODE=FastClone
# TOWER
export TOWER_SERVER=<YOUR_TOWER_SERVER_FQDN>
export TOWER_USERNAME=root
export TOWER_PASSWORD=tower
export TOWER_SKIP_TLS_VERIFY=false
# 认证模式,默认LOCAL(可选)
export TOWER_AUTH_MODE=LOCAL
# 以下指定的ELF资源对象的ID对应其API返回的local_id
# ELF集群ID
export ELF_CLUSTER=576ad467-d09e-4235-9dec-b615814ddc7e
# ELF虚拟网络ID
export ELF_VLAN=576ad467-d09e-4235-9dec-b615814ddc7e_c8a1e42d-e0f3-4d50-a190-53209a98f157
# Control plane endpoint
export CONTROL_PLANE_ENDPOINT_IP=<YOUR_CONTROL_PLANE_VIP>
# 内容库的虚拟机模板名或ID
export VM_TEMPLATE=cl7hao0tseso80758osh921f1
# 创建工作负载集群的配置文件
clusterctl generate yaml --from templates/cluster-template.yaml > cape-cluster.yaml
创建工作负载集群
kubectl apply -f cape-cluster.yaml
检查集群部署情况
# 查看部署进度,直到INITIALIZED为true,表示ControlPlane已创建成功
kubectl get cluster
kubectl get kubeadmcontrolplane -w
# 获取集群的 kubeconfig 配置
clusterctl get kubeconfig cape-cluster > cape-cluster.kubeconfig
# 部署 CNI, 可以选择 flannel 或者 calico(可选)
kubectl --kubeconfig=./cape-cluster.kubeconfig \
apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl --kubeconfig=./cape-cluster.kubeconfig \
apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml
# 检查集群的节点
KUBECONFIG=cape-cluster.kubeconfig kubectl get nodes
# 检查集群的组件
KUBECONFIG=cape-cluster.kubeconfig kubectl get pods -A -o wide