前言

我们在构建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:

Annotations:

Image pull secrets:

Mountable secrets: devops-jenkins-token-7wnbx

Tokens: devops-jenkins-token-7wnbx

Events:

获取token

[root@master pkg]# kubectl describe secrets devops-jenkins-token-7wnbx -n devops

Name: devops-jenkins-token-7wnbx

Namespace: devops

Labels:

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

'''

}

}

}

}

}

精彩内容

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: