RKE2如何修改默认providerID格式

我现在的部署架构如下:
目前我部署了1个 RKE2 server/master + 2个 RKE2 agent/worker 组成k8s集群,然后导入到了 Rancher UI v2.6.9 中进行管理。

现在我在尝试使用 cluster-autoscaler (autoscaler/cluster-autoscaler/cloudprovider/alicloud at master · kubernetes/autoscaler · GitHub ) 对worker节点在阿里云利用弹性伸缩服务进行节点扩容,目前遇到了有关 ProviderID 格式的问题。

ali autoscaler 要求ProviderID 格式为 REGION.INSTANCE_ID , 如: ap-south-1.i-a2dhi0m2kz7e4m4t1b68
但是 RKE2 的默认 ProviderID 格式为 rk2://hostname, 如: rke2://iza2d1xenen8urtosiovljz

通过autoscaler 源码可以看到,ali autoscaler会使用 点 对 获取到的 ProviderID 进行分割,然后用最后一个元素,也就是 实例ID和当前在伸缩组中的实例ID进行对比,能匹配就正常,不能匹配则为未注册的节点,就算节点加入集群了,过一会儿也会被自动的移除。
RKE2 的 ProviderID 格式不符合autoscaler要求,所以会被自动移除。

请问该如何修改或指定RKE2的默认ProviderID ,并且在自动扩展出来的节点上也能够自动配置?

你可以remapping provider-id的设置。
不同云厂商标准不一样,但是普遍的原理就是让用户通过 cloud metadata 获取。这里有一个参考,虽然它指向的是k3s,但是RKE2的原理是一样的:Deploying External Cloud Provider with Helm Controller - Chicken:Egg problem · Issue #1807 · k3s-io/k3s · GitHub

阿里云在其他类似文档中,推荐用户获取 provider-id 的方式:
https://github.com/kubernetes/cloud-provider-alibaba-cloud/blob/master/docs/getting-started.md

感谢回复,我已通过相同的思路在RKE2上解决此问题。

  1. 在 /etc/rancher/rke2/ 目录下定义一个config-template.yaml 模板文件,内容为:
kubelet-arg: "provider-id=\${providerID}"
  1. 编辑 /usr/local/lib/systemd/system/rke2-agent.service 在ExecStart前一行添加一条ExecStartPre,将获取到的providerID写入到新的 /etc/rancher/rke2/config.yaml 文件中,如下:
ExecStartPre=/bin/sh -xc 'export providerID=$(curl -s http://100.100.100.200/latest/meta-data/region-id).$(curl -s http://100.100.100.200/latest/meta-data/instance-id) && envsubst </etc/rancher/rke2/config-template-agent.yaml > /etc/rancher/rke2/config.yaml'
  1. 启动服务时自动识别
systemctl daemon-reload
systemctl enable rke2-agent.service