vSphere 上的单节点集群(技术预览版)

Tanzu Kubernetes Grid (TKG) 支持单节点集群。单节点集群是工作负载集群,其中托管的工作负载与控制平面基础架构一起在单个 ESXi 主机上运行。

要进一步最大限度减少单节点集群的占用空间,可以从 tiny Tanzu Kubernetes 版本 (TKr) 创建该集群,该版本的基础操作系统有一个 Photon 或 Ubuntu tiny OVA。此类集群称为最小单节点集群。

单节点集群是在 vSphere 8 上运行且由独立管理集群部署的基于类的工作负载集群。

注意

此功能处于不受支持的技术预览版状态;请参见 TKG 功能状态

用例包括:

  • 单节点集群
    • 实验开发和测试环境
  • 最少的单节点集群
    • 资源受限的主机环境,例如远边缘单元站点和其他边缘位置

必备条件

  • vSphere 8 帐户
  • 在 vSphere 8 上运行 TKG v2.1.x 的 TKG 独立管理集群
  • 一台安装了以下工具的引导计算机,如安装 Tanzu CLI 和其他工具以与独立管理集群配合使用中所述:

    • Tanzu CLI
    • kubectl
    • imgpkg
    • (可选)yq v4.11.2
  • 在 Tanzu CLI 中启用了 single-node-clusters 设置:

    tanzu config set features.cluster.single-node-clusters true
    

创建单节点集群

要在使用标准 Photon 或 Ubuntu TKr 的 vSphere 上创建单节点工作负载集群,请执行以下操作:

  1. 为工作负载集群创建平面配置文件,如 具有独立管理集群配置文件的 vSphere 中所述。

  2. 使用 --dry-run 标记运行 tanzu cluster create,将平面配置文件转换为 Kubernetes 样式的 Cluster 对象规范,如创建对象规范中所述。

  3. 编辑 Cluster 对象规范以包含以下设置:

    • topology.controlPlane 下:

      replicas: 1
      
    • topology.workers 块,如果存在,则删除。

    • topology.variables 下:

      - name: controlPlaneTaint
        value: false
      
  4. 使用修改后的 Cluster 对象规范运行 tanzu cluster create,如从对象规范中创建基于类的集群中所述。

创建最小单节点集群

要在使用 tiny Tanzu Kubernetes 版本 (TKr) 以最大限度减少占用空间的 vSphere 上创建单节点工作负载集群,请执行以下操作:

  1. 修补 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'
    
  2. 在管理集群中安装 tiny TKr:

    1. kubectl 的上下文设置为管理集群:

      kubectl config use-context MY-MGMT-CLUSTER-admin@MY-MGMT-CLUSTER
      

      其中,MY-MGMT-CLUSTER 是管理集群的名称。

    2. 使用以下代码为 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 OVAConfigMap 名称和其他做了类似更改的字符串。

    3. 应用 TKr ConfigMap

      kubectl apply -f tiny-tkr-cm.yaml
      
    4. 将 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
      
    5. 在 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"
        
    6. 应用 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
      
    7. 几分钟后,运行 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
      
  3. 准备 OVA:

    1. 浏览到 Tanzu Kubernetes Grid 下载页面,然后登录到 Customer Connect。

    2. VMware Tanzu Kubernetes Grid 行中,单击转到下载 (Go to Downloads)

    3. 选择版本 2.x 并单击 VMware Tanzu Kubernetes Grid > 转到下载 (GO TO DOWNLOADS)

    4. 微型 TKG OVA(技术预览版)下,下载微型 OVA 以用于单节点集群:

      • Photon v3 Kubernetes v1.24.10 微型 OVA(技术预览版)

      • Ubuntu 2004 Kubernetes v1.24.10 微型 OVA(技术预览版)

    5. 将微型 OVA 导入您的 vSphere 环境并将其转换为虚拟机模板,如将基础映像模板导入到 vSphere 中所述。

  4. 创建单节点工作负载集群。

    注意

    对于单节点集群,tanzu cluster create 尚无法将平面集群配置文件转换为 Kubernetes 样式的对象规范,如创建工作负载集群中所述。

    1. 按照以下示例中的设定设置环境变量:

      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="
      
    2. 使用引用上述变量的 ClusterSecret 对象规范创建清单 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-tkrmetadata.annotations 设置
      • controlPlaneTainttopology.variables 设置
      • 没有 topology.workers 块,只有 topology.controlPlane
      • 对于 TKG v2.1.0,topology.version 应为 v1.24.9+vmware.1-tiny.2
    3. (可选)要将集群配置为使用 Calico 作为 CNI 而不是默认 Antrea CNI,请按照适用于主管或基于单节点类的工作负载集群中的单节点集群的说明操作。

    4. 应用 Cluster 对象清单:

      tanzu cluster create -f vsphere-snc.yaml
      
    5. (仅限 TKG v2.1.0,可选)要为集群置备持久卷 (PV),请创建一个 vSphere StorageClass 对象。

      注意

      TKG v2.1.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
        
      2. 应用 StorageClass 清单:

        kubectl apply -f vspherestorageclass.yaml --kubeconfig=KUBECONFIG
        

        其中,KUBECONFIG 是单节点集群的 kubeconfig

check-circle-line exclamation-circle-line close-line
Scroll to top icon