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 类型的证书。
导入证书
字段解释:
- 类型 :certificate
- 证书 :Upload PKCS#12 certificate
- 密码 :就是刚才脚本生成证书的时候,输入的密码
- Id :这里设置一个全局唯一id就可以,可以自选。
使用证书
我们选择的是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.