能否将AKS节点池托管在与控制平面不同的Azure订阅中?
解决方案:将AKS工作负载迁移至新订阅的节点池
由于AKS不支持直接迁移现有集群或节点池到其他订阅,可通过以下步骤实现工作负载的平滑迁移,同时利用目标订阅的额度:
1. 在目标订阅中创建新的AKS集群
使用Azure CLI在带有额外额度的订阅中部署新AKS集群,确保集群版本、网络配置(如VNet、子网)与原集群保持一致,避免兼容性问题:
az aks create --name new-aks-cluster --resource-group target-rg --subscription target-sub-id --kubernetes-version <原集群版本> --vnet-subnet-id <子网ID>
2. 迁移集群配置与资源
- 导入kubeconfig:获取新集群的kubeconfig并切换上下文:
az aks get-credentials --name new-aks-cluster --resource-group target-rg --subscription target-sub-id --overwrite-existing - 迁移配置资源:将原集群中的ConfigMap、Secret、ServiceAccount、ClusterRoleBinding等配置资源导出后导入新集群:
# 导出原集群配置 kubectl --context old-aks get configmaps,secrets,serviceaccounts,clusterrolebindings -o yaml > cluster-config.yaml # 导入到新集群 kubectl --context new-aks apply -f cluster-config.yaml
3. 迁移工作负载
采用滚动迁移方式逐步将应用从原节点池转移到新集群:
- 部署应用到新集群:将原集群的Deployment、StatefulSet、Service等资源导出并部署到新集群,确保镜像拉取权限正常:
kubectl --context old-aks get deployments,statefulsets,services -o yaml > workloads.yaml kubectl --context new-aks apply -f workloads.yaml - 流量切换:若使用负载均衡器或Ingress,更新DNS记录或流量路由,将用户流量逐步切换到新集群的端点,验证服务正常后停止原集群的工作负载。
4. 处理有状态应用(如数据库)
对于StatefulSet类型的有状态应用,需额外处理数据迁移:
- 先停止原应用的写入操作,创建PersistentVolume的快照。
- 在新集群中基于快照创建新的PersistentVolumeClaim,重新部署StatefulSet并挂载新存储。
- 验证数据一致性后,切换流量并删除原集群的相关资源。
5. 清理原资源
确认新集群所有工作负载正常运行后,删除原AKS集群或节点池,避免不必要的成本支出:
az aks delete --name old-aks-cluster --resource-group old-rg --subscription old-sub-id --yes
内容的提问来源于stack exchange,提问作者Matthias Güntert
相关产品推荐
相关产品推荐

