일반 독자는 이 사이트에서 tanzu 코맨드-라인을 사용하여 TKGm 클러스터를 만들고 삭제하는 여러 기사를 볼 수 있습니다. TKGm은 vSphere를 비롯한 다양한 IaaS에 구축할 수 있는 다중 클라우드 TKG 클러스터(standalone TKG 클러스터라고도 함)를 설명하기 위해 사용하는 이름입니다. 이 게시물에서는 동일한 tanzu CLI 툴을 사용하여 vSphere with Tanzu상에 TKG service(TKGS)를 구축하는 방법을 보여드리겠습니다. 항상 TKG 클러스터를 vSphere with Tanzu와 함께 배포하려면 Supervisor 클러스터에 로그인하여 적절한 네임스페이스를 선택하고 YAML 매니페스트를 클러스터 세부 정보로 채운 다음 kubectl을 사용하여 클러스터를 배포해야 합니다. 여기서 tanzu CLI를 사용하여 이를 수행할 수 있는 다른 방법에 대해 알아보겠습니다.
본 게시물에서는 전제조건에 대한 여러 가지 가정이 제시되어 있습니다.
- Tanzu CLI가 이미 설치되어 있습니다. 자세한 내용은 공식 문서를 참조하십시오.
- vSphere with Tanzu가 설치되어 있습니다. 이 글에서는 vSphere 7.0U3c에 배포에 대해 설명합니다.
- 네임스페이스를 만들었습니다. 제 경우에는 워크로드라고 합니다. CLI 또는 UI를 통해 네임스페이스 서비스를 통해 생성할 수 있습니다.
이 요구 사항만 있으면 진행할 수 있습니다.
단계 1: 네임스페이스 권한에서 사용자 추가
네임스페이스의 사용 권한 탭에 추가된 유효한 계정이 있는지 확인하고 클러스터 컨텍스트에 액세스할 때 이러한 계정 권한을 사용해야 합니다. 단순함을 위해 administrator SSO 계정을 사용하고 있지만, 더 적절한 계정을 사용하는 것이 좋습니다.
단계 2: 네임스페이스에 TKG PV를 위한 Storage Class / Storage Policy을 추가
워크로드 클러스터를 구축하려면 Storage Class가 하나 이상 필요합니다. Storage Class는 클러스터를 생성할 때 제어부 노드와 작업자 노드 모두에서 루트 파일 시스템 Disk에 사용됩니다. 또한 퍼시스턴트 볼륨 요구사항이 있는 애플리케이션을 워크로드 클러스터에서 생성하려는 경우에도 Storage Class가 필요합니다. 이 예에서는 두 개의 스토리지 정책(둘 다 vSAN 관련)을 네임스페이스에 추가합니다. 이러한 스토리지 정책은 kubectl을 통해 쿼리할 때 스토리지 클래스로 표시됩니다.
% kubectl-vsphere login --server=https://xx.xx.62.18 --vsphere-username administrator@vsphere.local --insecure-skip-tls-verify Logged in successfully. You have access to the following contexts: xx.xx.62.18 workload If the context you wish to use is not in this list, you may need to try logging in again later, or contact your cluster administrator. % kubectl config use-context workload Switched to context "workload". % kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE raid1 csi.vsphere.vmware.com Delete Immediate true 19h vsan-default-storage-policy csi.vsphere.vmware.com Delete Immediate true 19h %
단계 3: TKG 노드의 네임스페이스에 VM 클래스 추가
이제 네임스페이스에 하나 이상의 가상 시스템 클래스를 추가해야 합니다. 필요에 따라 선택할 수 있는 예제 VM 클래스가 이미 많이 제공되어 있거나 고유한 VM 클래스를 구축할 수도 있습니다. Kubectl을 통해 VM 클래스를 쿼리하는 것은 조금 이상합니다. kubectl get vmclass 명령은 슈퍼바이저 클러스터의 네임스페이스에 할당된 모든 VM 클래스를 표시합니다. 그러나 할당되지 않은 클래스는 표시되지 않으므로 대부분의 클러스터에서 CLI에서 사용 가능한 VM 클래스를 보기가 어렵습니다. 따라서 특히 이번이 첫 번째 네임스페이스인 경우 vSphere Client UI를 방문하여 사용 가능한 항목을 확인해야 합니다. 이 예에서는 단일 VM 클래스 guaranteed-small을 네임스페이스에 할당하고 있습니다. VM 클래스가 네임스페이스와 연결되면 kubectl get vmclassbinding 명령을 통해 연결을 확인할 수 있습니다.
% kubectl get vmclass NAME CPU MEMORY AGE guaranteed-small 2 4Gi 19h % kubectl get vmclassbinding NAME VIRTUALMACHINECLASS AGE guaranteed-small guaranteed-small 19h %
이 네임스페이스에 VM 클래스에 대한 컨텐츠 라이브러리도 추가했습니다. 이 단계는 이 연습의 요구 사항이 아닙니다.
단계 4: Tanzu Kubernetes release(TKr)를 선택
다음 단계는 클러스터에 포함할 쿠버네티스의 릴리즈를 결정하는 것입니다. kubectl get tkr 명령(tanzukubernetesrelease의 줄임말)은 사용 가능한 릴리스 목록과 호환 여부를 표시합니다. 그런 다음 스토리지 클래스 및 VM 클래스와 함께 클러스터 구성 파일에 추가할 수 있습니다.
% 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 3d23h [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 3d23h [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 3d23h [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 3d23h [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 3d23h [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 3d23h [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 3d23h [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 3d23h [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 3d23h [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 3d23h [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 3d23h [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 3d23h [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 3d23h [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 3d23h [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 3d23h [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 3d23h [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 3d23h [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 3d23h
이 예에서는 최신 릴리스인 1.20.7 버전을 사용할 것입니다.
단계 5: TKG 클러스터 구성 파일을 생성
이전의 모든 정보가 수집되었으므로 이제 내 Tanzu Kubernetes 클러스터에 대한 구성 파일 생성을 진행할 수 있습니다. 다양한 설명이 포함된 구성 파일의 예는 공식 설명서에서 확인할 수 있습니다. 다음은 클러스터를 구축하는 데 사용할 간단한 예입니다. 저는 단일 제어부 노드와 단일 작업자 노드로 구성된 간단한 “dev” 계획 클러스터를 구축하려고 합니다. MachineChecks 또는 AutoScaler를 사용하도록 설정하지 않습니다. 제어부 및 작업자 노드 모두에 동일한 VM 클래스와 동일한 스토리지 클래스를 사용하고 있습니다. 또한 클러스터에 이름을 지정하고 네임스페이스 컨텍스트를 적절하게 설정했습니다.
% cat my-vsphere-tkc.yaml INFRASTRUCTURE_PROVIDER: tkg-service-vsphere CLUSTER_PLAN: dev CLUSTER_NAME: workload1 NAMESPACE: workload CNI: antrea CONTROL_PLANE_STORAGE_CLASS: raid1 CONTROL_PLANE_VM_CLASS: guaranteed-small SERVICE_DOMAIN: rainpole.com STORAGE_CLASSES: vsan-default-storage-policy WORKER_STORAGE_CLASS: raid1 WORKER_VM_CLASS: guaranteed-small SERVICE_CIDR: 100.64.0.0/13 CLUSTER_CIDR: 100.96.0.0/11 ENABLE_MHC: false ENABLE_AUTOSCALER: false
단계 6: Tanzu CLI를 통해 Supervisor 컨텍스트를 연결하고 TKG를 배포
다음 단계는 supervisor에 연결하기 위해 tanzu CLI를 사용하는 것입니다. 1단계의 로그인부터 Supervisor 클러스터 컨텍스트가 여전히 설정되어 있으므로 올바른 탄자수 로그인 구문만 사용하면 됩니다. 설정이 완료되면 이제 tansu CLI를 사용하여 클러스터를 배포하고 구성 파일과 원하는 TKr을 지정할 수 있습니다.
% tanzu login --context xx.xx.62.18 ? Give the server a name xx.xx.62.18 ✔ successfully logged in to management cluster using the kubeconfig xx.xx.62.18 % tanzu cluster create --file ./my-vsphere-tkc.yaml --tkr=v1.20.7---vmware.1-tkg.1.7fb9067 You are trying to create a cluster with kubernetes version '1.20.7+vmware.1-tkg.1.7fb9067' on vSphere with Tanzu, \ Please make sure virtual machine image for the same is available in the cluster content library. Do you want to continue? [y/N]: y Validating configuration... Error: failed to apply the cluster configuration: kubectl apply failed, output: \ tanzukubernetescluster.run.tanzu.vmware.com/workload1 unchanged secret/workload1-capabilities configured secret/workload1-config-values configured Error from server (Forbidden): error when retrieving current configuration of: Resource: "addons.cluster.x-k8s.io/v1alpha3, Resource=clusterresourcesets", \ GroupVersionKind: "addons.cluster.x-k8s.io/v1alpha3, Kind=ClusterResourceSet" Name: "workload1-capabilities", Namespace: "workload" from server for: "/var/folders/lv/b1078qn55y52sq__y1533nlc0000gp/T/kubeapply-3429424587": \ clusterresourcesets.addons.cluster.x-k8s.io "workload1-capabilities" is forbidden: \ User "sso:Administrator@vsphere.local" cannot get resource "clusterresourcesets" \ in API group "addons.cluster.x-k8s.io" in the namespace "workload" : exit status 1 ✖ exit status 1
유효성 검사 중에 발생한 오류가 예상됩니다. 클러스터 배포는 차단되지 않습니다. 또한 TKG v1.4 Release Notes Known Issues 에 무시해도 됩니다.
단계 7: 워크로드 클러스터의 상태를 쿼리
다양한 명령을 사용하여 클러스터 상태를 쿼리할 수 있습니다.
% kubectl get cluster -n workload NAME PHASE workload1 Provisioned % kubectl get tanzukubernetescluster -n workload NAME CONTROL PLANE WORKER TKR NAME AGE READY TKR COMPATIBLE UPDATES AVAILABLE workload1 1 1 v1.20.7---vmware.1-tkg.1.7fb9067 16m True True % tanzu cluster list NAME NAMESPACE STATUS CONTROLPLANE WORKERS KUBERNETES ROLES PLAN workload1 workload running 1/ 1/ 1.20.7+vmware.1-tkg.1.7fb9067 <none> % tanzu cluster get workload1 -n workload NAME NAMESPACE STATUS CONTROLPLANE WORKERS KUBERNETES ROLES workload1 workload running 1/ 1/ 1.20.7+vmware.1-tkg.1.7fb9067 <none> ℹ Details: NAME READY SEVERITY REASON SINCE MESSAGE /workload1 True 13m ├─ClusterInfrastructure - WCPCluster/workload1 True 17m ├─ControlPlane - KubeadmControlPlane/workload1-control-plane True 13m │ └─Machine/workload1-control-plane-jc5gh True 14m └─Workers └─MachineDeployment/workload1-workers-6nh9p └─Machine/workload1-workers-6nh9p-6ff9659d78-l62cw True 11m % kubectl get virtualmachines NAME POWERSTATE AGE workload1-control-plane-jc5gh poweredOn 25m workload1-workers-6nh9p-6ff9659d78-l62cw poweredOn 21m
단계 8: 클러스터 컨텍스트에 액세스
이제 kubectl-vsphere 명령 또는 tanzu CLI를 사용하여 클러스터 컨텍스트에 액세스할 수 있습니다. 아래에 두 가지를 모두 할 수 있는 예시를 제공했습니다.
8.1 tanzu CLI를 사용
첫 번째 예에서는 tanzu CLI를 사용합니다. 로그인 단계와 tanzu CLI를 컨텍스트와 연결하는 과정을 반복했지만, 이전에 설정한 컨텍스트와 동일한 컨텍스트라면 필요하지 않을 수 있습니다.
% kubectl-vsphere login --server xx.xx.62.18 --vsphere-username administrator@vsphere.local \ --insecure-skip-tls-verify Logged in successfully. You have access to the following contexts: xx.xx.62.18 workload If the context you wish to use is not in this list, you may need to try logging in again later, or contact your cluster administrator. To change context, use `kubectl config use-context <workload name>` % tanzu login --context xx.xx.62.18 ? Select a server xx.xx.62.18 () ✔ successfully logged in to management cluster using the kubeconfig xx.xx.62.18 % tanzu cluster list NAME NAMESPACE STATUS CONTROLPLANE WORKERS KUBERNETES ROLES PLAN workload1 workload running 1/ 1/ 1.20.7+vmware.1-tkg.1.7fb9067 <none> % tanzu cluster kubeconfig get workload1 -n workload --admin Credentials of cluster 'workload1' have been saved You can now access the cluster by running 'kubectl config use-context workload1-admin@workload1' % kubectl config use-context workload1-admin@workload1 Switched to context "workload1-admin@workload1". % kubectl get nodes NAME STATUS ROLES AGE VERSION workload1-control-plane-pz6p7 Ready control-plane,master 4h8m v1.20.7+vmware.1 workload1-workers-nqkvn-5c996c47f6-t4qlm Ready <none> 4h5m v1.20.7+vmware.1
8.2 kubectl-vsphere 명령을 사용
또는 kubectl-vsphere 명령을 사용하여 클러스터에 액세스하고 네임스페이스와 클러스터를 선택하는 원래 방법을 사용할 수 있습니다.
% kubectl-vsphere login --server xx.xx.62.18 --vsphere-username administrator@vsphere.local \ --insecure-skip-tls-verify --tanzu-kubernetes-cluster-namespace workload \ --tanzu-kubernetes-cluster-name workload1 Logged in successfully. You have access to the following contexts: xx.xx.62.18 workload1 If the context you wish to use is not in this list, you may need to try logging in again later, or contact your cluster administrator. To change context, use kubectl config use-context <workload name> % kubectl config get-contexts CURRENT NAME CLUSTER AUTHINFO NAMESPACE xx.xx.62.18 xx.xx.62.18 wcp:xx.xx.62.18:administrator@vsphere.local workload xx.xx.62.16 wcp:xx.xx.62.16:administrator@vsphere.local workload * workload1 xx.xx.62.20 wcp:xx.xx.62.20:administrator@vsphere.local % kubectl get nodes NAME STATUS ROLES AGE VERSION workload1-control-plane-pz6p7 Ready control-plane,master 4h3m v1.20.7+vmware.1 workload1-workers-nqkvn-5c996c47f6-t4qlm Ready <none> 4h v1.20.7+vmware.1
결론적으로, Tanzu CLI를 사용하여 vSphere with Tanzu와 함께 워크로드 클러스터를 구축하는 것은 흥미로운 연습이라고 생각합니다. Tanzu CLI는 Tanzu Kubernetes 클러스터를 여러 IaaS에 구축하는 경우에 더 흥미로울 것입니다. 그중 하나가 vSphere with Tanzu입니다.
이제 VMware Cloud에서 Tanzu 서비스를 이용할 수 있습니다. VMware Cloud를 사용하면 vSphere 관리자가 기본 SDDC 인프라를 관리할 필요 없이 Tanzu Kubernetes 클러스터를 구축할 수 있습니다. 여기에서 Tanzu Services에 대해 자세히 읽어보십시오.