kubectl到GKE集群的连接是在VM上工作的,但不是通过同一VM的Jenkins管道



我有一个linux虚拟机,在那里我可以毫无问题地运行kubectl get pods命令。

我发现当我运行时:

gcloud container clusters get-credentials --cluster <cluster-name>

命令,它将kubeconfig文件按预期存储在$HOME/.kube/config中。

但当我在同一个虚拟机中通过jenkins管道运行相同的步骤时,它会导致到GKE集群的连接超时问题。此外,kubeconfig文件的内容相同,但这次的路径不同。它是在管道的当前目录中创建的,名为.kube。我也尝试过在管道中传递--kubeconfig $HOME/.kube/config,但再次出现相同的问题。

我也尝试过在管道中传递--kubeconfig$HOME/.kube/config,但问题再次出现。

通过在jenkins管道中指定$HOME变量,您正在从jenkins user的主目录请求kube配置文件,例如/var/lib/jenkins
和:

它是在管道的当前目录中创建的,名称为.kube

因此,解决方案是在jenkins作业中设置KUBECONFIG环境变量,或者设置--kubeconfig标志并将其指向现有的工作kube配置文件(检查kube配置路径(。查看
yourJenkinsUrl:port/env-vars.html中所有可用的詹金斯环境变量

编辑:

有一个变通方法可能会有所帮助-Jenkins的Kubernetes CLI插件

允许您在作业中配置kubectl以与Kubernetes集群交互。在kubectl之上构建的任何工具都可以从管道中使用来执行部署,例如Shopify/krane。

// Example when used in a pipeline
node {
stage('Apply Kubernetes files') {
withKubeConfig([credentialsId: 'user1', serverUrl: 'https://api.k8s.my-company.com']) {
sh 'kubectl apply -f my-kubernetes-directory'
}
}
}

它是如何工作的?

插件根据构建中提供的参数生成一个kubeconfig文件。该文件存储在构建工作区内的一个临时文件中,确切路径可以在KUBECONFIG环境变量中找到。kubectl会自动从这个环境变量中获取路径。一旦构建完成(或管道块退出(,临时kubeconfig文件就会自动删除。

相关内容

  • 没有找到相关文章

最新更新