Azure容器服务(AKS)kubeconfig文件已过期

Azure容器服务(AKS)kubeconfig文件已过期,azure,kubernetes,azure-devops,terraform-provider-azure,Azure,Kubernetes,Azure Devops,Terraform Provider Azure,我正在学习K8s,并使用kubectl应用程序设置了发布管道。我已经通过Terraform设置了AKS集群,在第一次运行时,一切似乎都很好。一旦我销毁了集群,我会重新运行管道,我认为这些问题与异常中提到的kubeconfig文件有关。我尝试了云shell等来获取文件或重置它,但没有成功。我怎样才能回到干净的状态 2020-12-09T09:08:51.7047177Z ##[section]Starting: kubectl apply 2020-12-09T09:08:51.7482440Z

我正在学习K8s,并使用kubectl应用程序设置了发布管道。我已经通过Terraform设置了AKS集群,在第一次运行时,一切似乎都很好。一旦我销毁了集群,我会重新运行管道,我认为这些问题与异常中提到的kubeconfig文件有关。我尝试了云shell等来获取文件或重置它,但没有成功。我怎样才能回到干净的状态

2020-12-09T09:08:51.7047177Z ##[section]Starting: kubectl apply
2020-12-09T09:08:51.7482440Z ==============================================================================
2020-12-09T09:08:51.7483217Z Task         : Kubectl
2020-12-09T09:08:51.7483729Z Description  : Deploy, configure, update a Kubernetes cluster in Azure Container Service by running kubectl commands
2020-12-09T09:08:51.7484058Z Version      : 0.177.0
2020-12-09T09:08:51.7484996Z Author       : Microsoft Corporation
2020-12-09T09:08:51.7485587Z Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/deploy/kubernetes
2020-12-09T09:08:51.7485955Z ==============================================================================
2020-12-09T09:08:52.7640528Z [command]C:\ProgramData\Chocolatey\bin\kubectl.exe --kubeconfig D:\a\_temp\kubectlTask\1607504932712\config apply -f D:\a\r1\a/medquality-cordapp/k8s
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
2020-12-09T09:08:54.1798118Z ##[error]The process 'C:\ProgramData\Chocolatey\bin\kubectl.exe' failed with exit code 1
2020-12-09T09:08:54.1853710Z ##[section]Finishing: kubectl apply
发布管道的更新、工作流任务:

最初我得到了工件,包含k8s YAML的repo的克隆,然后这个阶段应用kubectl

"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": ""
                            }
                        }
                    ]
    ```

当您销毁并重新配置AKS集群时,kube API URL和其他一些内容会发生更改,但正如您所发现的,没有任何内容会在您配置的客户端上自动更新此内容

我要访问新的和重新配置的AKS群集所做的是:

az aks get-credentials --subscription <sub> -g <rg> -n <aksname> -a --overwrite
az aks获取凭据--订阅-g-n-a--覆盖

我可以看到您正在使用
kubernetesServiceEndpoint
作为Kubectl任务中的服务连接类型

一旦我破坏了集群,我重新运行管道,我就会遇到问题

如果集群被破坏。azure devops中的
kubernetesServiceEndpoint
仍连接到源集群。使用origin
kubernetesServiceEndpoint
的Kubectl任务仍在寻找旧集群。由于旧集群被破坏,它将因上述错误而失败

您可以通过使用新创建的群集更新azure devops中的来解决此问题:

转到Azure devops项目设置-->服务连接-->查找Kubernetes服务连接-->单击编辑以更新配置

但是如果您的kubernete集群经常被破坏和重新创建。我建议使用Azure资源管理器作为服务连接类型,以连接到Kubectl任务中的集群。请参见下面的屏幕截图

通过使用
azureSubscriptionEndpoint
并指定
azureResourceGroup
,如果只有集群的名称没有更改,那么重新创建集群的次数也无关紧要


请参阅文档以创建一个

您是否可以共享管道步骤并提供更多详细信息。您是否在管道本身中获取新创建集群的kubeconfig?我已更新OP,不获取kubeconfig。Kubectl需要信息才能连接到新集群。您需要获取集群信息,并使用集群的详细信息更新kubeconfig文件。其中一种方法是,在管道中调用kubectl apply之前,可以使用Az CLI任务(Az aks get credentials)更新kubeconfig。我使用了Radek在kubectl apply任务之前在任务中给出的命令,但问题相同。肯定还在做错事<代码>2020-12-09T13:09:44.8926956Z将“medquality-aks1-admin”合并为/home/vsts/.kube/config 2020-12-09T13:09:45.2265525Z[command]/usr/bin/az account clear中的当前上下文,您是否仍然收到“无法连接到服务器:拨号tcp:lookup mq-k8s-dfee38f6.hcp.switzerlandnorth.azmk8s.io”?如果是新的错误消息,您可以将其添加到此处吗?它不在客户端。我确实让aks在本地也获得了凭据,但问题发生在我没有提供kubeconfig的发布管道上。抱歉,现在更好地理解它,在kubectl应用任务之前添加了它,但问题相同<代码>2020-12-09T13:09:44.8926956Z在/home/vsts/.kube/config 2020-12-09T13:09:45.2265525Z[command]/usr/bin/az account clear非常感谢Levi!就是这样,我不清楚服务连接是否指向旧的fqdn。也非常感谢您为这种情况指出战略解决方案。非常感谢。