Tanzu Kubernetes Grid (TKG) 支持单节点集群。单节点集群是工作负载集群,其中托管的工作负载与控制平面基础架构一起在单个 ESXi 主机上运行。
要进一步最大限度减少单节点集群的占用空间,可以从 tiny
Tanzu Kubernetes 版本 (TKr) 创建该集群,该版本的基础操作系统有一个 Photon 或 Ubuntu tiny OVA。此类集群称为最小单节点集群。
单节点集群是在 vSphere 8 上运行且由独立管理集群部署的基于类的工作负载集群。
注意此功能处于不受支持的技术预览版状态;请参见 TKG 功能状态。
用例包括:
一台安装了以下工具的引导计算机,如安装 Tanzu CLI 和其他工具以与独立管理集群配合使用中所述:
kubectl
imgpkg
在 Tanzu CLI 中启用了 single-node-clusters
设置:
tanzu config set features.cluster.single-node-clusters true
要在使用标准 Photon 或 Ubuntu TKr 的 vSphere 上创建单节点工作负载集群,请执行以下操作:
为工作负载集群创建平面配置文件,如 具有独立管理集群配置文件的 vSphere 中所述。
使用 --dry-run
标记运行 tanzu cluster create
,将平面配置文件转换为 Kubernetes 样式的 Cluster
对象规范,如创建对象规范中所述。
编辑 Cluster
对象规范以包含以下设置:
在 topology.controlPlane
下:
replicas: 1
无 topology.workers
块,如果存在,则删除。
在 topology.variables
下:
- name: controlPlaneTaint
value: false
使用修改后的 Cluster
对象规范运行 tanzu cluster create
,如从对象规范中创建基于类的集群中所述。
要在使用 tiny
Tanzu Kubernetes 版本 (TKr) 以最大限度减少占用空间的 vSphere 上创建单节点工作负载集群,请执行以下操作:
修补 vSphere ClusterClass
定义,防止管理集群在创建标准非单节点集群时使用 tiny
TKrs:
kubectl annotate --overwrite clusterclass tkg-vsphere-default-v1.0.0 run.tanzu.vmware.com/resolve-tkr='!tkr.tanzu.vmware.com/tiny'
在管理集群中安装 tiny
TKr:
将 kubectl
的上下文设置为管理集群:
kubectl config use-context MY-MGMT-CLUSTER-admin@MY-MGMT-CLUSTER
其中,MY-MGMT-CLUSTER
是管理集群的名称。
使用以下代码为 tiny
TKr 创建 ConfigMap
定义文件 tiny-tkr-cm.yaml
:
apiVersion: v1
data:
tkrVersions: '["v1.24.10+vmware.1-tiny.1-tkg.1"]'
kind: ConfigMap
metadata:
name: tkg-compatibility-versions-v1.24.10---vmware.1-tiny.1-tkg.1
namespace: tkg-system
labels:
run.tanzu.vmware.com/additional-compatible-tkrs: ""
对于 TKG v2.1.0,请在此处和下面替代 Kubernetes v1.24.9 版本:TKr v1.24.9+vmware.1-tiny.2-tkg.1
、OVA v1.24.9 Tiny OVA
和 ConfigMap
名称和其他做了类似更改的字符串。
应用 TKr ConfigMap
:
kubectl apply -f tiny-tkr-cm.yaml
将 TKr 软件包清单和元数据下载到 /tmp/
目录:
imgpkg pull -b projects.registry.vmware.com/tkg/tkr-repository-vsphere-edge:v1.24.10_vmware.1-tiny.1-tkg.1 -o /tmp/tkr-repository-vsphere-edge
在 TKr 软件包清单中,按以下任一方式将 metadata.namespace
设置更改为 "tkg-system"
:
运行下列 yq
命令:
yq -i e '.metadata.namespace = "tkg-system"' /tmp/tkr-repository-vsphere-edge/packages/tkr-vsphere-edge.tanzu.vmware.com/1.24.10+vmware.1-tiny.1-tkg.1.yml
编辑清单以在 metadata
下添加设置 namespace: "tkg-system"
:
metadata:
[...]
namespace: "tkg-system"
应用 TKr 清单:
kubectl apply -f /tmp/tkr-repository-vsphere-edge/packages/tkr-vsphere-edge.tanzu.vmware.com/1.24.10+vmware.1-tiny.1-tkg.1.yml
几分钟后,运行 kubectl get
以验证是 tiny
TKr、集群引导模板和操作系统映像对象是否都已创建。例如:
kubectl get tkr,cbt,osimage -A | grep -i tiny
输出应如下所示:
v1.24.10---vmware.1-tiny.1-tkg.1 v1.24.10+vmware.1-tiny.1-tkg.1 True True 16m
tkg-system v1.24.10---vmware.1-tiny.1-tkg.1 antrea.tanzu.vmware.com.1.7.2+vmware.1-tkg.1-advanced vsphere-csi.tanzu.vmware.com.2.6.2+vmware.2-tkg.1 vsphere-cpi.tanzu.vmware.com.1.24.3+vmware.1-tkg.1 kapp-controller.tanzu.vmware.com.0.41.5+vmware.1-tkg.1
v1.24.10---vmware.1-tiny.1- 1.b3 v1.24.10+vmware.1-tiny.1 ubuntu 2004 amd64 ova 16m
v1.24.10---vmware.1-tiny.1-tkg.1-ac20b3 v1.24.10+vmware.1-tiny.1 photon 3 amd64 ova 16m
准备 OVA:
浏览到 Tanzu Kubernetes Grid 下载页面,然后登录到 Customer Connect。
在 VMware Tanzu Kubernetes Grid 行中,单击转到下载 (Go to Downloads)。
选择版本 2.x
并单击 VMware Tanzu Kubernetes Grid > 转到下载 (GO TO DOWNLOADS)。
在微型 TKG OVA(技术预览版)下,下载微型 OVA 以用于单节点集群:
Photon v3 Kubernetes v1.24.10 微型 OVA(技术预览版)
Ubuntu 2004 Kubernetes v1.24.10 微型 OVA(技术预览版)
将微型 OVA 导入您的 vSphere 环境并将其转换为虚拟机模板,如将基础映像模板导入到 vSphere 中所述。
创建单节点工作负载集群。
注意对于单节点集群,
tanzu cluster create
尚无法将平面集群配置文件转换为 Kubernetes 样式的对象规范,如创建工作负载集群中所述。
按照以下示例中的设定设置环境变量:
export CLUSTER_NAME='workload-snc'
export CLUSTER_NAMESPACE='default'
export CLUSTER_CIDR='100.96.0.0/11'
export SERVICE_CIDR='100.64.0.0/13'
export VSPHERE_CONTROL_PLANE_ENDPOINT=10.185.11.134
export VSPHERE_SERVER=10.185.12.154
export VSPHERE_USERNAME='[email protected]'
export VSPHERE_PASSWORD=<encoded:QWRtaW4hMjM=>
export VSPHERE_DATACENTER='/dc0'
export VSPHERE_DATASTORE='/dc0/datastore/sharedVmfs-0'
export VSPHERE_FOLDER='/dc0/vm'
export VSPHERE_NETWORK='/dc0/network/VM Network'
export VSPHERE_RESOURCE_POOL='/dc0/host/cluster0/Resources'
export VSPHERE_SSH_AUTHORIZED_KEY=ssh-rsa AAAAB3[...]tyaw== [email protected]
export VSPHERE_TLS_THUMBPRINT=47:F5:83:8E:5D:36:[...]:72:5A:89:7D:29:E5:DA
export VSPHERE_CONTROL_PLANE_NUM_CPUS='4'
export VSPHERE_CONTROL_PLANE_MEM_MIB='4096'
export VSPHERE_CONTROL_PLANE_DISK_GIB='20'
export TKG_CUSTOM_IMAGE_REPOSITORY='projects.registry.vmware.com/tkg'
export OS_NAME='photon'
export TKG_CUSTOM_IMAGE_REPOSITORY_CA_CERTIFICATE="LS0tL[...]0tLQo="
使用引用上述变量的 Cluster
和 Secret
对象规范创建清单 vsphere-snc.yaml
:
apiVersion: cluster.x-k8s.io/v1beta1
kind: Cluster
metadata:
annotations:
tkg.tanzu.vmware.com/cluster-controlplane-endpoint: ${VSPHERE_CONTROL_PLANE_ENDPOINT}
run.tanzu.vmware.com/resolve-tkr: 'tkr.tanzu.vmware.com/tiny'
labels:
tkg.tanzu.vmware.com/cluster-name: ${CLUSTER_NAME}
name: ${CLUSTER_NAME}
namespace: ${CLUSTER_NAMESPACE}
spec:
clusterNetwork:
pods:
cidrBlocks:
- ${CLUSTER_CIDR}
services:
cidrBlocks:
- ${SERVICE_CIDR}
topology:
class: tkg-vsphere-default-v1.0.0
controlPlane:
metadata:
annotations:
run.tanzu.vmware.com/resolve-os-image: image-type=ova,os-name=${OS_NAME}
replicas: 1
variables:
- name: controlPlaneTaint
value: false
- name: auditLogging
value:
enabled: false
- name: apiServerEndpoint
value: ${VSPHERE_CONTROL_PLANE_ENDPOINT}
- name: aviAPIServerHAProvider
value: false
- name: imageRepository
value:
host: ${TKG_CUSTOM_IMAGE_REPOSITORY}
- name: trust
value:
additionalTrustedCAs:
- data: ${TKG_CUSTOM_IMAGE_REPOSITORY_CA_CERTIFICATE}
name: imageRepository
- name: vcenter
value:
cloneMode: fullClone
datacenter: ${VSPHERE_DATACENTER}
datastore: ${VSPHERE_DATASTORE}
folder: ${VSPHERE_FOLDER}
network: ${VSPHERE_NETWORK}
resourcePool: ${VSPHERE_RESOURCE_POOL}
server: ${VSPHERE_SERVER}
storagePolicyID: ""
tlsThumbprint: ${VSPHERE_TLS_THUMBPRINT}
- name: user
value:
sshAuthorizedKeys:
- ${VSPHERE_SSH_AUTHORIZED_KEY}
- name: controlPlane
value:
machine:
diskGiB: ${VSPHERE_CONTROL_PLANE_DISK_GIB}
memoryMiB: ${VSPHERE_CONTROL_PLANE_MEM_MIB}
numCPUs: ${VSPHERE_CONTROL_PLANE_NUM_CPUS}
version: v1.24.10+vmware.1-tiny.1
---
apiVersion: v1
kind: Secret
metadata:
name: ${CLUSTER_NAME}
namespace: ${CLUSTER_NAMESPACE}
stringData:
password: ${VSPHERE_PASSWORD}
username: ${VSPHERE_USERNAME}
EOF
请注意以下事项:
run.tanzu.vmware.com/resolve-tkr
的 metadata.annotations
设置controlPlaneTaint
的 topology.variables
设置topology.workers
块,只有 topology.controlPlane
topology.version
应为 v1.24.9+vmware.1-tiny.2
(可选)要将集群配置为使用 Calico 作为 CNI 而不是默认 Antrea CNI,请按照适用于主管或基于单节点类的工作负载集群中的单节点集群的说明操作。
应用 Cluster
对象清单:
tanzu cluster create -f vsphere-snc.yaml
(仅限 TKG v2.1.0,可选)要为集群置备持久卷 (PV),请创建一个 vSphere StorageClass
对象。
注意TKG v2.1.1 及更高版本不需要执行这些步骤。
创建清单 vspherestorageclass.yaml
:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
annotations:
storageclass.kubernetes.io/is-default-class: "true"
name: default
provisioner: csi.vsphere.vmware.com
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true
应用 StorageClass
清单:
kubectl apply -f vspherestorageclass.yaml --kubeconfig=KUBECONFIG
其中,KUBECONFIG
是单节点集群的 kubeconfig
。