jenkins+gitlab+docker+harbor+k8s终结篇

 之前我们已经把相关环境,持续集成这一块都实现了。详细内容可查看我cicd专栏前三篇的内容。

kubeadm 部署k8s-优快云博客

 harbor部署-优快云博客

Jenkins+gitlab持续集成_gitlab jenkins 集成-优快云博客

本篇内容主要是讲解持续集成和持续交付是如何实现和部署的。

概念

持续交付建立在持续集成的基础上,通过自动化的流程确保软件可以随时随地进行部署。

流程
这时,持续交付后的代码已经在主分支上了,这处于某个版本的待发布的状态,随时可以将开发环境的功能部署到生产环境中(部署到生成环境前还需要在测试环境性能测试、回归测试、自动化测试、人工测试等),运行脚本构建打包应用,通过自动化部署工具部署到生产环境运行应用,监控生产环境指标,如出现问题和错误,可以触发手动或自动回滚,如系统正常,则定期回顾,收集反馈,优化,并持续改进

流程图

 

机器规划如下

设备名称ip地址配置
master23110.0.0.2312核,4GiB,系统盘 20GiB
worken23210.0.0.2322核,4GiB,系统盘 20GiB
worken23310.0.0.2332核,4GiB,系统盘 20GiB
jenkins21110.0.0.2112核,4GiB,系统盘 20GiB
gitlab21210.0.0.2124核,4GiB,系统盘 20GiB
harbor10.0.0.2502核,4GiB,系统盘 20GiB

一、编写dockerfile

[root@gitlab212 project]# pwd
/root/project

[root@gitlab212 project]# vim Dockerfile 
FROM registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1

EXPOSE 80

WORKDIR /usr/share/nginx/html/

ADD . /usr/share/nginx/html/

本地打镜像测试

[root@gitlab212 project]# docker image build -t yiliao:v1 .

运行镜像

[root@gitlab212 project]# docker run -d -p 88:80  yiliao:v1

访问

http://10.0.0.212:88/

二、集成harbor

1.启动harbor仓库

[root@harbor.oldboyedu.com harbor]# docker-compose down -t 0
[root@harbor.oldboyedu.com harbor]# docker-compose up -d

2.harbor新建仓库

 3.jenkins编写shell

docker login -u admin -p 1 harbor.cherry.com
docker image build -t harbor.cherry.com/yiliao/yiliao:v1 .
docker push harbor.cherry.com/yiliao/yiliao:v1

 4.推送故障排查

没有docker命令,只需要在jenkins上安装docker 

 

jenkins上做harbor的hosts解析

[root@jenkins211 ~]# echo 10.0.0.250 harbor.cherry.com >>/etc/hosts

 

 x509证书问题

创建harbor客户端证书存放目录
[root@jenkins211 ~]# mkdir -pv /etc/docker/certs.d/harbor.cherry.com

harbor上需要准备客户端证书
[root@harbor certs]# ll
total 20
drwxr-xr-x 5 root root 4096 Dec 10 08:26 ./
drwxr-xr-x 4 root root 4096 Dec 10 08:45 ../
drwxr-xr-x 2 root root 4096 Dec 10 08:31 ca/
drwxr-xr-x 2 root root 4096 Dec 18 05:55 docker-client/
drwxr-xr-x 2 root root 4096 Dec 10 08:32 harbor-server/

[root@harbor.oldboyedu.com certs]# openssl x509 -inform PEM -in harbor-server/harbor.cherry.com.crt -out docker-client/harbor.cherry.com.cert
#查看证书一致性
[root@harbor.oldboyedu.com certs]# md5sum docker-client/harbor.cherry.com.cert harbor-server/harbor.cherry.com.crt
cp harbor-server/harbor.cherry.key /docker-client/
cp ca/ca.crt docker-client/

[root@harbor certs]# cd docker-client/
[root@harbor docker-client]# ll
total 20
drwxr-xr-x 2 root root 4096 Dec 18 05:55 ./
drwxr-xr-x 5 root root 4096 Dec 10 08:26 ../
-rw-r--r-- 1 root root 2041 Dec 18 05:55 ca.crt
-rw-r--r-- 1 root root 2134 Dec 18 05:38 harbor.cherry.com.cert
-rw------- 1 root root 3272 Dec 18 05:54 harbor.cherry.com.key

#拷贝证书到jenkins
[root@jenkins211 ~]# scp harbor.cherry.com:/softwares/harbor/certs/docker-client/* /etc/docker/certs.d/harbor.cherry.com
[root@jenkins211 ~]# ll /etc/docker/certs.d/harbor.cherry.com

登录harbor仓库

[root@jenkins211 harbor.cherry.com]# docker login -u admin -p 1 harbor.cherry.com
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

 5.harbor仓库查看镜像

这时候镜像已经推送到harbor仓库了

 

三、jenkins一键更新k8s项目

1.新建yiliao名称空间

[root@master231 01-yiliao]# cat 01-ns-yiliao.yaml 
apiVersion: v1
kind: Namespace
metadata:
  labels:
    school: cherry
    class: cherry
  name: yiliao

2.使用deploy控制器编写资源清单

[root@master231 01-yiliao]# cat 02-deploy-yiliao.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-yiliao
  namespace: yiliao
spec:
  replicas: 3
  selector:
    matchLabels:
      apps: yiliao
  template:
    metadata:
      labels:
        apps: yiliao
    spec:
       containers:
       - name: yiliao
         image: harbor.cherry.com/yiliao/yiliao:v1

3.编写svc

[root@master231 01-yiliao]# cat 03-svc-yiliao.yaml 
apiVersion: v1
kind: Service
metadata:
  name: yiliao-svc
  namespace: yiliao
spec:
  type: NodePort
  selector:
    apps: yiliao
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30080

4.部署

#创建资源
[root@master231 01-yiliao]# kubectl apply -f .

#指定名称空间查看
[root@master231 01-yiliao]# kubectl get svc,po -n yiliao 

5.创建secret

kubectl create secret docker-registry harbor-secret \
  --docker-server=harbor.cherry.com \
  --docker-username=admin \
  --docker-password=1 \
  --namespace=yiliao

创建工作负载

[root@master231 yiliao]# ll
total 20
drwxr-xr-x  2 root root 4096 Dec 18 15:30 ./
drwx------ 10 root root 4096 Dec 18 15:30 ../
-rw-r--r--  1 root root  103 Dec 18 14:44 01-ns-yiliao.yaml
-rw-r--r--  1 root root  378 Dec 18 15:20 02-deploy-yiliao.yaml
-rw-r--r--  1 root root  191 Dec 18 15:30 03-svc-yiliao.yaml


[root@master231 yiliao]# kubectl apply -f .
namespace/yiliao created
deployment.apps/deploy-yiliao created
service/yiliao-svc created


//所有节点都需要harbor客户端证书,不然镜像拉取会失败

5.访问

http://10.0.0.232:30080/

 四、更新项目

1.jenkins安装kubectl工具

我本地已经下载了,这里就直接上传到jenkins中

#将kubectl放到PATH环境变量
[root@jenkins211 ~]# mv kubectl-1.23.17 /usr/local/sbin/kubectl
[root@jenkins211 ~]# chmod +x /usr/local/sbin/kubectl

2.pod创建的时候会携带https证书,所以我们需要拷贝231节点证书到jenkins

[root@jenkins211 ~]# mkdir -pv ~/.kube/
[root@jenkins211 ~]# scp 10.0.0.231:/root/.kube/config ~/.kube/

3.gitlab修改项目

4.jenkins构建项目,测试

docker login -u admin -p 1 harbor.cherry.com
docker image build -t harbor.cherry.com/yiliao/yiliao:v3 .
docker push harbor.cherry.com/yiliao/yiliao:v3
kubectl -n yiliao set image deploy deploy-yiliao yiliao=harbor.cherry.com/yiliao/yiliao:v3

 查看harbor仓库,我们打的镜像都成功推上来了

 访问

五、自动构建

我们每次都需要手动更改jenkins版本号,这是件麻烦的事,我们可以选择git参数构建的方式,这样就不需要手动更改版本号

1.git参数填写

 2.修改jenkins中shell脚本

docker login -u admin -p 1 harbor.cherry.com
docker image build -t harbor.cherry.com/yiliao/yiliao:$release .
docker push harbor.cherry.com/yiliao/yiliao:$release
kubectl -n yiliao set image deploy deploy-yiliao yiliao=harbor.cherry.com/yiliao/yiliao:$release

4.jenkins选择版本构建

5.harbor仓库查看最新镜像

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值