kubernetes - 由于上下文,Kubernetes 部署失败
问题描述
我已经为本地部署创建了上下文。
root@jenkins-linux-vm:/usr/lib# kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
K8sCluster-CC-pre-release kubernetes kubernetes-admin K8sCluster-CC-pre-release
PR kubernetes kubernetes-admin PR
* kubernetes-admin@kubernetes kubernetes kubernetes-admin
当我的詹金斯运行构建时,即使我已经创建了上下文及其指向(*),我也遇到了错误。
+ kubectl '--kubeconfig=****' '--context=K8sCluster-CC-pre-release' apply -f ./environment/pre-release '-n=pre-release'
error: context "K8sCluster-CC-pre-release" does not exist
tage('deployment') {
container('kubectl') {
withCredentials([kubeconfigFile(credentialsId: 'KUBERNETES_CLUSTER_CONFIG', variable: 'KUBECONFIG')]) {
def kubectl
echo 'Deployment Start'
if(gitBranch == "future-master-fix") {
kubectl = "kubectl --kubeconfig=${KUBECONFIG} --context=K8sCluster-CC-pre-release"
echo 'deploy to PRERELEASE!'
sh "${kubectl} apply -f ./environment/pre-release -n=pre-release"
echo 'Deployment End'
}
}
}
}
解决方案
当您进行配置时,您可能使用了更流行Jenkins
的基于 as 的配置。Kubeconfig
该插件根据构建中提供的参数生成一个 kubeconfig 文件。该文件存储在 Jenkins 执行器上的一个临时文件夹中,确切的路径可以在 KUBECONFIG 环境变量中找到。kubectl 自动从这个环境变量中获取路径。一旦构建完成(或退出管道块),临时 kubeconfig 文件将自动删除。
当您使用时,kubectl config get-contexts
您使用了来自${HOME}/.kube/config
.
如果您检查kubectl config --help
,您将获得:
- 如果设置了 --kubeconfig 标志,则仅加载该文件。该标志只能设置一次,并且不会发生合并。
- 如果设置了 $KUBECONFIG 环境变量,那么它将用作路径列表(系统的正常路径分隔规则)。这些路径被合并。当一个值被修改时,它在定义该节的文件中被修改。创建值时,它会在存在的第一个文件中创建。如果链中不存在文件,则创建列表中的最后一个文件。
- 否则,使用 ${HOME}/.kube/config 并且不会进行合并。
这意味着如果您在Kubernetes
本地使用,您正在使用 option 3。
在Jenkins
您使用选项1时,因此每次运行时都kubectl
使用不同的配置,其中不包含 required context
。
在这个命令中:kubectl = "kubectl --kubeconfig=${KUBECONFIG} --context=K8sCluster-CC-pre-release"
你正在覆盖kubeconfig
,所以它找不到这个context
。
请--kubeconfig=${KUBECONFIG}
从代码中删除并重试。它应该工作。
推荐阅读
- python - 大熊猫列读加列
- reactjs - React / Redux:如何更新网格的一个单元格而不重新渲染所有其他单元格
- java - 我需要了解样本中的 nEpoch 是什么
- airflow - 重新处理 Airflow 的历史数据
- c# - 如何访问 Blazor Web Assembly(客户端)中的服务或从实用程序类处理依赖注入?
- python - MemoryError((462855, 4998), dtype('uint8'))
- python - 读取带有 IP 地址列表的文本文件并建立 curl 连接
- sql-server - SSRS 2017 多选参数不适用于某些用户
- node.js - 将express与ejs一起使用时如何从磁盘或内存中加载资源
- javascript - 点击后如何动态更改css?然后再次单击返回默认值?