簡體   English   中英

使用 terraform 覆蓋 AWS EKS 節點上的“kube.netes.io/hostname”

[英]Override "kubernetes.io/hostname" on AWS EKS node using terraform

我正在嘗試使用 terraform 部署 AWS 環境。EC2 實例和集群創建良好,但在嘗試將實例加入集群時失敗。

Error: error waiting for EKS Node Group (env-dev:node_1) to create: unexpected state 'CREATE_FAILED', wanted target 'ACTIVE'. last error: 1 error occurred:
* i-022a2d319d457ab83, i-0374c9efbb32b1f0f, i-05b42da747ca0c8cd, i-08439b352ff4bcc5f, i-0d286addbf2eedd2a, i-0dc6f1bd12b372427, i-0ed373f52f9e27510: NodeCreationFailure: Instances failed to join the kubernetes cluster

根據 CloudWatch 的說法,這就是它失敗的地方

"responseObject": {
    "kind": "Status",
    "apiVersion": "v1",
    "metadata": {},
    "status": "Failure",
    "message": "Node \"ip-10-206-68-167.eu-west-1.compute.internal\" is invalid: metadata.labels: Invalid value: \"ip-10-206-68-167.xxxx-xxxxxxxxxxxxxxxxxxxxx-xxxx-xxx.eu-west-1.a\": must be no more than 63 characters",
    "reason": "Invalid",
    "details": {
        "name": "ip-10-206-68-167.eu-west-1.compute.internal",
        "kind": "Node",
        "causes": [
            {
                "reason": "FieldValueInvalid",
                "message": "Invalid value: \"ip-10-206-68-167.xxxx-xxxxxxxxxxxxxxxxxxxxx-xxxx-xxx.eu-west-1.a\": must be no more than 63 characters",
                "field": "metadata.labels"
            }
        ]
    },
    "code": 422
}

有什么方法可以使用 terraform 覆蓋主機名嗎?

編輯:

terraform 的片段:

variable "db_subnet_ids" { default = ["subnet-04f6e659f2b2851f2", "subnet-0a42b2ec54b5aa143"] }

resource "aws_eks_cluster" "cluster" {
 enabled_cluster_log_types = [
  "api",
  "audit",
  "authenticator",
  "controllerManager",
  "scheduler",
 ]
 name = "env-${var.suffix}"
 role_arn = aws_iam_role.eks_cluster_role.arn
 vpc_config {
  subnet_ids = var.db_subnet_ids
  security_group_ids = [aws_security_group.cluster_http.id, aws_security_group.cluster_https.id]
 }
  
 depends_on = [
  aws_iam_role_policy_attachment.AmazonEKSWorkerNodePolicy,
  aws_iam_role_policy_attachment.AmazonEKS_CNI_Policy,
  aws_iam_role_policy_attachment.AmazonEC2ContainerRegistryReadOnly,
 ]
}

resource "aws_eks_node_group" "cluster" {
 cluster_name = aws_eks_cluster.cluster.name
 node_group_name = "node_1"
 node_role_arn = aws_iam_role.eks_nodes_role.arn
 subnet_ids = var.db_subnet_ids
 scaling_config {
  desired_size = 7
  max_size = 7
  min_size = 7
 }
 ami_type = "AL2_x86_64"
 capacity_type = "ON_DEMAND"
 disk_size = 50
 instance_types = ["t3.large"]

 depends_on = [
  aws_iam_role_policy_attachment.AmazonEKSWorkerNodePolicy,
  aws_iam_role_policy_attachment.AmazonEKS_CNI_Policy,
  aws_iam_role_policy_attachment.AmazonEC2ContainerRegistryReadOnly,
 ]
}

VPC是手動創建的,所以配置如下:

蘇網ID:su.net-04f6e659f2b2851f2
名稱:xxxx-xxxxxxxxxxxxxxxxxxxxx-xxxx-xxx-private-eu-west-1a
IPv4 網段:10.206.68.160/28

蘇網ID:su.net-0a42b2ec54b5aa143
名稱:xxxx-xxxxxxxxxxxxxxxxxxxxxxxx-xxxx-xxx-private-eu-west-1b
IPv4 網段:10.206.68.176/28

和專有網絡
姓名:xxxx-xxxxxxxxxxxxxxxxxxxxx-xxxx-xxx
VIP ID:vpc-09a3e88350a018cbf
IPv4 CIDR:10.206.68.160/27 DHCP 選項集 ID:dopt-0ea3823bed3d5ff2c

DHCP 選項集
編號:dopt-0ea3823bed3d5ff2c
姓名:xxxx-xxxxxxxxxxxxxxxxxxxxx-xxxx-xxxx

名稱后來更改為:xxxx-xx-xxxx-xxxx(第 2 個單詞縮寫)在我下面的回答中進行解釋。

問題有點解決了。 不確定我是該解決方案的忠實擁護者,但它確實有效。

所以節點主機名是通過附加創建的

  • IP 地址
  • DHCP 選項設置來自 VPC 的名稱
  • 不確定“eu-west-1”和“a”的來源。
    也許是 VPC 的區域? 還有來自 su.net 的“a”?

結果是這樣的:

ip-10-206-68-167.xxxx-xxxxxxxxxxxxxxxxxxxxx-xxxx-xxx.eu-west-1.a

因此,通過縮短 DHCP 選項集名稱,主機名也因此縮短,一切正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM