从Jenkins容器运行kubectl命令

6

我在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 中如何做到呢?
2个回答

5

看起来KUBECONFIG环境变量没有分配到正确的配置文件。因此,您需要首先遵循以下命令进行分配。


请注意,该文本中存在 HTML 标签,并已保留原样。
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需要这些证书和密钥才能执行创建、应用、获取、监视等操作。


感谢您的帮助。 - Lionel Piroche

4

感谢你的帮助,最终我在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 

两个容器都在同一个网络上启动


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接