DaemontSet

DaemontSet概述

  • DaemonSet 是 Kubernetes 中一种特殊的控制器,用于确保集群中所有(或部分)节点上都运行一个 Pod 的副本。与 Deployment 不同的是,DaemonSet 不是通过副本数来管理 Pod,而是确保每个符合条件的节点上有且只有一个指定的 Pod 运行
  • kube-proxy就是以daemonset的形式运行在每个节点上的

DaemonSet特性

  • 节点级部署:在每个匹配的节点上自动部署一个 Pod 副本
  • 自动扩展:当新节点加入集群时,会自动在新节点上创建 Pod
  • 自动收缩:当节点从集群移除时,其上的 Pod 会被垃圾回收
  • 节点亲和性:可以通过节点选择器(nodeSelector)或节点亲和性(nodeAffinity)控制部署范围

daemonset的应用场景

  • 在每个Node上都运行一个存储进程,例如Ceph
  • 在每个Node上都运行一个日志采集进程,例如Logstach
  • 在每个Node上都运行一个性能监控进程,采集该Node的运行性能数据,例如Prometheus Node Exporter
  • 可以将pod上的相同服务提取成为一个daemonset,在不同容器中运行

创建daemonset

vim daemon.yaml

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: daemonset
  labels:
    app: daemonset
spec:
  updateStrategy:        #进行滚动升级
    type: RollingUpdate
  selector:
    matchLabels:
      name: daemonset
  template:
    metadata:
      labels:
        name: daemonset
    spec:
      containers:
      - name: nginx
        image: nginx

deamonset的节点选择

  • 使用 nodeSelector:
spec:
  template:
    spec:
      nodeSelector:
        disktype: ssd
  • 使用 nodeAffinity:
spec:
  template:
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: kubernetes.io/arch
                operator: In
                values:
                - amd64
  • 容忍度(Tolerations)
# 允许 Pod 调度到带有特定污点的节点上:
tolerations:
- key: "key1"          # 必须与污点的键完全一致
  operator: "Equal"    # 表示要求值完全匹配
  value: "value1"      # 必须与污点的值完全一致
  effect: "NoSchedule" # 必须与污点效果一致

daemonset的更新策略

  • OnDelete: 当使用OnDelete作为升级策略时,在创建好新的DaemonSet配置之后,新的Pod并不会被自动创建,直到用户手动删除旧版本的Pod,才触发新建操作。
  • RollingUpdate:默认升级策略。逐步更新每个节点上的 Pod。可以配置 maxUnavailable 来控制更新速度
spec:
  updateStrategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 2
posted @ 2024-05-10 10:25  立勋  阅读(23)  评论(0)    收藏  举报