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

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

二、发布流程设计
kubernetes系列之《构建企业级CICD平台(二)》
发布设计步骤如下:

开发将代码提交到Gitlab私有仓库;
Jenkins拉取Gitlab的代码仓库,进入单元测试、构建镜像、推送镜像到测试环境;
测试人员在K8s搭建的测试环境中进行功能测试,测试通过后提交到Harbor私有镜像仓库;
管理员通操作K8s API,将Harbor交付的镜像部署到K8s生产环境的Pod中;
生产环境通过负载均衡对外提供服务
三、准备工作
kubernetes系列之《构建企业级CICD平台(二)》
准备K8S、Ingress服务和PV自动供给(NFS)
注意:K8S每一台都需要nfs-utils客户端包,否则挂载NFS失败

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

安装Docker方法:https://docs.docker.com/install/linux/docker-ce/centos
安装Docker-Compose方法:https://docs.docker.com/compose/install/#install-compose
1、下载离线安装包

前去官网下载离线安装包

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、解压并配置访问地址

$ 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

$ ./install.sh
4、查看启动状态

$ docker-compose ps
5、访问Harbor
访问地址:http://172.16.194.130
kubernetes系列之《构建企业级CICD平台(二)》

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

{
“insecure-registries”: [“172.16.194.130”]
}
配置好后,别忘了重启systemctl restart docker

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

$ yum install git -y
2、创建Git用户

$ useradd git
$ echo “123456” | passwd --stdin git
3、创建仓库

$ su - git

$ mkdir app.git

$ git --bare init app.git
4、在其他节点拉取代码
我这里在172.16.194.129节点上进行拉取实验

$ yum install git -y
$ git clone [email protected]:/home/git/app.git # 需要输入密码:123456
5、生成秘钥对,配置免密clone
使拉取节点有秘钥,git服务节点有公钥,实现免秘钥拉取代码

$ ssh-******
$ ssh-copy-id [email protected] # 注意是推送到git账号下
6、提交代码测试

$ git clone [email protected]:/home/git/app.git
$ cd app/
$ echo ‘test’ >test.txt
$ git add .

$ git config --global user.email “[email protected]
$ 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、下载文件

$ 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、修改配置文件

$ 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、执行部署

$ kubectl create -f service-account.yml
$ kubectl create -f jenkins.yml

查看部署情况

[[email protected] 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 80:30006/TCP,50000:32716/TCP 7m4s

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

查看数据卷绑定情况

[[email protected] 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服务

sudo vim /etc/hosts
172.16.194.129 jenkins.nicksors.cc
5、访问并配置Jenkins
http://jenkins.nicksors.cc
kubernetes系列之《构建企业级CICD平台(二)》

获取管理员密码:

[[email protected] jenkins]# kubectl exec -it jenkins-0 cat /var/jenkins_home/secrets/initialAdminPassword
d5451094ecd443b393c73e3b8eb9f20d
kubernetes系列之《构建企业级CICD平台(二)》
离线的解决办法:https://www.cnblogs.com/forever521Lee/p/9356212.html

安装插件,点击:选择插件来安装(我们自己定义需要安装的插件)
kubernetes系列之《构建企业级CICD平台(二)》

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

创建一个管理员:admin/123123
kubernetes系列之《构建企业级CICD平台(二)》

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

Jenkins部署在K8s集群完成