一、背景

最近公司上线办公网零信赖平安网关零碎,由我负责部署上线,在部署的时候同时也在想如何保障稳定性,以及后续部署的简便性;

想起了k8s微服务的成熟计划,不仅能够主动重启还能够监控容器运行状态,也能够集成自动化部署,于是找了一些材料将之前接触过的rancher用了起来,首先要做的就是简化装置形式,上面是我的一些过程,同时也能够给大家提供参考。

二、操作步骤

  1. 让Rancher能拜访GitLab
  2. 在流水线增加我的项目
  3. 在仓库增加必备文件
  4. CICD主动部署调试

三、gitlab增加oauth受权

在进入集群的命名空间中,能够在菜单栏点击工具-流水线,而后就能够看到如下图所示的界面

接下来关上gitlab,而后关上设置页面http://xx.xx.xx.xx/admin/applications/4,如下图所示

在上图中将所需信息填写进去,而后点击保留

保留之后,gitlab会生成Application IdSecret,咱们将它复制进去,

复制进去之后,切回rancher零碎中,将其一一填写进来,如下图所示

点击实现后,会有一个弹窗进行受权,受权实现后rancher就能够拜访到gitlab仓库了。

四、在rancher中增加代码仓库

在确保rancher能够拜访gitlab仓库之后,在rancher菜单栏点击工具-流水线,将须要自动化部署的我的项目启用并保留,如下图所示

保留之后,回到CICD列表中,能够看到两个曾经启用的我的项目,如下图所示

五、增加部署必备个文件

接下来就能够开始在代码中启用CICD自动化部署了,须要在我的项目根目录增加三个文件,别离是:

  1. .rancher-pipeline.yml
  2. Dockerfile
  3. deployment.yaml

5.1 设置公布流程

主动部署首先须要确定部署流程,次要用到文件.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.yamltimeout: 60notification: {}

5.2 构建镜像

在上一步中曾经将我的项目编译好,接着就须要将编译好的可执行文件放入到镜像中,这里起作用的次要是Dockerfile文件,配置代码比较简单,如下所示

FROM golang:1.16EXPOSE 1333COPY ./bin/funfecenter /data/funfecenter/centerCOPY ./init/ /COPY script.py /root/RUN  apt update -yRUN  apt install -y python3#CMD ["python3","/root/script.py"]CMD ["/data/funfecenter/center"]

5.3 容器编排

上一步曾经将须要运行的镜像推送到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