Kubernetes技术与架构-11

1     前言

2     Kubernetes定义

3     Kubernetes架构

4     Kubernetes技术

4.1   容器化技术

4.1.1 cgroups技术

4.1.2 Docker容器运行环境

4.1.3 containerd容器运行环境

4.1.4 Pod的基本概念

4.1.5 Pod的调度策略

4.1.6 Pod的资源编排

4.1.6.1Deployments

4.1.6.2ReplicaSet

4.1.6.3StatefulSets

4.1.6.4DaemonSet

DaemonSet是指一个类似于操作系统守护进程的Pod集合,kubernetes集群保证在每个(指定或者匹配)节点中都运行一个DaemonSet的Pod副本,每当一个节点加入到kubernetes集群中,则自动化地为该节点创建一个DaemonSet的Pod副本,每当一个节点从kubernetes集群中被删除,则自动化地删除节点对应DaemonSet的Pod副本,如果DaemonSet被删除,则其对应的Pod副本全部被删除。DaemonSet常用使用场景如下所示:

  • 在kubernetes集群的每个节点中运行一个分布式存储引擎组件

  • 在kubernetes集群的每个节点中运行一个分布式日志采集组件

  • 在kubernetes集群的每个节点中运行一个分布式监控组件

DaemonSet支持一对一的守护进程,也支持多对一的守护进程,也就是,一个守护进程对应一个DaemonSet类型,或者一个守护进程对应多个DaemonSet类型组合,不同硬件资源分配不同的处理器资源或者内存资源,或者不同硬件资源使用不同标识。

DaemonSet创建

以下简要说明DaemonSet的配置域:

必填项

apiVersion、kind、metadata以及.spec

Pod模板

对应.spec.template配置域,RestartPolicy默认值是Always

Pod选择器

对应.spec.selector配置域,与配置域.spec.template.metadata.labels必须相同

支持多个选择器,使用与运算规则匹配所有的选择器

Pod匹配节点

指定.spec.template.spec.nodeSelector配置域、.spec.template.spec.affinity配置域,用于在kubernetes集群调度资源时,控制器需要匹配的节点,如果没有指定需要匹配的节点,则控制器在kubernetes集群的所有节点中创建DaemonSet对应的Pod副本

Pod资源调度

DaemonSet保证在每个匹配到的合适的kubernetes集群节点中运行一个与之对应的Pod副本。一般情况下,kubernetes集群的节点资源是由kubernetes集群控制器负责调度,但是,DaemonSet的Pod副本资源是由DaemonSet控制器负责调度与创建,在调度策略上,这些控制器的行为区别如下所示:

  • 一般情况下,等待调度的Pod是已创建完成的,其状态是Pending状态,但是,DaemonSet中处于Pending状态的Pod是还没有被创建

  • DaemonSet支持抢占式的默认调度策略,也就是,DaemonSet控制器不需要考虑Pod的优先级而直接做出调度决策

用户可以使用.spec.affinity配置域设置默认的调度器,直接调度指定的节点资源:

另外,默认调度器默认地增加以下的tolerations策略(集群资源在异常情况下的容忍度),在调度时忽略此类型的节点资源:

node.kubernetes.io/unschedulable:NoSchedule

默认tolerations策略

Kubernetes集群自动地增加以下的tolerations策略(集群资源在异常情况下的容忍度)到DaemonSet的Pod副本中:

Toleration Key:node.kubernetes.io/not-ready

Effect:NoExecute

Version:1.13+

当发生网络分区异常的节点问题的时候,DaemonSet中的Pod副本不会被删除

Toleration Key:node.kubernetes.io/unreachable

Effect:NoExecute

Version:1.13+

当发生网络分区异常的节点问题的时候(网络不可达),DaemonSet中的Pod副本不会被删除

Toleration Key:node.kubernetes.io/disk-pressure

Effect:NoSchedule

Version:1.8+

不调度磁盘压力问题的资源,忽略该节点资源

Toleration Key:node.kubernetes.io/memory-pressure

Effect:NoSchedule

Version:1.8+

不调度内存压力问题的资源,忽略该节点资源

Toleration Key:node.kubernetes.io/unschedulable

Effect:NoSchedule

Version:1.12+

不调度不可调度的资源,忽略该节点资源

Toleration Key:node.kubernetes.io/network-unavailable

Effect:NoSchedule

Version:1.12+

不调度网络不可用的资源,忽略该节点资源

Pod的交互方法

提供如下方法与DaemonSet中的Pod副本进行消息交互:

Push

以消息推送的方式,DaemonSet中的Pod副本直接向其他服务发送更新消息,不需要客户端

NodeIP and Known Port

节点IP地址以及开放端口,DaemonSet中的Pod可以设置开放访问端口号,使用节点的IP地址以及Pod端口号可以访问对应Pod

DNS

创建一个headless的服务,使用与DaemonSet中的Pod副本相同的选择器,绑定它们之间的关系,使用DNS提供的域名访问对应的Pod

Service

创建一个普通的服务,使用与DaemonSet中的Pod副本相同的选择器,绑定它们之间的关系,使用服务访问对应的Pod

更新DaemonSet

假如kubernetes集群中的节点的标签发生更新,则DaemonSet控制器将快速在匹配到的新节点中创建新的Pod副本、在不匹配的旧节点中删除旧的Pod副本。

用户可以修改DaemonSet中已创建的Pod副本,但是并不是所有的配置域都可以更新,DaemonSet控制器将使用最原始的模板在新增加的节点中创建新的Pod副本。

如果用户使用--cascade=orphan命令行参数删除DaemonSet,则只删除DaemonSet,但保留其Pod副本,当用户随后再创建相同选择器的DaemonSet的时候,则控制器会绑定新的DaemonSet与已经存在的旧Pod副本之间的关系,用户也可以使用updateStrategy的更新策略替换旧Pod副本。

(未完待续)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangys2006

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值