Kubernetes DaemonSet 使用介绍

66

DaemonSet 是一种特殊的控制器,它确保会在集群的每个节点(或大部分)上都运行 一个 Pod 副本。

在节点加入或退出集群时,DaemonSet 也会在相应节点增加或删除 Pod。

因此常用来部署那些为节点本身提供服务或维护的 Pod(如日志收集和转发、监控等)。

因为这一特性,DaemonSet 应用通常会在模板中直接指定映射容器端口到节点端口,不用担心同一个节点会运行多个 Pod 副本而导致端口冲突。

DaemonSet 通常会运行在每个节点上,但不包括 master 节点。

因为 master 节点默认存在不允许调度 Pod 的 污点 ,所以一般会在模板中为 Pod 配置污点容忍度来实现在 master 节点上运行 DaemonSet Pod,如果不需要在 master 节点运行则无需配置。

daemonset.yaml 是一个 DaemonSet 的模板示例。它的管理命令与 Deployment 没有较大差别,只是 DaemonSet 不基于 ReplicaSet

#daemonset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: daemonset-hellok8s-go-http
spec:
  selector:
    matchLabels:
      app: hellok8s
  template:
    metadata:
      labels:
        app: hellok8s
    spec:
      tolerations:
        # 这些容忍度设置是为了让该守护进程集在控制平面节点上运行
        # 如果你不希望自己的控制平面节点运行 Pod,可以删除它们
        - key: node-role.kubernetes.io/master
          effect: NoSchedule
      containers:
        - image: leigg/hellok8s:v1
          name: hellok8s