jenkins中安装kubectl

因为jenkins中没有kubectl工具,所以如果想要调用的话首先要在jenkins的容器中安装这个命令。有两种方式,

第一种:是直接调用宿主机的kubectl

第二种:是在内部安装。另外比较重要的就是kubeconfig怎么导入使用。

直接调用宿主机的kubectl

和之前的文章一样,把工具映射进来,或者在jenkins的docker中安装kubectl也可以,拷贝进去也可以。

最终命令就变为

 

docker run --name jenkins -d -p 8080:8080 -p 50000:50000 \
-v /data/jenkins_home:/var/jenkins_home \
-v /usr/bin/docker:/usr/bin/docker \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 \
-v /usr/bin/kubectl:/usr/bin/kubectl \
-e JAVA_OPTS=-Duser.timezone=Asia/Shanghai \
jenkins/jenkins:lts

 

 

在内部安装的这里就不赘述了。不是很难

 

kubeconfig的导入

在有了kubectl命令以后,需要kubeconfig来配置连接到k8s的信息。因为我们的jenkins是安装在docker中,不方便直接使用kubeconfig,会遇到权限问题,多环境切换不方便的问题等。所以我们使用jenkins的 Kubernetes CLI Plugin(也有更新后的multiple插件)插件。这个插件可以选择已经添加的k8s的凭证。

 

创建证书

我们是用的阿里云的k8s集群,阿里云给了kubeconfig文件,我们需要把这个文件导入成为jenkin里面的凭证,我们选择的PKCS#12格式的。

我们这里给一个脚本一键生成证书,然后把生成的证书导入。

 

#!/bin/bash
mkdir -p /data/
echo certificate-authority-data的字符串 \
|base64 -d > /data/ca.crt

echo client-certificate-data的字符串 \
|base64 -d > /data/client.crt

echo client-key-data的字符串 \
|base64 -d > /data/client.key


openssl pkcs12 -export -out /data/cert.pfx  -inkey  /data/client.key  -in  /data/client.crt  -certfile /data/ca.crt

这里需要为证书设置一个密码,要记住这个密码,一会导入证书要用。

 

最终生成的/data/cert.pfx 这个就是 PKCS#12 类型的证书。

导入证书

docker下的Jenkins如何使用外部的maven jenkins调用docker_jenkins连kubectl

字段解释:

  • 类型 :certificate
  • 证书 :Upload PKCS#12 certificate
  • 密码 :就是刚才脚本生成证书的时候,输入的密码
  • Id :这里设置一个全局唯一id就可以,可以自选。

 

使用证书

docker下的Jenkins如何使用外部的maven jenkins调用docker_jenkins调用k8s_02

我们选择的是Configure Kubernetes CLI (kubectl) with multiple credentials这个选项,

  • Credentials :也就是我们刚才导入的证书。
  • Kubernetes API endpoint :我们的k8s的api server的网址,注意包含端口号。
  • 其他几项可以不填

 

运行命令

镜像替换

这里我们默认您已经装好了k8s并且已经有一个pod正在运行。我们直接演示怎么把新打包的镜像替换。

#接上文的push镜像 

#接上文的push镜像
docker push $imageName

kubectl set image deploy $K8S_DEPLOYMENT_NAME *=$imageName -n namespace

这样就完成了镜像的替换。还有另一种命令

kubectl patch deployment DEPLOYMENT_NAME --patch '{"spec": {"template": {"spec": {"containers": [{"name": "nginx","image":"NAME:TAG"}]}}}}' -n namespace

 

注意:回滚我们再之前的k8s文章中讲过就不赘述了。

 

附:

本文选择了一种最适合新手使用的方式,还有其他的方式使用起来坑有点多。网上的文章也很少。

 

比如有些是使用kubernetes plugin插件来连接k8s集群的,我就遇到了一个问题,我的就没有网上说的,还有阿里云文档上的Docker Host Certificate Authentication选项,后来发现是docker commons plugin安装以后改名字了,改成了X.509 Client Certificate.