前言

我们在构建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
                            '''
                        }
                    }
                }
            }
        }
Logo

一起探索未来云端世界的核心,云原生技术专区带您领略创新、高效和可扩展的云计算解决方案,引领您在数字化时代的成功之路。

更多推荐