kOps 1.19 在创建新集群时为 'nodes' 创建了 3 个不同的实例组,而不是单个 ig

kOps 1.19 is creating 3 different instancegroups for 'nodes' instead of a single ig when creating a new cluster

我正在使用 kOps 重新创建一个集群。通常,在我所有的 kops 集群上,我有 3 个 master 实例组和一个 nodes 实例组。根据文档,这是默认值,也是我习惯的。

但是,在尝试创建此集群时,它正在添加 3 个主 ig 以及 3 个节点 ig

Using cluster from kubectl context: [my-cluster]

NAME                ROLE    MACHINETYPE MIN MAX ZONES
master-us-east-1a   Master  t2.medium   1   1   us-east-1a
master-us-east-1b   Master  t2.medium   1   1   us-east-1b
master-us-east-1c   Master  t2.medium   1   1   us-east-1c
nodes-us-east-1a    Node    r5.xlarge   2   2   us-east-1a
nodes-us-east-1b    Node    r5.xlarge   2   2   us-east-1b
nodes-us-east-1c    Node    r5.xlarge   2   2   us-east-1c

它应该看起来像这样:

Using cluster from kubectl context: [my-cluster]

NAME                ROLE    MACHINETYPE MIN MAX ZONES
master-us-east-1a   Master  t2.medium   1   1   us-east-1a
master-us-east-1b   Master  t2.medium   1   1   us-east-1b
master-us-east-1c   Master  t2.medium   1   1   us-east-1c
nodes               Node    r5.xlarge   6   6   us-east-1a,us-east-1b,us-east-1c

我不知道为什么会这样。在使用相同的脚本之前,我已经很好地创建了集群。我唯一更改的是更新到 v1.19 时的 kOps 版本,但它没有提到任何明显的更改日志中的内容。

我的创建命令是:

kops create cluster \
    --yes \
    --authorization RBAC \
    --cloud aws \
    --networking calico \
    --image ami-0affd4508a5d2481b \
    --topology private \
    --api-loadbalancer-class network \
    --vpc ${VPC_ID} \
    --subnets ${PRIVATE_SUBNETS} \
    --utility-subnets ${PUBLIC_SUBNETS} \
    --zones ${ZONES} \
    --master-zones ${ZONES} \
    --node-size ${NODE_SIZE} \
    --node-count 6 \
    --master-size ${MASTER_SIZE} \
    --state s3://${KOPS_STATE_BUCKET} \
    --ssh-public-key ${PUB_KEY_LOCATION} \
    --api-ssl-certificate ${SSL_CERT_ARN_K8S} \
    --admin-access ${API_ACCESS_CIDRS} \
    --ssh-access ${SSH_ACCESS_CIDRS} \
    ${KUBE_CLUSTER_NAME}

和版本

科普斯:Version 1.19.0

Kubernetes:

Client Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.2", GitCommit:"faecb196815e248d3ecfb03c680a4507229c2a56", GitTreeState:"clean", BuildDate:"2021-01-17T02:13:01Z", GoVersion:"go1.15.6", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.7", GitCommit:"1dd5338295409edcfff11505e7bb246f0d325d15", GitTreeState:"clean", BuildDate:"2021-01-13T13:15:20Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"}

AWS 堆栈是通过 Terraform 生成的,但我不确定这是否相关。

是的,我可以手动创建 nodes ig 并删除这些;但是我们的架构是完全脚本化的,我想保持这种状态。

在 kOps 中,AWS 的默认 ASG 布局从具有单个节点 IG 更改为每个 AZ 一个。有多种原因:

  • 几年前 AWS 在单个可用区中发生的一起事件阻止了任何在该可用区中具有节点的 ASG 的扩展,从根本上破坏了冗余。
  • Cluster Autoscaler 可以更好地处理分配给给定 AZ 的 pods。如果您的 ASG 具有多个 AZ,在 AWS 决定将节点放入所需的 AZ 之前,CAS 可能必须扩展多次。

值得一提的是,kops create cluster 是一种测试 kOps 的简单方法。对于生产用途,尤其是在处理多个集群时,请使用模板。参见 https://kops.sigs.k8s.io/getting_started/production/

kops create cluster 的结果也因版本而异。这是一个例子,从 kube-proxy 迁移到 eBPF nodeport 服务的 cilium 是另一个例子。如果您期望可重复的结果,则必须使用集群 spec/templates.