我们知道Kubernetes提供强大功能容器编排能力,通过Kubernetes预置的资源管理器可满足云原生应用90%功能,还有少部分功能还需要定制处理,如:对于对于分布式stateful应用中状态,数据处理,分布式计算处理,已经按需调用资源的特定场景。Kubernetes提供API扩展功能,通过Kubernetes Operators方式提供灵活和弹性的强大功能。它们使复杂的集群和系统能够根据一组模式和原则自动运行。简而言之,Kubernetes Operator 在不更改 Kubernetes 代码的情况下扩展集群行为的模式。它的 API 充当自定义资源控制器。
下面我们谈谈Kubernetes Operators。
1、为什么我们需要Kubernetes Operators ?
Kubernetes 遵循两个基本原则:
- 简单性和灵活性。
- 尽可能多的自动化功能。
这些是使其能够在多样化的环境和应用程序中扩展和使用的主要优势。但是,这些相同的原则也将其初始功能限制为一组通过 API 公开的受限命令和操作。为了做更复杂的事情,必须扩展这个集合,并且必须创建更复杂的自动化,以适应单个应用程序及其特定的操作领域,这就需要Kubernetes Operators。
2、什么是Kubernetes Operators ?
Operators 的理念是2016 年由 CoreOS Linux(后来的 Container Linux)开发团队提出。Kubernetes 项目以一种简单的方式定义了“Operator”:“Operator 是使用自定义资源来管理应用程序及其组件的软件扩展”。换句话说,Kubernetes Operators 使我们能够将应用程序视为单个对象,简化应用管理,而不是原语的集合(例如 Pod、Deployments、Services 或 ConfigMaps)。除此,Kubernetes Operator实际上允许自动任务方式执行,典型的案例: 第 1 天任务(安装、配置等)。 第 2 天任务(重新配置、升级、备份、故障转移、恢复等)集群。 与 Kubernetes 概念和 API 原生集成。同样,对于云原生应用,Kubernetes Operator 通过自定义资源 (CR),很方便实现程序打包、管理和部署应用程序的控制器。 Kubernetes Operator使用控制循环将应用程序的实际状态与 CRD 所需的状态协调起来,在该循环中它可以自动扩展、更新或重启应用程序。实际上,Kubernetes Operator使用Kubernetes 提供了基本命令,来定义更复杂的操作。
3、Kubernetes Operators 应用场景?
Kubernetes Operators几乎可以做所有的事情,Operator自动化,但是一些典型应用场景:
-
按需部署应用程序;
-
备份应用程序状态或从给定备份重新启动应用程序;
-
管理应用程序及其所有依赖项的更新,包括新的配置设置和必要的数据库更改;
-
向不支持 Kubernetes API 的应用程序提供服务。
4、KubernetesOperators 给我们带来收益是什么?
Kubernetes Operator非常有用,因为它们是特定于应用程序的控制器,可以扩展 Kubernetes API 的功能。换句话说,Kubernetes Operators 教会了 Kubernetes 新技巧。但它们提供的具体好处是什么?让我们看一下主要优点:
- Kubernetes Operator将 Kubernetes 功能扩展到有状态应用程序,而不仅仅是无状态应用程序。例如:监控解决方案的 Prometheus Operator,数据库集群的 Postgres Operator,用于管理高可用性。
-
Kubernetes Operator自动调度和自动管理:将手动任务标准化,并创建通用且一致的自动化方法。例如:flink Operator。
-
Kubernetes Operator资源最大化利用:可以很容易地从一个环境转移到另一个环境,从一个项目转移到另一个项目。
5、Kubernetes Operator方案实施
从头开始创建Kubernetes Operator还是比较复杂。它需要编程技能(最好是 GO,但它们可以用任何语言实现作为客户端/服务器通信)以及对 Kubernetes 本机控制器及其操作机制(协调循环)的透彻了解。我们可以借助一些框架降低这种复杂度:
- Operator Framework
- Kubebuilder
- Kubernetes Operators Framework
Kubernetes Operator实现案例:两个官方应用程序,可参照学习实现Kubernetes Operator。
- Artifact HUB – 这是一个CNCF项目,可通过Kubernetes Operator实现。
- Operator Hub – 这是Redhat Operators 项目。