跳至內容

我該如何解決在 Amazon EKS 中,為 Bottlerocket AMI 型受管節點群組撰寫使用者資料時收到的錯誤?

1 分的閱讀內容
0

我想使用針對 Amazon Elastic Kubernetes Service (Amazon EKS) 最佳化的 Bottlerocket Amazon Machine Image (AMI) 來設定使用者資料。當我嘗試為啟動範本撰寫使用者資料時,收到「Instances failed to join the kubernetes cluster.」錯誤。

解決方法

如果啟動範本中包含不正確的使用者資料,您可能會收到以下錯誤訊息:

「Instances failed to join the kubernetes cluster.」

Bottlerocket AMI 會將使用者資料與 Amazon EKS 使用者資料合併,使節點能夠加入叢集。您在使用者資料中包含的組態會覆寫 Amazon EKS 所設定的設定。有關支援的設定詳細資訊,請參閱 Bottlerocket 網站上的設定參考

在與 Bottlerocket AMI 型受管節點群組一起使用的啟動範本中,Amazon Elastic Compute Cloud (Amazon EC2) 使用者資料必須採用 TOML 格式。如需更多資訊,請參閱 GitHub 網站上的 TOML。Amazon EKS 並不支援所有有效的 TOML 格式。如需更多資訊,請參閱 Amazon EC2 使用者資料

EC2 使用者資料還必須包含以下 Kubernetes 設定:

  • settings.kubernetes.cluster-certificate
  • settings.kubernetes.api-server
  • settings.kubernetes.cluster-name

在啟動範本的使用者資料區段中,加入以下範例使用者資料組態,並包含上述設定:

[settings.kubernetes]
api-server = "https://abc.def.us-east-1.eks.amazonaws.com"
cluster-certificate = "TkQgQ0VSVElGSUNBVEUtLS0tLQo="
cluster-name = "eks-dev"

**注意:**將 us-east-1 替換為您部署 Amazon EKS 叢集的 AWS 區域。

使用 node-labelsnode-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"

**注意:**將 cluster-name 替換為您的叢集名稱,並將 us-east-1 替換為您的區域。

您也可以執行以下 eksctl 命令,為您的叢集產生基本的 userdata.toml 檔案:

~ 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'

**注意:**將 cluster-name 替換為您的叢集名稱,並將 us-east-1 替換為您的區域。此命令的輸出包含預先撰寫的 userdata 範例。

相關資訊

GitHub 網站上的 Bottlerocket 檔案目錄

AWS 官方已更新 4 個月前