使用Puppet管理Kubernetes配置
HassanTJHM
9年前
来自: http://dockone.io/article/1019
Kubernetes是Google开源的容器集群管理系统,其提供应用部署、维护、 扩展机制等功能,利用Kubernetes能方便地管理跨机器运行容器化的应用。通过新的Puppet模块,可以用类Puppet语言为Kubernetes管理Pods、RC、Services等。
Kubernetes入门
KubeCon大会上演示了Kubernetes取得的成果,它是Google开源的Linux容器集群管理工具,为企业管理其内部基础设施而生。Kubernetes旨在通过引入一系列核心基本要素和API来简化对复杂分布式系统的管理。诸如eBay、SoundCloud和RedHat等公司都在他们构建应用、系统和基础设施时采纳这种新的方式。现在通过新的Kubernetes的Puppet模块,我们现在可以使用Puppet来管理Kubernetes的资源,诸如RCs、Pods和Services这些概念。
配置管理:旁白
当谈论到Puppet和Kubernetes时,可以将之简化为更高层次的话题——配置管理。有些人把配置管理(像Puppet这样的工具)当作管理“host密集”型资源的一种方式,(这里说的host密集型资源指文件、服务、包、用户和用户组)。Kubernetes抽象出高层次的基本要素,如Pods和RCs,旨在简化对分布式可伸缩系统的管理。得益于这些新的基本要素,也许我们就不再需要配置管理了。但是配置管理真的是一个非常广泛的学科,可以追溯到二十世纪五十年代。我最喜欢的对配置管理系统能力的描述是来自于Military Handbook配置管理指南MIL-HDBK-61B,其描述是:
- 身份识别
- 控制
- 状态统计
- 校验和审计
与这些功能相关的问题在系统中是普遍存在的,在Kubernetes中同样存在,并且目前只有部分能通过原生工具来解决———像管理配置漂移问题、使用一个单独的、拥有良好精度的变更控制机制和在基础设施中存在Kubernetes之外的模型等问题。这也变得更加重要,正如在多种多样的生产环境中部署一样,会有很多技术是相互支撑的。
使用Puppet管理Kubernetes
新的Kubernetes的Puppet模块允许你使用Puppet的特定领域语言来管理Kubernetes的资源 - 即RCs、Services和Pods实例。这意味着:- 这将会更加快速便捷的管理Kubernetes资源的状态,使用的源代码可以和应用代码一起用版本标记。
- 通过利用Puppet的内置报告和像PuppetDB这样的工具可以非常容易获得Kubernetes集群的真实状态。
- 如果你已经使用Puppet,那么Kubernetes的Puppet模块会提供便捷的方式来管理Kubernetes和你的其他基础设施。
这个模块还没有安装或是管理组成Kubernetes的各个组件,尽管这个领域已经有非常好的平台可以提供服务,像OpenShift、来自CoreOS的Tectonic或是GCE。
这个模块允许在Puppet中定义Kubernetes的资源,然后根据需求在一段时间内使用Puppet来创建和更新这些资源。
Puppet代码的用户接口便是仿照Kubernetes的YAML格式。这个接口让用过Kubernetes API的人同样觉得熟悉,并且同时在Puppet中提供低层构建模块来创建高层类型。
kubernetes_pod { 'sample-pod': ensure => present, metadata => { namespace => 'default', }, spec => { containers => [{ name => 'container-name', image => 'nginx', }] }, }}
模块现在支持以下类型:
- kubernetes_pod
- kubernetes_service
- kubernetes_replication_controller
- kubernetes_node
- kubernetes_event
- kubernetes_endpoint
- kubernetes_namespace
- kubernetes_secret
- kubernetes_resource_quota
- kubernetes_limit_range
- kubernetes_peristent_volume
- kubernetes_persistent_volume_claim
- kubernetes_component_status
- kubernetes_service_account
并非所有这些都能通过API来创建,但是他们都有查询Puppet资源的权利。例如,如果你想知道当前节点是否在Kubernetes集群中,你可以运行:
$ puppet resource kubernetes_node
Puppet资源也可被用来导出正在运行的集群的状态到一个Puppet清单文件,在一段时间内,它可以用作维持集群状态的基础。
为什么是Puppet
使用Puppet管理Kubernetes在以下几个方面超过了基础的YAML文件:- Puppet语言支持逻辑和抽象,允许自己定义业务特定的用户接口。你可以创建高层的types,然后实例化多个副本。
- Puppet的代码可以被修改,然后Puppet会处理更新相关的资源。你不必描述资源的完整状态,或通过命令行界面(CLI)手动修改个人资源。
- Puppet有工具验证代码和编写单元测试以及分发和共享可重用的模块。
- Puppet支持资源之间存在关系,所以你可以在必要时执行命令。通过新的应用的编排能力,你甚至可以在并没有使用Kubernetes的部分基础设施上跨节点执行命令。
原文链接:Managing Kubernetes Configuration with Puppet(翻译:张仪)