运行 来自 jenkins 容器的 kubectl 命令
Running kubectl command from jenkins container
我在 VirtualBox(ubuntu) 上安装了 minikube 来模拟部署环境并使用 Jenkins 管道。
在我的 jenkins 容器上,我还安装了 kubectl 命令来控制 minikube。
所以我创建了以下阶段:
stage("k8s command test") {
withCredentials([usernamePassword(credentialsId: 'cbcba826-ef01-4b18-856f-e6dc4eb27c1f', usernameVariable: 'my-user', passwordVariable: 'PASSWORD')]) {
sh """
kubectl config view
kubectl create -f /home/my-user/file-svc.yml
"""
}
}
首先我的集群在我的输出中似乎是空的:
+ kubectl config view
apiVersion: v1
clusters: []
contexts: []
current-context: ""
kind: Config
preferences: {}
users: []
如果我检查 .kube/config 我有以下配置:
apiVersion: v1
clusters:
- cluster:
certificate-authority: /home/my-user/.minikube/ca.crt
server: https://127.0.0.1:8443
name: minikube
contexts:
- context:
cluster: minikube
user: minikube
name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
user:
as-user-extra: {}
client-certificate: /home/my-user/.minikube/client.crt
client-key: /home/my-user/.minikube/client.key
由于我是 kubernetes 的新手,我需要帮助来了解如何使 jenkins 和 minikube 之间的通信成为可能。
因此 kubectl create -f /home/my-user/file-svc.yml 引发了有关身份验证的错误。
我读了很多文章 kubectl 需要证书才能连接到 API 服务器 我怎么能在 jenkins
中做到这一点
KUBECONFIG 环境变量似乎没有分配到正确的配置 file.Therefore,您需要先按照命令分配它
export KUBECONFIG=~/.kube/config
现在 kubectl 可以与 kube-api 服务器通信。但是,它需要显示其身份和对 k8s 资源执行操作的能力,因此,每当它与 kube-api 服务器通信时,它都会使用 client.crt 和 client.key 文件。
现在它可以执行以下任务
kubectl apply -f deployment.yaml
kubectl get pods
kubectl get nodes
您的问题的解决方案
Jenkins 需要这些证书和密钥才能执行创建、应用、获取、监视等操作
感谢您的帮助,最后我在 jenkins 上设置了集群并使用 --insecure-skip-tls-verify=true 来避免身份验证,因为它是测试机
kubectl config set-cluster minikube --server=https://127.0.0.1:8443 --insecure-skip-tls-verify=true
kubectl config set-context minikube --cluster=minikube --user=minikube
kubectl config use-context minikube
并且两个容器在同一个网络上启动
我在 VirtualBox(ubuntu) 上安装了 minikube 来模拟部署环境并使用 Jenkins 管道。 在我的 jenkins 容器上,我还安装了 kubectl 命令来控制 minikube。
所以我创建了以下阶段:
stage("k8s command test") {
withCredentials([usernamePassword(credentialsId: 'cbcba826-ef01-4b18-856f-e6dc4eb27c1f', usernameVariable: 'my-user', passwordVariable: 'PASSWORD')]) {
sh """
kubectl config view
kubectl create -f /home/my-user/file-svc.yml
"""
}
}
首先我的集群在我的输出中似乎是空的:
+ kubectl config view
apiVersion: v1
clusters: []
contexts: []
current-context: ""
kind: Config
preferences: {}
users: []
如果我检查 .kube/config 我有以下配置:
apiVersion: v1
clusters:
- cluster:
certificate-authority: /home/my-user/.minikube/ca.crt
server: https://127.0.0.1:8443
name: minikube
contexts:
- context:
cluster: minikube
user: minikube
name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
user:
as-user-extra: {}
client-certificate: /home/my-user/.minikube/client.crt
client-key: /home/my-user/.minikube/client.key
由于我是 kubernetes 的新手,我需要帮助来了解如何使 jenkins 和 minikube 之间的通信成为可能。
因此 kubectl create -f /home/my-user/file-svc.yml 引发了有关身份验证的错误。 我读了很多文章 kubectl 需要证书才能连接到 API 服务器 我怎么能在 jenkins
中做到这一点KUBECONFIG 环境变量似乎没有分配到正确的配置 file.Therefore,您需要先按照命令分配它
export KUBECONFIG=~/.kube/config
现在 kubectl 可以与 kube-api 服务器通信。但是,它需要显示其身份和对 k8s 资源执行操作的能力,因此,每当它与 kube-api 服务器通信时,它都会使用 client.crt 和 client.key 文件。 现在它可以执行以下任务
kubectl apply -f deployment.yaml
kubectl get pods
kubectl get nodes
您的问题的解决方案
Jenkins 需要这些证书和密钥才能执行创建、应用、获取、监视等操作
感谢您的帮助,最后我在 jenkins 上设置了集群并使用 --insecure-skip-tls-verify=true 来避免身份验证,因为它是测试机
kubectl config set-cluster minikube --server=https://127.0.0.1:8443 --insecure-skip-tls-verify=true
kubectl config set-context minikube --cluster=minikube --user=minikube
kubectl config use-context minikube
并且两个容器在同一个网络上启动