• Kubernetes 第八章 Pod 控制器


    Deployment

    简述

    Deployment 为 Pod 和 ReplicaSet 提供了一个声明式定义 (declarative) 方法,用来替代以前的 ReplicationController 来方便的管理应用。

     

    Deployment 概念解析
    Deployment 是什么?
    Deployment 为 Pod 和 Replica Set(下一代 Replication Controller)提供声明式更新。
    你只需要在 Deployment 中描述你想要的目标状态是什么,Deployment controller 就会帮你将 Pod 和 Replica Set 的实际状态改变到你的目标状态。你可以定义一个全新的 Deployment,也可以创建一个新的替换旧的 Deployment。
    一个典型的用例如下:
    使用 Deployment 来创建 ReplicaSet。ReplicaSet 在后台创建 pod。检查启动状态,看它是成功还是失败。
    然后,通过更新 Deployment 的 PodTemplateSpec 字段来声明 Pod 的新状态。这会创建一个新的 ReplicaSet,Deployment 会按照控制的速率将 pod 从旧的 ReplicaSet 移动到新的 ReplicaSet 中。
    如果当前状态不稳定,回滚到之前的 Deployment revision。每次回滚都会更新 Deployment 的 revision。
    扩容 Deployment 以满足更高的负载。
    暂停 Deployment 来应用 PodTemplateSpec 的多个修复,然后恢复上线。
    根据 Deployment 的状态判断上线是否 hang 住了。
    清除旧的不必要的 ReplicaSet。
    

      

    ReplicaSet

    ReplicaSet的目的是在任何给定时间维护一组稳定的副本Pod。因此,它通常用于保证指定数量的相同Pod的可用性。

    ReplicaSet的工作原理
    ReplicaSet是使用字段定义的,包括指定如何识别它可以获取的Pod的选择器,指示它应该维护多少Pod的多个副本,以及一个pod模板,用于指定它应该创建的新Pod的数据以满足该数量复制品标准。然后,ReplicaSet通过根据需要创建和删除Pod来达到其目的,以达到所需的数量。当ReplicaSet需要创建新Pod时,它使用其Pod模板。
    
    ReplicaSet与其Pods的链接是通过Pods的metadata.ownerReferences 字段,该字段指定当前对象所拥有的资源。ReplicaSet获取的所有Pod在其ownerReferences字段中拥有其拥有的ReplicaSet标识信息。通过此链接,ReplicaSet知道它正在维护的Pod的状态并相应地进行计划。
    
    ReplicaSet使用其选择器标识要获取的新Pod。如果Pod没有OwnerReference或者OwnerReference不是控制器并且它与ReplicaSet的选择器匹配,则它将立即由所述ReplicaSet获取。
    
    何时使用ReplicaSet
    ReplicaSet确保在任何给定时间运行指定数量的pod副本。但是,部署是一个更高级别的概念,它管理ReplicaSet并为Pod提供声明性更新以及许多其他有用的功能。因此,除非您需要自定义更新编排或根本不需要更新,否则我们建议使用部署而不是直接使用ReplicaSet。
    
    这实际上意味着您可能永远不需要操作ReplicaSet对象:改为使用Deployment,并在spec部分中定义您的应用程序。
    

      

    DaemonSet

    aemonSet 保证在每个 Node 上都运行一个容器副本,常用来部署一些集群的日志、监控或者其他系统管理应用。典型的应用包括:
    日志收集,比如 fluentd,logstash 等
    系统监控,比如 Prometheus Node Exporter,collectd,New Relic agent,Ganglia gmond 等
    系统程序,比如 kube-proxy, kube-dns, glusterd, ceph 等
    

     

    Job

    Job 类型

    Kubernetes 支持以下几种 Job:

    • 非并行 Job:通常创建一个 Pod 直至其成功结束
    • 固定结束次数的 Job:设置 .spec.completions,创建多个 Pod,直到 .spec.completions 个 Pod 成功结束
    • 带有工作队列的并行 Job:设置 .spec.Parallelism 但不设置 .spec.completions,当所有 Pod 结束并且至少一个成功时,Job 就认为是成功

    根据 .spec.completions 和 .spec.Parallelism 的设置,可以将 Job 划分为以下几种 pattern:

    Job 类型使用示例行为completionsParallelism
    一次性 Job 数据库迁移 创建一个 Pod 直至其成功结束 1 1
    固定结束次数的 Job 处理工作队列的 Pod 依次创建一个 Pod 运行直至 completions 个成功结束 2+ 1
    固定结束次数的并行 Job 多个 Pod 同时处理工作队列 依次创建多个 Pod 运行直至 completions 个成功结束 2+ 2+
    并行 Job 多个 Pod 同时处理工作队列 创建一个或多个 Pod 直至有一个成功结束 1 2+

    Job Controller

    Job Controller 负责根据 Job Spec 创建 Pod,并持续监控 Pod 的状态,直至其成功结束。如果失败,则根据 restartPolicy(只支持 OnFailure 和 Never,不支持 Always)决定是否创建新的 Pod 再次重试任务。

    StatefulSet

    StatefulSet 是为了解决有状态服务的问题(对应 Deployments 和 ReplicaSets 是为无状态服务而设计),其应用场景包括
    稳定的持久化存储,即 Pod 重新调度后还是能访问到相同的持久化数据,基于 PVC 来实现
    稳定的网络标志,即 Pod 重新调度后其 PodName 和 HostName 不变,基于 Headless Service(即没有 Cluster IP 的 Service)来实现
    有序部署,有序扩展,即 Pod 是有顺序的,在部署或者扩展的时候要依据定义的顺序依次依序进行(即从 0 到 N-1,在下一个 Pod 运行之前所有之前的 Pod 必须都是 Running 和 Ready 状态),基于 init containers 来实现
    有序收缩,有序删除(即从 N-1 到 0)
    从上面的应用场景可以发现,StatefulSet 由以下几个部分组成:
    用于定义网络标志(DNS domain)的 Headless Service
    用于创建 PersistentVolumes 的 volumeClaimTemplates
    定义具体应用的 StatefulSet
    

      

     

  • 相关阅读:
    将数据加载时显示的图片和文字提成公共的--实现方法
    JavaScript【面向对象】-静态方法-私有方法-公有方法-特权方法
    强大的JS数组
    sql工作问题总结
    JSON.stringify()的使用--将string转换成json
    JS小技巧
    JS工作积累
    (六)Redis之数据结构之Set
    (五)Redis之List
    (四)Redis之哈希
  • 原文地址:https://www.cnblogs.com/zy09/p/11250179.html
Copyright © 2020-2023  润新知