一、背景
最近公司上线办公网零信赖平安网关零碎,由我负责部署上线,在部署的时候同时也在想如何保障稳定性,以及后续部署的简便性;
想起了 k8s 微服务的成熟计划,不仅能够主动重启还能够监控容器运行状态,也能够集成自动化部署,于是找了一些材料将之前接触过的 rancher 用了起来,首先要做的就是简化装置形式,上面是我的一些过程,同时也能够给大家提供参考。
二、操作步骤
- 让 Rancher 能拜访 GitLab
- 在流水线增加我的项目
- 在仓库增加必备文件
- CICD 主动部署调试
三、gitlab 增加 oauth 受权
在进入集群的命名空间中,能够在菜单栏点击工具 - 流水线,而后就能够看到如下图所示的界面
接下来关上 gitlab,而后关上设置页面http://xx.xx.xx.xx/admin/applications/4
,如下图所示
在上图中将所需信息填写进去,而后点击保留
保留之后,gitlab 会生成 Application Id
和Secret
, 咱们将它复制进去,
复制进去之后,切回 rancher 零碎中,将其一一填写进来,如下图所示
点击实现后,会有一个弹窗进行受权,受权实现后 rancher 就能够拜访到 gitlab 仓库了。
四、在 rancher 中增加代码仓库
在确保 rancher 能够拜访 gitlab 仓库之后,在 rancher 菜单栏点击工具 - 流水线,将须要自动化部署的我的项目启用并保留,如下图所示
保留之后,回到 CICD 列表中,能够看到两个曾经启用的我的项目,如下图所示
五、增加部署必备个文件
接下来就能够开始在代码中启用 CICD 自动化部署了,须要在我的项目根目录增加三个文件,别离是:
- .rancher-pipeline.yml
- Dockerfile
- 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.yaml
timeout: 60
notification: {}
5.2 构建镜像
在上一步中曾经将我的项目编译好,接着就须要将编译好的可执行文件放入到镜像中,这里起作用的次要是 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"]
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