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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 想起了k8s微服务的成熟方案,不仅可以自动重启还可以监控容器运行状态,也可以集成自动化部署,于是找了一些资料将之前接触过的rancher用了起来,首先要做的就是简化安装方式,下面是我的一些过程,同时也可以给大家提供参考。

一、背景


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


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


二、操作步骤


  1. 让Rancher能访问GitLab
  2. 在流水线添加项目
  3. 在仓库添加必备文件
  4. CICD自动部署调试


三、gitlab添加oauth授权


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


1.png


接下来打开gitlab,然后打开设置页面http://xx.xx.xx.xx/admin/applications/4,如下图所示


2.png


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


保存之后,gitlab会生成Application IdSecret,我们将它复制出来,


3.png


复制出来之后,切回rancher系统中,将其一一填写进来,如下图所示


4.png


点击完成后,会有一个弹窗进行授权,授权完成后rancher就可以访问到gitlab仓库了。


5.png


四、在rancher中添加代码仓库


在确保rancher可以访问gitlab仓库之后,在rancher菜单栏点击工具-流水线,将需要自动化部署的项目启用并保存,如下图所示


6.png


保存之后,回到CICD列表中,可以看到两个已经启用的项目,如下图所示


7.png


五、添加部署必备个文件


接下来就可以开始在代码中启用CICD自动化部署了,需要在项目根目录添加三个文件,分别是:


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


5.1 设置发布流程


自动部署首先需要确定部署流程,主要用到文件.rancher-pipeline.yml,这里我是golang 的项目,使用了三个流程。


首先编译项目;接着构建镜像推送到rancher的镜像仓库中,最后使用容器编排文件发布项目,配置代码核心关注点如下图红色区域所示


8.png


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的同学可能会比较陌生,这里我将每一行都写了注释,并将需要修改的地方用红色标记圈出来了,如下图所示


9.png


参考配置如下所示


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流水线中,就看到有一个任务在执行自动部署流程,如下图所示


10.png


执行完成周,回到集群的工作负载当中,就可以看到已经有一个服务自动化部署到K8s中


11.png


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
22天前
|
Kubernetes 持续交付 开发者
探索并实践Kubernetes集群管理与自动化部署
探索并实践Kubernetes集群管理与自动化部署
55 4
|
2天前
|
运维 jenkins 持续交付
自动化运维之路:构建高效CI/CD流水线
在软件开发的快节奏中,持续集成和持续部署(CI/CD)流水线是提升效率、保障质量的关键。本文将引导你理解CI/CD流水线的重要性,并手把手教你如何搭建一个高效的自动化运维系统。通过实际代码示例,我们将一步步实现从代码提交到自动测试、部署的全流程自动化,确保软件交付过程既快速又可靠。
|
1天前
|
Kubernetes Docker 容器
容器运行时Containerd k8s
容器运行时Containerd k8s
13 2
|
14天前
|
Kubernetes API Docker
跟着iLogtail学习容器运行时与K8s下日志采集方案
iLogtail 作为开源可观测数据采集器,对 Kubernetes 环境下日志采集有着非常好的支持,本文跟随 iLogtail 的脚步,了解容器运行时与 K8s 下日志数据采集原理。
|
3天前
|
Kubernetes 应用服务中间件 nginx
k8s学习--k8s集群使用容器镜像仓库Harbor
本文介绍了在CentOS 7.9环境下部署Harbor容器镜像仓库,并将其集成到Kubernetes集群的过程。环境中包含一台Master节点和两台Node节点,均已部署好K8s集群。首先详细讲述了在Harbor节点上安装Docker和docker-compose,接着通过下载Harbor离线安装包并配置相关参数完成Harbor的部署。随后介绍了如何通过secret和serviceaccount两种方式让Kubernetes集群使用Harbor作为镜像仓库,包括创建secret、配置节点、上传镜像以及创建Pod等步骤。最后验证了Pod能否成功从Harbor拉取镜像运行。
|
27天前
|
运维 Devops jenkins
自动化运维:打造高效DevOps流水线
【8月更文挑战第44天】本文将通过深入浅出的方式,带你构建一个自动化的DevOps流水线,提升开发和部署效率。从基础概念到实际操作,我们一步步剖析如何实现代码提交、自动测试、构建、部署的全过程自动化。你将学会使用Jenkins、Git、Docker等工具,并结合Shell脚本编写,完成一个完整的自动化流程。文章末尾附有完整的示例代码,助你快速上手实践。
|
2月前
|
运维 Kubernetes 监控
自动化运维:使用Python脚本实现系统监控云原生技术实践:Kubernetes在现代应用部署中的角色
【8月更文挑战第31天】在现代IT运维管理中,自动化已成为提高效率和准确性的关键。本文将通过一个Python脚本示例,展示如何实现对服务器的自动监控,包括CPU使用率、内存占用以及磁盘空间的实时监测。这不仅帮助运维人员快速定位问题,也减轻了日常监控工作的负担。文章以通俗易懂的语言,逐步引导读者理解并实践自动化监控的设置过程。 【8月更文挑战第31天】本文旨在探索云原生技术的核心—Kubernetes,如何革新现代应用的开发与部署。通过浅显易懂的语言和实例,我们将一窥Kubernetes的强大功能及其对DevOps文化的影响。你将学会如何利用Kubernetes进行容器编排,以及它如何帮助你的
|
2月前
|
Java Spring 传感器
AI 浪潮席卷,Spring 框架配置文件管理与环境感知,为软件稳定护航,你还在等什么?
【8月更文挑战第31天】在软件开发中,配置文件管理至关重要。Spring框架提供强大支持,便于应对不同环境需求,如电商项目的开发、测试与生产环境。它支持多种格式的配置文件(如properties和YAML),并能根据环境加载不同配置,如数据库连接信息。通过`@Profile`注解可指定特定环境下的配置生效,同时支持通过命令行参数或环境变量覆盖配置值,确保应用稳定性和可靠性。
46 0
|
2月前
|
前端开发 Java UED
JSF遇上Material Design:一场视觉革命,如何让传统Java Web应用焕发新生?
【8月更文挑战第31天】在当前的Web开发领域,用户体验和界面美观性至关重要。Google推出的Material Design凭借其独特的动画、鲜艳的颜色和简洁的布局广受好评。将其应用于JavaServer Faces(JSF)项目,能显著提升应用的现代感和用户交互体验。本文介绍如何通过PrimeFaces等组件库在JSF应用中实现Material Design风格,包括添加依赖、使用组件及响应式布局等步骤,为用户提供美观且功能丰富的界面。
36 0
|
2月前
|
前端开发 Devops 持续交付
【前端自动化新高度】Angular与Azure DevOps完美结合:从零构建持续集成与持续部署的全自动流水线,提升开发效率与软件交付质量!
【8月更文挑战第31天】Angular作为领先的前端框架,以强大功能和灵活性深受开发者喜爱。Azure DevOps提供一站式DevOps服务,涵盖源码管理、持续集成(CI)及持续部署(CD)。本文将指导你如何在Azure DevOps中搭建Angular项目的CI/CD流程,并通过具体示例代码展示整个过程。首先,我们将创建一个Angular项目并初始化Git仓库;然后,在Azure DevOps中设置CI流水线,定义YAML文件以自动化构建和部署流程。最终实现每次提交代码后自动构建并部署至Azure Web App,极大提升了开发效率和软件交付速度,使团队更专注于创新。
22 0

相关产品

  • 容器服务Kubernetes版