写点什么

Kubernetes 中,微服务自动化发布系统详解

  • 2022 年 4 月 14 日
  • 本文字数:2009 字

    阅读完需:约 7 分钟

==========================================================================


本文所要描述的自动化发布系统主要是利用 GitLab 提供的 GitLab CI 机制,实现当代码发生提交或合并等事件时自动触发预设的 CI/CD 流程。其中 CI 流程主要包括基本的代码编译、构建、打包等阶段,并在完成上述步骤后将打包好的应用 Docker 镜像发布至镜像仓库。


而 CD 阶段则是从镜像仓库拉取应用 Docker 镜像,并根据设置的 CD 流程将应用发布至指定的 Kubernetes 集群。具体系统结构如下图所示:



如上图所示,该自动化发布系统主要由 GitLab、Harbor 镜像仓库及 Kubernetes 集群组成。其中 GitLab 主要承担代码版本的管理,以及 CI/CD 流程定义和触发, Harbor 负责应用 Docker 镜像的存储和分发,而 Kubernetes 集群则是应用容器运行的基础架构环境。


[](()GitLab-CI 自动化发布系统的关键实现


========================================================================================



前面我们描述了基于 GitLab-CI 机制实现自动化发布系统的基本组成,要具体实现这套系统你需要安装部署 GitLab 服务器并配置 GItLab Runner 功能,私有镜像仓库服务(Harbor 或 JFrog)以及 Kubernetes 集群(具体可参见本专栏的其他文章)。


由于 GitLab 服务器是 CI/CD 流程执行的主要承载点,如果你的服务是基于 Maven 构建的 Java 服务,那么还需要在 GitLab 服务器中安装 Maven 客户端,并配置 Maven 私服的地址,以提高构建速度。此外 GitLab 服务器在 CI/CD 流程执行中还会运行 Docker 镜像打包构建,将镜像 push 到 Docker 镜像仓库以及将 Docker 镜像从私有仓库发布至 Kubernetes 集群等逻辑,所以 GitLab 服务器还需要安装 Docker 环境及 kubelet 客户端。


如果环境都 OK,那么我们就可以在 Gitlab 项目根目录代码中创建“.gitlab-ci.yml”文件并定义具体的 CI/CD 流程了。但在具体定义之前,我们需要在 Maven 项目中添加应用 Docker 镜像打包的插件配置及 Dockerfile 文件定义,具体如下:


<plugin>


<groupId>com.spotify</groupId>


<artifactId>dockerfile-maven-plugin</artifactId>


<version>1.4.13</version>


<executions>


<execution>


<id>build-image</id>


<phase>package</phase>


<goals>


<goal>build</goal>


</goals>


</execution>


</executions>


<configuration>


<dockerfile>docker/Dockerfile</dockerfile>


<repository>{app.name}</repository>


<buildArgs>


<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>


</buildArgs>


</configuration>


</plugin>


在项目工程 pom.xml 文件中添加“dockerfile-maven-plugin”插件,该插件是早期“docker-maven-plugin”插件的替代品,支持将 Maven 项目构建打包为 Docker 镜像。上述配置中,针对 Docker 镜像的具体构建方式,是通过在标签中指定 Dockerfile 文件来实现的 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》开源 。具体可在项目工程中创建 docker 目录,并创建 Dockerfile 文件,内容如下:


FROM openjdk:8u191-jre-alpine3.9


ENTRYPOINT ["/usr/bin/java", "-jar", "/app.jar"]


ARG JAR_FILE


ADD ${JAR_FILE} /app.jar


EXPOSE 8080


配置好 Maven 打包插件后,就能支持通过 Maven 打包命令,将应用代码打包成 Docker 镜像了。此时我们在".gitlab-ci.yml"文件中定义具体的 CI/CD 构建 Stages,示例如下:


#环境参数信息


variables:


#Docker 镜像仓库地址 &账号密码信息


DOCKER_REPO_URL: "10.211.55.11:8088"


DOCKER_REPO_USERNAME: admin


DOCKER_REPO_PASSWORD: Harbor12345


#Kubernetes 相关信息配置(空间与服务端口)


K8S_NAMESPACE: "wudimanong"


PORT: "8080"


#定义 CI/CD 阶段


stages:


  • test

  • build

  • push

  • deploy


#执行单元测试阶段


maven-test:


stage: test


script:


  • mvn Java 开源项目【ali1024.coding.net/public/P7/Java/git】 clean test


#代码编译打包镜像阶段


maven-build:


stage: build


script:


  • mvn clean package -DskipTests


#将打包的 Docker 镜像上传至私有镜像仓库


docker-push:


stage: push


script:


#对打包的镜像进行 tag


  • docker tag CI_PROJECT_PATH CI_PROJECT_PATH/{CI_COMMIT_SHA:0:8}


#登录私有镜像仓库


  • docker login DOCKER_REPO_USERNAME -p $DOCKER_REPO_PASSWORD


#上传应用镜像至镜像仓库


  • docker push CI_PROJECT_PATH/{CI_COMMIT_SHA:0:8}

  • docker rmi CI_PROJECT_PATH/{CI_COMMIT_SHA:0:8}

  • docker rmi CI_PROJECT_PATH


#将应用发布至 Kubernetes 测试集群(这里指定为手动确认方式)


deploy-test:


stage: deploy

总结

面试建议是,一定要自信,敢于表达,面试的时候我们对知识的掌握有时候很难面面俱到,把自己的思路说出来,而不是直接告诉面试官自己不懂,这也是可以加分的。


以上就是蚂蚁技术四面和 HR 面试题目,以下最新总结的最全,范围包含最全 MySQL、Spring、Redis、JVM 等最全面试题和答案,仅用于参考



用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
Kubernetes中,微服务自动化发布系统详解_Java_爱好编程进阶_InfoQ写作平台