您现在的位置是:首页 >其他 >Jenkins流水线整合k8s实现代码自动集成和部署网站首页其他
Jenkins流水线整合k8s实现代码自动集成和部署
一、前置条件
1、安装好k8s集群
这里先要搭建好一个K8s集群,笔者这边就采用使用了一个一主一丛的k8s集群,k8s集群的版本使用1.19.5版本,服务器的配置:2核4G,操作系统: CentOS Linux release 7.9.2009 (Core)
主机名 | ip |
k8smaster | 192.168.19.8 |
k8sworker | 192.168.19.9 |
具体的安装步骤可以按照文档来进行:使用kubeadm安装kubernetes_v1.19.x | Kuboard
2、安装好 Kuboard来管理k8s集群
安装完成后,安装 Kuboard v3 - kubernetes,按照指令:
kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3.yaml
# 您也可以使用下面的指令,唯一的区别是,该指令使用华为云的镜像仓库替代 docker hub 分发 Kuboard 所需要的镜像
# kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3-swr.yaml
Kuboard 安装完成后,
-
在浏览器中打开链接
http://
192.168.19.8:30080
-
输入初始用户名和密码,并登录
- 用户名:
admin
- 密码:
Kuboard123
- 用户名:
3、安装好 IngressClass来进行服务暴露
在集群的IngressClass管理中安装ingressController
4、创建test命名空间
后续我们通过jenkinszhong 部署的服务放在这个命名空间中,在k8s集群的master节点上执行如下指令:
[root@localhost ~]# kubectl create ns test
namespace/test created
[root@localhost ~]# kubectl get ns
NAME STATUS AGE
default Active 13h
ingress-nginx Active 30m
kube-node-lease Active 13h
kube-public Active 13h
kube-system Active 13h
kuboard Active 13h
test Active 2m20s
5、在Kuboard 配置好docker私服的相关配置信息
6、在k8s的master和worker节点上配置docker的私服地址
在/etc/docker/daemon.json文件中添加
然后重启docker服务,master和worker都需要执行
systemctl restart docker
测试docker能否进行登录,执行如下命名:
docker login 192.168.19.7:80 -u admin -p Harbor12345
发现是能够正常登录的
二、在项目代码中添加k8s的部署文件
1、在项目代码的docker文件夹中添加,pipe-line.yml文件
文件内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: test
name: pipeline
labels:
app: pipeline
spec:
replicas: 2
selector:
matchLabels:
app: pipeline
template:
metadata:
labels:
app: pipeline
spec:
imagePullSecrets:
- name: harbor
containers:
- name: pipeline
image: 192.168.19.7:80/repo/mytest:v1.0.10
imagePullPolicy: Always
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
namespace: test
labels:
app: pipeline
name: pipeline
spec:
selector:
app: pipeline
ports:
- port: 8081
targetPort: 8080
type: NodePort
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: test
name: pipeline
spec:
ingressClassName: ingress
rules:
- host: zhang.pipeline.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: pipeline
port:
number: 8081
2、添加域名解析
在window的hosts文件中添加如下域名解析:
C:WindowsSystem32driversetchosts文件
192.168.19.8 zhang.pipeline.com
3、配置jenkins流水线
3-1、现在k8smaster的/usr/local/目录下创建k8smaster目录
3.2、在jenkins上新增一个publish over ssh
3.3、在项目的任务中添加一个文件传输任务,并执行pod的部署及滚动更新
sshPublisher(publishers: [sshPublisherDesc(configName: 'k8smaster', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''kubectl apply -f /usr/local/k8smaster/docker/pipe-line.yml
kubectl rollout restart deployment pipeline -n test''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'docker/pipe-line.yml')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
4、测试部署后的流水线构建情况
可以看到已经执行成功,至此我们完成了基于jenkins并集成k8s集群进行CICD的流水线建设