K8s中Pod控制器

关于Pod控制器

    kubelet是K8s集群节点代理程序,它在每个工作节点上都运行着一个实例。当工作节点发生故障时,kubelet也将不可用,pod无法再由kubelet重启。此时Pod的存活性一般由工作节点之外的Pod控制器来保证。

    Pod控制器由master的kube-contriller-manager组件提供,常见的有Deployment、DaemonSet、Job等,对Pod对象的管理通常是有某种控制器的特定对象来实现的,包括其创建、删除及重新调度等。

    控制器创建完成后,每个控制器对象都可以通过内部的和解循环(reconciliation loop),不断地监控着由其负责的所有资源,以确保其处于用户定义的目标状态。

    kube-controller-manager是一个单独的守护进程,包含了众多功能不同的控制器类型,用来确保资源对象的当前状态匹配用户的期望状态。

K8s中Pod控制器_第1张图片

List-Watch是K8s实现的核心机制之一,在资源对象的状态发生变动时,由API Server负责写入etcd并通过水平触发(level-triggered)机制主动通知给相关的客户端程序以确保其不会错过任何一个事件。

一个Pod控制器至少应包含三个基本组成单元:

    标签选择器:匹配并关联Pod资源对象,

    期望副本数:期望精确运行着的Pod

    Pod模板:用于新建Pod资源对象的模板

ReplicaSet 控制器

    ReplicaSet用于确保其管控的Pod对象副本数满足期望的数值,它能实现以下功能:

        确保Pod的资源数量精确反应期望值

        确保Pod健康运行

        弹性伸缩

    查看Pod资源变动的相关事件:

        kubectl descibe replicasets/re-example

Deployment 控制器

基于ReplicaSet之上,可为Pod和ReplicaSet资源提供声明式更新,它具有以下特性:

    事件和状态查看:可以查看Deployment对象升级的详细进度和状态

    回滚:升级操作完成后发现问题时,支持将应用返回到指定的历史版本中

    版本记录:对Deployment 对象的每一次操作都予以保存

    暂停和启动:每一次升级,都可以随时暂停和启动

    多种自动更新方案:Recreate重建更新、RollingUpdate滚动更新

Pod对象的命名以应用名-ReplicaSet控制器-随机五位字符的方式

    更新策略

        滚动更新:就控制器的Pod数量不断减少,同时新控制器的Pod不断增加,以下两个属性:

        maxSurge:升级期间存在的总Pod数量最多可超过期望值的个数,可以是数值或百分比

        maxUnavailabe:升级期间正常可用的Pod数(新旧版本)最多不能其余期望的个数,数值或百分比

    金丝雀发布在第一批新的Pod资源创建完成后立即停止更新,然后筛选小部分用户的请求路由至新版本的Pod应用,并持续观察其是否能够稳定地按期望的方式运行。确定没有问题就继续滚动更新,否则立即回滚更新操作

DaemonSet控制器

    DaemonSet 是Pod控制器的有一种实现,用于在集群中的全部节点上同时运行一份指定的Pod资源副本,后续新加入集群的工作节点也会自动创建一个相关的Pod对象,当集群移除节点时,此类Pod对象也会被自动回收

    DaemonSet 通常运行那些执行系统级操作任务的应用,具体应用场景如下:

        运行集群存储的守护进程,如各个节点上运行ceph、glusterd

        各个节点上运行日志收集守护进程,如logstash、fluentd

        各个节点上运行监控系统的代理守护进程,如Prometheus Node Exporter、Datadog agent

    只有必须将Pod对象运行于固定的几个节点并且需要先于其他Pod启动时,才有必要使用DaemonSet 控制器,否则就应该使用Deployment控制器

Job控制器

    Job控制器用于配置Pod对象运行一次性任务,容器中的进程在正常运行借宿后不会进行重启,而是将Pod对象置于“Completed”状态 

CronJob控制器

    周期性任务作业计划,控制其运行的时间点及重复运行的方式

 

 

 

你可能感兴趣的:(云计算,k8s)