Criar um cluster de utilizadores personalizado

Este tópico descreve como personalizar a configuração de um cluster de utilizadores do GKE on AWS.

Pode querer criar um cluster de utilizadores personalizado pelos seguintes motivos:

  • Criar outro cluster para um ambiente de preparação ou de teste.
  • Adicionar conjuntos de nós com diferentes tipos de máquinas.
  • Criar um cluster em zonas de disponibilidade (AZ) da AWS específicas.

Antes de começar

Antes de começar a usar o GKE on AWS, certifique-se de que realizou as seguintes tarefas:

  • Instale um serviço de gestão.

  • Se quiser criar um cluster sem usar o terraform output example_cluster>, tenha sub-redes privadas da AWS para o seu plano de controlo. Cada sub-rede deve pertencer a uma AZ diferente na mesma região da AWS. As tabelas de rotas têm de ser configuradas para permitir o tráfego entre sub-redes privadas, e cada sub-rede tem de ter acesso a um gateway NAT.

  • Ter o ID da nuvem virtual privada (VPC) da AWS. Um ID de VPC tem o seguinte aspeto: vpc-012345678abcde. Pode encontrar o ID da VPC na consola da AWS.

Para se ligar aos seus recursos do GKE no AWS, siga os passos abaixo. Selecione se tem uma VPC da AWS existente (ou uma ligação direta à sua VPC) ou se criou uma VPC dedicada quando criou o seu serviço de gestão.

VPC existente

Se tiver uma ligação direta ou VPN a uma VPC existente, omita a linha env HTTP_PROXY=http://localhost:8118 dos comandos neste tópico.

VPC dedicada

Quando cria um serviço de gestão numa VPC dedicada, o GKE no AWS inclui um anfitrião bastion numa sub-rede pública.

Para se ligar ao seu serviço de gestão, siga estes passos:

  1. Altere para o diretório com a configuração do GKE na AWS. Criou este diretório quando Instalou o serviço de gestão.

    cd anthos-aws

  2. Para abrir o túnel, execute o script bastion-tunnel.sh. O túnel segue em frente para localhost:8118.

    Para abrir um túnel para o anfitrião bastion, execute o seguinte comando:

    ./bastion-tunnel.sh -N
    

    As mensagens do túnel SSH aparecem nesta janela. Quando quiser fechar a ligação, pare o processo com Control+C ou fechando a janela.

  3. Abra um novo terminal e mude para o diretório anthos-aws.

    cd anthos-aws
  4. Verifique se consegue estabelecer ligação ao cluster com kubectl.

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

    O resultado inclui o URL do servidor da API do serviço de gestão.

Selecionar um tamanho da instância do plano de controlo

O GKE on AWS não suporta o redimensionamento de instâncias do plano de controlo. Antes de criar o cluster de utilizadores, selecione o tamanho da instância dos planos de controlo. Os tamanhos do plano de controlo dependem do número de nós no cluster. A tabela seguinte contém tamanhos de instâncias do plano de controlo recomendados para vários tamanhos de clusters.

Tamanho do cluster (nós) Tipo de instância do plano de controlo
1 – 10 m5.large
11 – 100 m5.xlarge
101 – 200 m5.2xlarge

Criar um novo cluster com uma configuração personalizada

Pode usar terraform output example_cluster para criar a configuração de um cluster de utilizadores por cluster de gestão. Se quiser criar clusters adicionais, tem de aplicar uma configuração personalizada.

Neste exemplo, cria um cluster manualmente a partir de CRDs AWSCluster e AWSNodePool.

  1. Altere para o diretório com a configuração do GKE na AWS. Criou este diretório quando Instalou o serviço de gestão.

    cd anthos-aws

  2. No diretório do anthos-aws, use anthos-gke para mudar o contexto para o seu serviço de gestão.

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

  3. Abra um editor de texto e copie a seguinte definição AWSCluster para um ficheiro com o nome 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
    

    Substitua o seguinte:

    • CLUSTER_NAME: o nome do cluster.
    • AWS_REGION: a região da AWS onde o cluster é executado.

    • VPC_ID: o ID da VPC onde o cluster é executado.

    • POD_ADDRESS_CIDR_BLOCKS: o intervalo de endereços IPv4 usados pelos pods do cluster. Atualmente, só é suportado um único intervalo. O intervalo não pode sobrepor-se a nenhuma sub-rede acessível a partir da sua rede. É seguro usar o mesmo intervalo em vários objetos AWSCluster diferentes. Por exemplo, 10.2.0.0/16.

    • SERVICE_ADDRESS_CIDR_BLOCKS: o intervalo de endereços IPv4 usados pelos serviços do cluster. Atualmente, só é suportado um único intervalo. O intervalo não pode sobrepor-se a nenhuma sub-rede acessível a partir da sua rede. É seguro usar o mesmo intervalo em vários objetos AWSCluster diferentes. Por exemplo, 10.1.0.0/16.

    • SERVICE_LOAD_BALANCER_SUBNETS: os IDs das sub-redes onde o GKE no AWS pode criar equilibradores de carga públicos ou privados.

    • CLUSTER_VERSION: a Versão do Kubernetes suportada pelo GKE no AWS. A versão mais recente é a 1.25.5-gke.2100.

    • AWS_INSTANCE_TYPE: um tipo de instância do EC2 suportado.

    • SSH_KEY_NAME: um par de chaves do AWS EC2.

    • CONTROL_PLANE_SUBNET_IDS: os IDs das sub-redes nas ZDs onde as instâncias do plano de controlo são executadas.

    • CONTROL_PLANE_SECURITY_GROUPS: um securityGroupID criado durante a instalação do serviço de gestão. Pode personalizar esta opção adicionando os securityGroupIDs necessários para estabelecer ligação ao plano de controlo.

    • CONTROL_PLANE_IAM_PROFILE: nome do perfil da instância do AWS EC2 atribuído a réplicas do plano de controlo.

    • ROOT_VOLUME_SIZE: o tamanho, em gibibytes (GiB), dos volumes raiz do plano de controlo.

    • ROOT_VOLUME_TYPE com o tipo de volume EBS. Por exemplo, gp3.

    • ROOT_VOLUME_IOPS com a quantidade de operações de E/S aprovisionadas por segundo (IOPS) para o volume. Só é válido quando volumeType é GP3. Para mais informações, consulte o artigo Volumes SSD de uso geral (gp3).

    • ROOT_VOLUME_KEY com o nome do recurso da Amazon da chave do AWS KMS que encripta os volumes raiz da instância do plano de controlo.

    • ETCD_VOLUME_SIZE: o tamanho dos volumes usados pelo etcd.

    • ETCD_VOLUME_TYPE com o tipo de volume EBS. Por exemplo, gp3.

    • ETCD_VOLUME_IOPS com a quantidade de operações de E/S aprovisionadas por segundo (IOPS) para o volume. Só é válido quando volumeType é gp3. Para mais informações, consulte o artigo Volumes SSD de uso geral (gp3).

    • ETCD_VOLUME_KEY com o nome de recurso da Amazon da chave do AWS KMS que encripta os volumes de dados etcd do plano de controlo.

    • ARN_OF_KMS_KEY: a chave do AWS KMS usada para encriptar os segredos do cluster.

    • ANTHOS_CONNECT_NAME: o nome do membro do Connect usado para registar o seu cluster. O nome da subscrição tem de ser exclusivo. Por exemplo, projects/YOUR_PROJECT/locations/global/memberships/CLUSTER_NAME, onde YOUR_PROJECT é o seu Google Cloud projeto e CLUSTER_NAME é um nome exclusivo no seu projeto. Este campo é opcional.

    • YOUR_PROJECT: o ID do seu projeto.

    • GCP_REGION: a Google Cloud região onde quer armazenar os registos. Escolha uma região próxima da região da AWS. Para mais informações, consulte Localizações globais – Regiões e zonas — por exemplo, us-central1.

    • ENABLE_LOGGING: true ou false, se o Cloud Logging estiver ativado nos nós do plano de controlo.

    • ENABLE_MONITORING: true ou false, se o Cloud Monitoring estiver ativado nos nós do plano de controlo.

    • WORKLOAD_IDENTITY_BUCKET: o nome do contentor do Cloud Storage que contém as informações de deteção da identidade da carga de trabalho. Este campo é opcional.

  4. Crie um ou mais AWSNodePools para o seu cluster. Abra um editor de texto e copie a seguinte definição de AWSCluster para um ficheiro com o nome 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 
    

    Substitua o seguinte:

    • NODE_POOL_NAME: um nome exclusivo para o seu AWSNodePool.
    • AWSCLUSTER_NAME: o nome do seu AWSCluster. Por exemplo, staging-cluster.
    • CLUSTER_VERSION: uma versão do Kubernetes do GKE on AWS suportada.
    • AWS_REGION: a mesma região da AWS que o seu AWSCluster.
    • AWS_SUBNET_ID: uma sub-rede da AWS na mesma região que o seu AWSCluster.
    • MINIMUM_NODE_COUNT: o número mínimo de nós no node pool. Consulte o artigo Dimensionar clusters de utilizadores para mais informações.
    • MAXIMUM_NODE_COUNT: o número máximo de nós no node pool.
    • MAXIMUM_PODS_PER_NODE_COUNT: o número máximo de pods que o GKE no AWS pode atribuir a um nó.
    • AWS_NODE_TYPE: um tipo de instância do AWS EC2.
    • KMS_KEY_PAIR_NAME: o par de chaves do AWS KMS atribuído a cada worker do conjunto de nós.
    • NODE_IAM_PROFILE: o nome do perfil da instância do AWS EC2 atribuído aos nós no conjunto.
    • ROOT_VOLUME_SIZE: o tamanho, em gibibytes (GiB), dos volumes raiz do plano de controlo.
    • VOLUME_TYPE: o tipo de volume do EBS da AWS do nó. Por exemplo, gp3.
    • IOPS: a quantidade de operações de E/S aprovisionadas por segundo (IOPS) para volumes. Só é válido quando volumeType é gp3.
    • NODE_VOLUME_KEY: o ARN da chave do AWS KMS usada para encriptar o volume. Para mais informações, consulte o artigo Usar uma CMK gerida pelo cliente para encriptar volumes.
  5. Aplique os manifestos ao seu serviço de gestão.

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

Crie um kubeconfig

Enquanto o cluster de utilizadores é iniciado, pode criar um kubeconfig contexto para o seu novo cluster de utilizadores. Usa o contexto para autenticar um utilizador ou um cluster de gestão.

  1. Use anthos-gke aws clusters get-credentials para gerar um kubeconfig para o seu cluster de utilizadores no ~/.kube/config.

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

    Substitua CLUSTER_NAME pelo nome do cluster. Por exemplo, cluster-0.

  2. Use kubectl para se autenticar no novo cluster de utilizadores.

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

    Se o cluster estiver pronto, o resultado inclui os URLs dos componentes do Kubernetes no cluster.

Ver o estado do cluster

O serviço de gestão aprovisiona recursos da AWS quando aplica um AWSCluster ou AWSNodePool.

  1. No diretório do anthos-aws, use anthos-gke para mudar o contexto para o seu serviço de gestão.

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

  2. Para listar os seus clusters, use kubectl get AWSClusters.

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

    O resultado inclui o nome, o estado, a idade, a versão e o ponto final de cada cluster.

    Por exemplo, a saída seguinte inclui apenas um AWSCluster denominado cluster-0:

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

Veja os eventos do seu cluster

Para ver os eventos do Kubernetes recentes do cluster de utilizadores, use kubectl get events.

  1. No diretório do anthos-aws, use anthos-gke para mudar o contexto para o seu serviço de gestão.

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

  2. Corrida kubectl get events.

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

O resultado inclui informações, avisos e erros relacionados com o seu serviço de gestão.

Eliminar um cluster de utilizadores

Para eliminar um cluster de utilizadores, siga estes passos:

  1. No diretório do anthos-aws, use anthos-gke para mudar o contexto para o seu serviço de gestão.

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

  2. Use kubectl delete para eliminar o manifesto que contém os seus clusters de utilizadores.

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

    Substitua CLUSTER_FILE pelo nome do manifesto que contém os objetos AWScluster e AWSNodePool. Por exemplo, cluster-0.yaml.

Eliminar todos os clusters de utilizadores

Para eliminar todos os seus clusters de utilizadores, siga estes passos:

  1. No diretório do anthos-aws, use anthos-gke para mudar o contexto para o seu serviço de gestão.

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

  2. Use kubectl delete para eliminar os seus AWSNodePools e AWSClusters do seu serviço de gestão.

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

Para mais informações, consulte o artigo Desinstalar o GKE no AWS.

O que se segue?