Quero usar uma imagem de máquina da Amazon (AMI) do Bottlerocket otimizada para o Amazon Elastic Kubernetes Service (Amazon EKS) para configurar dados do usuário. Quando tento gravar dados do usuário para o modelo de lançamento, recebo a mensagem de erro “Instances failed to join the kubernetes cluster”.
Resolução
Se você incluir dados incorretos do usuário em seu modelo de lançamento, poderá receber a seguinte mensagem de erro:
"Instances failed to join the kubernetes cluster."
A AMI do Bottlerocket mescla os dados do usuário com os dados do usuário do Amazon EKS para que os nós possam se juntar ao cluster. A configuração que você inclui nos seus dados do usuário substitui as configurações que o Amazon EKS define. Para obter mais informações sobre as configurações suportadas, consulte Settings reference (Referência de configurações) no site da Bottlerocket.
Os dados do usuário do Amazon Elastic Compute Cloud (Amazon EC2) nos modelos de lançamento que você usa com os grupos de nós gerenciados baseados na AMI do Bottlerocket devem estar no formato TOML. Para obter mais informações, consulte TOML no site do GitHub. O Amazon EKS não oferece suporte a todos os formatos TOML válidos. Para mais informações, consulte Dados do usuário do Amazon EC2.
Os dados do usuário do EC2 também devem incluir as seguintes configurações do Kubernetes:
- settings.kubernetes.cluster-certificate
- settings.kubernetes.api-server
- settings.kubernetes.cluster-name
Adicione o exemplo a seguir de configuração de dados do usuário com as configurações anteriores na seção de dados do usuário do seu modelo de lançamento:
[settings.kubernetes]
api-server = "https://abc.def.us-east-1.eks.amazonaws.com"
cluster-certificate = "TkQgQ0VSVElGSUNBVEUtLS0tLQo="
cluster-name = "eks-dev"
Observação: substitua us-east-1 pela região da AWS em que você implanta seu cluster do Amazon EKS.
Exemplo de dados do usuário com configurações de node-labels e node-taints:
[settings.kubernetes]
api-server = "https://abc.def.us-east-1.eks.amazonaws.com"
cluster-certificate = "TkQgQ0VSVElGSUNBVEUtLS0tLQo="
cluster-name = "eks-dev"
[settings.kubernetes.node-labels]
"label1" = "foo"
"label2" = "bar"
[settings.kubernetes.node-taints]
"dedicated" = "airflow:NoSchedule"
Observação: substitua cluster-name pelo nome do seu cluster e us-east-1 pela sua região.
Também é possível executar o seguinte comando eksctl para gerar um arquivo userdata.toml básico para seu cluster:
~ eksctl get cluster --region us-east-1 --name cluster-name -o json | jq --raw-output '.[] | "[settings.kubernetes]\napi-server = \"" + .Endpoint + "\"\ncluster-certificate =\"" + .CertificateAuthority.Data + "\"\ncluster-name = " + .Name'
Observação: substitua cluster-name pelo nome do seu cluster e us-east-1 pela sua região. A saída do comando inclui um exemplo pré-escrito de userdata.
Informações relacionadas
Bottlerocket file directory (Diretório de arquivos do Bottlerocket) no site do GitHub