Creazione di un cluster utente personalizzato

Questo argomento descrive come personalizzare la configurazione di un cluster utente GKE su AWS.

Ti consigliamo di creare un cluster utente personalizzato per i seguenti motivi:

  • Creazione di un altro cluster per un ambiente di staging o di test.
  • Aggiunta di pool di nodi con tipi di macchine diversi.
  • Creazione di un cluster in zone di disponibilità (AZ) AWS specifiche.

Prima di iniziare

Prima di iniziare a utilizzare GKE su AWS, assicurati di aver eseguito le seguenti attività:

  • Installa un servizio di gestione.

  • Se vuoi creare un cluster senza utilizzare terraform output example_cluster, devi avere subnet AWS private per il tuo piano di controllo. Ogni subnet deve appartenere a un'AZ diversa nella stessa regione AWS. Le tabelle di routing devono essere configurate per consentire il traffico tra le subnet private e ogni subnet deve avere accesso a un gateway NAT.

  • Devi disporre dell'ID del tuo Virtual Private Cloud (VPC) AWS. Un ID VPC è simile a vpc-012345678abcde. Puoi trovare l'ID VPC nella console AWS.

Per connetterti alle risorse GKE su AWS, segui questi passaggi. Seleziona se hai già un VPC AWS (o una connessione diretta al tuo VPC) o se hai creato un VPC dedicato durante la creazione del servizio di gestione.

VPC esistente

Se hai una connessione diretta o VPN a un VPC esistente, ometti la rigaenv HTTP_PROXY=http://localhost:8118 dai comandi in questo argomento.

VPC dedicato

Quando crei un servizio di gestione in una VPC dedicata, GKE su AWS include un host bastion in una subnet pubblica.

Per connetterti al servizio di gestione:

  1. Passa alla directory con la configurazione di GKE su AWS. Hai creato questa directory durante la installazione del servizio di gestione.

    cd anthos-aws

  2. Per aprire il tunnel, esegui lo script bastion-tunnel.sh. Il tunnel inoltra a localhost:8118.

    Per aprire un tunnel per l'bastion host, esegui il seguente comando:

    ./bastion-tunnel.sh -N
    

    I messaggi del tunnel SSH vengono visualizzati in questa finestra. Quando è tutto pronto, chiudi la connessione interrompendo il processo con Ctrl+C o chiudendo la finestra.

  3. Apri un nuovo terminale e passa alla directory anthos-aws.

    cd anthos-aws
  4. Verifica di essere in grado di connetterti al cluster con kubectl.

    env HTTPS_PROXY=http://localhost:8118 \
    kubectl cluster-info
    

    L'output include l'URL del server dell'API del servizio di gestione.

Selezione di una dimensione dell'istanza del piano di controllo

GKE su AWS non supporta il ridimensionamento delle istanze del piano di controllo. Prima di creare il cluster utente, seleziona le dimensioni delle istanze dei tuoi piani di controllo. Le dimensioni del piano di controllo dipendono dal numero di nodi nel cluster. La tabella seguente contiene le dimensioni delle istanze del control plane consigliate per varie dimensioni del cluster.

Dimensione cluster (nodi) Tipo di istanza del control plane
1 - 10 m5.large
11 - 100 m5.xlarge
101-200 m5.2xlarge

Creazione di un nuovo cluster con una configurazione personalizzata

Puoi utilizzare terraform output example_cluster per creare la configurazione di un cluster utente per cluster di gestione. Se vuoi creare cluster aggiuntivi, devi applicare una configurazione personalizzata.

In questo esempio, crei un cluster manualmente dalle CRD AWSCluster e AWSNodePool.

  1. Passa alla directory con la configurazione di GKE su AWS. Hai creato questa directory durante la installazione del servizio di gestione.

    cd anthos-aws

  2. Dalla directory anthos-aws, utilizza anthos-gke per cambiare contesto e passare al servizio di gestione.

    cd anthos-aws
    anthos-gke aws management get-credentials

  3. Apri un editor di testo e copia la seguente definizione di AWSCluster in un file chiamato custom-cluster.yaml.

    apiVersion: multicloud.cluster.gke.io/v1
    kind: AWSCluster
    metadata:
      name: CLUSTER_NAME
    spec:
      region: AWS_REGION
      networking:
        vpcID: VPC_ID
        podAddressCIDRBlocks: POD_ADDRESS_CIDR_BLOCKS
        serviceAddressCIDRBlocks: SERVICE_ADDRESS_CIDR_BLOCKS
        ServiceLoadBalancerSubnetIDs: SERVICE_LOAD_BALANCER_SUBNETS
      controlPlane:
        version:  CLUSTER_VERSION # Latest version is 1.25.5-gke.2100
        instanceType: AWS_INSTANCE_TYPE
        keyName: SSH_KEY_NAME
        subnetIDs:
        - CONTROL_PLANE_SUBNET_IDS
        securityGroupIDs:
        - CONTROL_PLANE_SECURITY_GROUPS
        iamInstanceProfile: CONTROL_PLANE_IAM_ROLE
        rootVolume:
          sizeGiB: ROOT_VOLUME_SIZE
          volumeType: ROOT_VOLUME_TYPE # Optional
          iops: ROOT_VOLUME_IOPS # Optional
          kmsKeyARN: ROOT_VOLUME_KEY # Optional
        etcd:
          mainVolume:
            sizeGiB: ETCD_VOLUME_SIZE
            volumeType: ETCD_VOLUME_TYPE # Optional
            iops: ETCD_VOLUME_IOPS # Optional
            kmsKeyARN: ETCD_VOLUME_KEY # Optional
        databaseEncryption:
          kmsKeyARN: ARN_OF_KMS_KEY
        hub: # Optional
          membershipName: ANTHOS_CONNECT_NAME
        cloudOperations: # Optional
          projectID: YOUR_PROJECT
          location: GCP_REGION
          enableLogging: ENABLE_LOGGING
          enableMonitoring: ENABLE_MONITORING
        workloadIdentity: # Optional
          oidcDiscoveryGCSBucket: WORKLOAD_IDENTITY_BUCKET
    

    Sostituisci quanto segue:

    • CLUSTER_NAME: il nome del tuo cluster.
    • AWS_REGION: la regione AWS in cui viene eseguito il cluster.

    • VPC_ID: l'ID della VPC in cui viene eseguito il cluster.

    • POD_ADDRESS_CIDR_BLOCKS: l'intervallo di indirizzi IPv4 utilizzati dai pod del cluster. Al momento è supportato un solo intervallo. L'intervallo non deve sovrapporsi ad alcuna subnet raggiungibile dalla tua rete. È possibile utilizzare lo stesso intervallo in più oggetti AWSCluster diversi. Ad esempio, 10.2.0.0/16.

    • SERVICE_ADDRESS_CIDR_BLOCKS: l'intervallo di indirizzi IPv4 utilizzati dai servizi del cluster. Al momento è supportato un solo intervallo. L'intervallo non deve sovrapporsi ad alcuna subnet raggiungibile dalla tua rete. È possibile utilizzare lo stesso intervallo in più oggetti AWSCluster. Ad esempio, 10.1.0.0/16.

    • SERVICE_LOAD_BALANCER_SUBNETS: gli ID subnet in cui GKE su AWS può creare bilanciatori del carico pubblici o privati.

    • CLUSTER_VERSION: una versione di Kubernetes supportata da GKE su AWS. La versione più recente è 1.25.5-gke.2100.

    • AWS_INSTANCE_TYPE: un tipo di istanza EC2 supportato.

    • SSH_KEY_NAME: una coppia di chiavi AWS EC2.

    • CONTROL_PLANE_SUBNET_IDS: gli ID subnet nelle AZ in cui vengono eseguite le istanze del piano di controllo.

    • CONTROL_PLANE_SECURITY_GROUPS: un securityGroupID creato durante l'installazione del servizio di gestione. Puoi personalizzarlo aggiungendo eventuali ID gruppo di sicurezza richiesti per la connessione al piano di controllo.

    • CONTROL_PLANE_IAM_PROFILE: nome del profilo dell'istanza AWS EC2 assegnato alle repliche del piano di controllo.

    • ROOT_VOLUME_SIZE: le dimensioni, in gibibyte (GiB), dei volumi radice del piano di controllo.

    • ROOT_VOLUME_TYPE con il tipo di volume EBS. Ad esempio: gp3.

    • ROOT_VOLUME_IOPS con la quantità di operazioni di I/O sottoposte a provisioning al secondo (IOPS) per il volume. Valido solo quando volumeType è GP3. Per ulteriori informazioni, consulta Volumi SSD per uso generico (gp3).

    • ROOT_VOLUME_KEY con il nome della risorsa Amazon della chiave AWS KMS che cripta i volumi principali delle istanze del piano di controllo.

    • ETCD_VOLUME_SIZE: la dimensione dei volumi utilizzati da etcd.

    • ETCD_VOLUME_TYPE con il tipo di volume EBS. Ad esempio: gp3.

    • ETCD_VOLUME_IOPS con la quantità di operazioni di I/O sottoposte a provisioning al secondo (IOPS) per il volume. Valido solo quando volumeType è gp3. Per ulteriori informazioni, consulta Volumi SSD per uso generico (gp3).

    • ETCD_VOLUME_KEY con l'Amazon Resource Name della chiave AWS KMS che cripta i volumi di dati etcd del piano di controllo.

    • ARN_OF_KMS_KEY: la chiave KMS AWS utilizzata per criptare i secret del cluster.

    • ANTHOS_CONNECT_NAME: il nome dell'abbonamento Connect utilizzato per registrare il cluster. Il nome dell'abbonamento deve essere univoco. Ad esempio, projects/YOUR_PROJECT/locations/global/memberships/CLUSTER_NAME, dove YOUR_PROJECT è il tuo Google Cloud progetto e CLUSTER_NAME è un nome univoco nel progetto. Questo campo è facoltativo.

    • YOUR_PROJECT: il tuo ID progetto.

    • GCP_REGION: la Google Cloud regione in cui vuoi archiviare i log. Scegli una regione vicina alla regione AWS. Per saperne di più, consulta Località globali - Regioni e zone ad esempio us-central1.

    • ENABLE_LOGGING: true o false, a seconda che Cloud Logging sia abilitato sui nodi del piano di controllo.

    • ENABLE_MONITORING: true o false, a seconda che Cloud Monitoring sia abilitato sui nodi del piano di controllo.

    • WORKLOAD_IDENTITY_BUCKET: il nome del bucket Cloud Storage contenente le informazioni di rilevamento della tua identità del carico di lavoro. Questo campo è facoltativo.

  4. Crea uno o più AWSNodePools per il tuo cluster. Apri un editor di testo e copia la seguente definizione di AWSCluster in un file chiamato custom-nodepools.yaml.

    apiVersion: multicloud.cluster.gke.io/v1
    kind: AWSNodePool
    metadata:
      name: NODE_POOL_NAME
    spec:
      clusterName: AWSCLUSTER_NAME
      version:  CLUSTER_VERSION # latest version is 1.25.5-gke.2100
      region: AWS_REGION
      subnetID: AWS_SUBNET_ID
      minNodeCount: MINIMUM_NODE_COUNT
      maxNodeCount: MAXIMUM_NODE_COUNT
      maxPodsPerNode: MAXIMUM_PODS_PER_NODE_COUNT
      instanceType: AWS_NODE_TYPE
      keyName: KMS_KEY_PAIR_NAME
      iamInstanceProfile: NODE_IAM_PROFILE
      proxySecretName: PROXY_SECRET_NAME
      rootVolume:
        sizeGiB: ROOT_VOLUME_SIZE
        volumeType: VOLUME_TYPE # Optional
        iops: IOPS # Optional
        kmsKeyARN: NODE_VOLUME_KEY # Optional 
    

    Sostituisci quanto segue:

    • NODE_POOL_NAME: un nome univoco per il pool di nodi AWS.
    • AWSCLUSTER_NAME: il nome del tuo AWSCluster. Ad esempio, staging-cluster.
    • CLUSTER_VERSION: una versione di GKE su AWS Kubernetes supportata.
    • AWS_REGION: la stessa regione AWS del tuo AWSCluster.
    • AWS_SUBNET_ID: una subnet AWS nella stessa regione del tuo AWSCluster.
    • MINIMUM_NODE_COUNT: il numero minimo di nodi nel pool di nodi. Per ulteriori informazioni, consulta Eseguire il ridimensionamento dei cluster di utenti.
    • MAXIMUM_NODE_COUNT: il numero massimo di nodi nel pool di nodi.
    • MAXIMUM_PODS_PER_NODE_COUNT: il numero massimo di pod che GKE su AWS può allocare a un nodo.
    • AWS_NODE_TYPE: un tipo di istanza AWS EC2.
    • KMS_KEY_PAIR_NAME: la coppia di chiavi AWS KMS assegnata a ogni worker del pool di nodi.
    • NODE_IAM_PROFILE: il nome del profilo dell'istanza AWS EC2 assegnato ai nodi del pool.
    • ROOT_VOLUME_SIZE: le dimensioni, in gibibyte (GiB), dei volumi radice del piano di controllo.
    • VOLUME_TYPE: il tipo di volume EBS AWS del nodo. Ad esempio: gp3.
    • IOPS: la quantità di operazioni di I/O al secondo (IOPS) messe a provisioning per i volumi. Valido solo quando volumeType è gp3.
    • NODE_VOLUME_KEY: l'ARN della chiave KMS AWS utilizzata per criptare il volume. Per saperne di più, consulta Utilizzare una CMK gestita dal cliente per criptare i volumi.
  5. Applica i manifest al servizio di gestione.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f custom-cluster.yaml
    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f custom-nodepools.yaml
    

Crea un file kubeconfig

Durante l'avvio del cluster utente, puoi creare un contesto kubeconfig per il nuovo cluster utente. Utilizzi il contesto per autenticarti in un cluster di utenti o di gestione.

  1. Utilizza anthos-gke aws clusters get-credentials per generare un kubeconfig per il tuo cluster di utenti in ~/.kube/config.

    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    

    Sostituisci CLUSTER_NAME con il nome del cluster. Ad esempio, cluster-0.

  2. Utilizza kubectl per autenticarti nel nuovo cluster di utenti.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl cluster-info
    

    Se il cluster è pronto, l'output include gli URL dei componenti Kubernetes al suo interno.

Visualizzazione dello stato del cluster

Il servizio di gestione esegue il provisioning delle risorse AWS quando applichi un AWSCluster o un AWSNodePool.

  1. Dalla directory anthos-aws, utilizza anthos-gke per cambiare contesto e passare al servizio di gestione.

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. Per elencare i cluster, utilizza kubectl get AWSClusters.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get AWSClusters
    

    L'output include il nome, lo stato, la versione, l'età e l'endpoint di ogni cluster.

    Ad esempio, il seguente output include un solo AWSCluster denominato cluster-0:

    NAME        STATE          AGE     VERSION         ENDPOINT
    cluster-0   Provisioning   2m41s   1.25.5-gke.2100   gke-xyz.elb.us-east-1.amazonaws.com
    

Visualizzare gli eventi del cluster

Per visualizzare gli eventi Kubernetes recenti dal tuo cluster utente, utilizza kubectl get events.

  1. Dalla directory anthos-aws, utilizza anthos-gke per cambiare contesto e passare al servizio di gestione.

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. Esegui kubectl get events.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get events
    

L'output include informazioni, avvisi ed errori relativi al servizio di gestione.

Eliminazione di un cluster utente

Per eliminare un cluster di utenti, svolgi i seguenti passaggi:

  1. Dalla directory anthos-aws, utilizza anthos-gke per cambiare contesto e passare al servizio di gestione.

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. Utilizza kubectl delete per eliminare il manifest contenente i cluster utente.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete -f CLUSTER_FILE
    

    Sostituisci CLUSTER_FILE con il nome del manifest contenente gli oggetti AWScluster e AWSNodePool. Ad esempio, cluster-0.yaml.

Eliminazione di tutti i cluster utente

Per eliminare tutti i cluster di utenti, svolgi i seguenti passaggi:

  1. Dalla directory anthos-aws, utilizza anthos-gke per cambiare contesto e passare al servizio di gestione.

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. Utilizza kubectl delete per eliminare AWSNodePools e AWSClusters dal servizio di gestione.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete AWSNodePool --all
    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete AWSCluster --all
    

Per maggiori informazioni, consulta Disinstallare GKE su AWS.

Passaggi successivi