Ansible 在Kubernetes Operator中的使用

1,594 阅读3分钟
原文链接: mp.weixin.qq.com

新的Operator SDK可以轻松创建Kubernetes控制器,以部署和管理群集中的服务或应用程序。

多年来,Ansible一直是基础设施自动化的首选。随着Kubernetes的采用量激增,Ansible继续在新兴的容器编排生态系统中大放异彩。

Ansible自适合Kubernetes工作流程,使用YAML描述理想状态。包括Automation Broker在内的多个项目正在使Ansible适应特定API的使用。本文将重点介绍一种新技术,该技术是由Ansible核心团队和Automation Broker的开发人员共同创建的,它使Ansible以最小的努力创建Operator。

Operator是什么?

Operator是一个Kubernetes控制器,用于部署和管理集群中的服务或应用程序。它可以自动化人类操作知识和最佳实践,以保持服务的运行和健康。输入以自定义资源的形式接收。让我们以Memcached Operator为例进行讨论。

Memcached Operator可以部署为集群中运行的服务,它包含一个名为Memcached的自定义资源定义(CRD)。最终用户创建该自定义资源的实例,以描述Memcached Deployment的外观。以下示例请求使用三个Pod进行部署。

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

Operator的工作称为调和,持续确保“规范”中指定的内容与实际状态相匹配。此示例Operator将Pod管理委派给Deployment控制器。因此,虽然它不直接创建或删除Pod,但如果更改大小,则Operator的协调循环可确保将新值应用于它创建的Deployment资源。

成熟的Operator可以部署,升级,备份,修复,扩展和重新配置其管理的应用程序。如你所见,运Operator不仅提供了一种仅使用本机Kubernetes API部署任意服务的简单方法; 它可以实现完整的第二天(部署后,例如更新,备份等)管理,仅受你可以编码的内容的限制。

创建Operator

Operator SDK使你可以轻松入门。它规定了新Operator的框架,其中许多复杂的部件已经处理完毕。你可以专注于定义自定义资源并在Go中编码协调逻辑。SDK可以为你节省大量时间和持续的维护负担,你最终仍将拥有一个实质性的软件项目。

Ansible最近被引入到Operator SDK中,作为一种更简单的制作运算符的方法,无需编码。 要创建Operator,你只需:

  • 以YAML的形式创建CRD

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

这是YAML一直以来的方式,对Kubernetes用户来说是一种熟悉的体验。

如何工作

有一个预先存在的Ansible Operator基本容器映像,包括Ansible,ansible-runner和Operator的可执行服务。SDK有助于在顶部构建一个层,用于添加一个或多个CRD,并将每个CRD与Ansible角色或playbook相关联。

当它运行时,Operator使用Kubernetes功能“监视”对所定义类型的任何资源的更改。收到此类通知后,它会协调更改的资源。Operator运行相应的role或playbook,有关资源的信息将作为extra-vars传递给Ansible。

在Kubernetes中使用Ansible

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

试试看

如果你需要构建一个Kubernetes Operator,使用Ansible这样做可以节省时间和复杂性。要了解更多信息,请阅读Operator SDK文档并完成基于Ansible Operator入门指南。 

原文链接:

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