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

简介: 想起了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


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
10月前
|
Kubernetes Devops 应用服务中间件
基于 Azure DevOps 与阿里云 ACK 构建企业级 CI/CD 流水线
本文介绍如何结合阿里云 ACK 与 Azure DevOps 搭建自动化部署流程,涵盖集群创建、流水线配置、应用部署与公网暴露,助力企业高效落地云原生 DevOps 实践。
1135 2
|
运维 Kubernetes Docker
利用Docker和Kubernetes构建微服务架构
利用Docker和Kubernetes构建微服务架构
|
10月前
|
jenkins Java 持续交付
使用 Jenkins 和 Spring Cloud 自动化微服务部署
随着单体应用逐渐被微服务架构取代,企业对快速发布、可扩展性和高可用性的需求日益增长。Jenkins 作为领先的持续集成与部署工具,结合 Spring Cloud 提供的云原生解决方案,能够有效简化微服务的开发、测试与部署流程。本文介绍了如何通过 Jenkins 实现微服务的自动化构建与部署,并结合 Spring Cloud 的配置管理、服务发现等功能,打造高效、稳定的微服务交付流程。
1102 0
使用 Jenkins 和 Spring Cloud 自动化微服务部署
|
运维 Devops 持续交付
自动化运维的魔法:打造高效DevOps流水线
【10月更文挑战第34天】在数字化时代的浪潮中,DevOps成为企业追求敏捷、高效和稳定的关键。本文将通过一个真实案例,展示如何构建一个高效的DevOps流水线,实现从代码提交到部署的全自动化流程。我们将探讨流水线设计的哲学、工具选择以及面临的挑战,并分享实际的代码示例和操作步骤,帮助读者理解自动化运维的精髓。
456 2
|
Kubernetes Cloud Native 持续交付
容器化、Kubernetes与微服务架构的融合
容器化、Kubernetes与微服务架构的融合
722 82
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
765 60
|
机器学习/深度学习 数据采集 人工智能
容器化机器学习流水线:构建可复用的AI工作流
本文介绍了如何构建容器化的机器学习流水线,以提高AI模型开发和部署的效率与可重复性。首先,我们探讨了机器学习流水线的概念及其优势,包括自动化任务、确保一致性、简化协作和实现CI/CD。接着,详细说明了使用Kubeflow Pipelines在Kubernetes上构建流水线的步骤,涵盖安装、定义流水线、构建组件镜像及上传运行。容器化流水线不仅提升了环境一致性和可移植性,还通过资源隔离和扩展性支持更大规模的数据处理。
|
监控 Kubernetes Cloud Native
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
1012 24
|
监控 Cloud Native Java
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。

相关产品

  • 容器服务Kubernetes版
  • 推荐镜像

    更多