使用rancher在k8s上完成第一个CI/CD的项目_.NET篇

隔了几天没写了。一是忙的不行,二是遇到一个问题一直没解决。我们自己搭建的harbor仓库是没有域名的,也没做nginx转发,所以都是http请求的。构建项目时会在两个地方遇到关于docker访问http仓库不通的问题。
第一个:构建成功push镜像到私有仓库的时候。
第二个:构建成功部署的时候从仓库pull镜像来部署的时候。
这里需要设置一些东西:
首先我们所有含有docker环境的模板镜像都是提前做了配置信任私有仓库的:
vi /etc/docker/daemon.json

使用rancher在k8s上完成第一个CI/CD的项目_.NET篇_第1张图片

rancher流水线文件 :.rancher-pipeline.yml文件需要加一个设置:
使用rancher在k8s上完成第一个CI/CD的项目_.NET篇_第2张图片

 设置集群node私有仓库:这里需要注意,工作节点和控制节点都需要设置
 vi /etc/rancher/rke2/registries.yaml

使用rancher在k8s上完成第一个CI/CD的项目_.NET篇_第3张图片

192.168.21.8 controller1
192.168.21.9 controller2
192.168.21.230 controller3
控制节点修改了后需要执行:
systemctl restart rke2-server.service
systemctl status containerd.service

192.168.21.233 worker1
192.168.21.234 worker2
192.168.21.235 worker3
工作节点修改后需要执行
systemctl restart rke2-agent.service
systemctl status containerd.service

开始第一个CICD项目:
rancher如何配置ci/cd?https://blog.csdn.net/wangxin123wangxin/article/details/122984551
开发环境.net6 +vs2022

新建一个net6 api项目
使用rancher在k8s上完成第一个CI/CD的项目_.NET篇_第4张图片
使用rancher在k8s上完成第一个CI/CD的项目_.NET篇_第5张图片

 使用rancher在k8s上完成第一个CI/CD的项目_.NET篇_第6张图片

 
使用rancher在k8s上完成第一个CI/CD的项目_.NET篇_第7张图片

选中项目右键:添加docker支持使用rancher在k8s上完成第一个CI/CD的项目_.NET篇_第8张图片

 修改Dockerfile文件:使用rancher在k8s上完成第一个CI/CD的项目_.NET篇_第9张图片

 镜像加速代理:默认用微软官方镜像。非常慢。修改成我们私有仓库,但是我们私有仓库需要设一个镜像代理
登录到镜像仓库harbor :192.168.21.4:8081

使用rancher在k8s上完成第一个CI/CD的项目_.NET篇_第10张图片

使用rancher在k8s上完成第一个CI/CD的项目_.NET篇_第11张图片 使用rancher在k8s上完成第一个CI/CD的项目_.NET篇_第12张图片

 使用rancher在k8s上完成第一个CI/CD的项目_.NET篇_第13张图片

新建一个项目:

使用rancher在k8s上完成第一个CI/CD的项目_.NET篇_第14张图片

使用rancher在k8s上完成第一个CI/CD的项目_.NET篇_第15张图片 设置好代理后,拉取我们私有仓库镜像时,如果本地没有,就会走代理去取。拉取过后私有镜像仓库就会缓存。 使用rancher在k8s上完成第一个CI/CD的项目_.NET篇_第16张图片

 在项目里添加一个健康检查控制器:(为啥要监控检查。这个很重要,集群需要知道任何服务,站点的监控状态,就需要站点或者服务暴露出一个可以供集群健康检查的方式)

使用rancher在k8s上完成第一个CI/CD的项目_.NET篇_第17张图片

 使用rancher在k8s上完成第一个CI/CD的项目_.NET篇_第18张图片

 使用rancher在k8s上完成第一个CI/CD的项目_.NET篇_第19张图片

使用rancher在k8s上完成第一个CI/CD的项目_.NET篇_第20张图片

 准备流水线文件:(rancher pipiline要求必须项目有流水线文件。才能进行自动化发布和部署,流水线文件名称必须时:.rancher-pipeline.yml,所在目录和解决方案一个目录)

使用rancher在k8s上完成第一个CI/CD的项目_.NET篇_第21张图片

 准备部署文件:deployment.yaml,所在目录和流水线文件一个目录,也可以不同,需要修改流水线文件中相对路径

apiVersion: v1
kind: Service
metadata:
  name: hellok8s      #服务名称,建议就是项目小写,统一后面很好处理
  namespace: default
  labels:
    app: hellok8s     
    service: hellok8s
spec:
  ports:
  - port: 80
    name: http
  selector:
    app: hellok8s
---
apiVersion: apps/v1
kind: Deployment    #部署名称
metadata:
  name: hellok8s
  namespace: default
  labels:
    app: hellok8s
    version: v1
spec:
  replicas: 1   #副本数
  selector:
    matchLabels:
      app: hellok8s
      version: v1
  template:
    metadata:
      labels:
        app: hellok8s
        version: v1
    spec:
      containers:
      - name: hellok8s
        image: 192.168.21.4:8081/test/hellok8s:${CICD_GIT_BRANCH}-${CICD_GIT_COMMIT}  #镜像,这里也用到了变量
        readinessProbe:
          httpGet:
            path: /health/status   #健康检查,这就是为什么要写健康检查接口
            port: 80
          initialDelaySeconds: 10
          periodSeconds: 5
        ports:
        - containerPort: 80
      imagePullSecrets:
        - name: mydockerhub     #还记得我们创建集群私有仓库吗。这里就是那个名字

 这个文件内容比较多,不懂的可以私信我。

 最后把代码和部署文件都提交上去就可以去发布了。
使用rancher在k8s上完成第一个CI/CD的项目_.NET篇_第22张图片

使用rancher在k8s上完成第一个CI/CD的项目_.NET篇_第23张图片

使用rancher在k8s上完成第一个CI/CD的项目_.NET篇_第24张图片

等待。。。。。(性能好的机器就很快)出错了可以查看错误信息。 
使用rancher在k8s上完成第一个CI/CD的项目_.NET篇_第25张图片

 查看部署结果:

使用rancher在k8s上完成第一个CI/CD的项目_.NET篇_第26张图片

使用rancher在k8s上完成第一个CI/CD的项目_.NET篇_第27张图片

 查看服务:使用rancher在k8s上完成第一个CI/CD的项目_.NET篇_第28张图片

 为什么有个服务? 
service是k8s中的一个重要概念,主要是提供负载均衡和服务自动发现。一个服务可以对应多个pod,pod重新部署或者重启ip都会发生变化,但是可以通过服务,找得到对应的pod,

使用rancher在k8s上完成第一个CI/CD的项目_.NET篇_第29张图片

 负载均衡?下一篇再说。。。。。

CI/CD精髓在于:CI/CD 创建了一个可重复的、可靠的且可预见的发布流程,从而大大缩短了发布周期,使得新增功能和缺陷修复能更早与用户见面。这么做为我们节省下了巨大的金钱成本,还节省了包括建立和维护这样一个发布系统所需要的时间投入。

试想一下,修改代码,git提交,触发部署,环境部署完成。测试介入,开发根本不用关心无休止的打包部署。人工打包,人工部署,操作失误,定位半天原来少部署了个dll?浪费了开发资源。
 

你可能感兴趣的:(#,Rancher应用-.NET篇,ci,.net,docker,ci/cd,k8s)