La API del clúster v1beta1 le permite aprovisionar un clúster en función de una definición ClusterClass predeterminada.

API ClusterClass v1beta1

La API de clúster de Kubernetes es un conjunto de herramientas que admite para aprovisionar, actualizar y operar de forma declarativa los clústeres de Kubernetes. ClusterClass es una evolución de la API de clúster que permite definir plantillas para administrar el ciclo de vida de los conjuntos de clústeres. Servicio TKG admite ClusterClass mediante la API v1beta1.

Servicio TKG se incluye con una definición ClusterClass predeterminada denominada tanzukubernetescluster. ClusterClass de tanzukubernetescluster proporciona la plantilla para la creación de clústeres mediante la API v1beta. La opción ClusterClass de tanzukubernetescluster se encuentra disponible en todos los espacios de nombres de usuario. Para crear un clúster basado en esta instancia de ClusterClass, haga referencia a esta opción en la especificación del clúster. Consulte los ejemplos de v1beta para obtener instrucciones.

tanzukubernetescluster de ClusterClass predeterminada

La ClusterClass tanzukubernetescluster predeterminada es inmutable. Puede actualizarse con cada versión del servicio TKG.

Para ver la variable ClusterClass tanzukubernetescluster predeterminada que se incluye con la instancia del servicio TKG, realice los siguientes pasos:

  1. Inicie sesión en Supervisor.
    kubectl vsphere login --server=IP-or-FQDN --vsphere-username [email protected]
  2. Cambie el contexto al espacio de nombres de vSphere en el que se aprovisiona un clúster de TKGS.
    kubeclt config use-context VSPEHRE-NS
  3. Obtenga la variable ClusterClass tanzukubernetescluster predeterminada.
    kubectl get clusterclass tanzukubernetescluster -o yaml
  4. Escriba el resultado de la variable ClusterClass predeterminada en un archivo denominado tkc-dcc.yaml.
    kubectl get clusterclass tanzukubernetescluster -o yaml > tkc-dcc.yaml

Variables ClusterClass para personalizar un clúster

Un clúster se personaliza en función de la ClusterClass tanzukubernetescluster mediante variables. Las variables se definen mediante pares nombre-valores. La sintaxis debe cumplir el esquema openAPIV3Schema.

Se requieren dos variables para aprovisionar un clúster mediante la API v1beta1:
  • Clase de VM
  • Clase de almacenamiento
Hay variables adicionales disponibles para personalizar un clúster, como las siguientes:
  • Proxy
  • Certificados TLS
  • claves SSH

En las siguientes secciones se enumeran todas las variables que están disponibles con la ClusterClasstanzukubernetescluster predeterminada.

Importante: Un nombre de clave válido solo debe constar de caracteres alfanuméricos, un guion (como key-name), un guion bajo (como KEY_NAME) o un punto (como key.name). No puede utilizar un espacio en un nombre de clave.

clusterEncryptionConfigYaml

Utilice la variable clusterEncryptionConfigYaml para configurar el cifrado del clúster.

clusterEncryptionConfigYaml
Cadena que es un archivo YAML que proporciona detalles de configuración de cifrado.
Puede configurar el cifrado de datos en la base de datos de etcd mediante el paquete de Configuración de cifrado kube-apiserver. Consulte Cifrar datos secretos en reposo en la documentación de Kubernetes.
...
    variables:
    #clusterEncryptionConfigYaml specifies the base64 encoded 
    #EncryptionConfiguration YAML
    #the YAML contains a base64 encryption configuration for the cluster identity
    #the key is generated randomly
    - name: clusterEncryptionConfigYaml
      value: string which is name of the EncryptionConfiguration YAML 

controlPlaneCertificateRotation

Utilice la variable controlPlaneCertificateRotation para configurar el sistema para que rote los certificados TLS para los nodos del plano de control. Para ello, active una implementación de estos certificados antes de que caduquen. La rotación de certificados del plano de control estará disponible para todos los nodos de plano de control nuevos y existentes.
controlPlaneCertificateRotation
Booleano para activar la función y el número de días antes de la caducidad a fin de rotar los certificados. Consulte Rotación automática de certificados mediante el proveedor de plano de control de Kubeadm para obtener más información.
...
    variables:
    - name: controlPlaneCertificateRotation
      value: 
        activate: true
        daysBefore: 90

Donde:

  • activate es un booleano para activar la función; el valor predeterminado es true
  • daysBefore es la duración en el número de días antes de la fecha de caducidad; el valor predeterminado es 90 días. El mínimo es 7 días antes de que caduque
Nota: Esta variable se actualiza para vSphere 8 Update 3 ( Servicio TKG 3.0).

controlPlaneVolumes

Utilice la variable controlPlaneVolumes para configurar volúmenes persistentes para los nodos del plano de control.
controlPlaneVolumes
Matriz opcional de objetos; cada uno de ellos incluye name, storageClass y mountPath, cada uno de los cuales son cadenas, y un objeto capacity opcional que incluye una cadena storage.
...
    variables:
      #controlPlaneVolumes is an optional set of PVCs to create and
      #attach to each node
      - name: controlPlaneVolumes
        value:
          #name of the PVC to be used as the suffix (node.name)
          - name: NAME
            #mountPath is the directory where the volume device is mounted
            #takes the form /dir/path
            mountPath: /dir/path
            #storageClass is the storage class to use for the PVC
            storageClass: tkgs-storage-profile
            #capacity is the PVC storage capacity
            capacity:
              #storage sets the capacity for the disk volume
              #if not specified defaults to storageClass capacity
              storage: 4Gi           

defaultRegistrySecret

La variable defaultRegistrySecret configura el registro de contenedor predeterminado para el clúster.
Nota: Esta variable está reservada para su uso con el registro de Harbor integrado.
defaultRegistrySecret
Objeto que incluye una clave pública, un nombre de certificado y un espacio de nombres para el registro de contenedor predeterminado.
Si habilita el registro de Harbor integrado en Supervisor, la variable defaultRegistrySecret especifica el certificado del servicio de registro en el que confía el clúster. El secreto de certificado se etiqueta con managed-by: vmware-vRegistry. Al crear un clúster, se inserta un certificado defaultRegistry en la variable defaultRegistrySecret. Después de crear el clúster, puede administrar la rotación de certificados o cualquier actualización mediante la actualización manual de la variable.
...
    variables:
    - name: defaultRegistrySecret
      value:
        #data holds the base64 encoded data.ca\.crt content
        #data.ca\.crt is already encoded, so raw cert data is encoded twice
        data: LS0tLS1CRUdJTiBDRVJU...S0tRU5EIENFUlRJRklDQVRFL
        #name specifies the name of the registry cert secret 
        name: harbor-ca-key-pair
        #namespace specifies the ns of the registry cert secret
        namespace: svc-harbor-domain-c9

defaultStorageClass

Utilice la variable defaultStorageClass para configurar una clase de almacenamiento predeterminada para el clúster.

defaultStorageClass
Cadena que identifica qué clase de almacenamiento se debe utilizar como clase de almacenamiento predeterminada, a menudo la requieren ciertas aplicaciones, como gráficos de Helm y paquetes de Tanzu.
...
    variables:
    - name: defaultStorageClass
      value: tkg2-storage-profile

extensionCert

Utilice la variable extensionCert para configurar un certificado TLS.

extensionCert
Objeto que contiene un objeto de contentSecret que contiene cadenas name y key. contentSecret hace referencia a un objeto secreto de Kubernetes que se creó para un certificado TLS.
...
    variables:
    #extensionCert specifies the cert and key for Extensions Controller
    #self-signed issuer and certificates must be created in advance
    - name: extensionCert
      value: 
        contentSecret:
          #name specifies the name of secret
          name: string
          #key specifies the content of tls\.crt in the secret's data map
          key: string

kubeAPIServerFQDNs

Utilice la variable kubeAPIServerFQDNs para configurar un clúster con un FQDN.

kubeAPIServerFQDNs
Matriz de uno o varios nombres de dominio completos (FQDN).
El certificado de API de Kubernetes que se genera incluirá cada uno de los FQDN que haya especificado en la variable kubeAPIServerFQDNs. El sistema rellenará kubeconfig con el primer FQDN de la lista y asume que se puede resolver. Si desea utilizar un FQDN diferente de la lista, puede editar manualmente el archivo kubeconfig generado con el FQDN deseado de la lista de variables.
Consulte Ejemplo de v1beta1: clúster con FQDN para obtener detalles.

nodePoolLabels

Utilice la variable nodePoolLabels para configurar etiquetas para los nodos de trabajo.

nodePoolLabels
Matriz de uno o varios objetos; cada objeto contiene un par clave/valor y ambos son cadenas.
Las etiquetas le permiten organizar los objetos del sistema según sus requisitos y, de este modo, facilitar las consultas y la generación de informes. Consulte la documentación de etiquetas de Kubernetes para ver detalles sobre el uso.

nodePoolTaints

Utilice la variable nodePoolTaints para aplicar manchas a los nodos de trabajo.

nodePoolTaints
Matriz de objetos; cada objeto contiene un taint que se aplica a los nodos de trabajo.
Cada objeto taint incluye una key (cadena), un value (cadena) y un effect (cadena). El sistema rellena el campo timeAdded durante la creación o la actualización.

nodePoolVolumes

Utilice la variable nodePoolVolumes para especificar volúmenes persistentes para los nodos del clúster.

nodePoolVolumes
Matriz opcional de objetos; cada uno de ellos incluye name, storageClass y mountPath, cada uno de los cuales son cadenas, y un objeto capacity opcional que incluye una cadena storage.
...
    variables:
      #nodePoolVolumes is an optional set of PVCs to create and
      #attach to each node; use for high-churn components like containerd
      - name: nodePoolVolumes
        value: |
          #name of the PVC to be used as the suffix (node.name)
          - name: etcd
            #mountPath is the directory where the volume device is mounted
            #takes the form /dir/path
            mountPath: /var/lib/containerd
            #storageClass is the storage class to use for the PVC
            storageClass: tkgs-storage-profile
            #capacity is the PVC storage capacity
            capacity:
              #storage sets the capacity for the disk volume
              #if not specified defaults to storageClass capacity
              storage: 4Gi           

ntp

Utilice la variable ntp para configurar un servidor NTP para el clúster.

ntp
Cadena que es el FQDN o la dirección IP de un servidor NTP.
La variable NTP especifica el nombre de dominio del servidor NTP como se muestra en el ejemplo. El servidor NTP se inserta en la variable Clúster al crear el clúster. Después de crear el clúster, puede administrar la rotación de nombres de servidor o cualquier actualización mediante la actualización manual de la variable del clúster.
...
    variables:
    - name: ntp
      value: time1.vmware.com

podSecurityStandard

Utilice la variable podSecurityStandard para configurar la seguridad de los pods en todo el clúster.
Nota: Esta variable es nueva para vSphere 8 Update 3 ( Servicio TKG 3.0).
podSecurityStandard

Con TKr v1.26 y versiones posteriores, de forma predeterminada, las restricciones de seguridad de pods (PSA) se aplican en el nivel del espacio de nombres mediante etiquetas de anotación. Consulte Configurar PSA para TKR 1.25 y versiones posteriores.

Si lo prefiere, puede utilizar la variable podSecurityStandard para configurar PSA en todo el clúster al aprovisionar o actualizar un clúster v1beta1.

La variable podSecurityStandard puede implementarse de la siguiente manera:

...
variables:
- name: podSecurityStandard
  value: 
    deactivated: DEACTIVATED
    audit: AUDIT-PROFILE
    enforce: ENFORCE-PROFILE
    warn: WARN-PROFILE
    auditVersion: AUDIT-VERSION
    enforceVersion: ENFORCE-VERSION
    warnVersion: WARN-VERSION
    exemptions: 
      namespaces: [EXEMPT-NS]
Donde:
  • El valor DESACTIVADO es false (valor predeterminado) para aplicar PSA en todo el clúster y, de lo contrario, true.
  • El valor *-PROFILE es el perfil de PSA de cada modo, que puede ser "privileged", "baseline" o "restricted" (predeterminado).
  • El valor *-VERSION es la versión de Kubernetes para cada modo, como "v1.26". El valor "latest" es el predeterminado.
  • El valor EXEMPT-NS es una lista separada por comas de espacios de nombres que se excluirán del control de PSA.
Nota: Los espacios de nombres del sistema se excluyen de la seguridad de pods, incluidos kube-system, tkg-system y vmware-system-cloud-provider.

Si no implementa la variable podSecurityStandard, se conserva el comportamiento de PSA predeterminado. Si incluye la variable podSecurityStandard en la especificación del clúster, la configuración de la variable controlará, incluidos sus valores predeterminados, a menos que los anule.

En el siguiente ejemplo se muestran los valores predeterminados.
...
    variables:
      - name: podSecurityStandard
        value:
          enforce: "restricted"
          enforce-version: "latest"
En el siguiente ejemplo se proporcionan registros de auditoría y advertencias para identificar las cargas de trabajo que no siguen las prácticas recomendadas de protección de pods actuales, pero solo se aplica una directiva mínimamente restrictiva ("línea base") que impide la ampliación de privilegios conocidos.
...
    variables:
      - name: podSecurityStandard
        value:
          audit: "restricted"
          warn: "restricted"
          enforce: "baseline"
En el siguiente ejemplo se aplica una directiva restringida, excepto en un espacio de nombres específico.
...
    variables:
      - name: podSecurityStandard
        value:
          audit: "restricted"
          warn: "restricted"
          enforce: "restricted"
          exemptions:
            namesaces: ["privileged-workload-ns"]
El siguiente ejemplo restringe la aplicación a una versión de TKr en particular.
...
variables:
  - name: podSecurityStandard
    value: 
      audit-version: "v1.26"
      warn-version: "v1.26"
      enforce-version: "v1.26"

Para ver más ejemplos, consulte los estándares de seguridad de pods en la documentación de Kubernetes.

proxy

Utilice la variable proxy para configurar un servidor proxy para el clúster.

proxy
Objeto con parámetros que hacen referencia a un servidor proxy para las conexiones de clústeres salientes.
Los parámetros requeridos del proxy son httpProxy, httpsProxy y noProxy. Los tres campos son obligatorios si incluye la variable proxy en la definición del clúster.
Los campos httpProxy y httpsProxy toman los valores de cadenas que hacen referencia al URI de un servidor proxy que está configurado para administrar las conexiones HTTP y HTTPS salientes desde el clúster de TKG. Puede conectarse al servidor proxy mediante HTTP. No se admiten conexiones HTTPS.
El campo noProxy es una matriz de cadenas. Obtenga los valores noProxy de la red de cargas de trabajo de Supervisor. Debe incluir en el campo noProxy las subredes de red de espacio de nombres, entrada y salida.
No es necesario incluir la subred de servicios en el campo noProxy. El clúster de TKG no interactúa con esta subred.
No es necesario incluir clusterNetwork.services.cidrBlocks y clusterNetwork.pods.cidrBlocks en el campo noProxy. Estos endpoints no son objeto de proxy automáticamente.
No es necesario incluir localhost y 127.0.0.1 en el campo noProxy. Estos endpoints no son objeto de proxy automáticamente.
...
    variables:
    #proxy specifies a proxy server to be used for the cluster
    #if omitted no proxy is configured
    - name: proxy
      value:
        #httpProxy is the proxy URI for HTTP connections
        #to endpoints outside the cluster
        httpProxy: http://<user>:<pwd>@<ip>:<port>
        #httpsProxy is the proxy URL for HTTPS connections 
        #to endpoints outside the cluster
        httpsProxy: http://<user>:<pwd>@<ip>:<port>
        #noProxy is the list of destination domain names, domains, 
        #IP addresses, and other network CIDRs to exclude from proxying
        #must include Supervisor Pod, Egress, Ingress CIDRs
        noProxy: [array of strings, comma-separated]

storageClass

Utilice la variable storageClass para configurar una clase de almacenamiento para el clúster.

storageClass
Cadena que es el nombre de un perfil de almacenamiento de vSphere que se ha asignado al espacio de nombres de vSphere en el que se aprovisiona el clúster de TKG.
...
    variables:
    - name: storageClass
      value: tkgs-storage-profile 
Utilice el siguiente comando para enumerar las clases de almacenamiento disponibles:
kubectl describe namespace VSPHERE-NAMESPACE-NAME
O bien, si tiene privilegios de administrador de vSphere:
kubectl describe storageclasses

storageClasses

Utilice la variable storageClasses para configurar una matriz de clases de almacenamiento para el clúster.

storageClasses
Matriz de una o varias cadenas; cada cadena es el nombre de un perfil de almacenamiento de vSphere que se ha asignado al espacio de nombres de vSphere en el que se aprovisiona el clúster de TKG.
...
    variables:
    - name: storageClasses
      value: [tkg2-storage-profile, tkg2-storage-profile-latebinding] 
Utilice el siguiente comando para enumerar las clases de almacenamiento disponibles:
kubectl describe namespace VSPHERE-NAMESPACE-NAME
O bien, si tiene privilegios de administrador de vSphere:
kubectl describe storageclasses

TKR_DATA

Utilice la variable TKR_DATA para especificar la información de TKR.

TKR_DATA
Objeto que utiliza para especificar la versión de TKR y otros detalles.
version es una cadena con el formato TKR NAME que utilizarán los nodos del clúster.
Solo las TKR que no tengan la etiqueta legacy-tkr son compatibles con TKG en el supervisor de vSphere 9. Consulte Uso de versiones de Kubernetes con clústeres de Servicio TKG.
El sistema operativo predeterminado es PhotonOS. Utilice anotaciones para especificar la TKR de Ubuntu.

trust

Utilice la variable trust para especificar uno o varios certificados de CA de confianza para el clúster.

trust
Objeto para agregar certificados TLS al clúster, ya sean certificados de entidad de certificación adicionales o finales.
El valor es additionalTrustedCAs, que es una matriz de cadenas. Por ejemplo:
#trust-example
    variables:
      - name: trust
        value:
          additionalTrustedCAs:
          - name: additional-ca-1
          - name: additional-ca-2
          - name: additional-ca-N
El valor de cada cadena es el nombre definido por el usuario para el campo de asignación de datos en el secreto de Kubernetes que contiene el certificado de CA en formato PEM con doble codificación base64. Por ejemplo:
#secret-example
apiVersion: v1
data:
  additional-ca-1: TFMwdExTMUNSGlSzZ3Jaa...VVNVWkpRMEMwdExTMHRDZz09
kind: Secret
metadata:
  name: cluster01-user-trusted-ca-secret
  namespace: tkgs-cluster-ns
type: Opaque
Un caso práctico común de la variable de confianza es integrar un clúster v1beta1 con un registro de contenedor privado. Consulte Integrar clústeres de Servicio TKG con un registro de contenedor privado

usuario

Utilice la variable user para especificar las credenciales de usuario del clúster.

usuario
Objeto que incluye un objeto passwordSecret, con cadenas de nombre y clave, y una cadena sshAuthorizedKey. Puede utilizar esta variable para agregar la clave SSH de un usuario a los nodos del clúster para el acceso SSH remoto.
La variable Usuario especifica las credenciales de inicio de sesión SSH, incluidas la contraseña y las claves autorizadas. El nombre de usuario de forma predeterminada es vmware-system-user. La contraseña debe estar cifrada con hash y almacenada en un secreto en el mismo espacio de nombres en el que se aprovisiona el clúster. El objeto passwordSecret hace referencia a este secreto. Por ejemplo, en Linux, puede generar un hash seguro mediante mkpasswd --method=SHA-512 --rounds=4096. Consulte Incluir usuarios y grupos para obtener información más detallada.
...
    variables:
    #user specifies an authorized user and credentials
    - name: user
      value:
        #passwordSecret is an object that contains a Kubernetes secret and key
        passwordSecret:
          #name specifies the secret name
          name: string
          #key specifies the key value pair in the secret's data map
          key: string
        sshAuthorizedKey: string that is the base64-encoded public key

vmClass

Utilice la variable vmClass para configurar la clase de máquina virtual para los nodos del clúster.

vmClass
Cadena obligatoria que se asigna al nombre de una clase de máquina virtual que está enlazada al espacio de nombres de vSphere en el que se aprovisiona el clúster de TKG.
vmClass es el nombre de la VirtualMachineClass que describe la configuración del hardware virtual que se utilizará para los nodos del clúster. VirtualMachineClass controla la CPU y la memoria disponibles para el nodo, así como las solicitudes y los límites de esos recursos. Consulte Uso de clases de máquinas virtuales con clústeres de Servicio TKG.
Solo puede utilizar clases de máquinas virtuales que estén asociadas al espacio de nombres de vSphere en el que se aprovisiona el clúster de servicio TKG. Utilice el comando kubectl get virtualmachineclass para enumerar las clases enlazadas.
Puede definir la variable vmClass en diferentes ámbitos para poder utilizar diferentes clases de máquina virtual para los nodos de plano de control y los nodos de trabajo del grupo de nodos.
Por ejemplo, aquí una variable vmClass en línea overrides la variable vmClass principal para esta topología de machineDeployment específica.
...
    workers:
      machineDeployments:
      - class: tkg-worker
        name: compute
        replicas: 3
        variables:
          overrides:
          - name: vmClass
            value: guaranteed-large