TKG(Tanzu Kubernetes Grid)는 단일 노드 클러스터를 지원합니다. 단일 노드 클러스터는 호스팅된 워크로드가 단일 ESXi 호스트의 제어부 인프라와 함께 실행되는 워크로드 클러스터입니다.
단일 노드 클러스터의 설치 공간을 더욱 최소화하려면 기본 OS에 대한 Photon 또는 Ubuntu Tiny OVA가 있는 tiny
Tanzu Kubernetes 릴리스(TKr)에서 생성할 수 있습니다. 이러한 클러스터를 최소 단일 노드 클러스터라고 합니다.
단일 노드 클러스터는 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
TKr을 사용하지 못하도록 합니다.
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""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, 클러스터 부트스트랩 템플릿, OS 이미지 개체가 모두 생성되었는지 확인합니다. 예:
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
를 선택하고 Tanzu Kubernetes Grid > 다운로드로 이동(GO TO DOWNLOADS)을 클릭합니다.
Tiny TKG OVA(기술 미리보기)에서 단일 노드 클러스터에 사용할 매우 작은 OVA를 다운로드합니다.
Photon v3 Kubernetes v1.24.10 매우 작음 OVA(기술 미리보기)
Ubuntu 2004 Kubernetes v1.24.10 매우 작음 OVA(기술 미리보기)
Tiny OVA를 vSphere 환경으로 가져와서 기본 이미지 템플릿을 vSphere로 가져오기에 설명된 대로 VM 템플릿으로 변환합니다.
단일 노드 워크로드 클러스터를 생성합니다.
참고단일 노드 클러스터의 경우
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
여야 합니다.(선택 사항) 기본 Antrea CNI 대신 Calico를 CNI로 사용하도록 클러스터를 구성하려면 Supervisor 또는 단일 노드 클래스 기반 워크로드 클러스터용 Calico 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
입니다.