L'API v1beta1 del cluster consente di eseguire il provisioning di un cluster in base a una definizione predefinita di ClusterClass.

API v1beta1 di ClusterClass

L'API del cluster di Kubernetes è una suite di strumenti che consente di eseguire il provisioning dichiarativo, l'aggiornamento e il funzionamento dei cluster Kubernetes. ClusterClass è un'evoluzione di API del cluster che consente di definire i modelli per la gestione del ciclo di vita di set di cluster. Servizio TKG supporta ClusterClass utilizzando l'API v1beta1.

Servizio TKG viene fornito con una definizione ClusterClass predefinita denominata tanzukubernetescluster. La ClusterClass tanzukubernetescluster fornisce il modello per la creazione del cluster utilizzando l'API v1beta. La ClusterClass tanzukubernetescluster è disponibile in tutti gli spazi dei nomi degli utenti. Per creare un cluster basato su questa ClusterClass, fare riferimento ad esso nella Specifica del cluster. Per istruzioni, fare riferimento agli esempi di v1beta.

ClusterClass predefinita tanzukubernetescluster

La ClusterClass tanzukubernetescluster predefinita non è modificabile. Può essere aggiornata a ogni versione di TKG Service.

Per visualizzare la ClusterClass tanzukubernetescluster predefinita fornita con l'istanza di TKG Service, completare i passaggi seguenti:

  1. Accedere a Supervisore.
    kubectl vsphere login --server=IP-or-FQDN --vsphere-username [email protected]
  2. Passare al contesto Spazio dei nomi vSphere in cui è stato eseguito il provisioning di un cluster TKGS.
    kubeclt config use-context VSPEHRE-NS
  3. Recuperare la ClusterClass tanzukubernetescluster predefinita.
    kubectl get clusterclass tanzukubernetescluster -o yaml
  4. Facoltativamente, è possibile scrivere l'output della ClusterClass predefinita in un file denominato tkc-dcc.yaml.
    kubectl get clusterclass tanzukubernetescluster -o yaml > tkc-dcc.yaml

Variabili di ClusterClass per la personalizzazione di un cluster

È possibile personalizzare un cluster basato sulla ClusterClass tanzukubernetescluster utilizzando le variabili. Le variabili vengono definite utilizzando coppie nome-valore. La sintassi deve essere conforme a openAPIV3Schema.

Per eseguire il provisioning di un cluster utilizzando l'API v1beta1, sono necessarie due variabili:
  • Classe di macchine virtuali
  • Classe di storage
Sono disponibili variabili aggiuntive per la personalizzazione di un cluster, ad esempio:
  • Proxy
  • Certificati TLS
  • Chiavi SSH

Le sezioni seguenti elencano tutte le variabili disponibili con la ClusterClass tanzukubernetescluster predefinita.

Importante: Per essere valido, il nome di una chiave deve essere composto solo da caratteri alfanumerici, un trattino (ad esempio key-name), un carattere di sottolineatura (ad esempio KEY_NAME) o un punto (ad esempio key.name). Nel nome di una chiave non è possibile utilizzare uno spazio.

clusterEncryptionConfigYaml

Utilizzare la variabile clusterEncryptionConfigYaml per configurare la crittografia del cluster.

clusterEncryptionConfigYaml
Stringa che è un file YAML che fornisce i dettagli di configurazione della crittografia.
È possibile configurare la crittografia dei dati nel database etcd utilizzando il pacchetto kube-apiserver Encryption Configuration. Vedere Encrypting Secret Data at Rest nella documentazione di 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

Utilizzare la variabile controlPlaneCertificateRotation per configurare il sistema per la rotazione dei certificati TLS per i nodi del piano di controllo attivando un'implementazione di questi certificati prima della scadenza. La rotazione del certificato del piano di controllo è disponibile per tutti i nodi del piano di controllo nuovi ed esistenti.
controlPlaneCertificateRotation
Valore booleano per l'attivazione della funzionalità e numero di giorni prima della scadenza per la rotazione dei certificati. Per ulteriori informazioni, vedere la sezione relativa alla rotazione automatica dei certificati mediante il provider del piano di controllo Kubeadm.
...
    variables:
    - name: controlPlaneCertificateRotation
      value: 
        activate: true
        daysBefore: 90

dove:

  • activate è un valore booleano per l'attivazione della funzionalità. Il valore predefinito è true
  • daysBefore è la durata espressa in numero di giorni prima della scadenza. Il valore predefinito è 90 giorni, il valore minimo è 7 giorni prima della scadenza
Nota: Questa variabile è stata aggiornata per vSphere 8 Update 3 ( Servizio TKG 3.0).

controlPlaneVolumes

Utilizzare la variabile controlPlaneVolumes per configurare volumi persistenti per i nodi del piano di controllo.
controlPlaneVolumes
Array di oggetti facoltativo, ciascuno dei quali include i valori name, storageClass e mountPath, che sono ognuno una stringa, e un oggetto capacity facoltativo che include una stringa 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 variabile defaultRegistrySecret configura il registro di container predefinito per il cluster.
Nota: Questa variabile è riservata per l'uso con il registro Harbor incorporato.
defaultRegistrySecret
Oggetto che include una chiave pubblica, un nome di certificato e uno spazio dei nomi per il registro di container predefinito.
Se si abilita il registro Harbor incorporato in Supervisore, la variabile defaultRegistrySecret specifica il certificato del servizio del registro considerato attendibile dal cluster. Il segreto del certificato viene contrassegnato con managed-by: vmware-vRegistry. Alla creazione del cluster, nella variabile defaultRegistrySecret viene inserito un certificato defaultRegistry. Dopo la creazione del cluster, è possibile gestire la rotazione del certificato o qualsiasi aggiornamento aggiornando manualmente la variabile.
...
    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

Utilizzare la variabile defaultStorageClass per configurare una classe di storage predefinita per il cluster.

defaultStorageClass
Stringa che identifica la classe di storage da utilizzare come classe di storage predefinita, spesso richiesta da alcune applicazioni come i grafici di Helm e i pacchetti Tanzu.
...
    variables:
    - name: defaultStorageClass
      value: tkg2-storage-profile

extensionCert

Utilizzare la variabile extensionCert per configurare un certificato TLS.

extensionCert
Oggetto contenente un oggetto contentSecret che include le stringhe name e key. contentSecret fa riferimento a un oggetto segreto Kubernetes creato per un certificato 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

Utilizzare la variabile kubeAPIServerFQDNs per configurare un cluster con un nome di dominio completo (FQDN).

kubeAPIServerFQDNs
Array di uno o più nomi di dominio completi (FQDN).
Il certificato dell'API Kubernetes generato includerà ciascuno dei nomi di dominio completi specificati nella variabile kubeAPIServerFQDNs. Il sistema popolerà kubeconfig con il primo nome di dominio completo dell'elenco presupponendo che sia risolvibile. Se si desidera utilizzare un altro nome di dominio completo dell'elenco, è possibile modificare manualmente il file kubeconfig generato con il nome di dominio completo desiderato dell'elenco delle variabili.
Per dettagli, consultare Esempio v1beta1: cluster con nome di dominio completo (FQDN).

nodePoolLabels

Utilizzare la variabile nodePoolLabels per configurare le etichette per i nodi di lavoro.

nodePoolLabels
Array di uno o più oggetti, in cui ciascun oggetto contiene una coppia chiave/valore, entrambi stringhe.
Le etichette consentono di organizzare gli oggetti di sistema in base alle proprie esigenze per semplificare l'esecuzione di query e la creazione di report. Per informazioni sull'utilizzo, vedere la documentazione sulle etichette di Kubernetes.

nodePoolTaints

Utilizzare la variabile nodePoolTaints per applicare tinte ai nodi di lavoro.

nodePoolTaints
Array di oggetti, in cui ogni oggetto contiene un taint che si applica ai nodi di lavoro.
Ogni oggetto taint include key (stringa), value (stringa) e effect (stringa). Il sistema compila il campo timeAdded alla creazione o all'aggiornamento.

nodePoolVolumes

Utilizzare la variabile nodePoolVolumes per specificare i volumi persistenti per i nodi del cluster.

nodePoolVolumes
Array di oggetti facoltativo, ciascuno dei quali include i valori name, storageClass e mountPath, che sono ognuno una stringa, e un oggetto capacity facoltativo che include una stringa 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

Utilizzare la variabile ntp per configurare un server NTP per il cluster.

ntp
Stringa che è il nome di dominio completo o l'indirizzo IP di un server NTP.
La variabile NTP specifica il nome di dominio del server NTP, come mostrato nell'esempio. Il server NTP viene inserito nella variabile Cluster al momento della creazione del cluster. Dopo la creazione del cluster, è possibile gestire la rotazione del nome del server o qualsiasi aggiornamento aggiornando manualmente la variabile Cluster.
...
    variables:
    - name: ntp
      value: time1.vmware.com

podSecurityStandard

Utilizzare la variabile podSecurityStandard per configurare la sicurezza del pod a livello di cluster.
Nota: Questa variabile è una novità per vSphere 8 Update 3 ( Servizio TKG 3.0).
podSecurityStandard

Con TKr v1.26 e versioni successive, per impostazione predefinita le restrizioni di sicurezza del pod (PSA) vengono applicate a livello di spazio dei nomi utilizzando etichette di annotazione. Vedere Configurazione di PSA per TKR 1.25 e versioni successive.

In alternativa, è possibile utilizzare la variabile podSecurityStandard per configurare PSA a livello di cluster quando si esegue il provisioning o l'aggiornamento di un cluster v1beta1.

La variabile podSecurityStandard può essere implementata come segue:

...
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]
dove:
  • Il valore DISATTIVATO è false (predefinito) per applicare PSA a livello di cluster e true in caso contrario.
  • Il valore *-PROFILE è il profilo PSA per ogni modalità, che può essere "privileged", "baseline" o "restricted" (impostazione predefinita).
  • Il valore *-VERSION è la versione di Kubernetes per ogni modalità, ad esempio "v1.26". Il valore "latest" è quello predefinito.
  • Il valore EXEMPT-NS è un elenco di spazi dei nomi separati da virgole da escludere dal controllo PSA.
Nota: Gli spazi dei nomi del sistema sono esclusi dalla sicurezza del pod, inclusi kube-system, tkg-system e vmware-system-cloud-provider.

Se non si implementa la variabile podSecurityStandard, il comportamento PSA predefinito viene mantenuto. Se si include la variabile podSecurityStandard nella specifica del cluster, le impostazioni della variabile verranno controllate, incluse le relative impostazioni predefinite, a meno che non le si sovrascriva.

L'esempio seguente mostra le impostazioni predefinite.
...
    variables:
      - name: podSecurityStandard
        value:
          enforce: "restricted"
          enforce-version: "latest"
L'esempio seguente fornisce registri di controllo e avvisi per identificare i carichi di lavoro che non seguono le procedure consigliate per la protezione avanzata del pod corrente, ma applica solo un criterio minimamente restrittivo ("base di confronto") che impedisce le riassegnazioni note dei privilegi.
...
    variables:
      - name: podSecurityStandard
        value:
          audit: "restricted"
          warn: "restricted"
          enforce: "baseline"
Nell'esempio seguente vengono applicati criteri limitati, ad eccezione di uno spazio dei nomi specifico.
...
    variables:
      - name: podSecurityStandard
        value:
          audit: "restricted"
          warn: "restricted"
          enforce: "restricted"
          exemptions:
            namesaces: ["privileged-workload-ns"]
L'esempio seguente limita l'imposizione a una determinata versione di TKr.
...
variables:
  - name: podSecurityStandard
    value: 
      audit-version: "v1.26"
      warn-version: "v1.26"
      enforce-version: "v1.26"

Per ulteriori informazioni, vedere gli standard di sicurezza del pod nella documentazione di Kubernetes.

proxy

Utilizzare la variabile proxy per configurare un server proxy per il cluster.

proxy
Oggetto con parametri che fanno riferimento a un server proxy per le connessioni del cluster in uscita.
I parametri proxy necessari sono httpProxy, httpsProxy e noProxy. Tutti e tre i campi sono obbligatori se si include la variabile proxy nella definizione del cluster.
I campi httpProxy e httpsProxy accettano valori delle stringhe che fanno riferimento all'URI di un server proxy configurato per gestire le connessioni HTTP e HTTPS in uscita dal cluster TKG. È possibile connettersi al server proxy utilizzando HTTP. Le connessioni HTTPS non sono supportate.
Il campo noProxy è un array di stringhe. Ottenere i valori noProxy dalla rete del carico di lavoro del Supervisore. Nel campo noProxy è necessario includere le subnet Rete dello spazio dei nomi, Ingresso e Uscita.
Non è necessario includere la subnet Servizi nel campo noProxy. Il cluster TKG non interagisce con questa subnet.
Non è necessario includere clusterNetwork.services.cidrBlocks e clusterNetwork.pods.cidrBlocks nel campo noProxy. A questi endpoint non viene applicato alcun proxy per impostazione predefinita.
Non è necessario includere localhost e 127.0.0.1 nel campo noProxy. A questi endpoint non viene applicato alcun proxy per impostazione predefinita.
...
    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

Utilizzare la variabile storageClass per configurare una classe di storage per il cluster.

storageClass
Stringa che è il nome di un vSphere Storage Profile che è stato assegnato al Spazio dei nomi vSphere in cui viene eseguito il provisioning del cluster TKG.
...
    variables:
    - name: storageClass
      value: tkgs-storage-profile 
Utilizzare il comando seguente per elencare le classi di storage disponibili:
kubectl describe namespace VSPHERE-NAMESPACE-NAME
Oppure, se si dispone dei privilegi di amministratore di vSphere:
kubectl describe storageclasses

storageClasses

Utilizzare la variabile storageClasses per configurare un array di classi di storage per il cluster.

storageClasses
Array di una o più stringhe, in cui ciascuna stringa è il nome di un vSphere Storage Profile che è stato assegnato al Spazio dei nomi vSphere in cui viene eseguito il provisioning del cluster TKG.
...
    variables:
    - name: storageClasses
      value: [tkg2-storage-profile, tkg2-storage-profile-latebinding] 
Utilizzare il comando seguente per elencare le classi di storage disponibili:
kubectl describe namespace VSPHERE-NAMESPACE-NAME
Oppure, se si dispone dei privilegi di amministratore di vSphere:
kubectl describe storageclasses

TKR_DATA

Utilizzare la variabile TKR_DATA per specificare le informazioni TKR.

TKR_DATA
Oggetto utilizzato per specificare la versione di TKR e altri dettagli.
version è una stringa nel formato TKR NAME che deve essere utilizzata dai nodi del cluster.
Solo le TKR che non dispongono dell'etichetta legacy-tkr sono compatibili con TKG nel supervisore vSphere 9. Vedere Utilizzo delle versioni di Kubernetes con cluster Servizio TKG.
Il sistema operativo predefinito è PhotonOS. Utilizzare le annotazioni per specificare il TKR di Ubuntu.

trust

Utilizzare la variabile trust per specificare uno o più certificati CA attendibili per il cluster.

trust
Oggetto per l'aggiunta di certificati TLS al cluster, ovvero CA aggiuntive o certificati finali.
Il valore è additionalTrustedCAs, che è un array di stringhe. Ad esempio:
#trust-example
    variables:
      - name: trust
        value:
          additionalTrustedCAs:
          - name: additional-ca-1
          - name: additional-ca-2
          - name: additional-ca-N
Il valore di ogni stringa è il nome definito dall'utente per il campo della mappa dei dati nel segreto Kubernetes che contiene il certificato CA in formato PEM con doppia codifica base64. Ad esempio:
#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 d'uso comune per la variabile trust consiste nell'integrare un cluster v1beta1 con un registro di container privato. Vedere Integrazione dei cluster Servizio TKG con un registro di container privato.

user

Utilizzare la variabile user per specificare le credenziali dell'utente del cluster.

user
Oggetto che include un oggetto passwordSecret, con nome e stringhe di chiave, e la stringa sshAuthorizedKey. È possibile utilizzare questa variabile per aggiungere una chiave SSH dell'utente ai nodi del cluster per l'accesso SSH remoto.
La variabile Utente specifica le credenziali di accesso SSH, incluse le password e le chiavi autorizzate. Per impostazione predefinita, il nome utente è vmware-system-user. È necessario creare un hash della password e archiviarla in un segreto nello stesso spazio dei nomi in cui viene eseguito il provisioning del cluster. L'oggetto passwordSecret fa riferimento a questo segreto. Ad esempio, in Linux è possibile generare un hash sicuro utilizzando mkpasswd --method=SHA-512 --rounds=4096. Vedere Inclusione di utenti e gruppi per ulteriori dettagli.
...
    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

Utilizzare la variabile vmClass per configurare la classe di macchine virtuali per i nodi del cluster.

vmClass
Stringa obbligatoria mappata al nome di una classe di macchine virtuali associata al Spazio dei nomi vSphere in cui viene eseguito il provisioning del cluster TKG.
vmClass è il nome della VirtualMachineClass che descrive le impostazioni dell'hardware virtuale da utilizzare per i nodi del cluster. VirtualMachineClass controlla la CPU e la memoria disponibili per il nodo, nonché le richieste e i limiti di tali risorse. Vedere Utilizzo di classi di macchine virtuali con i cluster Servizio TKG.
È possibile utilizzare solo classi di macchine virtuali associate a Spazio dei nomi vSphere in cui viene eseguito il provisioning del cluster TKG Service. Utilizzare il comando kubectl get virtualmachineclass per elencare le classi associate.
È possibile definire la variabile vmClass in ambiti diversi in modo da poter utilizzare classi di macchine virtuali diverse per i nodi del piano di controllo e i nodi di lavoro del pool di nodi.
Ad esempio, qui una variabile vmClass inline overrides la variabile vmClass principale per questa topologia machineDeployment specifica.
...
    workers:
      machineDeployments:
      - class: tkg-worker
        name: compute
        replicas: 3
        variables:
          overrides:
          - name: vmClass
            value: guaranteed-large