应用容器化转型系列 - 容器部署进阶

「执笔人」品高股份 cloud native 资深架构师:继承
概述
在上一篇文章《应用容器化转型系列-容器部署的常见形态》中,我们介绍了一些基本的应用部署方式和调度方法,本文将介绍一些更加复杂、但却十分常用的进阶部署方法,包括 Helm 应用编排、Operator 框架、CICD 方法的常见使用方式。
Helm 部署
Helm 是一个流行的 Kubernetes 包管理器,它简化了应用程序的部署和管理过程。通过使用 Helm,可以轻松地定义、安装和升级复杂的应用程序,并管理应用程序所需的依赖关系。

使用 Helm 可以通过创建一个称为 Chart 的软件包来定义应用程序的配置和依赖项。Chart 是一个包含了部署应用所需的所有资源和参数的归档文件。通过使用 Helm 命令行工具,可以轻松地将 Chart 部署到 Kubernetes 集群中。
Helm 目录结构:
• charts/ :设置一些依赖的子包
• templates/:基于 Golang 语言的模板规则编写的部署编排文件
• Chart.yaml:Chart 包的元数据,例如版本、名称、关键字等
• LICENSE (optional):Helm 包的授权说明,可选项
• README.md (optional):用来对本包的介绍
• requirements.yaml (optional):依赖包的列表清单
• values.yaml:非常重要,默认的参数列表
Helm 应用仓库
Helm 包和镜像一样,作为一种制品应该被仓库统一管理和分发,公网上有很多 Helm 的仓库。

有些 Helm 的制作者将 Helm 包托管在 github 上,有一些会维护自己的仓库,例如 bitnami, 企业也可以维护自己的私有仓库,这里分享两个私有 Helm 仓库的方案:
• Harbor: Harbor 作为一款企业级的镜像仓库,不仅提供了镜像的企业级管理,还提供了 Helm 应用包的管理,通过 Harbor 企业可以实现包括项目隔离、权限拦截等企业级的仓库托管需求
• ChartMuseum :一款 golang 编写的 轻量级 Helm 应用托管工具,运行内存只有几十 MB,但是同样具备完整的 Helm 包托管和分发能力
Helm 安装
通过 Helm 实现应用的一键安装非常简单,由于 yaml 都封装在了 Helm 包中,通过 Helm 的安装指令,可以一键完成应用中各类资源的部署请求。

安装远程仓库的应用



Helm 应用的升级

Helm 应用变量

Operator 模式部署
Operator 是一种用于管理和部署复杂应用程序的 Kubernetes 扩展。它通过自定义控制器和自定义资源的方式,将应用程序的操作和管理逻辑集成到 Kubernetes 中。
示例
举例说明一个使用 Operator 部署应用的场景,比如一个使用数据库的应用程序。使用 Operator 可以通过创建一个自定义资源来定义数据库实例的配置和管理规则。Operator 会监听这些自定义资源的状态变化,并根据定义的规则自动执行操作,比如创建、删除、备份等。
在这个示例中,我们可以创建一个自定义资源来定义数据库实例的配置,比如存储大小、备份策略等。然后创建一个 Operator 控制器来监听这个自定义资源,并根据定义的规则自动创建和管理数据库实例。
如下图所示,用户不需要再手动创建 mysql 的 Pod 容器和 PVC 卷,只需要声明相应的 CR,Mysql Operator 就会自动的调度一个 mysql 集群所需的全部资源。

功能简介
Operator 提供了许多功能来简化应用程序的管理和操作:
• 自定义资源(CRD):Operator 使用自定义资源来定义应用程序的配置和管理规则。自定义资源可以根据应用程序的需求来定义,并与 Kubernetes 的 API 进行集成。
• 自动操作:Operator 根据自定义资源的状态变化自动执行操作。可以定义各种操作,如创建、删除、备份、恢复等,以适应不同的应用程序需求。
• 扩展性和灵活性:Operator 的设计具有良好的扩展性和灵活性。可以根据应用程序的需求自定义控制器和操作规则,以实现高度定制化的管理和操作。
Operator 提供了一种强大的方式来管理和操作复杂应用程序。通过使用 Operator,企业可以将应用程序的操作逻辑与 Kubernetes 集成,实现更高级的管理和自动化。
企业使用 Operator 来部署自己的应用时,需要开发相应的 CRD 和控制器,目前社区已经有较为成熟的开发实践了,Kubernetes 官方提供了很多的开源项目链接,例如 kubebuilder:一套基于 CRD 声明来构建 Kubernetes API 的框架,包括了 API、Controller 和 Admission Webhook。kubebuilder 较为成熟,上手简单,社区中使用较为广泛。
CICD 系统辅助部署管理
CICD(持续集成和持续交付)系统是一种自动化软件开发流程的解决方案,可以帮助企业实现高效的应用程序构建、测试和部署。与 Kubernetes 结合使用,可以实现自动化的容器化应用部署和管理。
业界有很多 CICD 的工具都支持对 Kubernetes 的资源进行部署管理,例如 Jenkins、ArgoCD 等。
示例
举例说明一个使用 CICD 系统辅助部署和管理的场景,比如使用 Jenkins 和 Kubernetes 来实现自动化的应用程序部署。通过配置 Jenkins 的 Pipeline,可以定义应用程序的构建、测试和部署过程。使用 Kubernetes 插件,可以直接在 Jenkins 中管理 Kubernetes 集群,并使用 Kubernetes 的 API 进行部署和管理操作。
在这个示例中,我们可以通过 Jenkins Pipeline 来定义应用程序的构建、测试和部署步骤。在部署阶段,可以使用 Kubernetes 插件来与 Kubernetes 集群进行交互,使用 Kubernetes 的 API 来创建、更新和删除应用程序的部署。
功能简介
CICD 系统与 Kubernetes 结合使用,提供了许多功能来简化应用程序的部署和管理:
• 自动化部署流程:通过配置 CICD 系统的 Pipeline,可以定义应用程序的自动化构建、测试和部署过程。可以轻松地将容器化应用部署到 Kubernetes 集群中。
• 版本管理和回滚:CICD 系统可以管理应用程序的版本控制,可以根据需要回滚到先前的版本。在部署过程中,可以使用 Kubernetes 的滚动更新机制来实现无缝的应用程序更新。
• 发布控制:CICD 系统可以实现例如灰度发布、AB 发布这类自动化的发布策略
通过 CICD 系统的辅助,企业可以实现自动化的应用程序构建、测试和部署,提高开发和部署的效率,并确保应用程序的质量和稳定性。
总结
在本文中,我们介绍了 Kubernetes 的进阶部署方式,包括 Helm 部署、Operator 部署和 CICD 系统辅助部署管理。这些方式相对复杂,但是已经在容器生态中得到了广泛使用,也是应用在容器架构中部署的必经之路。
(注:本文提到的一些示例中使用的是私有仓库地址,无法直接使用,仅做行文介绍的辅助演示。)
相关推荐阅读:
应用容器化转型系列-容器部署的常见形态 https://xie.infoq.cn/article/a335d4e82672186b2306a8a56
应用容器化转型-容器镜像怎么做 https://xie.infoq.cn/article/3f60ede0bb8644dcc23c71226
从生态的角度看容器和虚拟化的区别 https://xie.infoq.cn/article/ea5aeac0c5c26c93d64e2624a
版权声明: 本文为 InfoQ 作者【品高云计算】的原创文章。
原文链接:【http://xie.infoq.cn/article/613c1e2f2c5669afb5aaaf6ad】。文章转载请联系作者。
评论