오늘은 Tanzu와 함께 vSphere에서 TKG Service(TKGS)를 통해 구축되는 TKG 클러스터의 구성 가능성을 확장하는 새로운 Tanzu Kubernetes Cluster YAML 형식(v1alpha2)에 대해 자세히 알아보려고 합니다. 우리는 두 가지 관점에서 이것을 살펴볼 것입니다. 첫 번째 방법은 v1alpha2 형식에는 여러 매니페스트 설정이 필요하므로 새 TKG 클러스터를 생성할 때의 차이점을 보여 줍니다. 두 번째 관점에서는 v1alpha1에서 v1alpha2 형식으로 업그레이드된 기존 클러스터에서 Tkr(Tandu Kubernetes Release)을 업그레이드하는 방법을 살펴봅니다. 이 절차는 과거에 v1alpha1 클러스터를 업그레이드했던 방식과 조금 다릅니다. Supervisor Cluster를 v1alpha2 형식(예: v1.21.0)을 지원하는 버전으로 업그레이드할 때 v1alpha2로의 이 형식 업그레이드가 자동으로 수행되지만 클러스터에서 실행 중인 실제 릴리스 또는 Kubernetes 버전은 여전히 수동으로 업데이트해야 합니다.
새 v1alpha2 형식 TKG 클러스터를 생성
변경 사항을 입증하는 가장 쉬운 방법은 v1alpha2 형식의 매니페스트를 표시하고 이전 v1alpha1 형식과 비교하는 것입니다. 아래에 몇 가지 간단한 매니페스트 예를 나란히 나열했습니다.
v1alpha1 형식
apiVersion: run.tanzu.vmware.com/v1alpha1 kind: TanzuKubernetesCluster metadata: name: tkg-cluster-02 spec: topology: controlPlane: count: 1 class: guaranteed-small storageClass: vsan-default-storage-policy workers: count: 2 class: guaranteed-small storageClass: vsan-default-storage-policy distribution: version: v1.20.7
v1alpha2 형식
apiVersion: run.tanzu.vmware.com/v1alpha2 kind: TanzuKubernetesCluster metadata: name: tkg-cluster-01 namespace: devops1 spec: topology: controlPlane: replicas: 1 vmClass: guaranteed-small storageClass: vsan-default-storage-policy tkr: reference: name: v1.20.7---vmware.1-tkg.1.7fb9067 nodePools: - name: worker-pool-1 replicas: 2 vmClass: guaranteed-small storageClass: vsan-default-storage-policy tkr: reference: name: v1.20.7---vmware.1-tkg.1.7fb9067
강조해야 할 주요 차이점은 다음과 같습니다.
- apiVersion: v1alpha2가 v1alpha1을 대체합니다.
- 메타데이터에 네임스페이스를 지정할 수 있습니다.
- spec.topology.controlPlane.replicas가 spec.topology.count를 대체합니다.
- vmClass가 가상 시스템 클래스 유형의 클래스를 대체합니다.
- 릴리스/배포를 지정하는 새 spec.topology.controlPlane.tkr 항목입니다.
- spec.spec입니다.작업자는 spec.topology.nodePools로 대체됩니다.
- distribution.version이 사용되지 않습니다.
현재 릴리스에서는 tkr.reference.name 필드가 ControlPlane 및 nodePools 섹션에서 모두 일치해야 합니다. 향후 노드 풀용 Tanzu Kubernetes 릴리스가 지원될 수 있으므로, 이 새로운 형식 중 일부는 미래를 대비한 것입니다.
TKG 서비스를 통해 새 TKC를 배포하려면 클러스터 매니페스트에 지정된 가상 시스템 클래스 및 스토리지 클래스를 클러스터가 배포되는 네임스페이스에 추가해야 합니다. 다음은 VM 클래스와 스토리지 클래스가 모두 추가되거나 바인딩된 환경의 “devops1” 네임스페이스 보기입니다.
명령줄을 사용하여 클러스터를 생성하는 데 사용할 매개 변수를 사용할 수 있는지 확인할 수도 있습니다. 다음과 같이 사용 가능한 모든 가상 시스템 클래스, 스토리지 클래스 및 네임스페이스에 바인딩된 가상 시스템 클래스를 표시할 수 있습니다.
% kubectl get virtualmachineclass NAME CPU MEMORY AGE best-effort-2xlarge 8 64Gi 81d best-effort-4xlarge 16 128Gi 81d best-effort-8xlarge 32 128Gi 81d best-effort-large 4 16Gi 81d best-effort-medium 2 8Gi 231d best-effort-small 2 4Gi 231d best-effort-xlarge 4 32Gi 81d best-effort-xsmall 2 2Gi 81d guaranteed-2xlarge 8 64Gi 81d guaranteed-4xlarge 16 128Gi 81d guaranteed-8xlarge 32 128Gi 81d guaranteed-large 4 16Gi 231d guaranteed-medium 2 8Gi 231d guaranteed-small 2 4Gi 81d guaranteed-xlarge 4 32Gi 81d guaranteed-xsmall 2 2Gi 81d % kubectl get storageclass NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE vsan-default-storage-policy csi.vsphere.vmware.com Delete Immediate true 253d % kubectl get vmclassbinding -n devops1 NAME VIRTUALMACHINECLASS AGE guaranteed-small guaranteed-small 2m17s
사용 가능한 Tanzu Kubernetes Release는 tanzukubernetesrelease 지시문(줄여서 tkr)을 사용하여 쿼리할 수도 있습니다. 보다시피 최신 버전은 현재 v1.20.7로 위의 매니페스트에 배치되어 있습니다.
% kubectl get tkr NAME VERSION READY COMPATIBLE CREATED UPDATES AVAILABLE v1.16.12---vmware.1-tkg.1.da7afe7 1.16.12+vmware.1-tkg.1.da7afe7 True True 22h [1.17.17+vmware.1-tkg.1.d44d45a 1.16.14+vmware.1-tkg.1.ada4837] v1.16.14---vmware.1-tkg.1.ada4837 1.16.14+vmware.1-tkg.1.ada4837 True True 22h [1.17.17+vmware.1-tkg.1.d44d45a] v1.16.8---vmware.1-tkg.3.60d2ffd 1.16.8+vmware.1-tkg.3.60d2ffd False False 22h [1.17.17+vmware.1-tkg.1.d44d45a 1.16.14+vmware.1-tkg.1.ada4837] v1.17.11---vmware.1-tkg.1.15f1e18 1.17.11+vmware.1-tkg.1.15f1e18 True True 22h [1.18.15+vmware.1-tkg.2.ebf6117 1.17.17+vmware.1-tkg.1.d44d45a] v1.17.11---vmware.1-tkg.2.ad3d374 1.17.11+vmware.1-tkg.2.ad3d374 True True 22h [1.18.15+vmware.1-tkg.2.ebf6117 1.17.17+vmware.1-tkg.1.d44d45a] v1.17.13---vmware.1-tkg.2.2c133ed 1.17.13+vmware.1-tkg.2.2c133ed True True 22h [1.18.15+vmware.1-tkg.2.ebf6117 1.17.17+vmware.1-tkg.1.d44d45a] v1.17.17---vmware.1-tkg.1.d44d45a 1.17.17+vmware.1-tkg.1.d44d45a True True 22h [1.18.15+vmware.1-tkg.2.ebf6117] v1.17.7---vmware.1-tkg.1.154236c 1.17.7+vmware.1-tkg.1.154236c True True 22h [1.18.15+vmware.1-tkg.2.ebf6117 1.17.17+vmware.1-tkg.1.d44d45a] v1.17.8---vmware.1-tkg.1.5417466 1.17.8+vmware.1-tkg.1.5417466 True True 22h [1.18.15+vmware.1-tkg.2.ebf6117 1.17.17+vmware.1-tkg.1.d44d45a] v1.18.10---vmware.1-tkg.1.3a6cd48 1.18.10+vmware.1-tkg.1.3a6cd48 True True 22h [1.19.7+vmware.1-tkg.2.f52f85a 1.18.15+vmware.1-tkg.2.ebf6117] v1.18.15---vmware.1-tkg.1.600e412 1.18.15+vmware.1-tkg.1.600e412 True True 22h [1.19.7+vmware.1-tkg.2.f52f85a 1.18.15+vmware.1-tkg.2.ebf6117] v1.18.15---vmware.1-tkg.2.ebf6117 1.18.15+vmware.1-tkg.2.ebf6117 True True 22h [1.19.7+vmware.1-tkg.2.f52f85a] v1.18.5---vmware.1-tkg.1.c40d30d 1.18.5+vmware.1-tkg.1.c40d30d True True 22h [1.19.7+vmware.1-tkg.2.f52f85a 1.18.15+vmware.1-tkg.2.ebf6117] v1.19.7---vmware.1-tkg.1.fc82c41 1.19.7+vmware.1-tkg.1.fc82c41 True True 22h [1.20.7+vmware.1-tkg.1.7fb9067 1.19.7+vmware.1-tkg.2.f52f85a] v1.19.7---vmware.1-tkg.2.f52f85a 1.19.7+vmware.1-tkg.2.f52f85a True True 22h [1.20.7+vmware.1-tkg.1.7fb9067] v1.20.2---vmware.1-tkg.1.1d4f79a 1.20.2+vmware.1-tkg.1.1d4f79a True True 22h [1.20.7+vmware.1-tkg.1.7fb9067] v1.20.2---vmware.1-tkg.2.3e10706 1.20.2+vmware.1-tkg.2.3e10706 True True 22h [1.20.7+vmware.1-tkg.1.7fb9067] v1.20.7---vmware.1-tkg.1.7fb9067 1.20.7+vmware.1-tkg.1.7fb9067 True True 22h
새 클러스터를 생성하려면 이전에 사용한 kubectl apply -f 명령을 실행하면 됩니다. 모든 작업이 잘 진행되면 클러스터가 생성되어야 합니다.
% kubectl apply -f tanzucluster-v1alpha2-v1.20.7.yaml tanzukubernetescluster.run.tanzu.vmware.com/tkg-cluster-03 created % kubectl get tanzukubernetesclusters -n devops1 NAME CONTROL PLANE WORKER TKR NAME AGE READY TKR COMPATIBLE UPDATES AVAILABLE tkg-cluster-03 1 2 v1.20.7---vmware.1-tkg.1.7fb9067 37m True True
OK – 새 클러스터를 생성하는 방법을 보여줍니다. 기존 클러스터를 업그레이드하는 방법은 어떻습니까?
v1alpha2 형식 TKG 클러스터를 업그레이드
vSphere with Tanzu 환경에서 Supervisor Cluster를 업그레이드한 후 TKG 클러스터가 v1alpha2 형식으로 자동으로 업그레이드됩니다. 현재 환경에서 vSphere는 버전 7.0U3c로, Supervisor Cluster는 버전 1.21.0으로 업그레이드했습니다. 그러나 이 프로세스는 릴리스 버전(tkr)을 업그레이드하지 않습니다. 이 작업은 여전히 수동으로 수행되지만 이제 업데이트해야 하는 필드가 v1alpha1 형식 클러스터의 이전 업그레이드와 비교할 때 다릅니다. v1alpha1 클러스터에서 다음 필드를 변경합니다.
spec: distribution: fullVersion: v1.20.2+vmware.1-tkg.2.3e10706 version: v1.20.2
위 예의 경우는 다음과 같습니다.
spec: distribution: fullVersion: null version: v1.20.7
그러면 TKG 클러스터의 롤링 업데이트가 자동으로 새 버전으로 트리거됩니다. Supervisor Cluster를 v1.21.0으로 업그레이드하지 않았고, TKG 클러스터가 v1alpha2 형식으로 변환되지 않은 경우 이 절차를 따라야 합니다.
새 v1alpha2 형식에서는 controlPlane과 nodePools 섹션에서 tkr.reference.name 필드를 변경해야 합니다. 예를 들어 TKG 클러스터를 v1.20.7로 업그레이드하려고 합니다. kubectl edit tanguubernetescluster 명령을 실행한 후 다음 필드를 변경해야 합니다(다른 일부 필드는 잘림).
. . topology: controlPlane: replicas: 1 storageClass: vsan-default-storage-policy tkr: reference: name: v1.20.7---vmware.1-tkg.1.7fb9067 <<< change here vmClass: guaranteed-small nodePools: - name: workers replicas: 3 storageClass: vsan-default-storage-policy tkr: reference: name: v1.20.7---vmware.1-tkg.1.7fb9067 <<< and here vmClass: best-effort-small
그러면 이전처럼 롤링 업그레이드가 트리거됩니다. 일부 영역에서 tkr 참조를 제거할 수도 있고 사용되지 않는 distribution.version을 다시 사용할 수도 있기 때문에 이와 관련된 몇 가지 문제가 있습니다. 만약 관심이 있다면 이것을 어떻게 해야 하는지에 대한 훌륭한 기록이 공식 문서에 있습니다.
출처 : https://cormachogan.com/2022/02/03/a-closer-look-at-the-v1alpha2-tanzukubernetescluster-format-in-vsphere-with-tanzu/