1.1.4 云原生应用开发与管理
虽然 Kubernetes 提供了 Pod、Deployment、Service、Configmap 等资源来抽象应用特征,并且通过编写 Yaml 文件来编排应用,但是这样的方式仍然不太可行,特别是在编写复杂应用时。同时,从应用生命周期来看,kubectl apply -f myapp.yaml 只是其中一个步骤,在实际的生产环境中,还需要进行应用的生命周期管理,例如,对应用进行升降级、版本管理、扩缩容、运维管理、配置管理等。
2015 年,第一个尝试解决这些问题的管理工具 Helm 诞生。它受到 Yum(Yellow dog Updater,Modified)、APT(Advanced Packaging Tool)、Homebrew 等包管理工具的影响,通过将应用的部署模板压缩成包(Chart),并标明版本号来管理、分发应用。它支持部署、更新、回滚、版本管理等功能,通过构建 Helm Repository,允许查找、分享 Helm Chart。
Helm is the best way to find, and use software built for Kubernetes(摘自 Helm 官网)。
随着 Kubernetes 的应用越来越广泛,很多复杂的有状态应用也逐渐使用 Kubernetes部署,这不是 Helm 所擅长的。2016 年,CoreOS 公司(2018 年被 Red Hat 收购)推出了Operator。它的核心理念是将日常的运维工作通过软件的方式内置到应用中,以满足业务应用的管理、监控、运维等需求。Red Hat Openshift 官网这样描述 Operator:
Automate the creation, configuration, and management of instances of Kubernetesnative applications。
例如,Operator 可以将以下工作实现自动化。
(1)按需部署应用。
(2)备份、恢复应用的状态和数据。
(3)有状态应用的升级,例如包含数据库 Schema 变更的升级。
(4)当应用不支持服务发现时,Operator 可以将 Kubernetes Service 暴露给应用。
(5)在高可用测试中,Operator 可以模拟 Kubernetes 集群故障。
(6)当分布式应用内部未实现选举功能时,Operator 可以帮助应用实现选举。
2019 年初,Red Hat 联合 AWS、Google、Microsoft 等公司推出了 OperatorHub.io,类似于 DockerHub,供开发者和用户分享、使用 Operator(如图 1-8 所示)。目前已经有180 多款 Operator,涉及众多方面,如数据库、大数据、人工智能、监控、日志、网络、安全。
在 GitHub 上,也有大量优秀的 Operator 开源方案,可以说,Operator 已经成为分布式应用在 Kubernetes 集群上部署的首选方案。
图 1-8 OperatorHub.io
本书将对 Operator 进行深度分析和实践,帮助大家快速掌握使用 Operator 编写Kubernetes-native 应用的方法。