Neste tópico, descrevemos os recursos da API Cluster do Kubernetes usados no GKE On-Prem.
Visão geral
O GKE On-Prem é compatível com os seguintes recursos da API Cluster:
- Cluster
- Máquina
- MachineDeployment
- MachineSet
- MachineClasses
O GKE On-Prem gera automaticamente esses recursos nos clusters durante a instalação. Geralmente, não é preciso interagir diretamente com eles, exceto por procedimentos avançados, como excluir manualmente um cluster de usuário. Além disso, a documentação do GKE On-Prem faz referência a esses recursos para ilustrar conceitos como alta disponibilidade.
É possível verificar quais CustomResourceDefinitions (CRDs) da API Cluster estão disponíveis em um cluster:
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
Nas próximas seções, falaremos sobre os recursos da API Cluster atualmente relevantes para compreensão do GKE On-Prem.
Cluster
Um recurso de cluster representa uma instância do Kubernetes em execução em um host. Todos os clusters do GKE On-Prem têm um recurso Cluster que descreve esses contêineres.
Para ver os recursos do cluster em um cluster, execute o seguinte comando, em que [KUBECONFIG] é o caminho para o arquivo kubeconfig do cluster:
kubectl get clusters --kubeconfig [KUBECONFIG]
Veja abaixo um exemplo de recurso Cluster que pode ser visto em um cluster de usuário do GKE On-Prem:
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:
Máquina
No GKE On-Prem, um recurso Machine é uma especificação declarativa para uma máquina virtual (VM) individual localizada no vSphere. Cada recurso Machine tem um recurso de nó correspondente que é criado pelo GKE On-Prem com base na especificação da máquina. Esses recursos fazem referência ao mesmo objeto físico: uma VM localizada no seu ambiente do vSphere.
Para ver os recursos Machine em um cluster, execute o seguinte comando, em que [KUBECONFIG] é o caminho para o arquivo kubeconfig do cluster:
kubectl get machines --kubeconfig [KUBECONFIG]
Veja abaixo um exemplo de recurso Machine que pode ser visto em um cluster do GKE On-Prem:
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
Um MachineDeployment gerencia um grupo de máquinas: ele especifica o cluster do GKE On-Prem em que as máquinas são executadas, declara a configuração do vSphere e implementa alterações nas configurações. Pense em MachineDeployments e Machines como implantações e pods.
Para ver os recursos do MachineDeployment em um cluster, execute o seguinte comando, em que [KUBECONFIG] é o caminho para o arquivo kubeconfig do cluster:
kubectl get machinedeployments --kubeconfig [KUBECONFIG]
Veja abaixo um exemplo de recurso MachineDeployment que pode ser visto em um cluster do GKE On-Prem:
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: