【K8S】Kubernetes 中 API 资源对象之 DaemonSet

一、DaemonSet需求背景

  • 我们在使用 deployment 对象部署服务的时候虽然可以通过 replicas 字段指定 Pod 的副本数,但是我们没办法指定Pod 的分布。举个例子,如果我们一个 deployment 资源对象有4个 Pod 副本,存在一个节点node1,这4个Pod 副本可能全部都在node1上,也可能 node1 上一个也没有。
  • 但是存在这样的情况,我们只想在一个节点上部署一个服务实例。比如我们的节点监控,日志审计等,在每个节点上只需要一个相应的服务实例即可。根据这些特点,Kubernetes的开发者们创造了 DaemonSet 资源对象。

在Kubernetes集群中,DaemonSet 资源对象所管理的Pod叫Daemon Pod,该Pod主要有3个特征:

  • 运行在Kubernetes集群的每一个节点上;
  • 每个节点上仅有一个该Pod实例;
  • 当有新的节点加入到Kubernetes集群时,该Pod会自动的在新的节点创建出来;当老的节点被删除,它上面的Daemon Pod也会被回收;

DaemonSet 资源对象如何保证每个节点上有且仅有一个被管理的Daemon Pod的?
Kubernetes在创建DaemonSet资源时,会从Etcd上获取当前集群中所有node,遍历node列表,使用标签选择器检查当前节点是否有指定标签值的Pod。

  • 如果刚好有一个,正常情况,继续检查下一个节点;
  • 如果没有,则创建一个指定类型的Daemon Pod(创建时使用nodeAffinity字段指定节点名);
  • 如果有,但是多于一个,则进行删除操作;

在默认情况下,Kubernetes不允许用户在集群的master节点部署Pod。因此,master节点创建了一个叫node-role.kubernetes.io/master 的污点。所以,为了能让Daemon Pod能够部署在master节点,我们在yaml文件中定义该Pod的时候,必须设置这个Pod对该污点的容忍度。

二、资源对象 DaemonSet 的 Yaml 定义

2.1 在 Yaml 文件中定义 DaemonSet 资源对象

因为 DaemonSet 资源对象的Yaml 模版文件kubernetes 生成不了,下面是一个 DaemonSet 资源对象的定义。

apiVersion: apps/v1		# API 资源对象版本
kind: DaemonSet		# API 资源对象类型
metadata:
  name: prometheus-ds		# API 资源对象名称
  labels:
    app: prometheus-ds

spec:
  selector:
    matchLabels:
      name: prometheus-ds

  template:
    metadata:
      labels:
        name: prometheus-ds
    spec:
      containers:
      - image: prometheus-server	# 镜像名
        name: prometheus		# 容器名
        ports:
        - containerPort: 9191

我们可以看到 DaemonSet 资源对象跟 deployment 资源对象最大的差别就是 DaemonSet 资源对象没有 replicas 字段。这也暗示着 deployment 资源对象不会在K8S 集群中创建多个副本,而是在每个节点创建一个。

2.2 污点和容忍度

  • 污点就是 kubernetes 赋予节点的一种属性,或者说是标签。如果某个节点具有某个污点,也就是说这个节点被指定的key-value 键值对赋予了某个属性。容忍度是属于 Pod 的概念,Pod 的容忍度与节点的污点是相对的。表示某个Pod 在选择节点创建部署时是否可以容忍该节点的污点。
  • 污点、容忍度的概念是为了增强 kubernetes 编排、管理 Pod 的能力,丰富了调度 Pod 的方式,可以适配更多的使用场景;

三、资源对象 DaemonSet 的操作

下面是是使用 kubectl 命令工具操作 DaemonSet 的常见命令:

kubectl apply -f test-ds.yaml	# 根据yaml文件中的定义创建对应的 DaemonSet 资源对象
kubectl get ds	# 查看 daemonset 资源对象详情
kubectl get pod -o wide		# 查看pod状态详情

DaemonSet 资源对象的名称简写为ds

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值