使用rancher在k8s上完成第一个CI/CD的项目_.NET篇
基于net项目在rancher和k8s中进行ci/cd
隔了几天没写了。一是忙的不行,二是遇到一个问题一直没解决。我们自己搭建的harbor仓库是没有域名的,也没做nginx转发,所以都是http请求的。构建项目时会在两个地方遇到关于docker访问http仓库不通的问题。
第一个:构建成功push镜像到私有仓库的时候。
第二个:构建成功部署的时候从仓库pull镜像来部署的时候。
这里需要设置一些东西:
首先我们所有含有docker环境的模板镜像都是提前做了配置信任私有仓库的:
vi /etc/docker/daemon.json
rancher流水线文件 :.rancher-pipeline.yml文件需要加一个设置:
设置集群node私有仓库:这里需要注意,工作节点和控制节点都需要设置
vi /etc/rancher/rke2/registries.yaml
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项目
选中项目右键:添加docker支持
修改Dockerfile文件:
镜像加速代理:默认用微软官方镜像。非常慢。修改成我们私有仓库,但是我们私有仓库需要设一个镜像代理
登录到镜像仓库harbor :192.168.21.4:8081
新建一个项目:
设置好代理后,拉取我们私有仓库镜像时,如果本地没有,就会走代理去取。拉取过后私有镜像仓库就会缓存。
在项目里添加一个健康检查控制器:(为啥要监控检查。这个很重要,集群需要知道任何服务,站点的监控状态,就需要站点或者服务暴露出一个可以供集群健康检查的方式)
准备流水线文件:(rancher pipiline要求必须项目有流水线文件。才能进行自动化发布和部署,流水线文件名称必须时:.rancher-pipeline.yml,所在目录和解决方案一个目录)
准备部署文件: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 #还记得我们创建集群私有仓库吗。这里就是那个名字
这个文件内容比较多,不懂的可以私信我。
最后把代码和部署文件都提交上去就可以去发布了。
等待。。。。。(性能好的机器就很快)出错了可以查看错误信息。
查看部署结果:
查看服务:
为什么有个服务?
service是k8s中的一个重要概念,主要是提供负载均衡和服务自动发现。一个服务可以对应多个pod,pod重新部署或者重启ip都会发生变化,但是可以通过服务,找得到对应的pod,
负载均衡?下一篇再说。。。。。
CI/CD精髓在于:CI/CD 创建了一个可重复的、可靠的且可预见的发布流程,从而大大缩短了发布周期,使得新增功能和缺陷修复能更早与用户见面。这么做为我们节省下了巨大的金钱成本,还节省了包括建立和维护这样一个发布系统所需要的时间投入。
试想一下,修改代码,git提交,触发部署,环境部署完成。测试介入,开发根本不用关心无休止的打包部署。人工打包,人工部署,操作失误,定位半天原来少部署了个dll?浪费了开发资源。
更多推荐
所有评论(0)