Fork me on GitHub

kubernetes系列之《构建企业级CICD平台(二)》

前言:这篇文章将进入实战阶段,从代码发布流程设计到运行Jenkins来实现这一切,请关注!

二、发布流程设计

发布设计步骤如下:

  1. 开发将代码提交到Gitlab私有仓库;
  2. Jenkins拉取Gitlab的代码仓库,进入单元测试、构建镜像、推送镜像到测试环境;
  3. 测试人员在K8s搭建的测试环境中进行功能测试,测试通过后提交到Harbor私有镜像仓库;
  4. 管理员通操作K8s API,将Harbor交付的镜像部署到K8s生产环境的Pod中;
  5. 生产环境通过负载均衡对外提供服务

三、准备工作

准备K8S、Ingress服务和PV自动供给(NFS)
注意:K8S每一台都需要nfs-utils客户端包,否则挂载NFS失败

3.1、部署Harbor服务

在安装Harbor之前,必须保证你的环境已经安装好docker和docker-compose了,这两个安装方法在Docker官网都有:

1
2
安装Docker方法:https://docs.docker.com/install/linux/docker-ce/centos
安装Docker-Compose方法:https://docs.docker.com/compose/install/#install-compose

1、下载离线安装包

1
2
3
4
5
# 前去官网下载离线安装包
https://github.com/goharbor/harbor/releases

$ wget -c https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.5.tgz
(如果下载慢的话,你可以使用迅雷下载,会快很多)

2、解压并配置访问地址

1
2
3
4
5
$ tar zxf harbor-offline-installer-v1.7.5.tgz
$ cd harbor/
$ vim harbor.cfg
hostname = 172.16.194.130
harbor_admin_password = 123123

3、启动Harbor

1
$ ./install.sh

4、查看启动状态

1
$ docker-compose ps

5、访问Harbor
访问地址:http://172.16.194.130

6、配置Docker registry仓库地址
在/etc/docker/daemon.json里添加配置如下:

1
2
3
{
"insecure-registries": ["172.16.194.130"]
}

配置好后,别忘了重启systemctl restart docker

3.2、部署Git服务

1、安装Git
这里实验就使用Git工具,在正式环境中应当使用Gitlab作为代码的私有存放仓库。

1
$ yum install git -y

2、创建Git用户

1
2
$ useradd git
$ echo "123456" | passwd --stdin git

3、创建仓库

1
2
3
4
5
$ su - git

$ mkdir app.git

$ git --bare init app.git

4、在其他节点拉取代码
我这里在172.16.194.129节点上进行拉取实验

1
2
$ yum install git -y
$ git clone git@172.16.194.130:/home/git/app.git # 需要输入密码:123456

5、生成秘钥对,配置免密clone
使拉取节点有秘钥,git服务节点有公钥,实现免秘钥拉取代码

1
2
$ ssh-keygen
$ ssh-copy-id git@172.16.194.130 # 注意是推送到git账号下

6、提交代码测试

1
2
3
4
5
6
7
8
9
10
$ git clone git@172.16.194.130:/home/git/app.git
$ cd app/
$ echo 'test' >test.txt
$ git add .

$ git config --global user.email "git@example.com"
$ git config --global user.name "git"

$ git commit -m 'test'
$ git push origin master

3.3、在K8s集群中部署Jenkins服务

Jenkins官方部署文档:https://github.com/jenkinsci/kubernetes-plugin/tree/master/src/main/kubernetes
1、下载文件

1
2
3
$ mkdir jenkins && cd jenkins
$ wget https://raw.githubusercontent.com/jenkinsci/kubernetes-plugin/master/src/main/kubernetes/jenkins.yml
$ wget https://raw.githubusercontent.com/jenkinsci/kubernetes-plugin/master/src/main/kubernetes/service-account.yml

2、修改配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$ vim jenkins.yml 
# 在StatefulSet下面增加了自动PV供给参数
volumeClaimTemplates:
- metadata:
name: jenkins-home
spec:
storageClassName: managed-nfs-storage
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi

# 在Service下面配置NodePort方式暴露服务
spec:
type: NodePort
selector:
name: jenkins
ports:
-
name: http
port: 80
targetPort: 8080
protocol: TCP
nodePort: 30006

# 在Ingress下面配置对外提供的域名,并去掉https配置
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: jenkins
servicePort: 80
host: jenkins.nicksors.cc

3、执行部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ kubectl create -f service-account.yml
$ kubectl create -f jenkins.yml

# 查看部署情况
[root@k8s-master-128 jenkins]# kubectl get -f jenkins.yml
NAME READY AGE
statefulset.apps/jenkins 1/1 7m4s

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/jenkins NodePort 10.0.0.119 <none> 80:30006/TCP,50000:32716/TCP 7m4s

NAME HOSTS ADDRESS PORTS AGE
ingress.extensions/jenkins jenkins.nicksors.cc 80, 443 7m4s

# 查看数据卷绑定情况
[root@k8s-master-128 jenkins]# kubectl get pv,pvc
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/pvc-5106347a-876f-11e9-aad1-000c29f4daa9 1Gi RWO Delete Bound default/jenkins-home-jenkins-0 managed-nfs-storage 11m
persistentvolume/pvc-73517410-7ec8-11e9-a3c6-000c29410916 1Gi RWO Delete Bound kube-system/grafana-data-grafana-0 managed-nfs-storage 6d6h

NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/jenkins-home-jenkins-0 Bound pvc-5106347a-876f-11e9-aad1-000c29f4daa9 1Gi RWO managed-nfs-storage 11m

4、本地host绑定Ingress提供的域名,访问Jenkins服务

1
2
sudo vim /etc/hosts
172.16.194.129 jenkins.nicksors.cc

5、访问并配置Jenkins
http://jenkins.nicksors.cc

获取管理员密码:

1
2
[root@k8s-master-128 jenkins]# kubectl exec -it jenkins-0 cat /var/jenkins_home/secrets/initialAdminPassword
d5451094ecd443b393c73e3b8eb9f20d

离线的解决办法:https://www.cnblogs.com/forever521Lee/p/9356212.html

安装插件,点击:选择插件来安装(我们自己定义需要安装的插件)

我只选择了Pipeline和Git插件,还有一个中文语言包

创建一个管理员:admin/123123

Jenkins控制台:

Jenkins部署在K8s集群完成,未完待续,请关注下一篇文章。

-------------本文结束感谢您的阅读-------------