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