Skip to content

smartxworks/cluster-api-provider-elf

Repository files navigation

Kubernetes Cluster API Provider ELF

build

准备K8s集群

CAPI管理集群

首先创建一个普通的k8s集群。在开发环境中,可以使用kind,minikube等创建。参考CAPI Quick Start Guide.

在k8s基础集群中安装cluster-api后,将其变成CAPI管理集群(Management Cluster)。管理集群负责管理k8s工作负载集群(Workload Cluster),包括创建、删除、扩容、升级等操作。

安装CAPE

安装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