이 항목에서는 TKG(Tanzu Kubernetes Grid) 독립형 관리 클러스터에 고유한 사용자 지정 ClusterClass
리소스를 생성하고, 이를 사용하여 클래스 기반 워크로드 클러스터를 생성하고, 사용자 지정 ClusterClass를 기준으로 하는 클러스터와 작업하는 방법을 설명합니다.
사용자 지정 ClusterClass에서 클러스터를 기반으로 하려면 spec.topology.class
를 사용자 지정 ClusterClass 이름으로 설정합니다.
이 절차는 vSphere with Tanzu Supervisor가 있는 TKG에는 적용되지 않습니다.
주의사용자 지정 ClusterClass는 업스트림 클러스터 API 설명서에 따른 실험적인 Kubernetes 기능입니다. 사용자 지정 ClusterClass에서 사용할 수 있는 사용자 지정 범위로 인해 VMware 가능한 모든 사용자 지정을 테스트하거나 검증할 수 없습니다. 고객은 사용자 지정 ClusterClass 클러스터를 테스트, 검증 및 문제 해결해야 합니다. 고객은 사용자 지정 ClusterClass 클러스터와 관련된 지원 티켓을 열 수 있습니다. 다만, VMware 지원 팀이 최선의 노력을 기울이더라도, 사용자 지정 ClusterClass 클러스터에 대해 열린 모든 문제에 대한 해결을 보장할 수는 없습니다. 운영 환경에서 사용자 지정 ClusterClass 클러스터를 배포하기 전에 고객은 이러한 위험을 알고 있어야 합니다. 기본
ClusterClass
리소스를 사용하여 워크로드 클러스터를 생성하려면 클러스터 배포 단계의 절차를 따르십시오.
사용자 지정 ClusterClass를 생성하려면 로컬에 ytt
, imgpkg
, Tanzu CLI, kubectl
이 설치되어 있어야 합니다. ytt
및 imgpkg
을 다운로드하고 설치하는 방법에 대한 자세한 내용은 Carvel 도구 설치를 참조하십시오.
사용자 지정 ClusterClass를 생성하려면 VMware는 기본 ClusterClass 매니페스트 생성에 설명된 기존 기본 ClusterClass 매니페스트 또는 YTT 템플릿부터 시작하는 것이 좋습니다. 기본 ClusterClass 개체의 새 버전(예: 새 버전의 TKG)이 게시되면 동일한 사용자 지정을 구현하기 위해 오버레이를 새 버전에 적용할 수 있습니다. 이 항목의 절차에서는 사용자 지정 ClusterClass 개체를 생성하는 이 방법을 설명합니다.
기존 템플릿을 사용하지 않고 완전히 새로운 ClusterClass 개체를 작성하려면 클러스터 API 설명서의 ClusterClass 쓰기 절차를 따르십시오.
기본 ClusterClass 매니페스트 또는 Tanzu Kubernetes Grid 제공하는 YTT 템플릿을 기반으로 기본 ClusterClass 매니페스트를 생성할 수 있습니다. 생성하는 모든 사용자 지정 클러스터는 이 기본 ClusterClass 매니페스트를 기반으로 해야 합니다. 프로세스에는 다음 3단계가 있습니다.
클러스터에 대한 기본 ClusterClass 매니페스트를 생성할 수 있는 방법에는 세 가지가 있습니다.
중요방법 2와 3은 다음과 같은 사용 사례를 충족해야 하는 고급 사용자를 위한 것입니다.
- 독립형 관리 클러스터를 배포하지 않고 CI 시스템에 대한 사용자 지정 ClusterClass 정의를 생성하려고 합니다.
- 워크로드 클러스터가 관리 클러스터가 아닌 다른 인프라를 사용하려고 합니다.
Tanzu Kubernetes Grid v2.3.0 이상에서 관리 클러스터를 배포한 후 ~/.config/tanzu/tkg/clusterclassconfigs
폴더에서 기본 ClusterClass 매니페스트를 찾을 수 있습니다.
관리 클러스터를 배포한 대상 플랫폼에 대한 매니페스트를 보려면 다음 명령을 실행합니다.
tree ~/.config/tanzu/tkg/clusterclassconfigs/
예를 들어 vSphere 관리 클러스터를 배포한 경우 다음 YAML 파일이 표시됩니다.
.config/tanzu/tkg/clusterclassconfigs/
└── tkg-vsphere-default-v1.1.0.yaml
1 directory, 1 file
생성된 매니페스트에는 관리 클러스터 배포에서 추출된 대상 플랫폼에 대한 정보가 포함되어 있습니다. 이를 사용자 지정 ClusterClass 생성을 위한 기본 매니페스트로 직접 사용할 수 있습니다. 다음 단계는 기본 ClusterClass 매니페스트 사용자 지정을 참조하십시오.
Tanzu CLI v1.0.0 이상을 설치한 후 관리 클러스터를 배포하기 전에 ~/.config/tanzu/tkg/providers/infrastructure-<provider name>/<provider version>/cconly
폴더에서 기본 ClusterClass에 대한 YTT 템플릿을 찾을 수 있습니다. 이러한 템플릿을 사용하여 사용자 지정 ClusterClass 생성을 위한 기본 매니페스트를 생성할 수 있습니다.
템플릿을 찾으려면 대상 플랫폼에 대해 적절한 명령을 실행합니다.
tree ~/.config/tanzu/tkg/providers/infrastructure-vsphere/v1.7.0/cconly
다음과 같은 YAML 파일이 표시됩니다.
.config/tanzu/tkg/providers/infrastructure-vsphere/v1.7.0/cconly
├── base.yaml
├── overlay-kube-apiserver-admission.yaml
└── overlay.yaml
1 directory, 3 files
tree ~/.config/tanzu/tkg/providers/infrastructure-aws/v2.1.3/cconly
다음과 같은 YAML 파일이 표시됩니다.
.config/tanzu/tkg/providers/infrastructure-aws/v2.1.3/cconly
├── base.yaml
├── overlay-kube-apiserver-admission.yaml
└── overlay.yaml
tree ~/.config/tanzu/tkg/providers/infrastructure-azure/v1.9.2/cconly/
다음과 같은 YAML 파일이 표시됩니다.
.config/tanzu/tkg/providers/infrastructure-azure/v1.9.2/cconly/
├── base.yaml
├── overlay-kube-apiserver-admission.yaml
└── overlay.yaml
다음 내용으로 이름이 user_input.yaml
인 YTT 데이터-값 파일을 생성합니다.
#@data/values
#@overlay/match-child-defaults missing_ok=True
---
대상 플랫폼에 적합한 구성 값을 user_input.yaml
에 추가합니다.
관리 클러스터 배포를 배포할 때 사용한 구성 값을 사용할 수 있습니다. 예를 들어 vSphere용 user_input.yaml
파일은 다음과 유사합니다.
#@data/values
#@overlay/match-child-defaults missing_ok=True
---
ENABLE_MHC: true
ENABLE_MHC_CONTROL_PLANE: true
ENABLE_MHC_WORKER_NODE: true
MHC_UNKNOWN_STATUS_TIMEOUT: 5m
MHC_FALSE_STATUS_TIMEOUT: 12m
MHC_MAX_UNHEALTHY_CONTROL_PLANE: 100%
MHC_MAX_UNHEALTHY_WORKER_NODE: 100%
NODE_STARTUP_TIMEOUT: 20m
VSPHERE_TLS_THUMBPRINT: 0A:B4:8F:2E:E4:34:82:90:D5:6A:F8:77:8C:8C:51:24:D2:49:3B:E8
VSPHERE_DATACENTER: /dc0
VSPHERE_DATASTORE: /dc0/datastore/sharedVmfs-0
VSPHERE_FOLDER: /dc0/vm
VSPHERE_NETWORK: /dc0/network/VM Network
VSPHERE_RESOURCE_POOL: /dc0/host/cluster0/Resources
VSPHERE_SERVER: xxx.xxx.xxx.xxx
VSPHERE_USERNAME: [email protected]
VSPHERE_CONTROL_PLANE_DISK_GIB: "20"
VSPHERE_CONTROL_PLANE_MEM_MIB: "8192"
VSPHERE_CONTROL_PLANE_NUM_CPUS: "4" VSPHERE_WORKER_DISK_GIB: "20"
VSPHERE_WORKER_MEM_MIB: "8192"
VSPHERE_WORKER_NUM_CPUS: "4"
VSPHERE_CLUSTER_CLASS_VERSION: "v1.1.0" # change it to the version in TKG BOM
NAMESPACE: "tkg-system" # DO NOT change it
ytt
를 사용하여 대상 플랫폼에 대한 기본 ClusterClass 매니페스트를 생성합니다.
ytt -f ~/.config/tanzu/tkg/providers/infrastructure-vsphere/v1.7.0/cconly -f ~/.config/tanzu/tkg/providers/config_default.yaml -f user_input.yaml
ytt -f ~/.config/tanzu/tkg/providers/infrastructure-aws/v2.1.3/cconly -f ~/.config/tanzu/tkg/providers/config_default.yaml -f user_input.yaml
ytt -f ~/.config/tanzu/tkg/providers/infrastructure-azure/v1.9.2/cconly -f ~/.config/tanzu/tkg/providers/config_default.yaml -f user_input.yaml
인프라에 대한 기본 매니페스트를 생성했으므로 다음 단계에 대해서는 기본 ClusterClass 매니페스트 사용자 지정을 참조하십시오.
기본 ClusterClass에 대한 YTT 템플릿은 TKG 이미지 저장소에서 다운로드할 수도 있습니다. 이러한 템플릿을 사용하여 사용자 지정 ClusterClass 생성을 위한 기본 매니페스트를 생성할 수 있습니다.
공식 TKG 레지스트리의 providerTemplate
이미지에서 YTT 템플릿을 가져옵니다.
TKG v2.3.1의 경우 providerTemplate
이미지 태그는 v0.30.2
입니다. TKG BOM 파일에서 providerTemplateImage
를 검색하여 태그 버전을 찾을 수 있습니다.
imgpkg pull -i projects.registry.vmware.com/tkg/tanzu_core/provider/provider-templates:v0.30.2 -o providers
다음과 유사한 출력이 표시됩니다.
Pulling image 'projects.registry.vmware.com/tkg/tanzu_core/provider/provider-templates@sha256:b210d26c610800f5da4b3aa55bfbc8ffae9275fa2c4073a2b1332e2045a6e1da'
Extracting layer 'sha256:3ba336232c0e616b2b6c8f263593497c5a059a645f4c6137ea0eb658f4a8538a' (1/1)
Succeeded
YAML 템플릿 파일은 providers
폴더에 다운로드됩니다.
다음 내용으로 이름이 user_input.yaml
인 YTT 데이터-값 파일을 생성합니다.
#@data/values
#@overlay/match-child-defaults missing_ok=True
---
대상 플랫폼에 적합한 구성 값을 user_input.yaml
에 추가합니다.
관리 클러스터 배포를 배포할 때 사용한 구성 값을 사용할 수 있습니다. 예를 들어 vSphere용 user_input.yaml
파일은 다음과 유사합니다.
#@data/values
#@overlay/match-child-defaults missing_ok=True
---
ENABLE_MHC: true
ENABLE_MHC_CONTROL_PLANE: true
ENABLE_MHC_WORKER_NODE: true
MHC_UNKNOWN_STATUS_TIMEOUT: 5m
MHC_FALSE_STATUS_TIMEOUT: 12m
MHC_MAX_UNHEALTHY_CONTROL_PLANE: 100%
MHC_MAX_UNHEALTHY_WORKER_NODE: 100%
NODE_STARTUP_TIMEOUT: 20m
VSPHERE_TLS_THUMBPRINT: 0A:B4:8F:2E:E4:34:82:90:D5:6A:F8:77:8C:8C:51:24:D2:49:3B:E8
VSPHERE_DATACENTER: /dc0
VSPHERE_DATASTORE: /dc0/datastore/sharedVmfs-0
VSPHERE_FOLDER: /dc0/vm
VSPHERE_NETWORK: /dc0/network/VM Network
VSPHERE_RESOURCE_POOL: /dc0/host/cluster0/Resources
VSPHERE_SERVER: xxx.xxx.xxx.xxx
VSPHERE_USERNAME: [email protected]
VSPHERE_CONTROL_PLANE_DISK_GIB: "20"
VSPHERE_CONTROL_PLANE_MEM_MIB: "8192"
VSPHERE_CONTROL_PLANE_NUM_CPUS: "4" VSPHERE_WORKER_DISK_GIB: "20"
VSPHERE_WORKER_MEM_MIB: "8192"
VSPHERE_WORKER_NUM_CPUS: "4"
VSPHERE_CLUSTER_CLASS_VERSION: "v1.1.0" # change it to the version in TKG BOM
NAMESPACE: "tkg-system" # DO NOT change it
ytt
를 사용하여 대상 플랫폼에 대한 기본 ClusterClass 매니페스트를 생성합니다.
ytt -f providers/infrastructure-vsphere/v1.7.0/cconly -f providers/config_default.yaml -f user_input.yaml
ytt -f providers/infrastructure-aws/v2.1.3/cconly -f providers/config_default.yaml -f user_input.yaml
ytt -f ~/.config/tanzu/tkg/providers/infrastructure-azure/v1.9.2/cconly -f ~/.config/tanzu/tkg/providers/config_default.yaml -f user_input.yaml
인프라에 대한 기본 매니페스트를 생성했으므로 다음 단계에 대해서는 기본 ClusterClass 매니페스트 사용자 지정을 참조하십시오.
ClusterClass 매니페스트를 사용자 지정하려면 매니페스트와 함께 ytt
오버레이 파일을 생성합니다. 다음 예에서는 ClusterClass 정의에서 Linux 커널 매개 변수를 수정하는 방법을 보여 줍니다.
다음과 같은 구조의 custom
폴더를 생성합니다.
tree custom
custom
|-- overlays
|-- filter.yaml
|-- kernels.yaml
custom/overlays/kernels.yaml
을 편집합니다.
예를 들어, nfConntrackMax
를 변수로 추가하고, 제어부 노드의 커널 매개 변수 net.netfilter.nf_conntrack_max
에 값을 추가하는 패치를 정의합니다.
이 오버레이는 preKubeadmCommands
필드에 명령을 추가하여 구성을 sysctl.conf
에 기록합니다. 설정을 적용하려면 sysctl -p
명령을 추가하여 이 변경 내용을 적용합니다. 기본 ClusterClass 정의는 변경할 수 없으므로 이 오버레이는 -extended
를 추가하여 사용자 지정 ClusterClass의 이름과 모든 템플릿도 변경합니다.
cat custom/overlays/kernels.yaml
#@ load("@ytt:overlay", "overlay")
#@overlay/match by=overlay.subset({"kind":"ClusterClass"})
---
apiVersion: cluster.x-k8s.io/v1beta1
kind: ClusterClass
metadata:
name: tkg-vsphere-default-v1.1.0-extended
spec:
variables:
- name: nfConntrackMax
required: false
schema:
openAPIV3Schema:
type: string
patches:
- name: nfConntrackMax
enabledIf: '{{ not (empty .nfConntrackMax) }}'
definitions:
- selector:
apiVersion: controlplane.cluster.x-k8s.io/v1beta1
kind: KubeadmControlPlaneTemplate
matchResources:
controlPlane: true
jsonPatches:
- op: add
path: /spec/template/spec/kubeadmConfigSpec/preKubeadmCommands/-
valueFrom:
template: echo "net.netfilter.nf_conntrack_max={{ .nfConntrackMax }}" >> /etc/sysctl.conf
- op: add
path: /spec/template/spec/kubeadmConfigSpec/preKubeadmCommands/-
value: sysctl -p
변경하지 않으려는 리소스를 제거합니다.
이 예에서 모든 템플릿은 사용자 지정 및 기본 ClusterClass 간에 공유되어 모두 제거됩니다. 기본 템플릿을 기반으로 사용자 지정 템플릿을 동일한 방식으로 생성할 수도 있습니다. 이 경우 kind
가 제외되지 않도록 합니다.
cat custom/overlays/filter.yaml
#@ load("@ytt:overlay", "overlay")
#@overlay/match by=overlay.not_op(overlay.subset({"kind": "ClusterClass"})),expects="0+"
---
#@overlay/remove
기본 ClusterClass 매니페스트를 사용하여 기본 ClusterClass를 생성합니다.
ytt -f tkg-vsphere-default-v1.1.0.yaml -f custom/overlays/filter.yaml > default_cc.yaml
사용자 지정 ClusterClass를 생성합니다.
ytt -f tkg-vsphere-default-v1.1.0.yaml -f custom/ > custom_cc.yaml
(선택 사항) 기본 ClusterClass와 사용자 지정 항목 간의 차이점을 확인하여 변경 내용이 적용되었는지 확인합니다.
diff default_cc.yaml custom_cc.yaml
다음과 유사한 출력이 표시됩니다.
4c4
< name: tkg-vsphere-default-v1.1.0
---
> name: tkg-vsphere-default-v1.1.0-extended
638a639,643
> - name: nfConntrackMax
> required: false
> schema:
> openAPIV3Schema:
> type: string
2607a2613,2628
> - name: nfConntrackMax
> enabledIf: '{{ not (empty .nfConntrackMax) }}'
> definitions:
> - selector:
> apiVersion: controlplane.cluster.x-k8s.io/v1beta1
> kind: KubeadmControlPlaneTemplate
> matchResources:
> controlPlane: true
> jsonPatches:
> - op: add
> path: /spec/template/spec/kubeadmConfigSpec/preKubeadmCommands/-
> valueFrom:
> template: echo "net.netfilter.nf_conntrack_max={{ .nfConntrackMax }}" >> /etc/sysctl.conf
> - op: add
> path: /spec/template/spec/kubeadmConfigSpec/preKubeadmCommands/-
> value: sysctl -p
이 예에서는 확장된 -extended
가 클러스터 이름에 추가된 것을 볼 수 있습니다.
관리 클러스터에서 사용자 지정 ClusterClass를 사용하도록 설정하려면 새 매니페스트를 적용하여 설치합니다.
ClusterClass 매니페스트를 적용합니다.
kubectl apply -f custom_cc.yaml
다음 출력을 볼 수 있습니다.
clusterclass.cluster.x-k8s.io/tkg-vsphere-default-v1.1.0-extended created
사용자 지정 ClusterClass가 기본 네임스페이스로 전파되었는지 확인합니다. 예:
kubectl get clusterclass
다음 출력을 볼 수 있습니다.
NAME AGE
tkg-vsphere-default-v1.1.0 2d23h
tkg-vsphere-default-v1.1.0-extended 11s
사용자 지정 ClusterClass를 생성한 후 이를 사용하여 사용자 지정이 포함된 새 워크로드 클러스터를 생성할 수 있습니다.
--dry-run
옵션과 함께 tanzu cluster create
를 실행하여 표준 클러스터 구성 파일에서 클러스터 매니페스트를 생성합니다.
tanzu cluster create --file workload-1.yaml --dry-run > default_cluster.yaml
ytt
오버레이를 생성하거나 클러스터 매니페스트를 직접 편집합니다.
권장되는 옵션은 ytt
오버레이(예: cluster_overlay.yaml
)를 생성하여 다음을 수행하는 것입니다.
topology.class
값을 사용자 지정 ClusterClass의 이름으로 바꿉니다.variables
블록에 추가합니다.ClusterClass 개체 규격 수정과 마찬가지로 다음과 같이 오버레이를 사용하면 새 업스트림 클러스터 릴리스가 있을 때마다 새 개체에 변경 내용을 자동으로 적용할 수 있습니다.
#@ load("@ytt:overlay", "overlay")
#@overlay/match by=overlay.subset({"kind":"Cluster"})
---
apiVersion: cluster.x-k8s.io/v1beta1
kind: Cluster
spec:
topology:
class: tkg-vsphere-default-v1.1.0-extended
variables:
- name: nfConntrackMax
value: "1048576
custom_cluster.yaml
매니페스트를 생성합니다.
ytt -f default_cluster.yaml -f cluster_overlay.yaml > custom_cluster.yaml
(선택 사항) 위의 ClusterClass와 마찬가지로 diff
를 실행하여 사용자 지정 클래스 클러스터 매니페스트를 기본 클래스 기반 클러스터와 비교할 수 있습니다. 예를 들면 다음과 같습니다.
diff custom_cluster.yaml default_cluster.yaml
다음과 유사한 출력이 표시됩니다.
< class: tkg-vsphere-default-v1.1.0
---
> class: tkg-vsphere-default-v1.1.0-extended
142a143,144
> - name: nfConntrackMax
> value: "1048576"
다음과 같이 위에서 생성된 사용자 지정 매니페스트를 기반으로 사용자 지정 워크로드 클러스터를 생성합니다.
클러스터를 생성합니다.
tanzu cluster create -f custom_cluster.yaml
생성된 개체 속성을 확인합니다.
예를 들어 위의 커널 수정을 사용하는 경우 KubeadmControlPlane
개체를 검색하고 커널 구성이 설정되었는지 확인합니다.
kubectl get kcp workload-1-jgwd9 -o yaml
다음과 유사한 출력이 표시됩니다.
apiVersion: controlplane.cluster.x-k8s.io/v1beta1
kind: KubeadmControlPlane
...
preKubeadmCommands:
- hostname "{{ ds.meta_data.hostname }}"
- echo "::1 ipv6-localhost ipv6-loopback" >/etc/hosts
- echo "127.0.0.1 localhost" >>/etc/hosts
- echo "127.0.0.1 {{ ds.meta_data.hostname }}" >>/etc/hosts
- echo "{{ ds.meta_data.hostname }}" >/etc/hostname
- echo "net.netfilter.nf_conntrack_max=1048576" >> /etc/sysctl.conf
- sysctl -p
...
제어부 노드에 로그인하고 해당 sysctl.conf
가 수정되었는지 확인합니다.
capv@workload-1-jgwd9:~$ sudo cat /etc/sysctl.conf
...
net.ipv6.neigh.default.gc_thresh3=16384
fs.file-max=9223372036854775807
net.netfilter.nf_conntrack_max=1048576
이전 릴리스에서 사용자 지정 클러스터를 생성한 경우 최신 TKG 릴리스로 업그레이드할 수 있습니다.
클러스터를 업그레이드하기 전에 수행해야 할 준비 단계가 있습니다.
관리 클러스터를 업그레이드하기 전에 이전 릴리스에 대해 생성한 사용자 지정 매니페스트 버전으로 테스트 클러스터를 생성합니다.
예를 들어 이름이 test-upgrade
인 사용자 지정 클러스터를 생성합니다.
TKG 2.2 관리 클러스터에서 사용할 수 있는 ClusterClass 버전에 대한 정보를 가져옵니다.
kubectl get clusterclass
TKG v2.2.0을 사용하여 사용자 지정 클러스터를 생성한 경우 ClusterClass 버전은 1.0.0이어야 합니다. 예:
NAME AGE
tkg-vsphere-default-extended-v1.0.0 21m
tkg-vsphere-default-v1.0.0 10d
test-upgrade
클러스터에서 실행되는 ClusterClass 버전에 대한 정보를 가져옵니다.
kubectl get cluster test-upgrade -o jsonpath='{.spec.topology.class}'
출력은 tkg-vsphere-default-extended-v1.0.0
이어야 합니다.
관리 클러스터를 TKG 2.3으로 업그레이드하려면 독립형 관리 클러스터 업그레이드의 지침을 따르십시오.
관리 클러스터를 v.2.3으로 업그레이드한 후 사용할 수 있는 ClusterClass 버전에 대한 정보를 가져옵니다.
kubectl get cluster mgmt-cluster-name -n tkg-system -o jsonpath='{.spec.topology.class}'
관리 클러스터가 vSphere 실행 중인 경우 출력은 tkg-vsphere-default-v1.1.0
이어야 합니다.
tkg-vsphere-default-v1.1.0-extended
의 이름을 지정하고, 이전 버전 tkg-vsphere-default-extended-v1.0.0
과 동일한 사용자 지정 변수를 포함합니다.custom_cc.yaml
의 이름을 지정합니다.관리 클러스터에 새 사용자 지정 ClusterClass를 설치합니다.
kubectl apply -f custom_cc.yaml
이제 관리 클러스터에서 사용할 수 있는 ClusterClass 버전에 대한 정보를 가져옵니다.
kubectl get clusterclass
이전 버전과 최신 버전이 모두 표시되어야 합니다.
NAME AGE
tkg-vsphere-default-extended-v1.0.0 61m
tkg-vsphere-default-v1.0.0 10d
tkg-vsphere-default-v1.1.0 25m
tkg-vsphere-default-v1.1.0-extended 15s
준비 단계를 수행한 후에는 운영 클러스터를 업그레이드하기 전에 테스트 클러스터에서 업그레이드를 테스트할 수 있습니다.
클러스터 test-upgrade
를 이전 버전의 사용자 지정 ClusterClass에서 새 버전으로 재배치합니다.
kubectl patch cluster test-upgrade --type merge -p '{"spec": {"topology": {"class": "tkg-vsphere-default-v1.1.0-extended"}}}'
출력은 cluster.cluster.x-k8s.io/test-upgrade patched
이어야 합니다.
test-upgrade
클러스터에서 현재 실행 중인 ClusterClass 버전에 대한 정보를 가져옵니다.
kubectl get cluster test-upgrade -o jsonpath='{.spec.topology.class}'
출력은 tkg-vsphere-default-v1.1.0-extended
이어야 합니다. 이전에는 tkg-vsphere-default-extended-v1.0.0
이었습니다.
몇 분 동안 기다린 후 UpdatesAvailable
이 true
로 업데이트됨이 표시될 때까지 kubectl get cluster
를 실행합니다.
kubectl get cluster test-upgrade -o yaml
준비가 되면 출력에 다음과 유사한 메시지가 표시됩니다.
...
status:
conditions:
...
- lastTransitionTime: "2023-06-19T09:59:21Z"
message: '[v1.25.9+vmware.1-tkg.1-20230609 v1.26.4+vmware.1-tkg.1-20230609]'
status: "True"
type: UpdatesAvailable
controlPlaneReady: true
infrastructureReady: true
observedGeneration: 5
phase: Provisioned
test-upgrade
클러스터를 업그레이드합니다.
tanzu cluster upgrade test-upgrade
생성된 개체 속성을 확인합니다.
예를 들어 위의 예에서 설명된 커널 수정을 사용하여 KubeadmControlPlane
개체를 검색하고 커널 구성이 설정되었는지 확인합니다.
kubectl get kcp test-upgrade-nsc6d -o yaml
다음과 유사한 출력이 표시됩니다.
apiVersion: controlplane.cluster.x-k8s.io/v1beta1
kind: KubeadmControlPlane
...
preKubeadmCommands:
- hostname "{{ ds.meta_data.hostname }}"
- echo "::1 ipv6-localhost ipv6-loopback" >/etc/hosts
- echo "127.0.0.1 localhost" >>/etc/hosts
- echo "127.0.0.1 {{ ds.meta_data.hostname }}" >>/etc/hosts
- echo "{{ ds.meta_data.hostname }}" >/etc/hostname
- sed -i 's|".*/pause|"projects-stg.registry.vmware.com/tkg/pause|' /etc/containerd/config.toml
- systemctl restart containerd
- echo "net.netfilter.nf_conntrack_max=1048576" >> /etc/sysctl.conf
- sysctl -p
테스트 업그레이드가 성공하면 프로덕션 클러스터에서 가상 업그레이드 단계를 반복합니다.
참고업그레이드 중에 오류가 발생하는 경우 클러스터를 새 버전의 사용자 지정 ClusterClass에서 이전 버전으로 재지정하여 롤백할 수 있습니다.
기본 ClusterClass를 사용하여 클러스터를 생성했으며 사용자 지정 ClusterClass를 사용하도록 클러스터를 업데이트하려면 kubectl
을 사용하여 클러스터 개체를 편집합니다.
spec.topology.class
를 사용자 지정 ClassClass 매니페스트의 이름으로 변경합니다.spec.topology.variables
를 수정합니다.기본 ClusterClass의 새 버전으로 되돌리려면 다음을 수행합니다.
spec.topology.class
를 기본 ClusterClass의 새 버전으로 변경합니다.spec.topology.variables
을 수정하여 사용자 지정 변수를 제거합니다. 기본 ClusterClass의 새 버전에 정의된 새 변수를 추가해야 할 수 있습니다.