이 주제에서는 GKE On-Prem에서 사용되는 Kubernetes Cluster API 리소스에 대해 설명합니다.
개요
GKE On-Prem에는 다음과 같은 Cluster API 리소스가 지원됩니다.
- 클러스터
- 머신
- MachineDeployment
- MachineSet
- MachineClasses
GKE On-Prem은 설치 중에 이러한 리소스를 자동으로 클러스터에 생성합니다. 일반적으로 사용자 클러스터 수동 삭제와 같은 고급 절차와 달리 이와 직접 상호작용할 필요가 없습니다. 또한 GKE On-Prem 문서에서는 고가용성과 같은 개념을 설명하기 위해 이러한 리소스를 참조합니다.
클러스터에서 사용할 수 있는 Cluster API CustomResourceDefinition(CRD)을 확인할 수 있습니다.
kubectl get crds | grep "cluster.k8s.io" clusters.cluster.k8s.io machineclasses.cluster.k8s.io machinedeployments.cluster.k8s.io machines.cluster.k8s.io machinesets.cluster.k8s.io
다음 섹션에서는 현재 GKE On-Prem 이해와 관련된 Cluster API 리소스에 대해 설명합니다.
클러스터
Cluster 리소스는 호스트에서 실행되는 Kubernetes 인스턴스를 나타냅니다. 모든 GKE On-Prem 클러스터에는 클러스터를 설명하는 Cluster 리소스가 있습니다.
클러스터에 있는 Cluster 리소스를 보려면 다음 명령어를 실행하세요. 여기서 [KUBECONFIG]는 클러스터의 kubeconfig 파일 경로입니다.
kubectl get clusters --kubeconfig [KUBECONFIG]
다음은 GKE On-Prem 사용자 클러스터에서 볼 수 있는 Cluster 리소스 예시입니다.
apiVersion: cluster.k8s.io/v1alpha1 kind: Cluster metadata: annotations: addons.gke.io/loadbalancerip: "" bundle.gke.io/target-version: bundle.gke.io/version: onprem.gke.io/provider: vsphere creationTimestamp: finalizers: - cluster.cluster.k8s.io generation: name: example-user-cluster namespace: default resourceVersion: "" selfLink: /apis/cluster.k8s.io/v1alpha1/namespaces/default/clusters/example-user-cluster uid: spec: clusterNetwork: pods: cidrBlocks: - serviceDomain: cluster.local services: cidrBlocks: - providerSpec: value: apiVersion: vsphereproviderconfig.k8s.io/v1alpha1 controlPlaneReplicas: controlPlaneVersion: kind: VsphereClusterProviderConfig loadBalancerIP: loadBalancerNodePort: metadata: creationTimestamp: networkSpec: dns: ntp: "" reservedAddresses: oidcSpec: sniCert: vsphereDatacenter: vsphereDefaultDatastore: vsphereNetwork: vsphereResourcePool: status: apiEndpoints: - host: port:
머신
GKE On-Prem에서 Machine 리소스는 vSphere에 있는 개별 가상 머신(VM)에 대한 선언적 사양입니다. 각 Machine 리소스에는 머신 사양을 기준으로 GKE On-Prem에서 생성된 해당 노드 리소스가 있습니다. 이러한 리소스는 vSphere 환경에 있는 VM인 동일한 물리적 객체를 나타냅니다.
클러스터에 있는 Machine 리소스를 보려면 다음 명령어를 실행하세요. 여기서 [KUBECONFIG]는 클러스터의 kubeconfig 파일 경로입니다.
kubectl get machines --kubeconfig [KUBECONFIG]
다음은 GKE On-Prem 클러스터에서 볼 수 있는 Machine 리소스 예시입니다.
apiVersion: cluster.k8s.io/v1alpha1 kind: Machine metadata: annotations: control-plane-version: "" kubelet-version: onprem.gke.io/provider: vsphere vm-ip-address: vsphere-machine-state: vsphere-machine-uuid: creationTimestamp: finalizers: - machine.cluster.k8s.io generateName: example-cluster-node generation: labels: kubernetes.googleapis.com/cluster-name: example-cluster-node kubernetes.googleapis.com/cluster-namespace: machine-template-hash: "" set: node name: example-cluster-node namespace: default ownerReferences: - apiVersion: cluster.k8s.io/v1alpha1 blockOwnerDeletion: controller: kind: MachineSet name: example-cluster-node uid: resourceVersion: "" selfLink: /apis/cluster.k8s.io/v1alpha1/namespaces/default/machines/example-cluster-node uid: spec: metadata: creationTimestamp: providerSpec: value: apiVersion: vsphereproviderconfig.k8s.io/v1alpha1 kind: VsphereMachineProviderConfig machineVariables: datacenter: datastore: disk_label: disk_size: "" memory: "" network: num_cpus: "" resource_pool: vm_template: metadata: creationTimestamp: networkSpec: address: dns: ntp: "" useIPAM: vsphereMachine: versions: kubelet: status: lastUpdated: nodeRef: kind: Node name: uid:
MachineDeployment
MachineDeployment는 Machine 그룹을 관리합니다. 머신이 실행되는 GKE On-Prem 클러스터를 지정하고, 해당 vSphere 구성을 선언하고, 변경사항을 구성에 적용합니다. MachineDeployment 및 Machine은 배포 및 pod로 이해될 수 있습니다.
클러스터에 있는 MachineDeployment 리소스를 보려면 다음 명령어를 실행하세요. 여기서 [KUBECONFIG]는 클러스터의 kubeconfig 파일 경로입니다.
kubectl get machinedeployments --kubeconfig [KUBECONFIG]
다음은 GKE On-Prem 클러스터에서 볼 수 있는 MachineDeployment 리소스 예시입니다.
apiVersion: cluster.k8s.io/v1alpha1 kind: MachineDeployment metadata: annotations: machinedeployment.clusters.k8s.io/revision: "1" onprem.gke.io/provider: vsphere creationTimestamp: generation: 2 labels: kubernetes.googleapis.com/cluster-name: example-cluster kubernetes.googleapis.com/cluster-namespace: set: node name: example-cluster namespace: default resourceVersion: "" selfLink: /apis/cluster.k8s.io/v1alpha1/namespaces/default/machinedeployments/example-cluster uid: spec: minReadySeconds: 0 progressDeadlineSeconds: replicas: revisionHistoryLimit: selector: matchLabels: kubernetes.googleapis.com/cluster-name: example-cluster kubernetes.googleapis.com/cluster-namespace: default set: node strategy: rollingUpdate: maxSurge: maxUnavailable: type: RollingUpdate template: metadata: annotations: onprem.gke.io/provider: vsphere creationTimestamp: null labels: kubernetes.googleapis.com/cluster-name: example-cluster kubernetes.googleapis.com/cluster-namespace: set: node spec: metadata: creationTimestamp: providerSpec: value: apiVersion: vsphereproviderconfig.k8s.io/v1alpha1 kind: VsphereMachineProviderConfig machineVariables: datacenter: datastore: disk_label: disk_size: "" memory: "" network: num_cpus: "" resource_pool: example-cluster vm_template: metadata: creationTimestamp: networkSpec: address: dns: ntp: "" useIPAM: vsphereMachine: versions: kubelet: status: availableReplicas: observedGeneration: readyReplicas: replicas: updatedReplicas: