在Kubernetes集群中安装Jenkins并实现自动化DevOps的详细方法
说明
本文是基于kubernetes集群的Jenkins安装,请参考官方基于kubernetes的Jenkins安装。
安装前请确保已经部署好了可用的kubernetes集群环境。
1. 准备资源清单
1.1. 创建命名空间
创建namespace.yaml文件内容如下:
1 |
|
1.2. 创建Service Account
Service Account用于对容器进行身份验证和授权。Service Account可以被分配到Kubernetes中的Pod中,使得Pod能够以该Service Account的身份与Kubernetes API Server交互。Service Account通常用于访问Kubernetes API资源、管理Secrets和访问其他资源。在Kubernetes中,Service Account是一种OAuth2.0客户端,它使用OAuth2.0协议来获取和验证访问令牌。
创建serviceAccount.yaml文件内容如下:
1 |
|
1.3. 创建volume
创建volume.yaml文件内容如下:
1 |
|
- 注意修改第25行本地挂载路径
path: /mnt/jenkins
- 注意修改第33行
values
的值为kubernetes集群中的挂载该PV的节点名称 - 该节点的该路径需要提前创建好,如我的在
k8s-master2
上创建mkdir -p /mnt/jenkins
1.4.创建deployment
创建deployment.yaml文件内容如下:
1 |
|
- 注意修改第17行
kubernetes.io/hostname
的值为kubernetes集群中的挂载该PV的节点名称,或者删除该行,或者修改为其他label - 可修改第24行image镜像版本,这里我使用的是jenkins/jenkins:2.387.3-lts-jdk11
1.5.创建service
创建service.yaml文件内容如下:
1 |
|
- 这里我直接指定了service的类型为NodePort,且端口号为32000,如果不指定,则会随机分配一个端口。也可以指定为LoadBalancer,这样就可以通过外部IP访问了。或者指定为ClusterIP,暂时在集群内部访问。
- service类型可以不强求,因为后面我会配置ingress。
1.6.创建ingress
创建ingress.yaml文件内容如下:
1 |
|
- 这里我开启了ssl重定向,所以需要配置ssl证书。
- 请将13行和26行的
jenkins.example.com
修改为自己的域名。 - 请将24行的
jenkins-tls
修改为自己的证书名称。 - 也可以删除tls部分,在ingress服务里配置默认证书。
- 如果不需要ssl重定向,请删除第7-9行
annotations
部分。
2.部署jenkins
2.1.部署jenkins的namespace
部署jenkins的jenkins命名空间:
1 |
|
2.2.部署jenkins的serviceaccount
部署jenkins的jenkins-admin serviceaccount:
1 |
|
2.3.部署jenkins的volume
部署jenkins的jenkins-volume:
1 |
|
2.4.部署jenkins的deployment
部署jenkins的jenkins deployment:
1 |
|
查询Pod状态:
1 |
|
如果Pod状态为Running
,则表示基本部署成功
2.5.部署jenkins的service
部署jenkins的jenkins service:
1 |
|
2.6.部署jenkins的ingress
这里仅限部署了ingress-nginx的用户使用!!
部署jenkins的jenkins ingress:
1 |
|
3.访问jenkins
3.1.获取jenkins的admin初始密码
获取jenkins的admin初始密码:
1 |
|
- 这里我使用的是
/mnt/jenkins/secrets/initialAdminPassword
路径,请根据自己的实际情况修改。 - 你在volume.yaml文件中定义的是什么路径,jenkins的文件就在哪个路径下。
- 也可以通过查看pod的日志获取初始密码。
kubectl logs -f jenkins-xxxxx -n jenkins
- 或者通过进入容器内部获取初始密码。
kubectl exec -it jenkins-xxxxx -n jenkins cat /var/jenkins_home/secrets/initialAdminPassword
- xxxxx为你的jenkins pod名称。
3.2. 访问jenkins的web页面
- 可通过ingress中配置的域名进行访问
- 可通过service中配置的nodePort进行访问,IP地址:32000 (32000为service中配置的nodePort)
3.3. 基本配置
- 在初始化页面中,选择
选择插件来安装
。 - 做左上角选择
无
,选择安装
我们不在这里安装插件,而是在后面的插件管理
中安装。 - 创建用户或使用admin登录。
3.4. 更换jenkins的插件源
- 登陆部署了jenkins的服务器。
- 进入挂载的jenkins目录下的
updates
目录。 我的是/mnt/jenkins/updates
。 - 注意,有的人可能看不到updata目录,这是因为你的jenkins初始化界面不是按我的步骤来的,所以没有updata目录。
- update目录下有个default.json文件,这个文件就是插件源文件。先拷贝一份备份。cp default.json default.json.bak
- 修改default.json文件,将里面的
https://updates.jenkins.io/download
替换为https://mirrors.tuna.tsinghua.edu.cn/jenkins
。 - 将default.json文件中的
https://www.google.com
替换为https://www.baidu.com
。 - 重启jenkins服务。
kubectl delete pod jenkins-xxxxx -n jenkins
xxxxx为你的jenkins pod名称。
替换命令如下:
1 |
|
3.5. 安装jenkins插件
- 登陆jenkins,点击左侧菜单栏的
系统管理
。 - 点击
插件管理
。 - 点击
可选插件
。 - 找不到的话直接访问
http://你的jenkins域名/manage/pluginManager/available
。 - 安装下列插件:
- Localization: Chinese (Simplified)
- Pipeline
- Kubernetes
- 记得勾选
安装后重启Jenkins
。然后jenkins会自动重启。 - 小技巧: jenkins支持热重启,访问
http://你的jenkins域名/restart
即可重启jenkins。 - 重启完成后,jenkins已经是中文界面了。就简单了。
4. 配置jenkins的kubernetes插件
4.1. 配置jenkins的kubernetes插件
- 登陆jenkins,点击左侧菜单栏的
系统管理
。 - 点击
节点管理
,部分老版本需要在系统配置
里找到配置kubernetes的界面。 - 找到
configureClouds
,添加一个Kubernetes
,新版直接进去配置即可。 - 名称默认为
kubernetes
,可以自定义。 - 点击
Kubernetes Cloud details
展开配置。 - Kubernetes 地址填写
https://kubernetes.default.svc.cluster.local
。 - 可以填写Kubernetes 命名空间,也可以不填。
- 直接点击
Test Connection
或者连接测试
测试连接。 - Jenkins 地址填写
http://jenkins.jenkins.svc.cluster.local:8080
或者你的jenkins域名。 - Jenkins 通道 填写
jenkins.jenkins.svc.cluster.local:50000
,jenkins.jenkins第一个jenkins是服务名称,第二个jenkins是命名空间。根据自己的实际情况填写。 - 然后应用保存即可。
你可能会在网上看到各种配置服务证书和token的方法,这些方法不适用于我们这种安装方式,不需要配置证书和token,只需要配置上面的内容即可。
4.2. 关于jenkins的kubernetes插件的说明
- 需要配置证书和token的情况一般是在jenkins和kubernetes不在同一个集群的情况下。
- 或者jenkins连接外部集群
- 或者jenkins的serviceAccount没有权限访问kubernetes的api的情况下。
- 在kubernetes内部安装的jenkins,不需要配置证书和token,因为我们安装jenkins时配置的serviceAccount默认就有权限访问kubernetes的api。
- 关于Pod Templates我没有在jenkins里进行配置,需要时直接写到jenkinsfile里即可。后面我会介绍到jenkins如何调用kubernetes的api创建pod,在各种pod里执行任务。
🎉🎉🎉至此kubernetes集成jenkins配置完成!!