VPGAME k8s 迁移实战(1): 概述

326 阅读4分钟
知乎:zhuanlan.zhihu.com/p/80429157

作者:Charl

随着容器技术的日趋成熟,公司近期计划将服务迁移至容器环境,通过 Kubernetes 对容器进行调度、编排和管理。并借此机会,对服务进行标准化,优化整个 CI/CD 的流程,提高服务部署的效率。

CI/CD 工具

CI/CD 工具上,我们选择了 Gitlab-CI 。GitLab-CI 就是一套配合GitLab使用的持续集成系统,以完成代码提交之后的安装依赖、编译、单元测试、lint、镜像构建以及发布等工作。


Gitlab-CI 完美地和 gitlab 进行集成,在使用的时候只需要安装配置 gitlab-runner 即可。 gitlab-runner 在向gitlab完成注册后可以提供进行 CI/CD 操作的环境,负责从 gitlab 中拉取代码,根据代码仓库中配置的 gitlab-ci.yml ,执行相应的命令进行 CI/CD 工作。

相比于 jenkins, gitlab-CI 配置简单,只需在工程中配置 gitlab-ci.yml 文件完成 CI/CD 流程的编写,不需要像在 jenkins 里一样配置 webhook 回调地址,也不需要 jenkins 新建这个项目的编译配置。并且个人认为 gitlab 的 CI/CD 过程显示比 jenkins 更加美观。当然 jenkins 依靠它丰富的插件,可以配置很多 gitlab-ci 不存在的功能。按照现在我们的需求, gitlab-ci 简单易用,在功能也满足我们的需求。

服务运行环境

1. 容器环境优点

传统的服务部署方式是在操作系统中安装好相应的应用依赖,然后进行应用服务的安装,这种部署方式的缺点是将服务的程序、配置、依赖库以及生命周期与宿主机操作系统紧密地耦合在一起,对服务的升级、扩缩容、迁移等操作不是十分便利。

容器的部署方式则是以镜像为核心,在代码进行编译构建时,将应用程序与应用程序运行所需要的依赖打包成一个镜像,在部署阶段,通过镜像创建容器实例完成服务的部署和运行。从而实现以应用为中心的管理,容器的隔离性实现了资源的隔离,由于容器不需要依赖宿主机的操作系统环境,所以可以很好地保证开发、测试和生产环境的一致性。此外,由于构建好的镜像是不可变的,并且可以通过tag进行版本控制,所以可以提供可靠、频繁的容器镜像构建和部署,亦可方便及快速进行回滚操作。

2. Kubernetes 平台功能

kubernetes (简称 k8s ),作为一个容器调度、编排和管理平台,可以在物理或虚拟机集群上调度和运行应用程序容器,提供了一个以容器为核心的基础架构。通过 Kubernetes,对容器进行编排和管理,可以

  • 快速、可预测地部署服务
  • 拥有即时扩展服务的能力
  • 滚动升级,完成新功能发布
  • 优化硬件资源,降低成本

3. 阿里云容器服务优势

我们在服务迁移中选用了阿里云的容器服务,它基于原生 Kubernetes 进行适配和增强,简化集群的搭建和扩容等工作,整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳的 Kubernetes 容器化应用运行环境。在便捷性上,可以通过 Web 界面一键完成 Kubernetes 集群的创建、升级以及节点的扩缩容。功能上,在网络、存储、负载均衡和监控方面与阿里云资源集成,在迁移过程中可以最小化减少迁移带来的影响。

此外,在选择集群创建时,我们选择了托管版 Kubernetes,只需创建 Worker 节点,Master 节点由容器服务创建并托管。如此一来,我们在 Worker 节点的规划与资源隔离上还是具备自主性和灵活性的同时不需要运维管理 Kubernetes 集群 Master 节点,可以将更多的精力关注在应用服务上。

迁移过程中的工作

迁移过程中,主要完成了以下工作,后续的文章会对每项工作进行展开说明。

  • Gitlab runner 部署与配置
  • Docker 基础镜像制作
  • 基于 .gitlab-ci.yml 的 CI/CD 流程
  • Deployment 与 Service 配置
  • Kong 部署与配置
  • K8s Prometheus 部署与配置
  • Grafana 展示监控数据