사용자 지정 ClusterClass를 기반으로 TKG 클러스터를 프로비저닝하려면 다음 지침을 참조하십시오. 이러한 지침은 vSphere 8 U2 이상 환경에만 적용됩니다.
사전 요구 사항
사용자 지정 ClusterClass를 기반으로 TKG 클러스터를 프로비저닝하는 절차가 vSphere 8 U2 릴리스에 대해 업데이트되었습니다.
- vSphere 8 U2+ 환경
- 워크로드 관리 사용
- 감독자 구성됨
- vSphere에 대한 Kubernetes CLI 도구가 설치된 Ubuntu 클라이언트
개략적인 워크플로
개략적인 워크플로는 다음과 같습니다.
단계 | 작업 | 지침 |
---|---|---|
1 | 기본 ClusterClass를 복제하여 사용자 지정 ClusterClass를 생성합니다. | 1: 사용자 지정 ClusterClass 생성 |
2 | 사용자 지정 ClusterClass를 기반으로 새 TKG 클러스터를 프로비저닝하고 모든 클러스터 노드가 제대로 작동하는지 확인합니다. | 2: 사용자 지정 ClusterClass를 기반으로 TKG 클러스터 생성 |
단계 | 작업 | 지침 |
---|---|---|
3 | 작업자 노드 중 하나에 SSH를 통해 연결하여 업데이트할 패키지가 있는지 확인합니다. | 3: 패키지 업데이트의 존재 여부 확인 |
4 | 업데이트를 수행하는 새 명령으로 사용자 지정 ClusterClass를 업데이트합니다. | 4: 사용자 지정 ClusterClass 업데이트 |
5 | 업데이트가 이미 실행된 새 노드의 롤아웃을 확인합니다. | 5: 클러스터 노드의 롤링 업데이트 확인 |
1: 사용자 지정 ClusterClass 생성
tanzukubernetescluster
인 기본 ClusterClass를 복제하여
ccc
(
customclusterclass
의 약어)라는 사용자 지정 ClusterClass를 생성하는 작업이 포함됩니다.
- 이름이 ccc-ns인 vSphere 네임스페이스를 생성하고 구성합니다.
사용 권한, 스토리지, 컨텐츠 라이브러리 및 VM 클래스를 구성합니다. 필요한 경우 설명서를 참조하십시오.
참고: vSphere 네임스페이스 이름은 사용자가 정의합니다. 다른 이름을 사용하는 경우 지침을 적절히 조정하십시오. - 감독자에 로그인합니다.
kubectl vsphere login --server=IP-ADDRESS --vsphere-username [email protected]
- 기본 ClusterClass의 출력을 이름이 ccc.yaml인 파일에 씁니다.
kubectl -n ccc-ns get clusterclass tanzukubernetescluster -o yaml > ccc.yaml
또는 바로 가기 버전:kubectl -n ccc-ns get cc tanzukubernetescluster -o yaml > ccc.yaml
- 복제된 ClusterClass 파일을 편집하기 위해 엽니다.
vim ccc.yaml
ccc.yaml
파일을 편집합니다.metadata.creationTimestamp
줄을 삭제합니다.metadata.generation
줄을 삭제합니다.metadata.resourceVersion
줄을 삭제합니다.metadata.uid
줄을 삭제합니다.metadata.name
값을tanzukubernetescluster
에서ccc
로 변경합니다metadata.namespace
값을 그대로 둡니다.ccc-ns
run.tanzu.vmware.com/resolve-tkr: ""
에 대해metadata.annotations
값을 그대로 둡니다. 이 주석은 TKR 데이터/확인에 필요합니다.
- 변경 내용을 저장하고 확인합니다.
apiVersion: cluster.x-k8s.io/v1beta1 kind: ClusterClass metadata: annotations: run.tanzu.vmware.com/resolve-tkr: "" name: ccc namespace: ccc-ns spec: ...
- 사용자 지정 ClusterClass 개체를 생성합니다.
kubectl apply -f ccc.yaml -n ccc-ns
예상 결과:clusterclass.cluster.x-k8s.io/ccc created
- 사용자 지정 ClusterClass를 나열합니다.
kubectl get cc -n ccc-ns
예상 결과:NAME AGE ccc 3m14s tanzukubernetescluster 29m
2: 사용자 지정 ClusterClass를 기반으로 TKG 클러스터 생성
- 클러스터를 프로비저닝하도록
ccc-cluster.yaml
매니페스트를 구성합니다.#ccc-cluster.yaml apiVersion: cluster.x-k8s.io/v1beta1 kind: Cluster metadata: name: ccc-cluster spec: clusterNetwork: pods: cidrBlocks: - 192.0.2.0/16 services: cidrBlocks: - 198.51.100.0/12 serviceDomain: cluster.local topology: class: ccc version: v1.26.5---vmware.2-fips.1-tkg.1 controlPlane: replicas: 1 workers: machineDeployments: - class: node-pool name: tkgs-node-pool-1 replicas: 1 variables: - name: vmClass value: guaranteed-small - name: storageClass value: tkg-storage-profile
형식 설명:metadata.name
값은 클러스터:ccc-cluster
의 이름입니다.spec.topology.class
값은 사용자 지정 ClusterClass:ccc
의 이름입니다.spec.topology.version
값은 TKR 버전입니다.spec.topology.variables.storageClass
값은 영구 스토리지 클래스의 이름입니다.
참고: 테스트 목적으로는 제어부 및 작업자 노드 풀에 대해 복제본 1개면 충분합니다. 운영 환경에서는 제어부에 대해 복제본 3개를 사용하고 각 작업자 노드 풀에 대해 최소 3개의 복제본을 사용합니다. - 사용자 지정 ClusterClass를 기반으로 TKG 클러스터를 생성합니다.
kubectl apply -f ccc-cluster.yaml -n ccc-ns
예상 결과:cluster.cluster.x-k8s.io/ccc-cluster created
- 클러스터 프로비저닝을 확인합니다.
다음 명령을 실행합니다. 모든 클러스터 노드가 제대로 표시될 때까지 기다립니다.
kubectl -n ccc-ns get cc,clusters,vsphereclusters,kcp,machinedeployment,machineset,machine,vspheremachine,virtualmachineservice
참고: 5단계에서 롤링 업데이트 진행률을 모니터링할 수 있도록 별도의 세션에서 이 명령을 실행하는 것이 유용합니다.
3: 패키지 업데이트의 존재 여부 확인
- 다음 명령을 실행하여 SSH 암호를 가져옵니다.
export CC=ccc-cluster && kubectl get secret -n ccc-ns ${CC}-ssh -o jsonpath={.data.ssh-privatekey} | base64 -d > ${CC}-ssh && chomd 4000 ${CC}-ssh
- 다음 명령을 실행하여 작업자 노드 VM의 IP 주소를 가져옵니다.
kubectl -n ccc-ns get vm -o wide
참고: 여러 작업자 노드를 배포한 경우 하나를 선택합니다. 제어부 노드를 사용하지 마십시오. - 다음 명령을 실행하여 SSH를 통해 작업자 노드 VM에 연결합니다.
ssh -i ${CC}-ssh vmware-system-user@IP-ADDRESS-OF-WORKER-NODE
예:ssh -i ${CC}-ssh [email protected]
참고: 연결을 계속하려면 "yes"를 입력합니다.예상 결과: 호스트에 SSH로 연결하면 다음 메시지가 표시됩니다.tdnf update info not availble yet!
- 다음 명령을 실행하고 업데이트를 확인합니다.
sudo -i
tdnf update
- 프롬프트에서 no(업데이트 안 함)를 의미하는 "N"을 입력합니다.
예상 결과:
Operation aborted
참고: 여기서 목적은 업데이트를 시작하는 것이 아니라 단지 업데이트가 있는지 확인하는 것입니다. 다음 섹션에서 사용자 지정 ClusterClass에 명령을 추가하여 업데이트를 시작합니다. - SSH 세션에서 로그아웃하려면 "exit"를 입력한 다음, "exit"를 다시 입력합니다.
4: 사용자 지정 ClusterClass 업데이트
- 이름이
ccc
인 사용자 지정 ClusterClass를 편집하기 위해 를 엽니다.kubectl edit cc ccc -n ccc-ns
postKubeadmCommands
가 있는 다음 섹션까지 아래로 스크롤합니다.- definitions: - jsonPatches: - op: add path: /spec/template/spec/kubeadmConfigSpec/postKubeadmCommands valueFrom: template: | - touch /root/kubeadm-complete - vmware-rpctool 'info-set guestinfo.kubeadm.phase complete' - vmware-rpctool 'info-set guestinfo.kubeadm.error ---' selector: apiVersion: controlplane.cluster.x-k8s.io/v1beta1 kind: KubeadmControlPlaneTemplate matchResources: controlPlane: true - jsonPatches: - op: add path: /spec/template/spec/postKubeadmCommands valueFrom: template: | - touch /root/kubeadm-complete - vmware-rpctool 'info-set guestinfo.kubeadm.phase complete' - vmware-rpctool 'info-set guestinfo.kubeadm.error ---' selector: apiVersion: bootstrap.cluster.x-k8s.io/v1beta1 kind: KubeadmConfigTemplate matchResources: machineDeploymentClass: names: - node-pool name: controlPlanePostKubeadmCommandsSuccess
두valueFrom.template
필드에 다음 명령을 추가합니다.- tdnf update -y
예:- definitions: - jsonPatches: - op: add path: /spec/template/spec/kubeadmConfigSpec/postKubeadmCommands valueFrom: template: | - touch /root/kubeadm-complete - vmware-rpctool 'info-set guestinfo.kubeadm.phase complete' - vmware-rpctool 'info-set guestinfo.kubeadm.error ---' - tdnf update -y selector: apiVersion: controlplane.cluster.x-k8s.io/v1beta1 kind: KubeadmControlPlaneTemplate matchResources: controlPlane: true - jsonPatches: - op: add path: /spec/template/spec/postKubeadmCommands valueFrom: template: | - touch /root/kubeadm-complete - vmware-rpctool 'info-set guestinfo.kubeadm.phase complete' - vmware-rpctool 'info-set guestinfo.kubeadm.error ---' - tdnf update -y selector: apiVersion: bootstrap.cluster.x-k8s.io/v1beta1 kind: KubeadmConfigTemplate matchResources: machineDeploymentClass: names: - node-pool name: controlPlanePostKubeadmCommandsSuccess
- 사용자 지정 ClusterClass에 변경 내용을 저장하고 편집기를 닫습니다.
wq
예상 결과:clusterclass.cluster.x-k8s/ccc edited
5: 클러스터 노드의 롤링 업데이트 확인
- 다음 명령을 실행하여 클러스터 프로비저닝을 확인합니다.
모든 클러스터 노드가 제대로 표시될 때까지 기다립니다.
kubectl -n ccc-ns get cc,clusters,vsphereclusters,kcp,machinedeployment,machineset,machine,vspheremachine,virtualmachineservice
- 새 UUID가 있는 새 노드가 배포된 것을 볼 수 있습니다.
- 다음 명령을 실행하여 SSH를 통해 작업자 노드 VM에 연결합니다.
ssh -i ${CC}-ssh vmware-system-user@IP-ADDRESS-OF-WORKER-NODE
예상 결과: 호스트에 SSH로 연결하면 다음 메시지가 표시됩니다.tdnf update info not availble yet!
- 다음 명령을 실행합니다.
sudo -i
tdnf update
예상 결과: 업데이트해야 하는 패키지가 훨씬 적어야 합니다.
- 프롬프트에서 no(업데이트 안 함)를 의미하는 "N"을 입력합니다.
예상 결과:
Operation aborted
- 다음 명령을 실행하여 tdnf가 실행되었는지 확인합니다.
cat /var/log/cloud-init-output.log | grep -i tdnf
- SSH 세션에서 로그아웃하려면 "exit"를 입력한 다음, "exit"를 다시 입력합니다.
사용자 지정 ClusterClass 유지 관리
TKG 서비스를 새 버전으로 업그레이드한 후 이전 TKG 서비스 버전의 기본 ClusterClass에서 파생된 사용자 지정 ClusterClass가 새 TKG 서비스 버전과 함께 제공되는 기본 ClusterClass에 대한 변경 내용으로 업데이트되었는지 확인해야 합니다.
- TKG 서비스 버전을 업그레이드합니다.
예를 들어 TKG 서비스 v3.0에서 v3.1로 업그레이드합니다.
TKG 서비스 설치 및 업그레이드의 내용을 참조하십시오.
- 여기에 있는 지침에 따라 새 사용자 지정 ClusterClass를 생성합니다.
이름에 TKG 서비스 버전(예:
ccc-3.1
)을 추가하여 새 사용자 지정 ClusterClass 버전을 수동으로 지정합니다. - 이전 사용자 지정 ClusterClass의 사용자 지정 패치 및 변수를 새 사용자 지정 ClusterClass에 추가합니다.
이렇게 하려면
cat ccc.yaml
을 실행하고 사용자 지정 패치 및 변수를ccc-3.1.yaml
으로 복사합니다. - 새 사용자 지정 ClusterClass를 적용하고 조정이 성공할 때까지 기다립니다.
- 클러스터 개체의
spec.topology.class
필드를 편집하여 이전 사용자 지정 ClusterClass를 사용하는 TKG 클러스터를 새 사용자 지정 ClusterClass로 업데이트합니다.
비관리형 ClusterClass
vSphere 8 U2+에서, TKG 컨트롤러가 사용자 지정 ClusterClass를 관리하는 것을 원치 않는 경우 사용자 지정 ClusterClass에 추가할 수 있는 주석이 있습니다. 이 주석을 추가하는 경우에는 인증서, 암호 등과 같은 모든 기본 Kubernetes 개체를 수동으로 생성해야 합니다. 이 작업을 위한 지침은 vSphere 8 U1 사용자 지정 ClusterClass 설명서를 참조하십시오.
주석 키 | 값 |
---|---|
run.tanzu.vmware.com/unmanaged-clusterclass | " " |
ccc
인 사용자 지정 ClusterClass에 주석을 추가하는 방법의 예입니다.
apiVersion: cluster.x-k8s.io/v1beta1 kind: ClusterClass metadata: annotations: run.tanzu.vmware.com/resolve-tkr: "" run.tanzu.vmware.com/unmanaged-clusterclass: "" name: ccc namespace: ccc-ns spec: ...