Ansible Operator in Kubernetes简介

本文将重点介绍一种新技术,该技术是由Ansible核心团队和Automation Broker的开发人员共同创建的,它利用Ansible以最简便的方式去创建Operator。

背景介绍

Operator-SDK使在集群中创建k8s控制器来部署和管理服务或者应用变得简单。多年来,Ansible一直是基础架构自动化的首选。随着k8s的突起,Ansible继续在容器编排领域绽放异彩。Ansible天生契合k8s工作流,使用YAML来描述所期望的状态。包含Automation Broker在内的多个项目正在使用Ansible。

Operator 是什么?

Operator 是一个k8s控制器用来部署和管理集群中的服务或者应用程序。它模拟人类的操作,是保持服务良好运行的最佳实践。它以自定义资源的形式输入。让我们使用Memcached Operator作为一个示例。

Memcached Operator可以部署为集群中运行的一个服务。它包含一个CRD, 定义了一种名为Memcached的资源。终端用户创建该种自定义资源的实例来描述Memcached "Deployment". 以下示例中的"Deployment"含有三个Pod.

apiVersion: "cache.example.com/v1alpha1"
kind: "Memcached"
metadata:
  name: "example-memcached"
spec:
  size: 3

Operator的职责称为协调--持续地确保“世界”的真实状态和在"spec"中指定的状态一致。此示例中,Operator把Pod的管理交给"Deployment"控制器。因此,虽然它并不直接创建或者删除Pod,但是如果你更改size,Operator的协调程序将确保Pod的数量和它新创建的"Deployment"中的数量一致。

一款成熟的Operator可以部署,升级,备份,修复,扩容缩容,重新配置它所管理的应用程序。如您所见,Operator不仅提供一种简单的方式来部署特定的服务通过仅使用原生k8s APIs;它还可以实现完整的第二天(部署后,例如更新,备份等)管理,仅受您可以编码的内容的限制。

创建 Operator

Operator SDK 使其变得容易着手。它制定了新Operator的骨架,其中许多复杂的组件已经处理好。你可以专注于定义你的自定义资源,使用Go编写你的协调逻辑。SDK 帮你节省了大量的时间以及维护成本,而你也获得了一个实质性的软件项目。

Ansible作为一种无需编码,更简单的创建Operator的方式,是最近引入到Operator-SDK的。要创建一个Operator, 你仅仅需要:

  • 以YAML的形式创建CRD

  • 通过创建Ansible role或者playbook来定义协调应该执行的操作

全程使用YAML - 对Kubernetes用户来说是一种熟悉的体验。

它是如何工作的?

这里有一个预先存在的Ansible Operator基础镜像,它含有Ansible, Ansible-runner, 和Operator的可执行服务。Operator-SDK在它之上添加了一个新层,该层包含一个或多个CRD,并且每一个都与Ansible role 或者 playbook相关联。

当它运行时,Operator使用k8s的功能去监控类型定义的任意资源的变化。一旦收到诸如一个通知,它将协调资源作出相应的改变。Operator运行相应的role或者playbook, 资源信息作为extra-var 传递给Ansible.

在Kubernetes中使用Ansible

经过几次迭代,Ansible社区已经为Kubernetes提供了一个非常易于使用的模块。尤其是,如果您对之前的Ansible 2.6的Kubernetes模块有任何经验,那么您应该自己去看看k8s module。创建,检索和更新资源是一种很自然的感受,任何Kubernetes用户都会对此感到熟悉。它使创建Operator变得更加容易。

试一试

如果您需要构建一个Kubernetes Operator,使用Ansible可以节省时间和降低复杂度。要了解更多信息,请访问Operator SDK文档,浏览基于Ansible Operator的入门指南。然后,加入我们的Operator Framework邮件列表,让我们知道您的想法。

原文链接

https://opensource.com/article/18/10/ansible-operators-kubernetes

最后更新于