前言
我们在构建K8S基于Jenkins的devops流水线的时候,有一个很重要的步骤就是将Jenkins和K8S对接,这样才能充分运用Jenkins与K8S的特性【pod slave】完成流水线的运行,本文主要记录如何配置Jenkins与K8S集群的对接
1.创建kubernetes cloud
提示:因为创建过程中需要使用token凭证,因此可以先参考
步骤1.2.4
先行创建
1.1 进入Configure Clouds
根据jenkins版本不同,进入Configure Clouds的路径也不一样,但基本上都可以通过[Manage Jenkins]–>[Manage Nodes and Clouds]或者[Manage Nodes]–>[Configure Clouds]进入
1.2配置
Kubernetes Cloud details
主要有三个地方需要自定义修改
1.2.1 Kubernetes 地址:
默认是
https://kubernetes.default
,也可以,我习惯写全,当然,如果Jenkins部署在K8S集群外部,则需要写K8S apis-server的真实地址
1.2.2 禁用htts证书检查
如果你觉得不安全,自行根据网上教程配置,但在内网集群内的话,基本不会有外部威胁
1.2.3 Kubernetes 命名空间
这里就是用来运行pod slave的namespace
1.2.4 凭据
相当于你链接到K8S集群,在集群内进行操作的权限凭证,配置方式有多种,这里选择serviceaccount的方式
rbac授权
Jenkins通过kubernetes-plugin对k8s进行操作,需要在k8s内提前进行rbac授权。这里我们为了方便管理,我们为其绑定cluster-admin角色。当然也可以进一步缩小使用权限,这个根据各个公司的管理制度自行确定
(1)创建serviceaccounts
kubectl create sa devops-jenkins
(2)对jenkins做cluster-admin绑定
kubectl create clusterrolebinding devops-jenkins-role-binding --clusterrole cluster-admin --serviceaccount=devops:devops-jenkins
(3)kubernetes-plugin与k8s连接时,并不是直接使用serviceaccount,而是通过token。因此我们需要获取serviceaccount:jenkins对应的token。
查看sa
[root@master pkg]# kubectl get sa -n devops
NAME SECRETS AGE
default 1 7d18h
devops-jenkins 1 7d2h
jenkins 1 7d18h
查看secret
[root@master pkg]# kubectl describe sa devops-jenkins -n devops
Name: devops-jenkins
Namespace: devops
Labels: <none>
Annotations: <none>
Image pull secrets: <none>
Mountable secrets: devops-jenkins-token-7wnbx
Tokens: devops-jenkins-token-7wnbx
Events: <none>
获取token
[root@master pkg]# kubectl describe secrets devops-jenkins-token-7wnbx -n devops
Name: devops-jenkins-token-7wnbx
Namespace: devops
Labels: <none>
Annotations: kubernetes.io/service-account.name: devops-jenkins
kubernetes.io/service-account.uid: bd379a1d-7e8f-4e4c-aa92-76383c1397ba
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1099 bytes
namespace: 6 bytes
token: eyJhbGciO... ###这里就是所需的token
使用获取到的token创建jenkins凭证
2.存储kubeconfig
在K8S集群的devops中,我们经常会将构建以及部署过程放在临时pod中执行,即所谓的slave pod,因此在部署过程中需要将目标集群的kubeconfig传递到slave pod中,这样就可以直接在pod中执行kubectl apply deploy.yaml --kubeconfig=config
2.1 安装Config File Provider Plugin
直接在Plugin Manager中按照名称搜索安装即可
2.2 配置kubeconfig
依次进入Manage Jenkins–>Managed files–>Add a new Config
选择Custom file,ID可自行配置或使用默认,然后点击下一步
从K8S集群获取到kubeconfig
cat /root/.kube/config
将config文件里的内容完整复制后,粘贴到Content框里,提交即可
之后再managed file的主页面可以看到我们刚配置的文件
2.3 生成jenkinsfile script
我们利用jenkins自带的工具【流水线语法】自动生成调用命令
stage('deploy to test'){
when {
branch 'test'}
steps {input(id:'deploy-to-test', message:'deploy to test?')container("maven"){
script{configFileProvider([configFile(fileId:'f087251c-7058-458d-b26f-8512f3cf3d56', targetLocation:'dev.kubeconfig')]){
sh '''
kubectl get node --kubeconfig=dev.kubeconfig
'''}}}}}
版权归原作者 丰耳 所有, 如有侵权,请联系我们删除。