k8s~控制deamonset中pod的数量

DaemonSet 是 Kubernetes 中的一种控制器,用于确保集群中的每个节点(或特定标签选择器匹配的节点)运行一个 Pod 的副本。DaemonSet 通常用于运行集群守护进程,如日志收集、监控代理、存储卷插件等。以下是如何控制 DaemonSet 中 Pod 数量的方法:

  1. 使用节点选择器(Node Selector)
    通过在 DaemonSet 的 spec 中设置 nodeSelector,可以指定哪些节点上运行 Pod。例如,如果你想在带有特定标签的节点上运行 Pod,可以这样做:
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
    name: example-daemonset
    spec:
    selector:
    matchLabels:
    app: example
    template:
    metadata:
    labels:
    app: example
    spec:
    nodeSelector:
    key: value
    containers:
    • name: example-container
      image: example-image

在这个例子中,只有带有 key=value 标签的节点会运行 Pod。

  1. 使用节点亲和性(Node Affinity)

节点亲和性提供了更细粒度的控制,可以使用 nodeAffinity 来指定 Pod 应该调度到哪些节点上。例如:

apiVersion: apps/v1

kind: DaemonSet

metadata:

name: example-daemonset

spec:

selector:

matchLabels:

app: example

template:

metadata:

labels:

app: example

spec:

affinity:

nodeAffinity:

requiredDuringSchedulingIgnoredDuringExecution:

nodeSelectorTerms:

  • matchExpressions:

  • key: key

operator: In

values:

  • value

containers:

  • name: example-container

image: example-image

在这个例子中,只有满足 key In [value] 条件的节点会运行 Pod。

  1. 使用容忍度(Tolerations)

如果某些节点上有污点(Taints),可以通过设置容忍度(Tolerations)来允许 Pod 调度到这些节点上。例如:

apiVersion: apps/v1

kind: DaemonSet

metadata:

name: example-daemonset

spec:

selector:

matchLabels:

app: example

template:

metadata:

labels:

app: example

spec:

tolerations:

  • key: key

operator: Equal

value: value

effect: NoSchedule

containers:

  • name: example-container

image: example-image

在这个例子中,Pod 会容忍带有 key=value 污点的节点。

  1. 更新策略(Update Strategy)

DaemonSet 支持滚动更新,可以通过设置 updateStrategy 来控制更新过程中的 Pod 数量。例如:

apiVersion: apps/v1

kind: DaemonSet

metadata:

name: example-daemonset

spec:

selector:

matchLabels:

app: example

template:

metadata:

labels:

app: example

spec:

containers:

  • name: example-container

image: example-image

updateStrategy:

type: RollingUpdate

rollingUpdate:

maxUnavailable: 1

maxSurge: 0

在这个例子中,maxUnavailable 设置为 1,表示在更新过程中最多有一个 Pod 不可用;maxSurge 设置为 0,表示在更新过程中不会创建额外的 Pod。

通过以上方法,你可以灵活地控制 DaemonSet 中 Pod 的数量和调度策略。