• 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
    

      

     

  • 相关阅读:
    HDU 2236 无题Ⅱ
    Golden Tiger Claw(二分图)
    HDU 5969 最大的位或 (思维,贪心)
    HDU 3686 Traffic Real Time Query System (图论)
    SCOI 2016 萌萌哒
    Spring Boot支持控制台Banner定制
    构建第一个Spring Boot程序
    Spring Boot重要模块
    Java fastjson JSON和String互相转换
    BCompare 4 Windows激活方法【试用期30天重置】
  • 原文地址:https://www.cnblogs.com/zy09/p/11250179.html
Copyright © 2020-2023  润新知