AKS集群重建后kubeconfig失效,流水线kubectl执行失败如何恢复?
解决AKS重建后kubectl流水线连接失败的问题
嘿,我看到你遇到了AKS集群销毁重建后,流水线里kubectl命令连不上新集群的问题。从你贴的日志和配置来看,问题出在流水线依赖的Kubernetes服务端点还拿着旧集群的kubeconfig信息——旧集群销毁后,那个mq-k8s-dfee38f6.hcp.switzerlandnorth.azmk8s.io域名已经失效了,自然解析不到。下面是一步步帮你恢复到干净状态的方法:
一、先搞定核心问题:更新Azure DevOps的服务连接
你的流水线里用了固定的kubernetesServiceEndpoint: "82e5971b-9ac6-42c6-ac43-211d2f6b60e4"服务连接,这个连接里存的是旧集群的API地址和认证信息,现在必须更新它:
- 打开你的Azure DevOps项目,进入项目设置 > 服务连接
- 找到ID是
82e5971b-9ac6-42c6-ac43-211d2f6b60e4的那个Kubernetes连接 - 点编辑,选择「从Azure订阅中选择集群」,重新绑定你用Terraform刚建好的AKS集群
- 保存之后,下次流水线运行就会自动获取新集群的kubeconfig了
二、如果更新后还不行,清理缓存(针对自托管代理)
如果你用的是自己托管的流水线代理,可能残留了旧的临时kubeconfig文件:
- 日志里能看到旧kubeconfig存在
D:\a\_temp\kubectlTask\1607504932712\config,找到这个目录把旧文件删掉就行 - 要是用的微软托管代理就不用管了,每次运行都是全新环境,临时文件会自动重置
三、验证Terraform的AKS集群是否正常
先确保你新建的AKS集群本身没问题:
- 打开Cloud Shell,运行
az aks get-credentials --resource-group <你的资源组名> --name <AKS集群名>,然后用kubectl get nodes测试能不能连上 - 确认新集群的FQDN是有效的,ping一下看看能不能解析通
四、日志里的错误说明
2020-12-09T09:08:54.1555570Z Unable to connect to the server: dial tcp: lookup mq-k8s-dfee38f6.hcp.switzerlandnorth.azmk8s.io: no such host
这个错误直接点破了问题:kubectl用的kubeconfig里的API服务器域名已经不存在了(旧集群被销毁),必须把kubeconfig里的地址换成新集群的。
五、进阶方案:让流水线动态获取kubeconfig
如果你的集群经常需要销毁重建,建议不要依赖固定的服务连接,改成动态获取:
- 在kubectl任务前面加一个Azure CLI任务,执行
az aks get-credentials --resource-group <资源组> --name <AKS集群名> - 这样每次运行流水线都会拉取最新的kubeconfig,再也不会出现旧地址失效的问题
最后附上你提供的流水线任务配置(格式化后):
"workflowTasks": [ { "environment": {}, "taskId": "cbc316a2-586f-4def-be79-488a1f503564", "version": "0.*", "name": "kubectl apply", "refName": "", "enabled": true, "alwaysRun": false, "continueOnError": false, "timeoutInMinutes": 0, "definitionType": null, "overrideInputs": {}, "condition": "succeeded()", "inputs": { "kubernetesServiceEndpoint": "82e5971b-9ac6-42c6-ac43-211d2f6b60e4", "namespace": "", "command": "apply", "useConfigurationFile": "false", "configuration": "", "arguments": "-f $(System.DefaultWorkingDirectory)/medquality-cordapp/k8s", "secretType": "dockerRegistry", "secretArguments": "", "containerRegistryType": "Azure Container Registry", "dockerRegistryEndpoint": "", "azureSubscriptionEndpoint": "", "azureContainerRegistry": "", "secretName": "", "forceUpdate": "true", "configMapName": "", "forceUpdateConfigMap": "false", "useConfigMapFile": "false", "configMapFile": "", "configMapArguments": "", "versionOrLocation": "version", "versionSpec": "1.7.0", "checkLatest": "false", "specifyLocation": "", "cwd": "$(System.DefaultWorkingDirectory)", "outputFormat": "json", "kubectlOutput": "" } } ]
内容的提问来源于stack exchange,提问作者1174
相关产品推荐
相关产品推荐

