Criando um cluster de usuário personalizado

Este tópico descreve como personalizar a configuração de um cluster de usuários do GKE na AWS.

Talvez você queira criar um cluster de usuário personalizado pelos seguintes motivos:

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

Antes de começar

Antes de começar a usar o GKE na AWS, certifique-se de ter executado as seguintes tarefas:

  • Instalar um serviço de gerenciamento .

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

  • Tenha em mãos seu ID de Nuvem Privada Virtual (VPC) da AWS. Um ID de VPC se parece com vpc-012345678abcde . Você pode encontrá-lo no Console da AWS .

Para se conectar aos seus recursos do GKE na AWS, siga as seguintes etapas. Selecione se você já possui uma VPC da AWS (ou conexão direta com sua VPC) ou se criou uma VPC dedicada ao criar seu serviço de gerenciamento.

VPC existente

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

VPC dedicada

Ao criar um serviço de gerenciamento em uma VPC dedicada, o GKE na AWS inclui um bastião host em uma sub-rede pública.

Para se conectar ao seu serviço de gerenciamento, execute as seguintes etapas:

  1. Acesse o diretório com a configuração do GKE na AWS. Você criou este diretório ao instalar o serviço de gerenciamento .

    cd anthos-aws

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

    Para abrir um túnel para o host bastião, execute o seguinte comando:

    ./bastion-tunnel.sh -N
    

    As mensagens do túnel SSH aparecem nesta janela. Quando estiver pronto para encerrar a conexão, interrompa o processo usando Control+C ou fechando a janela.

  3. Abra um novo terminal e entre no diretório anthos-aws .

    cd anthos-aws
  4. Verifique se você consegue se conectar ao cluster com kubectl .

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

    A saída inclui a URL para o servidor da API do serviço de gerenciamento.

Selecionando um tamanho de instância do plano de controle

O GKE na AWS não oferece suporte ao redimensionamento de instâncias do plano de controle. Antes de criar seu cluster de usuário, selecione o tamanho da instância dos seus planos de controle. Os tamanhos dos planos de controle dependem do número de nós no cluster. A tabela a seguir contém os tamanhos de instância do plano de controle recomendados para vários tamanhos de cluster.

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

Criando um novo cluster com uma configuração personalizada

Você pode usar terraform output example_cluster para criar a configuração para um cluster de usuário por cluster de gerenciamento. Se quiser criar clusters adicionais, será necessário aplicar uma configuração personalizada.

Neste exemplo, você cria um cluster manualmente a partir dos CRDs AWSCluster e AWSNodePool .

  1. Acesse o diretório com a configuração do GKE na AWS. Você criou este diretório ao instalar o serviço de gerenciamento .

    cd anthos-aws

  2. No seu diretório anthos-aws , use anthos-gke para alternar o contexto para seu serviço de gerenciamento.

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

  3. Abra um editor de texto e copie a seguinte definição AWSCluster em um arquivo chamado 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 seu cluster.
    • AWS_REGION : a região da AWS onde seu cluster é executado.

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

    • POD_ADDRESS_CIDR_BLOCKS : o intervalo de endereços IPv4 usado pelos pods do cluster. Atualmente, apenas um único intervalo é suportado. O intervalo não deve se sobrepor 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 usado pelos serviços do cluster. Atualmente, apenas um único intervalo é suportado. O intervalo não deve se sobrepor 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 de sub-rede onde o GKE na AWS pode criar balanceadores de carga públicos ou privados.

    • CLUSTER_VERSION : uma versão do Kubernetes compatível com o GKE na AWS. A versão mais recente é 1.25.5-gke.2100.

    • AWS_INSTANCE_TYPE : um tipo de instância EC2 compatível .

    • SSH_KEY_NAME : um par de chaves AWS EC2 .

    • CONTROL_PLANE_SUBNET_IDS : os IDs de sub-rede nas AZs onde suas instâncias do plano de controle são executadas.

    • CONTROL_PLANE_SECURITY_GROUPS : um securityGroupID criado durante a instalação do serviço de gerenciamento. Você pode personalizá-lo adicionando quaisquer securityGroupIDs necessários para se conectar ao plano de controle.

    • CONTROL_PLANE_IAM_PROFILE : nome do perfil de instância do AWS EC2 atribuído às réplicas do plano de controle.

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

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

    • ROOT_VOLUME_IOPS com a quantidade de operações de E/S provisionadas por segundo (IOPS) para o volume. Válido somente quando volumeType for GP3 . Para obter mais informações, consulte Volumes SSD de uso geral (gp3) .

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

    • ETCD_VOLUME_SIZE : o tamanho dos volumes usados ​​pelo etcd.

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

    • ETCD_VOLUME_IOPS com a quantidade de operações de E/S provisionadas por segundo (IOPS) para o volume. Válido somente quando volumeType for gp3 . Para obter mais informações, consulte Volumes SSD de uso geral (gp3) .

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

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

    • ANTHOS_CONNECT_NAME : o nome da associação Connect usado para registrar seu cluster. O nome da associação deve ser exclusivo. Por exemplo, projects/ YOUR_PROJECT /locations/global/memberships/ CLUSTER_NAME , onde YOUR_PROJECT é seu Google Cloud project e CLUSTER_NAME é um nome exclusivo no seu projeto. Este campo é opcional.

    • YOUR_PROJECT : seu ID de projeto.

    • GCP_REGION : a Google Cloud região onde você deseja armazenar logs. Escolha uma região próxima à região da AWS. Para obter mais informações, consulte Locais Globais - Regiões e Zonas — por exemplo, us-central1 .

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

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

    • WORKLOAD_IDENTITY_BUCKET : o nome do bucket do Cloud Storage que contém as informações de descoberta de identidade da sua 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 do AWSCluster para um arquivo chamado 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 seu AWSNodePool.
    • AWSCLUSTER_NAME : o nome do seu AWSCluster. Por exemplo, staging-cluster .
    • CLUSTER_VERSION : uma versão do GKE com suporte no AWS Kubernetes.
    • AWS_REGION : a mesma região da AWS que seu AWSCluster.
    • AWS_SUBNET_ID : uma sub-rede da AWS na mesma região que seu AWSCluster.
    • MINIMUM_NODE_COUNT : o número mínimo de nós no pool de nós. Consulte Dimensionamento de clusters de usuários para obter mais informações.
    • MAXIMUM_NODE_COUNT : o número máximo de nós no pool de nós.
    • MAXIMUM_PODS_PER_NODE_COUNT : o número máximo de pods que o GKE na AWS pode alocar para 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 trabalhador do pool de nós.
    • NODE_IAM_PROFILE : o nome do perfil da instância do AWS EC2 atribuído aos nós no pool.
    • ROOT_VOLUME_SIZE : o tamanho, em gibibytes (GiB), dos volumes raiz do seu plano de controle.
    • VOLUME_TYPE : o tipo de volume do AWS EBS do nó. Por exemplo, gp3 .
    • IOPS : a quantidade de operações de E/S provisionadas por segundo (IOPS) para volumes. Válido somente quando volumeType for gp3 .
    • NODE_VOLUME_KEY : o ARN da chave KMS da AWS usada para criptografar o volume. Para obter mais informações, consulte Usando uma CMK gerenciada pelo cliente para criptografar volumes .
  5. Aplique os manifestos ao seu serviço de gerenciamento.

    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 seu cluster de usuários é inicializado, você pode criar um contexto kubeconfig para o novo cluster. Use o contexto para autenticar em um cluster de usuários ou de gerenciamento.

  1. Use anthos-gke aws clusters get-credentials para gerar um kubeconfig para seu cluster de usuário em ~/.kube/config .

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

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

  2. Use kubectl para autenticar seu novo cluster de usuários.

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

    Se o seu cluster estiver pronto, a saída incluirá as URLs dos componentes do Kubernetes dentro do seu cluster.

Visualizando o status do seu cluster

O serviço de gerenciamento provisiona recursos da AWS quando você aplica um AWSCluster ou AWSNodePool .

  1. No seu diretório anthos-aws , use anthos-gke para alternar o contexto para seu serviço de gerenciamento.

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

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

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

    A saída inclui o nome, estado, idade, versão e ponto de extremidade de cada cluster.

    Por exemplo, a saída a seguir inclui apenas um AWSCluster chamado cluster-0 :

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

Visualize os eventos do seu cluster

Para ver eventos recentes do Kubernetes do seu cluster de usuários, use kubectl get events .

  1. No seu diretório anthos-aws , use anthos-gke para alternar o contexto para seu serviço de gerenciamento.

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

  2. Execute kubectl get events .

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

A saída inclui informações, avisos e erros relacionados ao seu serviço de gerenciamento.

Excluindo um cluster de usuários

Para excluir um cluster de usuários, execute as seguintes etapas:

  1. No seu diretório anthos-aws , use anthos-gke para alternar o contexto para seu serviço de gerenciamento.

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

  2. Use kubectl delete para excluir o manifesto que contém seus clusters de usuários.

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

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

Excluindo todos os clusters de usuários

Para excluir todos os seus clusters de usuários, execute as seguintes etapas:

  1. No seu diretório anthos-aws , use anthos-gke para alternar o contexto para seu serviço de gerenciamento.

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

  2. Use kubectl delete para excluir seus AWSNodePools e AWSClusters do seu serviço de gerenciamento.

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

Para obter mais informações, consulte Desinstalando o GKE na AWS .

O que vem a seguir