• K8s微服务自动化部署容器(Rancher流水线)


    一、背景

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

    想起了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.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

    转自https://www.zhihu.com/column/c_1017361246676520960

     

     

  • 相关阅读:
    在静态工具类中需要注入mapper
    springboot整合mybatis之用外置服务器启动项目(二)
    基于java 的websocket的聊天功能,一开始初始化websocket,执行打开连接之后就直接关闭连接了。
    Lwip的相关资料
    轻量级的应用服务器基础框架
    libevent和基于libevent的网络编程
    protobuf的使用
    module graceful-fs for npm
    Filebeat命令参考
    Filebeat原理与简单配置入门
  • 原文地址:https://www.cnblogs.com/zcyy/p/15662189.html
Copyright © 2020-2023  润新知