이 항목에서는 여러 AZ(가용성 영역)에서 실행되는 새 TKG(Tanzu Kubernetes Grid) 워크로드 클러스터를 배포하는 방법과 기존 관리 및 워크로드 클러스터를 여러 또는 다른 AZ에서 실행하도록 변경하는 방법을 설명합니다.
설치 관리자 인터페이스를 사용하여 여러 AZ에서 실행되는 새로운 독립형 관리 클러스터를 구성하려면 설치 관리자 인터페이스를 사용하여 관리 클러스터 배포의 vSphere 리소스 구성을 참조하십시오.
참고이 항목은 독립형 관리 클러스터가 있는 TKG에 적용됩니다. 여러 가용성 영역에서 Supervisor와 함께 TKG를 실행하려면 vSphere 8.0 설명서의 다중 영역 Supervisor 배포에 대한 VSphere 영역 생성을 참조하십시오.
Kubernetes 개체: vSphere 클러스터에 여러 가용성 영역을 사용하도록 설정하기 위해 CAPV(클러스터 API 제공자 vSphere)는 다음 두 가지 CRD(사용자 리소스 정의)를 사용합니다.
VSphereFailureDomain
CRD는 지역/영역별 태그 지정 정보와 vSphere 데이터 센터, 클러스터, 호스트, 데이터스토어 정보를 포함하는 토폴로지 정의를 캡처합니다.VSphereDeploymentZone
CRD는 kubernetes 노드에 대한 배치 제약 조건 정보와 VSphereFailureDomain
연결을 캡처합니다.Kubernetes-vSphere 연결: VSphereFailureDomain
및 VSphereDeploymentZone
개체 정의는 지역 및 AZ를 다음 설정으로 정의합니다.
spec.region
spec.zone
vSphere는 k8s-region
및 k8s-zone
태그를 지정하여 Kubernetes의 지역과 AZ를 vSphere 기본 개체와 연결합니다.
AZ 범위: 다음과 같이 AZ 및 지역을 vSphere 개체와 연결하여 vSphere 여러 수준에서 범위를 지정할 수 있습니다.
AZ 범위 | 영역/AZ | 지역 | 다중 AZ 사용 |
---|---|---|---|
클러스터 AZ | vSphere 클러스터 | vSphere 데이터 센터 | 데이터 센터의 여러 클러스터에 노드 분산 |
호스트 그룹 AZ | vSphere 호스트 그룹 | vSphere 클러스터 | 단일 클러스터의 여러 호스트에 노드 분산 |
이 항목의 구성은 개체가 vSphere에서 태그가 지정되고 VSphereFailureDomain
및 VSphereDeploymentZone
정의에서 참조되는 방식에 따라 vSphere 개체, 즉 vSphere 데이터 센터, 클러스터, 호스트에 TKG 클러스터 제어부 및 Worker 노드를 분산합니다.
Cluster
개체 구성: Cluster
개체 사양은 AZ를 정의하는 VSphereDeploymentZone
개체의 서로 다른 속성과 일치하는 다양한 방식으로 제어부 및 Worker 노드에 AZ를 구성합니다.
노드 유형 | spec.topology 아래의 속성 |
VSphereDeploymentZone 속성과 일치하려면 |
예 |
---|---|---|---|
제어부 노드 | variables.controlPlaneZoneMatchingLabels |
metadata.labels 쌍 목록 |
{"environment": "staging", "region": "room1"} |
작업자 노드 | 각 시스템 배포를 위한 machineDeployments.MD-INDEX.failureDomain |
metadata.name 값 목록 |
[rack1,rack2,rack3] |
제어부 노드는 레이블 일치를 기반으로 AZ에 할당되므로 클러스터 제어부 노드에서 사용할 수 있는 각 AZ 조합을 구분하는 레이블을 생성해야 합니다.
여러 또는 다른 AZ에서 실행되도록 TKG 클러스터를 배포하거나 변경하기 위한 사전 요구 사항은 다음과 같습니다.
다음 섹션에 설명된 대로 워크로드 클러스터를 배포하여 세 가지 기본 단계의 여러 AZ(가용성 영역)에서 해당 제어부 또는 작업자 노드를 실행할 수 있습니다.
TKG에서 지역 및 AZ를 지원하기 위한 vSphere 준비하려면 다음을 수행합니다.
TKG 클러스터 노드가 호스팅될 지역 및 AZ에 대한 vSphere 개체를 식별하거나 생성합니다.
호스트 그룹 AZ: vSphere 호스트 그룹을 AZ로 사용하는 경우 사용하려는 각 AZ에 대해 하나의 호스트 그룹과 해당 VM 그룹을 생성해야 합니다.
다음 방법 중 하나로 호스트 그룹 및 VM 그룹 개체를 생성합니다.
vCenter의 구성(Configure) > VM/호스트 그룹(VM/Host Groups) > 추가(Add)…에서 호스트 그룹 및 VM 그룹을 생성합니다.
govc
CLI 사용하여 다음과 유사한 govc
명령을 실행합니다. 예를 들어 호스트 그룹 rack1
및 VM 그룹 rack1-vm-group
을 생성합니다.
govc cluster.group.create -cluster=RegionA01-MGMT -name=rack1 -host esx-01a.corp.tanzu esx-02a.corp.tanzu
govc cluster.group.create -cluster=RegionA01-MGMT -name=rack1-vm-group -vm
생성된 VM 그룹과 호스트 그룹 간에 선호도 규칙을 추가하여 VM 그룹의 VM이 생성된 호스트 그룹의 호스트에서 실행되도록 합니다.
vSphere 클러스터 AZ를 구성하는지 또는 호스트 그룹 AZ를 구성하는지에 따라 다음과 같이 vSphere 개체에 태그를 지정합니다. 이러한 예에서는 govc
CLI를 사용하지만 vCenter에서 태그 및 사용자 지정 특성(Tags & Custom Attributes) 창을 사용할 수도 있습니다.
클러스터 AZ:
각 AZ에 대해 govc
를 사용하여 k8s-region
범주 태그를 생성하고 데이터 센터에 연결하고 각 vSphere 클러스터에 k8s-zone
범주 태그를 연결합니다. 예를 들어 데이터 센터 dc0
을 us-west-1
및 해당 클러스터 cluster1
등과 같은 영역으로 태그를 지정하려면 AZs us-west-1a
등으로 태그를 지정합니다.
govc tags.category.create -t Datacenter k8s-region
govc tags.category.create -t ClusterComputeResource k8s-zone
govc tags.create -c k8s-region us-west-1
govc tags.create -c k8s-zone us-west-1a
govc tags.create -c k8s-zone us-west-1b
govc tags.create -c k8s-zone us-west-1c
govc tags.attach -c k8s-region us-west-1 /dc0
govc tags.attach -c k8s-zone us-west-1a /dc0/host/cluster1
govc tags.attach -c k8s-zone us-west-1b /dc0/host/cluster2
govc tags.attach -c k8s-zone us-west-1c /dc0/host/cluster3
호스트 그룹 AZ:
각 AZ에 대해 govc
를 사용하여 k8s-region
범주 태그를 생성하고 vSphere 클러스터에 연결하고 각 호스트 그룹에 k8s-zone
범주 태그를 연결합니다. 예를 들어 클러스터 /dc1/host/room1-mgmt
를 지역 room1
로, 그리고 해당 호스트 그룹 /dc1/host/room1-mgmt/esx-01a.corp.tanzu
등을 AZs rack1
등으로 태그 지정합니다.
govc tags.category.create -t ClusterComputeResource k8s-region
govc tags.category.create -t HostSystem k8s-zone
govc tags.create -c k8s-region room1
govc tags.create -c k8s-zone rack1
govc tags.create -c k8s-zone rack2
govc tags.create -c k8s-zone rack3
govc tags.attach -c k8s-region room1 /dc1/host/room1-mgmt
govc tags.attach -c k8s-zone rack1 /dc1/host/room1-mgmt/esx-01a.corp.tanzu
govc tags.attach -c k8s-zone rack1 /dc1/host/room1-mgmt/esx-01b.corp.tanzu
govc tags.attach -c k8s-zone rack1 /dc1/host/room1-mgmt/esx-01c.corp.tanzu
FailureDomain
및 Deployment Zone
개체 생성클러스터를 여러 가용성 영역에 배포하기 전에 지역 및 영역을 정의하는 Kubernetes 개체 FailureDomain
및 Deployment Zone
을 생성해야 합니다. spec.region
, spec.zone
, spec.topology
아래의 모든 설정은 vCenter에서 구성된 개체 경로 및 태그와 일치해야 합니다.
VSphereDeploymentZone
개체의 경우 spec.failuredomain
값이 VSphereFailureDomain
정의의 metadata.name
값 중 하나와 일치해야 합니다.spec.server
개체의 VSphereDeploymentZone
값은 설치 관리자 인터페이스 IaaS 제공자 창 또는 관리 클러스터 구성 파일의 VSPHERE_SERVER 설정에 VSPHERE_SERVER
입력된 vCenter 서버 주소(IP 또는 FQDN)와 일치해야 합니다.metadata.name
값은 모두 소문자여야 합니다.vSphere 클러스터 AZ 또는 호스트 그룹 AZ를 구성하는지 여부에 따라 다음과 같이 FailureDomain
및 Deployment Zone
개체를 생성합니다.
클러스터 AZ:
데이터 센터 내의 여러 vSphere 클러스터 노드에 워크로드 클러스터를 분산하는 방법의 예로, 다음 코드는 us-west-1a
, us-west-1b
, us-west-1c
라는 세 가지 배포 영역에 필요한 개체를 정의하며 각각은 고유한 네트워크 및 스토리지 매개 변수가 있는 vSphere 클러스터입니다.
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereFailureDomain
metadata:
name: us-west-1a
spec:
region:
name: us-west-1
type: Datacenter
tagCategory: k8s-region
zone:
name: us-west-1a
type: ComputeCluster
tagCategory: k8s-zone
topology:
datacenter: dc0
computeCluster: cluster1
datastore: ds-c1
networks:
- net1
- net2
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereFailureDomain
metadata:
name: us-west-1b
spec:
region:
name: us-west-1
type: Datacenter
tagCategory: k8s-region
zone:
name: us-west-1b
type: ComputeCluster
tagCategory: k8s-zone
topology:
datacenter: dc0
computeCluster: cluster2
datastore: ds-c2
networks:
- net3
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereFailureDomain
metadata:
name: us-west-1c
spec:
region:
name: us-west-1
type: Datacenter
tagCategory: k8s-region
zone:
name: us-west-1c
type: ComputeCluster
tagCategory: k8s-zone
topology:
datacenter: dc0
computeCluster: cluster3
datastore: ds-c3
networks:
- net4
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereDeploymentZone
metadata:
name: us-west-1a
spec:
server: VSPHERE_SERVER
failureDomain: us-west-1a
placementConstraint:
resourcePool: pool1
folder: foo
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereDeploymentZone
metadata:
name: us-west-1b
spec:
server: VSPHERE_SERVER
failureDomain: us-west-1b
placementConstraint:
resourcePool: pool2
folder: bar
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereDeploymentZone
metadata:
name: us-west-1c
spec:
server: VSPHERE_SERVER
failureDomain: us-west-1c
placementConstraint:
resourcePool: pool3
folder: baz
여기서 VSPHERE_SERVER
는 vCenter Server의 IP 주소 또는 FQDN입니다.
서로 다른 vSphere 클러스터에 이름이 동일한 리소스 풀이 있는 경우 VSphereDeploymentZone
개체의 spec.placementConstraint.resourcePool
을 이름뿐만 아니라 전체 리소스 경로로 설정합니다.
호스트 그룹 AZ:
단일 vSphere 클러스터의 3개 호스트 그룹에 워크로드 클러스터 노드를 분산하는 방법의 예입니다. 다음 코드는 3개의 AZ(rack1
, rack2
, rack3
)에 필요한 개체를 정의합니다. 각각은 지역 room1
로 정의된 동일한 vSphere 클러스터 내의 호스트 랙을 나타냅니다.
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereFailureDomain
metadata:
name: rack1
spec:
region:
name: room1
type: ComputeCluster
tagCategory: k8s-region
zone:
name: rack1
type: HostGroup
tagCategory: k8s-zone
topology:
datacenter: dc0
computeCluster: cluster1
hosts:
vmGroupName: rack1-vm-group
hostGroupName: rack1
datastore: ds-r1
networks:
- net1
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereFailureDomain
metadata:
name: rack2
spec:
region:
name: room1
type: ComputeCluster
tagCategory: k8s-region
zone:
name: rack2
type: HostGroup
tagCategory: k8s-zone
topology:
datacenter: dc0
computeCluster: cluster1
hosts:
vmGroupName: rack2-vm-group
hostGroupName: rack2
datastore: ds-r2
networks:
- net2
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereFailureDomain
metadata:
name: rack3
spec:
region:
name: room1
type: ComputeCluster
tagCategory: k8s-region
zone:
name: rack3
type: HostGroup
tagCategory: k8s-zone
topology:
datacenter: dc0
computeCluster: cluster1
hosts:
vmGroupName: rack3-vm-group
hostGroupName: rack3
datastore: ds-c3
networks:
- net3
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereDeploymentZone
metadata:
name: rack1
spec:
server: VSPHERE_SERVER
failureDomain: rack1
placementConstraint:
resourcePool: pool1
folder: foo
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereDeploymentZone
metadata:
name: rack2
spec:
server: VSPHERE_SERVER
failureDomain: rack2
placementConstraint:
resourcePool: pool2
folder: bar
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereDeploymentZone
metadata:
name: rack3
spec:
server: VSPHERE_SERVER
failureDomain: rack3
placementConstraint:
resourcePool: pool3
folder: baz
여기서 VSPHERE_SERVER
는 vCenter Server의 IP 주소 또는 FQDN입니다.
클러스터를 배포하기 위한 다음 단계는 가용성 영역에 분산된 노드가 있는 워크로드 클러스터 배포를 참조하십시오.
vSphere에서 지역 및 AZ 준비 및 Kubernetes에서 FailureDomain
및 Deployment Zone
개체 생성의 단계를 수행한 후 해당 노드가 여러 AZ에 분산된 워크로드 클러스터를 배포할 수 있습니다.
다음 단계에서는 vsphere-zones.yaml
을 FailureDomain
및 Deployment Zone
개체 정의가 포함된 파일로 사용합니다.
독립형 관리 클러스터가 있는 vSphere 구성 파일에 따라 배포하려는 워크로드 클러스터에 대한 클러스터 구성 파일을 생성합니다.
여러 가용성 영역 구성에 따라 클러스터 구성 파일을 확인하거나 수정하여 AZ 개체 정의와 일치하도록 VSPHERE_REGION
, VSPHERE_ZONE
, VSPHERE_AZ_0
및 기타 구성 변수를 설정합니다.
(선택 사항) 클러스터 생성 프로세스가 구성에 지정된 vSphere 영역과 지역이 모두 존재하고 일관되고 동일한 수준으로 정의되었는지 확인하지 못하게 하려면 로컬 환경에서 SKIP_MULTI_AZ_VERIFY
를 "true"
로 설정합니다.
export SKIP_MULTI_AZ_VERIFY="true"
클러스터 구성 파일에서는 이 변수를 설정할 수 없습니다.
tanzu cluster create
를 실행하여 워크로드 클러스터를 생성합니다. 자세한 내용은 워크로드 클러스터 생성을 참조하십시오.
별도로 AZ 개체를 생성하려면 tanzu login
을 사용하여 관리 클러스터에 로그인하고 다음을 실행한 후 tanzu cluster create
를 실행합니다.
tanzu mc az set -f vsphere-zones.yaml
또는 kubectl apply -f vsphere-zones.yaml
을 실행할 수 있습니다.
플랫 클러스터 구성 파일과 함께 AZ 개체 정의를 사용하고 AZ 및 클러스터 개체를 함께 생성하려면 vsphere-zones.yaml
파일을 tanzu cluster create
의 --az-file
옵션으로 전달합니다.
tanzu mc create --file cluster-config-file.yaml --az-file vsphere-zones.yaml
AZ 개체 정의를 클러스터 매니페스트에 결합하려면 클래스 기반 클러스터 생성에 설명된 2단계 프로세스의 1단계에 따라 클러스터 매니페스트를 생성하고, 매니페스트에 vsphere-zones.yaml
컨텐츠를 추가한 다음, 2단계에 설명된 대로 tanzu cluster create
를 실행합니다.
클러스터 생성 프로세스 중에 해당 VM 및 기타 리소스가 vCenter 표시되는 것을 볼 수 있습니다.
이미 배포된 관리 또는 워크로드 클러스터를 업데이트하여 제어부 또는 Worker 노드를 여러 AZ(가용성 영역)에서 실행하거나 노드가 실행되는 AZ를 변경할 수 있습니다.
AZ를 클러스터의 제어부 또는 Worker 노드 전체에 할당하거나 기본 시스템 배포를 위한 AZ를 설정하여 시스템 배포 집합에 AZ와 함께 vSphere 시스템 설정을 사용자 지정할 수 있습니다.
기존 워크로드 클러스터의 AZ를 업데이트한 후에는 AZ 변경에 대한 CPI 및 CSI 업데이트에 설명된 대로 변경 내용을 반영하도록 CSI(컨테이너 스토리지 인터페이스) 및 CPI(클라우드 제공자 인터페이스)를 업데이트해야 합니다.
다음 섹션에서는 다양한 시나리오별로 기존 클러스터 AZ 구성을 업데이트하는 방법을 설명합니다.
제어부 노드가 단일 AZ에서 실행되어 제어부가 여러 AZ에서 실행되도록 기존 클러스터를 확장하려면 다음을 수행합니다.
새 AZ 각각에 대해 VSphereFailureDomain
및 VSphereDeploymentZone
개체를 정의하는 구성 파일을 준비합니다. 아래의 예인 vsphere-3-zones.yaml
은 지역 rack1
과 함께 rack2
, rack3
, room1
을 정의합니다
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind:VSphereFailureDomain
metadata:
name:rack
spec:
region:
name: room1
type: ComputeCluster
tagCategory: k8s-region
zone:
name:rack
type: HostGroup
tagCategory: k8s-zone
topology:
datacenter: dc0
computeCluster: cluster0
hosts:
vmGroupName:rack-vm-group
hostGroupName:rack
datastore: ds1
networks:
- "VM Network"
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind:VSphereFailureDomain
metadata:
name:rack
spec:
region:
name: room1
type: ComputeCluster
tagCategory: k8s-region
zone:
name: rack2
type: HostGroup
tagCategory: k8s-zone
topology:
datacenter: dc0
computeCluster: cluster0
hosts:
vmGroupName: rack2-vm-group
hostGroupName: rack2
datastore: ds2
networks:
- "VM Network"
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereFailureDomain
metadata:
name: rack3
spec:
region:
name: room1
type: ComputeCluster
tagCategory: k8s-region
zone:
name: rack3:
type: HostGroup
tagCategory: k8s-zone
topology:
datacenter: dc0
computeCluster: cluster0
hosts:
vmGroupName: rack3-vm-group
hostGroupName: rack3
datastore: ds3
networks:
- "VM Network"
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereDeploymentZone
metadata:
name: rack1
spec:
server: VSPHERE_SERVER
failureDomain: rack1
placementConstraint:
resourcePool: rp0
folder: folder0
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereDeploymentZone
metadata:
name: rack2
spec:
server: VSPHERE_SERVER
failureDomain: rack2
placementConstraint:
resourcePool: rp0
folder: folder0
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereDeploymentZone
metadata:
name: rack3
spec:
server: VSPHERE_SERVER
failureDomain: rack3
placementConstraint:
resourcePool: rp0
folder: folder0
여기서 VSPHERE_SERVER
는 vCenter Server의 IP 주소 또는 FQDN입니다.
참고:
VSphereDeploymentZone
에서 spec.placementConstraint.resourcePool
을 설정해야 합니다. 클러스터에 사용자가 생성한 리소스 풀이 없는 경우 값을 클러스터의 기본 리소스 풀 값 즉 /dc0/host/cluster1/Resources
로 설정합니다.VSphereFailureDomain
개체의 경우 spec.region.autoConfigure
및 spec.zone.autoConfigure
는 더 이상 지원되지 않습니다.vSphereFailureDomain
및 VSphereDeploymentZone
개체를 생성합니다. 예를 들면 다음과 같습니다.
tanzu mc az set -f vsphere-3-zones.yaml
대상 클러스터의 KubeAdmControlPlane
을 가져옵니다. 이 예에서 대상은 관리 클러스터 tkg-mgmt-vc
이지만 워크로드 클러스터일 수도 있습니다.
kubectl get kcp --selector cluster.x-k8s.io/cluster-name=tkg-mgmt-vc -n tkg-system -o=name
kubeadmcontrolplane.controlplane.cluster.x-k8s.io/tkg-mgmt-vc-cpkxj
클러스터 AZ 선택기를 업데이트합니다. 예: controlPlaneZoneMatchingLabels: {"environment": "staging", "region": "room1"}
:
kubectl get cluster tkg-mgmt-vc -n tkg-system -o json | jq '.spec.topology.variables |= map(if .name == "controlPlaneZoneMatchingLabels" then .value = {"environment": "staging", "region": "room1"} else . end)'| kubectl apply -f -
cluster.cluster.x-k8s.io/tkg-mgmt-vc replaced
클러스터의 장애 도메인이 예상대로 업데이트되었는지 확인합니다.
kubectl get cluster tkg-mgmt-vc -n tkg-system -o json | jq -r '.status.failureDomains | to_entries[].key'
KubeAdmControlPlane
에 rolloutAfter
패치를 적용하여 제어부 노드의 업데이트를 트리거합니다.
kubectl patch kcp tkg-mgmt-vc-cpkxj -n tkg-system --type merge -p "{\"spec\":{\"rolloutAfter\":\"$(date +'%Y-%m-%dT%TZ')\"}}"
vCenter 노드의 호스트 및 데이터스토어를 확인하거나 kubectl get node
또는 govc vm.info
명령을 실행하여 제어부 노드가 새 AZ로 이동했는지 확인합니다.
kubectl get node NODE-NAME -o=jsonpath='{.metadata.labels.node.cluster.x-k8s.io/esxi-host}' --context tkg-mgmt-vc-admin@tkg-mgmt-vc
govc vm.info -json NODE-NAME | jq -r '.VirtualMachines[].Config.Hardware.Device[] | select(.DeviceInfo.Label == "Hard disk 1") | .Backing.FileName'
선택기 레이블이 있는 AZ를 선택하는 것은 metadata.name
이 아닌 metadata.labels
로 VSphereDeploymentZone
을 지정하는 것을 의미합니다. 이렇게 하면 AZ를 개별적으로 나열하지 않고 지정된 지역 및 환경의 모든 AZ에서 실행되도록 클러스터의 제어부 노드를 구성할 수 있습니다. "region=us-west-1,environment=staging"
. 또한 제어부 노드의 AZ 이름을 변경하지 않고도 클러스터 제어부의 AZ를 업데이트할 수 있습니다.
선택기 레이블을 사용하여 기존 클러스터의 제어부 노드에 대한 새 AZ를 지정하려면:
새 AZ 각각에 대해 VSphereFailureDomain
및 VSphereDeploymentZone
개체를 정의하는 구성 파일을 준비합니다. 아래 예인 vsphere-labeled-zones.yaml
은 선택기 레이블 메타데이터를 사용하여 AZ rack4
을 정의합니다.
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereFailureDomain
metadata:
name: rack4
spec:
region:
name: room1
type: ComputeCluster
tagCategory: k8s-region
zone:
name: rack4
type: HostGroup
tagCategory: k8s-zone
topology:
datacenter: dc0
computeCluster: cluster0
hosts:
vmGroupName: rack4-vm-group
hostGroupName: rack4
datastore: vsanDatastore
networks:
- "VM Network"
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereDeploymentZone
metadata:
name: rack4
labels:
environment: staging
region: room1
spec:
server: VSPHERE_SERVER
failureDomain: rack4
placementConstraint:
resourcePool: rp0
folder: folder0
VSphereFailureDomain
및 VSphereDeploymentZone
개체를 생성합니다. 예를 들면 다음과 같습니다.
tanzu mc az set -f vsphere-labeled-zones.yaml
AZ 선택기 레이블로 클러스터를 업데이트합니다. 이 예에서는 관리 클러스터 tkg-mgmt-vc
에 AZ 선택기 controlPlaneZoneMatchingLabels: {"environment": "staging", "region": "room1"}
을 사용하지만 워크로드 클러스터일 수도 있습니다.
kubectl get cluster tkg-mgmt-vc -n tkg-system -o json | \
jq '.spec.topology.variables |= \
map(if .name == "controlPlaneZoneMatchingLabels" \
then .value = {"environment": "staging", "region": "room1"} \
else . end)'| kubectl apply -f -
cluster.cluster.x-k8s.io/tkg-mgmt-vc replaced
클러스터 상태를 확인하여 장애 도메인이 예상대로 업데이트되었는지 확인합니다.
kubectl get cluster tkg-mgmt-vc -n tkg-system -o json | jq -r '.status.failureDomains | to_entries[].key'
KubeAdmControlPlane
에 rolloutAfter
패치를 적용하여 제어부 노드의 업데이트를 트리거합니다.
kubectl patch kcp tkg-mgmt-vc-cpkxj -n tkg-system --type merge -p "{\"spec\":{\"rolloutAfter\":\"$(date +'%Y-%m-%dT%TZ')\"}}"
vCenter 노드의 호스트 및 데이터스토어를 확인하거나 kubectl get node
또는 govc vm.info
명령을 실행하여 controlPlaneZoneMatchingLabels
의 선택기에서 선택한 새 AZ로 제어부 노드가 이동되었는지 확인합니다. 이 예에서 새 AZ는 rack4
입니다.
kubectl get node NODE-NAME -o=jsonpath='{.metadata.labels.node.cluster.x-k8s.io/esxi-host}' --context tkg-mgmt-vc-admin@tkg-mgmt-vc
govc vm.info -json NODE-NAME | jq -r '.VirtualMachines[].Config.Hardware.Device[] | select(.DeviceInfo.Label == "Hard disk 1") | .Backing.FileName'
기존 클러스터에서 AZ 구성을 변경하려면 노드의 기본 MachineDeployment
구성을 새 AZ 값으로 패치합니다.
예를 들어 클러스터 구성 파일이 rack1
을 VSPHERE_AZ_0
으로 설정하고 해당 작업자 노드를 rack2
로 이동하려는 경우:
클러스터에 사용되는 현재 AZ를 쿼리합니다. 이 예에서는 워크로드 클러스터 tkg-wc
를 사용하지만 관리 클러스터일 수도 있습니다.
kubectl get cluster tkg-wc -o json \| jq -r '.spec.topology.workers.machineDeployments\[0\].failureDomain'
사용 가능한 모든 AZ를 나열합니다.
kubectl get vspheredeploymentzones -o=jsonpath='{range .items[?(@.status.ready == true)]}{.metadata.name}{"\n"}{end}'
rack1
rack2
tkg-wc
클러스터의 spec.toplogy.workers.machineDeployments
구성에 패치를 적용하여 해당 영역 VSphereFailureDomain
을 rack2
로 설정합니다. 이 예에서는 tkg-wc
를 단일 노드, dev
를 계획 클러스터라고 가정합니다. prod
계획 클러스터의 경우 클러스터의 세 MachineDeployment
개체 구성 모두에 패치를 적용해야 합니다.
kubectl patch cluster tkg-wc --type=json -p='[{"op": "replace", "path": "/spec/topology/workers/machineDeployments/0/failureDomain", "value": "rack2"}]'
cluster.cluster.x-k8s.io/tkg-wc patched
클러스터가 VSphereFailureDomain
rack2
로 업데이트되었는지 확인합니다.
kubectl get cluster tkg-wc -o=jsonpath='{.spec.topology.workers.machineDeployments[?(@.name=="md-0")].failureDomain}'
rack2
Worker 노드가 이제 VSphereFailureDomain
rack2
에서 배포되었는지 확인합니다.
TKG 클러스터에서 사용할 새 AZ를 구성한 다음 기존 클러스터에서 사용하려면 다음을 수행합니다.
새 AZ 각각에 대해 VSphereFailureDomain
및 VSphereDeploymentZone
개체를 정의하는 구성 파일을 준비합니다. 위의 제어부 노드용 AZ 추가에 있는 vsphere-3-zones.yaml
예를 사용합니다. 이것은 지역 room1
으로 rack1
, rack2
, rack3
를 정의합니다.
VSphereFailureDomain
및 VSphereDeploymentZone
개체를 생성합니다.
tanzu mc az set -f vsphere-3-zones.yaml
또는 kubectl apply -f vsphere-3-zones.yaml
을 실행할 수 있습니다.
클러스터 tkg-wc
에 VSphereFailureDomain
rack1
, rack2
, rack3
패치를 적용합니다. 이 예에서 tkg-wc
는 3개의 MachineDeployment
구성이 있는 prod
계획 클러스터 계획입니다. dev
계획 클러스터를 사용하면 클러스터의 spec.toplogy.workers.machineDeployments
에서 MachineDeployment
하나만 업데이트하면 됩니다.
kubectl patch cluster tkg-wc --type=json -p='[ \
{"op": "replace", "path": "/spec/topology/workers/machineDeployments/0/failureDomain", "value": "rack1"}, \
{"op": "replace", "path": "/spec/topology/workers/machineDeployments/1/failureDomain", "value": "rack2"}, \
{"op": "replace", "path": "/spec/topology/workers/machineDeployments/2/failureDomain", "value": "rack3"}]'
클러스터가 새 AZ로 업데이트되었는지 확인합니다.
kubectl get cluster tkg-wc -o=jsonpath='{range .spec.topology.workers.machineDeployments[*]}{"Name: "}{.name}{"\tFailure Domain: "}{.failureDomain}{"\n"}{end}'
Worker 노드가 이제 VSphereFailureDomain
rack1
, rack2
, rack3
에 배포되었는지 확인합니다.
TKG 클러스터에서 사용할 새 AZ와 새 MachineDeployment
개체를 모두 구성한 다음 기존 클러스터에서 사용합니다.
새 AZ 각각에 대해 VSphereFailureDomain
및 VSphereDeploymentZone
개체를 정의하는 구성 파일을 준비합니다. 아래 예인 vsphere-1-zone.yaml
은 지역 room1
으로 새 AZ rack2
을 정의합니다.
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereFailureDomain
metadata:
name: rack2
spec:
region:
name: room1
type: ComputeCluster
tagCategory: k8s-region
zone:
name: rack2
type: HostGroup
tagCategory: k8s-zone
topology:
datacenter: dc0
computeCluster: cluster0
hosts:
vmGroupName: rack2-vm-grou
hostGroupName: rack2
datastore: ds-r2
networks:
- "VM Network"
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereDeploymentZone
metadata:
name: rack2
spec:
server: VSPHERE_SERVER
failureDomain: rack2
placementConstraint:
resourcePool: rp0
folder: folder0
VSphereFailureDomain
및 VSphereDeploymentZone
개체를 생성합니다.
tanzu mc az set -f vsphere-zones.yaml
또는 kubectl apply -f vsphere-1-zone.yaml
을 실행할 수 있습니다.
새 시스템 배포용 구성 파일을 준비합니다. 아래 예인 md-1.yaml
은 az
속성이 rack2
로 설정된 새 시스템 배포 md-1
을 정의합니다.
name: md-1
replicas: 1
az: rack2
nodeMachineType: t3.large
workerClass: tkg-worker
tkrResolver: os-name=ubuntu,os-arch=amd64
Tanzu CLI를 사용하여 새 노드 풀을 생성합니다. 이 예에서는 워크로드 클러스터 tkg-wc
를 사용하지만 관리 클러스터일 수도 있습니다.
tanzu cluster node-pool set wl-antrea -f md-1.yaml
Cluster update for node pool 'md-1' completed successfully
새로 생성된 노드 풀에서 시스템 배포 이름을 가져옵니다.
kubectl get machinedeployments -l
topology.cluster.x-k8s.io/deployment-name=md-1
-o=jsonpath='{.items[*].metadata.name}'
wl-antrea-md-1-pd9vj
시스템 배포가 VSphereFailureDomain
rack2
로 업데이트되었는지 확인합니다.
kubectl get machinedeployments wl-antrea-md-1-pd9vj -o json | \
jq -r '.spec.template.spec.failureDomain'
rack2
md-1
Worker 노드가 rack2
에서 배포되었는지 확인합니다.
위 섹션에 설명된 대로 워크로드 클러스터의 AZ 구성을 변경한 후에는 해당 CPI 및 CSI 추가 기능 구성을 업데이트한 다음 변경 내용을 반영하도록 추가 기능을 다시 생성해야 합니다. 다음 절차는 수행하는 방법입니다.
제한 사항:
VsphereFailureDomain
의 서로 다른 영역 및 지역의 모든 tagCategory
설정이 일치해야 합니다.AZ 변경을 반영하도록 클러스터의 CPI 추가 기능 구성을 업데이트한 다음 해당 패키지 설치 관리자를 삭제하여 변경 내용이 포함된 추가 기능을 다시 생성하려면 다음을 수행합니다.
cb
참조를 사용하여 클러스터의 vsphereCPIConfig
이름을 검색합니다. 예를 들어, 이름이 wl
인 워크로드 클러스터:
kubectl -n default get cb wl -o json \| jq -r '.spec.cpi.valuesFrom.providerRef.name'
클러스터의 vsphereCPIConfig
규격을 편집하여 해당 region
및 zone
을 vSphere 및 tagCategory
규격의 AZ 영역 및 지역에 대해 설정한 vsphereFailuredomain
필드로 설정합니다. 예:
apiVersion: cpi.tanzu.vmware.com/v1alpha1
kind: VSphereCPIConfig
metadata:
name: wl
namespace: default
spec:
vsphereCPI:
mode: vsphereCPI
region: k8s-zone
tlsCipherSuites: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
vmNetwork:
excludeExternalSubnetCidr: 10.215.10.79/32
excludeInternalSubnetCidr: 10.215.10.79/32
zone: k8s-zone
변경 내용을 적용하고 Reconcile succeeded
를 기다립니다.
CPI 패키지 설치 관리자(pkgi
)가 다시 설치되었는지 확인합니다.
kubectl -n tkg-system get wl-vsphere-cpi pkgi --context wl-admin@wl
AZ 변경을 반영하도록 클러스터의 CSI 추가 기능 구성을 업데이트한 다음 csinodetopology
및 해당 패키지 설치 관리자를 삭제하여 변경 내용이 포함된 추가 기능을 다시 생성하려면 다음을 수행합니다.
cb
참조를 사용하여 클러스터의 vsphereCPIConfig
이름을 검색합니다. 예를 들어, 이름이 wl
인 워크로드 클러스터:
kubectl -n default get cb wl -o json |jq -r '.spec.csi.valuesFrom.providerRef.name')
클러스터의 vsphereCSIConfig
규격을 편집하여 해당 region
및 zone
을 vSphere 및 tagCategory
규격의 AZ 영역 및 지역에 대해 설정한 vsphereFailuredomain
필드로 설정합니다. 예:
apiVersion: csi.tanzu.vmware.com/v1alpha1
kind: VSphereCSIConfig
metadata:
name: wl
namespace: default
spec:
vsphereCSI:
config:
datacenter: /dc0
httpProxy: ""
httpsProxy: ""
insecureFlag: true
noProxy: ""
region: k8s-region
tlsThumbprint: ""
useTopologyCategories: true
zone: k8s-zone
mode: vsphereCSI
변경 내용을 적용합니다.
csinode
및 csiNodeTopology
개체를 삭제하여 다시 생성합니다. csinodetopology
는 자동으로 업데이트되지 않습니다.
kubectl -n delete csinode --all --context wl-admin@wl
kubectl -n delete csinodetopology --all --context wl-admin@wl
클러스터의 vsphere-csi
패키지 설치 관리자를 삭제하고 Reconcile succeeded
를 기다립니다.
kubectl delete pkgi -n tkg-system wl-vsphere-csi --context wl-admin@wl
모든 csinodes
개체에 topologyKeys
매개 변수가 포함되어 있는지 확인합니다. 예를 들면 다음과 같습니다.
kubectl get csinodes -o jsonpath='{range .items[*]}{.metadata.name} {.spec}{"\n"}{end}'
k8s-control-1 {"drivers":[{"name":"csi.vsphere.vmware.com","nodeID":"k8s-control-1","topologyKeys":["topology.csi.vmware.com/k8s-region","topology.csi.vmware.com/k8s-zone"]}]}
k8s-control-2 {"drivers":[{"name":"csi.vsphere.vmware.com","nodeID":"k8s-control-2","topologyKeys":["topology.csi.vmware.com/k8s-region","topology.csi.vmware.com/k8s-zone"]}]}
k8s-control-3 {"drivers":[{"name":"csi.vsphere.vmware.com","nodeID":"k8s-control-3","topologyKeys":["topology.csi.vmware.com/k8s-region","topology.csi.vmware.com/k8s-zone"]}]}
k8s-node-1 {"drivers":[{"name":"csi.vsphere.vmware.com","nodeID":"k8s-node-1","topologyKeys":["topology.csi.vmware.com/k8s-region","topology.csi.vmware.com/k8s-zone"]}]}
k8s-node-2 {"drivers":[{"name":"csi.vsphere.vmware.com","nodeID":"k8s-node-2","topologyKeys":["topology.csi.vmware.com/k8s-region","topology.csi.vmware.com/k8s-zone"]}]}
k8s-node-3 {"drivers":[{"name":"csi.vsphere.vmware.com","nodeID":"k8s-node-3","topologyKeys":["topology.csi.vmware.com/k8s-region","topology.csi.vmware.com/k8s-zone"]}]}
k8s-node-4 {"drivers":[{"name":"csi.vsphere.vmware.com","nodeID":"k8s-node-4","topologyKeys":["topology.csi.vmware.com/k8s-region","topology.csi.vmware.com/k8s-zone"]}]}
k8s-node-5 {"drivers":[{"name":"csi.vsphere.vmware.com","nodeID":"k8s-node-5","topologyKeys":["topology.csi.vmware.com/k8s-region","topology.csi.vmware.com/k8s-zone"]}]}
k8s-node-6 {"drivers":[{"name":"csi.vsphere.vmware.com","nodeID":"k8s-node-6","topologyKeys":["topology.csi.vmware.com/k8s-region","topology.csi.vmware.com/k8s-zone"]}]}
모든 노드의 토폴로지 레이블이 올바른 AZ 지역 및 영역을 반영하는지 확인합니다. 예를 들면 다음과 같습니다.
kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
k8s-control-1 Ready control-plane 1d v1.21.1 topology.csi.vmware.com/k8s-region=region-1,topology.csi.vmware.com/k8s-zone=zone-A
k8s-control-2 Ready control-plane 1d v1.21.1 topology.csi.vmware.com/k8s-region=region-1,topology.csi.vmware.com/k8s-zone=zone-B
k8s-control-3 Ready control-plane 1d v1.21.1 topology.csi.vmware.com/k8s-region=region-1,topology.csi.vmware.com/k8s-zone=zone-C
k8s-node-1 Ready <none> 1d v1.21.1 topology.csi.vmware.com/k8s-region=region-1,topology.csi.vmware.com/k8s-zone=zone-A
k8s-node-2 Ready <none> 1d v1.21.1 topology.csi.vmware.com/k8s-region=region-1,topology.csi.vmware.com/k8s-zone=zone-B
k8s-node-3 Ready <none> 1d v1.21.1 topology.csi.vmware.com/k8s-region=region-1,topology.csi.vmware.com/k8s-zone=zone-B
k8s-node-4 Ready <none> 1d v1.21.1 topology.csi.vmware.com/k8s-region=region-1,topology.csi.vmware.com/k8s-zone=zone-C
k8s-node-5 Ready <none> 1d v1.21.1 topology.csi.vmware.com/k8s-region=region-2,topology.csi.vmware.com/k8s-zone=zone-D
k8s-node-6 Ready <none> 1d v1.21.1 topology.csi.vmware.com/k8s-region=region-2,topology.csi.vmware.com/k8s-zone=zone-D
tanzu mc az list
명령을 사용하여 독립형 관리 클러스터에 정의되거나 워크로드 클러스터에서 사용되는 AZ를 나열합니다.
관리 클러스터 및 해당 워크로드 클러스터에서 현재 사용 중인 가용성 영역을 표시하려면:
tanzu management-cluster available-zone list
관리 클러스터에 정의되어 워크로드 클러스터 노드에 사용할 수 있는 모든 가용성 영역을 나열하려면 다음을 수행합니다.
tanzu management-cluster available-zone list -a
워크로드 클러스터 CLUSTER-NAME
에서 현재 사용 중인 가용성 영역에 대해 다음을 수행합니다.
tanzu management-cluster available-zone list -c CLUSTER-NAME:
tanzu mc az
명령은 tanzu management-cluster available-zone
에서 별칭으로 지정됩니다.
출력 예:
AZNAME ZONENAME ZONETYPE REGIONNAME REGIONTYPE DATASTORE NETWORK OWNERCLUSTER STATUS
us-west-1a us-west-1a ComputeCluster us-west-1 Datacenter sharedVmfs-0 VM Network az-1 ready
us-west-1b us-west-1b ComputeCluster us-west-1 Datacenter sharedVmfs-0 VM Network az-1 ready
us-west-1c us-west-1c ComputeCluster us-west-1 Datacenter sharedVmfs-0 VM Network az-1 ready
출력에 다음이 표시됩니다.
AZNAME
, ZONENAME
: AZ 이름ZONETYPE
: AZ, ComputeCluster
또는 HostGroup
REGIONNAME
: AZ가 포함된 지역의 이름REGIONTYPE
: 지역으로 지정된 vSphere 개체, Datacenter
또는 ComputeCluster
DATASTORE
: 지역에서 VM을 호스팅하는 데이터스토어NETWORK
: 지역에서 VM을 제공하는 네트워크OWNERCLUSTER
: AZ에서 실행되는 TKG 클러스터 또는 클러스터STATUS
: 현재 AZ 상태tanzu mc az
명령 그룹은 tanzu management-cluster available-zone
에서 별칭으로 지정됩니다.
tanzu mc az delete
명령을 사용하여 사용되지 않은 AZ를 삭제합니다. 예를 들면 다음과 같습니다.
tanzu mc az delete AZNAME
여기서 AZNAME
은 tanzu mc az list
에 나열된 AZ의 이름입니다.
AZ에 대해 OWNERCLUSTER
가 나열되지 않은 tanzu mc az list
에 의해 표시된 것처럼, 현재 TKG 클러스터 노드를 호스팅하지 않는 경우에만 AZ를 삭제할 수 있습니다.