Recursos da API Cluster

10

Nesta página, descrevemos os recursos da API Cluster do Kubernetes usados em clusters do Anthos no VMware (GKE no local).

Visão geral

Os clusters do Anthos no VMware são compatíveis com os seguintes recursos da API Cluster:

  • Cluster
  • Máquina
  • MachineDeployment
  • MachineSet
  • MachineClasses

Os clusters do Anthos no VMware geram automaticamente esses recursos nos clusters durante a instalação. Geralmente, não é preciso interagir diretamente com eles. Além disso, os clusters do Anthos na documentação do VMware mencionam 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 seções a seguir, você conhecerá os recursos da API Cluster atualmente relevantes para entender os clusters do Anthos no VMware.

Cluster

Um recurso de cluster representa uma instância do Kubernetes em execução em um host. Todos os clusters do Anthos em clusters do VMware têm um recurso de cluster que descreve o cluster.

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 de cluster que você consegue ver em um cluster do Anthos no cluster de usuário do VMware:

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

Nos clusters do Anthos no VMware, um recurso de máquina é uma especificação declarativa para uma máquina virtual (VM) individual que reside no vSphere. Cada recurso de máquina tem um recurso Node correspondente que é criado pelos clusters do Anthos no VMware 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 de máquina que você pode ver em um cluster do Anthos no cluster do VMware:

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 os clusters do Anthos no cluster da VMware 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 você pode ver em um cluster Anthos em cluster VMware:

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: