多年来,Ansible一直是基础架构自动化的首选。 随着Kubernetes的采用猛增,Ansible在新兴的容器编排生态系统中继续发光。
Ansible使用YAML描述所需的世界状态,自然适合Kubernetes工作流程。 包括Automation Broker在内的多个项目正在使Ansible适应在特定的API之后使用。 本文将重点介绍由Ansible核心团队和Automation Broker开发人员共同努力创建的一种新技术,该技术使用Ansible轻松创建操作员。
什么是运算符?
Operator是Kubernetes控制器,用于在集群中部署和管理服务或应用程序。 它使人类操作知识和最佳实践自动化,以保持服务的运行和健康。 输入以定制资源的形式接收。 让我们以Memcached运算符为例来进行介绍。可以将Memcached Operator部署为在群集中运行的服务,并且它包括名为Memcached的资源的自定义资源定义(CRD)。 最终用户创建该自定义资源的实例,以描述Memcached部署的外观。 以下示例请求具有三个Pod的Deployment。
apiVersion: "cache.example.com/v1alpha1"
kind: "Memcached"
metadata:
name: "example-memcached"
spec:
size: 3
运营商的工作称为对帐-不断确保“规格”中指定的内容与实际情况相符。 此示例操作员将Pod管理委托给Deployment控制器。 因此,尽管它不直接创建或删除Pod,但如果您更改大小,则操作员的对帐循环可确保将新值应用于它创建的Deployment资源。
成熟的操作员可以部署,升级,备份,修复,扩展和重新配置其管理的应用程序。 如您所见,Operator不仅提供了一种仅使用本机Kubernetes API部署任意服务的简单方法; 它启用了整天的第二天(部署后,例如更新,备份等)管理,仅受您可以编写代码的限制。
创建一个运算符
Operator SDK易于上手。 它奠定了新操作员的框架,其中已经处理了许多复杂的部分。 您可以集中精力定义自定义资源,并在Go中编码对帐逻辑。 SDK可以节省大量时间和持续的维护负担,但您最终仍将拥有大量软件项目。
Ansible最近被引入到Operator SDK中,这是一种更简单的制造Operator的方式,不需要编码。 要创建操作员,您只需:
- 以YAML形式创建CRD
- 通过创建Ansible角色或剧本来定义对帐应执行的操作
一直以来都是YAML-Kubernetes用户熟悉的体验。
它是如何工作的?
有一个预先存在的Ansible Operator基本容器映像,其中包括Ansible,ansible -runner和该Operator的可执行服务。 SDK有助于在其上构建一层,以添加一个或多个CRD,并将每个CRD与Ansible角色或剧本相关联。
运行时,操作员将使用Kubernetes功能“监视”已定义类型的任何资源的更改。 收到此类通知后,它会协调已更改的资源。 操作员运行相应的角色或剧本,有关资源的信息作为extra-vars传递给Ansible。
在Kubernetes中使用Ansible
经过几次迭代,Ansible社区产生了一个非常易于使用的模块,用于与Kubernetes一起工作。 特别是如果您对Ansible 2.6之前的Kubernetes模块有任何经验,那么您可以自己看一下k8s模块 。 创建,检索和更新资源是任何Kubernetes用户都熟悉的自然体验。 它使创建操作员变得容易得多。
试试看
如果您需要构建Kubernetes Operator,使用Ansible可以节省时间和复杂性。 要了解更多信息,请转到Operator SDK文档,并阅读基于Ansible的Operators 入门指南 。 然后加入我们到Operator Framework邮件列表中 ,让我们知道您的想法。
Michael Hrivnak将于10月29日至31日在美国田纳西州纳什维尔举行的LISA18 上展示 Kubernetes 上的自动化多服务部署 。
翻译自: https://opensource.com/article/18/10/ansible-operators-kubernetes