使用Puppet管理Kubernetes配置



  • 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的部分基础设施上跨节点执行命令。

    原文链接: http://dockone.io/article/1019


登录后回复
 

与 青云QingCloud 社区 的连接断开,我们正在尝试重连,请耐心等待