使用Puppet管理Kubernetes Pod,服务和复制控制器

今天的来宾帖子由IT自动化领导者Puppet Labs的高级软件工程师Gareth Rushgrove撰写。 Gareth向我们介绍了一个新的Puppet模块,该模块可帮助管理Kubernetes中的资源。 

熟悉的人 木偶 可能已经用它来管理主机上的文件,程序包和用户。但是Puppet首先是配置管理工具,并且配置管理是比仅管理主机级资源更广泛的学科。对配置管理的一个很好的定义是,它旨在解决四个相关问题:标识,控制,状态记帐以及验证和审计。这些问题存在于任何复杂系统的运行中,并且随着 木偶Kubernetes模块 我们开始研究如何为Kubernetes解决这些问题。

木偶Kubernetes模块

木偶 Kubernetes模块当前假设您已经有一个Kubernetes集群 启动并运行;它的重点是管理Kubernetes中的资源,例如Pod,Replication Controllers和Services,而不是(尚未)管理基础kubelet或etcd服务。这是一段简短的代码,描述了Puppet DSL中的Pod。

kubernetes_pod { 'sample-pod':
  ensure => present,
  metadata => {
    namespace => 'default',
  },
  spec => {
    containers => [{
      name => 'container-name',
      image => 'nginx',
    }]
  },

}

如果您熟悉YAML文件格式,则可能会立即识别出该结构。该接口故意相同,以辅助不同格式之间的转换-实际上,支持该格式的代码是根据Kubernetes API Swagger定义自动生成的。假设我们将其保存为pod.pp,运行以上代码非常简单:

puppet apply pod.pp

身份验证使用标准的kubectl配置文件。你可以找到完整的 模块自述文件中的安装说明.

Kubernetes有多种资源,从Pod和Services到Replication Controllers和Service Accounts。您可以在以下位置看到管理这些资源的模块的示例 木偶中的Kubernetes留言簿示例 发布。这演示了如何将规范的hello-world示例转换为使用Puppet代码。

但是,为此使用Puppet的主要优点之一是,您可以为Kubernetes管理的应用程序创建自己的更高级且特定于业务的接口。例如,对于留言簿,您可以创建类似以下内容的内容:

guestbook { 'myguestbook':
  redis_slave_replicas => 2,
  frontend_replicas => 3,
  redis_master_image => 'redis',
  redis_slave_image => 'gcr.io/google_samples/gb-redisslave:v1',
  frontend_image => 'gcr.io/google_samples/gb-frontend:v3',     
}

您可以在Puppet博客文章中阅读有关使用Puppet定义的类型的更多信息,并查看更多代码示例, 在Puppet中为Kubernetes构建自己的抽象.

结论

使用Puppet而不是仅使用标准YAML文件和kubectl的优点是:

  • 可以创建自己的抽象来减少重复并制作更高级别的用户界面,例如上面的留言簿示例。 
  • 使用Puppet的开发工具来验证代码和编写单元测试。 
  • 与其他工具(例如Puppet Server)集成以确保代码中的模型与集群状态匹配,并且与PuppetDB集成以存储报告和跟踪更改。
  • 可以针对Kubernetes API重复运行相同代码的能力,以检测任何更改或补救配置漂移。 

还值得注意的是,大多数大型组织将拥有非常异构的环境,并运行各种软件和操作系统。拥有统一这些离散系统的单一工具链可以使采用Kubernetes等新技术变得更加容易。

可以肯定地说,Kubernetes提供了一套出色的原语,可用于构建云原生系统。借助Puppet,您可以解决在生产环境中运行任何复杂系统所带来的一些运营和配置管理问题。 让我们知道 试用该模块的想法,以及将来希望获得的支持。

 -Puppet Labs高级软件工程师Gareth Rushgrove