最近公司上线办公网零信任安全网关系统,由我负责部署上线,在部署的时候同时也在想如何保障稳定性,以及后续部署的简便性;python
想起了k8s微服务的成熟方案,不只能够自动重启还能够监控容器运行状态,也能够集成自动化部署,因而找了一些资料将以前接触过的rancher用了起来,首先要作的就是简化安装方式,下面是个人一些过程,同时也能够给你们提供参考。git
在进入集群的命名空间中,能够在菜单栏点击工具-流水线,而后就能够看到以下图所示的界面
接下来打开gitlab,而后打开设置页面http://xx.xx.xx.xx/admin/applications/4
,以下图所示golang
在上图中将所需信息填写进去,而后点击保存docker
保存以后,gitlab会生成Application Id
和Secret
,咱们将它复制出来,shell
复制出来以后,切回rancher系统中,将其一一填写进来,以下图所示api
点击完成后,会有一个弹窗进行受权,受权完成后rancher就能够访问到gitlab仓库了。安全
在确保rancher能够访问gitlab仓库以后,在rancher菜单栏点击工具-流水线,将须要自动化部署的项目启用并保存,以下图所示微信
保存以后,回到CICD列表中,能够看到两个已经启用的项目,以下图所示app
接下来就能够开始在代码中启用CICD自动化部署了,须要在项目根目录添加三个文件,分别是:微服务
自动部署首先须要肯定部署流程,主要用到文件.rancher-pipeline.yml
,这里我是golang 的项目,使用了三个流程。
首先编译项目;接着构建镜像推送到rancher的镜像仓库中,最后使用容器编排文件发布项目,配置代码核心关注点以下图红色区域所示
stages: - name: Build steps: - runScriptConfig: image: golang:1.16 shellScript: |- go env -w GO111MODULE=on && go env -w GOPROXY=https://goproxy.cn,direct go mod tidy pwd go build -o ./bin/funfecenter - name: Publish steps: - publishImageConfig: dockerfilePath: ./Dockerfile buildContext: . tag: funfecenter:${CICD_EXECUTION_SEQUENCE} - name: Deploy steps: - applyYamlConfig: path: ./deployment.yaml timeout: 60 notification: {}
在上一步中已经将项目编译好,接着就须要将编译好的可执行文件放入到镜像中,这里起做用的主要是Dockerfile
文件,配置代码比较简单,以下所示
FROM golang:1.16 EXPOSE 1333 COPY ./bin/funfecenter /data/funfecenter/center COPY ./init/ / COPY script.py /root/ RUN apt update -y RUN apt install -y python3 #CMD ["python3","/root/script.py"] CMD ["/data/funfecenter/center"]
上一步已经将须要运行的镜像推送到rancher的镜像仓库以后,接下来就须要构建pod来运行容器,这里发挥做用的主要是deployment.yaml
文件。
这个文件若是没有接触过k8s的同窗可能会比较陌生,这里我将每一行都写了注释,并将须要修改的地方用红色标记圈出来了,以下图所示
参考配置以下所示
kind: Service # 指定建立资源的角色/类型 apiVersion: v1 # 指定api版本,此值必须在kubectl api-versions中 metadata: # 资源的元数据/属性 name: funfe-center # 资源的名字,在同一个namespace中必须惟一 spec: # 资源规范字段 selector: # 选择器 app: center type: NodePort # 端口类型 ports: - protocol: TCP # 协议 port: 80 # service 端口 targetPort: 80 # 容器暴露的端口 --- apiVersion: apps/v1 # 指定api版本,此值必须在kubectl api-versions中 kind: Deployment # 指定建立资源的角色/类型 metadata: # 资源的元数据/属性 name: funfe-center # 资源的名字,在同一个namespace中必须惟一 namespace: default # 资源的名字,在同一个namespace中必须惟一 spec: # 资源规范字段 replicas: 1 # 声明副本数目 selector: # 选择器 matchLabels: # 匹配标签 app: center template: # 模版 metadata: # 资源的元数据/属性 labels: # 设定资源的标签 app: center spec: # 资源规范字段 imagePullSecrets: # 镜像仓库拉取密钥 - name: pipeline-docker-registry containers: - name: funfe # 容器的名字 image: ${CICD_IMAGE}:${CICD_EXECUTION_SEQUENCE} # 容器使用的镜像地址 ports: - containerPort: 80 # 容器开发对外的端口
修改代码后会自动执行编译、推送到镜像库、拉取代码部署
如今我修改代码仓库的代码,回到rancher流水线中,就看到有一个任务在执行自动部署流程,以下图所示
执行完成周,回到集群的工做负载当中,就能够看到已经有一个服务自动化部署到K8s中
日期:2021-03-04
做者:汤青松
微信:songboy8888