This page outlines the Kubernetes Cluster API resources used in Google Distributed Cloud.
Overview
Google Distributed Cloud supports the following Cluster API resources:
- Cluster
- Machine
- MachineDeployment
- MachineSet
- MachineClasses
Google Distributed Cloud automatically generates these resources in your clusters during installation; generally, you don't need to interact directly with them. Additionally, Google Distributed Cloud documentation references these resources to illustrate concepts like high-availability.
You can check which Cluster API CustomResourceDefinitions (CRDs) are available in a 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
The following sections discuss the Cluster API resources currently relevant to understanding Google Distributed Cloud.
Cluster
A Cluster resource represents an instance of Kubernetes running on a host. All Google Distributed Cloud clusters have a Cluster resource that describes the cluster.
To see Cluster resources in a cluster, run the following command, where [KUBECONFIG] is the path to the cluster's kubeconfig file:
kubectl get clusters --kubeconfig [KUBECONFIG]
Below is an example of a Cluster resource that you might see in a Google Distributed Cloud user 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:
Machine
In Google Distributed Cloud, a Machine resource is a declarative specification for an individual virtual machine (VM) that lives in vSphere. Each Machine resource has a corresponding Node resource that is created by Google Distributed Cloud based on the Machine's specification. These resources reference the same physical object: a VM living in your vSphere environment.
To see Machine resources in a cluster, run the following command, where [KUBECONFIG] is the path to the cluster's kubeconfig file:
kubectl get machines --kubeconfig [KUBECONFIG]
Below is an example of a Machine resource that you might see in a Google Distributed Cloud cluster:
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
A MachineDeployment manages a group of Machines: it specifies the Google Distributed Cloud cluster in which the Machines run, declares their vSphere configuration, and rolls out changes to configurations. You can think of MachineDeployments and Machines being like Deployments and Pods.
To see MachineDeployment resources in a cluster, run the following command, where [KUBECONFIG] is the path to the cluster's kubeconfig file:
kubectl get machinedeployments --kubeconfig [KUBECONFIG]
Below is an example of a MachineDeployment resource that you might see in a Google Distributed Cloud cluster:
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: