Esta página mostra como criar um pool de nós no GKE na AWS e como personalizar sua configuração de nó usando um arquivo de configuração.
Para criar um pool de nós, você deve fornecer os seguintes recursos:
- O nome de um cluster AWS existente para criar o pool de nós
- Um perfil de instância do IAM para VMs de pool de nós
- Uma sub-rede onde as VMs do pool de nós serão executadas
Se você quiser acesso SSH aos seus nós, você pode criar um par de chaves EC2 .
Esta página é para administradores e operadores de TI que desejam configurar, monitorar e gerenciar a infraestrutura de nuvem. Para saber mais sobre funções comuns e tarefas de exemplo que mencionamos em Google Cloud conteúdo, consulte Funções e tarefas comuns do usuário do GKE Enterprise .
Criar um pool de nós padrão
Quando esses recursos estiverem disponíveis, você pode criar um pool de nós com este comando:
gcloud container aws node-pools create NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--instance-type INSTANCE_TYPE \
--root-volume-size ROOT_VOLUME_SIZE \
--iam-instance-profile NODEPOOL_PROFILE \
--node-version NODE_VERSION \
--min-nodes MIN_NODES \
--max-nodes MAX_NODES \
--max-pods-per-node MAX_PODS_PER_NODE \
--location GOOGLE_CLOUD_LOCATION \
--subnet-id NODEPOOL_SUBNET \
--ssh-ec2-key-pair SSH_KEY_PAIR_NAME \
--config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
--tags "Name=CLUSTER_NAME-NODE_POOL_NAME"
Substitua o seguinte:
-
NODE_POOL_NAME
: um nome que você escolher para seu pool de nós -
CLUSTER_NAME
: o nome do cluster ao qual o pool de nós será anexado -
INSTANCE_TYPE
: o tipo de instância da máquina AWS desejada para este pool de nós — por exemplo,m5.large
-
ROOT_VOLUME_SIZE
: o tamanho desejado para o volume raiz de cada nó, em Gb -
NODEPOOL_PROFILE
: o perfil de instância do IAM para VMs do pool de nós. Para obter detalhes sobre como atualizar um perfil de instância do IAM, consulte Atualizar perfil de instância do IAM da AWS . -
NODE_VERSION
: a versão do Kubernetes a ser instalada em cada nó no pool de nós (por exemplo, "1.31.4-gke.500") -
MIN_NODES
: o número mínimo de nós que o pool de nós pode conter -
MAX_NODES
: o número máximo de nós que o pool de nós pode conter -
MAX_PODS_PER_NODE
: o número máximo de pods que podem ser criados em qualquer nó do pool -
GOOGLE_CLOUD_LOCATION
: o nome do Google Cloudlocal de onde este pool de nós será gerenciado -
NODEPOOL_SUBNET
: o ID da sub-rede na qual o pool de nós será executado.- Não deve haver sobreposição entre os intervalos de IP do pod/serviço do cluster e a rede da sub-rede do pool de nós. Para obter mais informações sobre como selecionar intervalos de IP do pod e do serviço para o seu cluster, consulte Selecionar intervalos CIDR para o seu cluster.
- Se esta sub-rede estiver fora do bloco CIDR primário da VPC, serão necessárias algumas etapas adicionais. Para mais informações, consulte grupos de segurança .
-
SSH_KEY_PAIR_NAME
: o nome do par de chaves SSH da AWS criado para acesso SSH (opcional) -
CONFIG_KMS_KEY_ARN
: o nome do recurso da Amazon (ARN) da chave AWS KMS que criptografa os dados do usuário
Se presente, o parâmetro --tags
aplica a tag fornecida a todos os nós do seu pool de nós. Este exemplo marca todos os nós do pool com os nomes do cluster e do pool de nós ao qual o nó pertence.
Personalizar a configuração do sistema de nós
Você pode personalizar a configuração do seu nó usando vários métodos. Por exemplo, você pode especificar parâmetros como o limite de CPU do pod ao criar um pool de nós.
Você pode usar uma configuração de sistema de nó para especificar configurações personalizadas para o agente de nó do Kubernetes ( kubelet
) e configurações de kernel Linux de baixo nível ( sysctl
) em seus pools de nós.
Configurar o agente kubelet
Para personalizar a configuração do nó usando kubelet
, use o Google Cloud CLI ou o Terraform.
gcloud
Você pode especificar configurações personalizadas para o agente de nó do Kubernetes ( kubelet
) ao criar seus pools de nós. Por exemplo, para configurar o kubelet
para usar a política de gerenciamento de CPU estática , execute o seguinte comando:
gcloud container aws node-pools create POOL_NAME \
--cluster CLUSTER_NAME \
--location=LOCATION \
--kubelet_config_cpu_manager_policy=static
Substitua o seguinte:
-
POOL_NAME
: o nome do seu pool de nós. -
CLUSTER_NAME
: o nome do cluster ao qual você deseja adicionar um pool de nós. -
LOCATION
: a zona ou região de computação do cluster.
Para obter uma lista completa dos campos que você pode adicionar ao comando anterior, consulte Opções de configuração do Kubelet .
Terraform
Você pode aprender mais sobre o Terraform em um ambiente AWS na referência do pool de nós do Terraform .
Defina as variáveis do Terraform incluindo o seguinte bloco no arquivo
variables.tf
:variable "node_pool_kubelet_config_cpu_manager" { default = "none" } variable "node_pool_kubelet_config_cpu_cfs_quota" { default = "true" } variable "node_pool_kubelet_config_cpu_cfs_quota_period" { default = "100ms" } variable "node_pool_kubelet_config_pod_pids_limit" { default = -1 }
Adicione o seguinte bloco à sua configuração do Terraform:
resource "google_container_aws_node_pool" "NODE_POOL_RESOURCE_NAME" { provider = google cluster = CLUSTER_NAME name = POOL_NAME subnet_id = SUBNET_ID version = CLUSTER_VERSION location = CLUSTER_LOCATION kubelet_config { cpu_manager_policy = var.node_pool_kubelet_config_cpu_manager cpu_cfs_quota = var.node_pool_kubelet_config_cpu_cfs_quota cpu_cfs_quota_period = var.node_pool_kubelet_config_cpu_cfs_quota_period pod_pids_limit = var.node_pool_kubelet_config_pod_pids_limit } }
Substitua o seguinte:
-
NODE_POOL_RESOURCE_NAME
: o nome do recurso do pool de nós no modelo Terraform. -
CLUSTER_NAME
: o nome do cluster existente. -
POOL_NAME
: o nome do pool de nós a ser personalizado. -
SUBNET_ID
: a sub-rede atribuída ao pool de nós. -
CLUSTER_VERSION
: a versão para o plano de controle de cluster e nós do GKE na AWS. -
CLUSTER_LOCATION
: a região ou zona do Compute Engine do cluster.
-
Configurar o utilitário sysctl
Para personalizar a configuração do seu sistema de nós usando sysctl
, faça uma solicitação POST
para o método awsClusters.awsNodePools.create
. Essa solicitação POST cria um pool de nós com as personalizações especificadas. No exemplo a seguir, os parâmetros busy_poll
e busy_read
são configurados para 5.000 microssegundos cada:
POST https://ENDPOINT/v1/projects/PROJECT_ID/locations/GOOGLE_CLOUD_LOCATION/CLUSTER_NAME/awsNodePools
{
"name": NODE_POOL_NAME,
"version": CLUSTER_VERSION,
"config": {
"linuxNodeConfig": {
"sysctls": {
"net.core.busy_poll": "5000",
"net.core.busy_read": "5000",
}
}
}
}
Substitua o seguinte:
-
ENDPOINT
: seu Google Cloud ponto final do serviço . -
PROJECT_ID
: seu Google Cloud ID do projeto. -
GOOGLE_CLOUD_LOCATION
: o Google Cloud localização do cluster. -
CLUSTER_NAME
: o nome do cluster ao qual você deseja adicionar um pool de nós. -
NODE_POOL_NAME
: o nome do seu pool de nós. -
CLUSTER_VERSION
: o número da versão do seu cluster, por exemplo, 1.31.0-gke.500.
Para obter uma lista completa dos pares chave-valor que você pode adicionar à solicitação JSON anterior, consulte Opções de configuração do Sysctl .
Opções de configuração para o agente kubelet
A tabela a seguir mostra as opções kubelet
que você pode modificar.
Configurações do Kubelet | Restrições | Configuração padrão | Descrição |
---|---|---|---|
política_do_gerenciador_de_cpu_de_configuração_do_kubelet | O valor deve ser none ou static | "none" | Esta configuração controla a Política do Gerenciador de CPU do kubelet. O valor padrão é none , que é o esquema de afinidade de CPU padrão, não fornecendo nenhuma afinidade além do que o agendador do sistema operacional faz automaticamente.Definir esse valor como static permite que os Pods na classe QoS Garantido com solicitações de CPU inteiras tenham uso exclusivo de CPUs. |
kubelet_config_cpu_cfs_quota | O valor deve ser true ou false | true | Esta configuração impõe o limite de CPU do Pod . Definir este valor como false significa que os limites de CPU dos Pods serão ignorados.Ignorar os limites da CPU pode ser desejável em certos cenários em que os Pods são sensíveis aos limites da CPU. O risco de desabilitar cpuCFSQuota é que um Pod invasor pode consumir mais recursos da CPU do que o pretendido. |
kubelet_config_cpu_cfs_quota_period | O valor deve ser uma duração de tempo | "100ms" | Esta configuração define o valor do período de cota do CFS da CPU, cpu.cfs_period_us , que especifica o período de frequência com que o acesso de um cgroup aos recursos da CPU deve ser realocado. Esta opção permite ajustar o comportamento de limitação da CPU. |
kubelet_config_pod_pids_limit | O valor deve estar entre 1024 e 4194304 | -1 | Esta configuração define o número máximo de IDs de processo (PIDs) que cada Pod pode usar. Se definido como o valor padrão, o limite de PIDs será dimensionado automaticamente com base no tamanho da máquina subjacente. |
Opções de configuração para o utilitário sysctl
Para ajustar o desempenho do seu sistema, você pode modificar os seguintes atributos:
-
net.core.busy_poll
-
net.core.busy_read
-
net.core.netdev_max_backlog
-
net.core.rmem_max
-
net.core.wmem_default
-
net.core.wmem_max
-
net.core.optmem_max
-
net.core.somaxconn
-
net.ipv4.tcp_rmem
-
net.ipv4.tcp_wmem
-
net.ipv4.tcp_tw_reuse
-
net.ipv6.conf.all.disable_ipv6
-
net.ipv6.conf.default.disable_ipv6
-
vm.max_map_count
Pools de nós de instância spot
O GKE na AWS oferece suporte a pools de nós de instâncias spot da AWS como um recurso de visualização. Pools de nós de instâncias spot são pools de instâncias spot do Amazon EC2 disponíveis na AWS a um custo menor.
Instâncias Spot podem proporcionar economia de custos para aplicações sem estado, tolerantes a falhas e flexíveis. No entanto, elas não são adequadas para cargas de trabalho inflexíveis, com estado, intolerantes a falhas ou fortemente acopladas entre nós de instância. Instâncias Spot podem ser interrompidas pelo Amazon EC2 quando este precisa de capacidade de volta e, portanto, estão sujeitas a flutuações no mercado Spot. Se suas cargas de trabalho exigem capacidade garantida e não toleram períodos ocasionais de indisponibilidade, escolha um pool de nós padrão em vez de um pool de nós de instâncias Spot.
A estratégia de alocação empregada no GKE na AWS concentra-se na seleção de pools de instâncias spot com a maior disponibilidade de capacidade, minimizando o risco de interrupções. Essa abordagem é particularmente benéfica para cargas de trabalho com maior custo de interrupção, como renderização de imagens e mídia ou aprendizado profundo. Especificamente, a estratégia de alocação capacityOptimized
foi implementada, conforme descrito em Estratégias de alocação para instâncias spot .
Criar um pool de nós Spot
Para criar um pool de nós de instância Spot, execute o seguinte comando:
gcloud container aws node-pools create NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--spot-instance-types INSTANCE_TYPE_LIST \
--root-volume-size ROOT_VOLUME_SIZE \
--iam-instance-profile NODEPOOL_PROFILE \
--node-version NODE_VERSION \
--min-nodes MIN_NODES \
--max-nodes MAX_NODES \
--max-pods-per-node MAX_PODS_PER_NODE \
--location GOOGLE_CLOUD_LOCATION \
--subnet-id NODEPOOL_SUBNET \
--ssh-ec2-key-pair SSH_KEY_PAIR_NAME \
--config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
--tags "Name=CLUSTER_NAME-NODE_POOL_NAME"
Substitua o seguinte:
- NODE_POOL_NAME : o nome que você deseja atribuir a este pool de nós.
- CLUSTER_NAME : o nome do cluster ao qual você deseja anexar este pool de nós.
- INSTANCE_TYPE_LIST : uma lista separada por vírgulas de tipos de instância do AWS EC2. O pool de nós provisiona instâncias Spot com esses tipos de instância. Os tipos de instância devem ter a mesma arquitetura de CPU, o mesmo número de CPUs e a mesma quantidade de memória. Por exemplo: "c6g.large,c6gd.large,c6gn.large,c7g.large,t4g.medium". Você pode usar a ferramenta Seletor de Instâncias do Amazon EC2 para encontrar tipos de instância com configurações de CPU e memória idênticas.
-
ROOT_VOLUME_SIZE
: o tamanho desejado para o volume raiz de cada nó, em Gb -
NODEPOOL_PROFILE
: o perfil de instância do IAM para VMs do pool de nós -
NODE_VERSION
: a versão do Kubernetes a ser instalada em cada nó no pool de nós (por exemplo, "1.31.4-gke.500") -
MIN_NODES
: o número mínimo de nós que o pool de nós pode conter -
MAX_NODES
: o número máximo de nós que o pool de nós pode conter -
MAX_PODS_PER_NODE
: o número máximo de pods que podem ser criados em qualquer nó do pool -
GOOGLE_CLOUD_LOCATION
: o nome do Google Cloudlocal de onde este pool de nós será gerenciado -
NODEPOOL_SUBNET
: o ID da sub-rede na qual o pool de nós será executado.- Não deve haver sobreposição entre os intervalos de IP do pod/serviço do cluster e a rede da sub-rede do pool de nós. Para obter mais informações sobre como selecionar intervalos de IP do pod e do serviço para o seu cluster, consulte Selecionar intervalos CIDR para o seu cluster.
- Se esta sub-rede estiver fora do bloco CIDR primário da VPC, serão necessárias algumas etapas adicionais. Para mais informações, consulte grupos de segurança .
-
SSH_KEY_PAIR_NAME
: o nome do par de chaves SSH da AWS criado para acesso SSH (opcional) -
CONFIG_KMS_KEY_ARN
: o nome do recurso da Amazon (ARN) da chave AWS KMS que criptografa os dados do usuário
A prática recomendada é listar vários tipos de instância no campo INSTANCE_TYPE_LIST . Essa prática recomendada é importante porque, se um pool de nós estiver configurado com apenas um tipo de instância e esse tipo de instância não estiver disponível em nenhuma das Zonas de Disponibilidade desejadas, o pool de nós não poderá provisionar novos nós. Isso pode afetar a disponibilidade dos seus aplicativos e causar interrupções no serviço.
Observe que o campo spot-instance-types
é mutuamente exclusivo com o campo instance-type
. Isso significa que você pode fornecer apenas um desses campos e não ambos.