创建守护进程集工作负载DaemonSet

DaemonSet可以确保在每个节点上仅运行一个容器副本(Pod),如果集群中有新增节点,也将为其新增一个Pod。它常用来部署一些集群的日志、监控或其他系统管理应用。本文介绍如何创建守护进程集工作负载DaemonSet。

前提条件

操作步骤

您可以通过控制台或kubectl两种方式创建DaemonSet。

通过控制台创建

使用镜像创建DaemonSet

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 守护进程集

  3. 守护进程集页面右上角,单击使用镜像创建

  4. 设置创建DaemonSet的参数。

    1. 应用基本信息配置向导页面设置应用的基本信息。关于参数的详细描述,请参见使用镜像创建无状态Deployment应用

    2. 容器配置配置向导页面设置容器信息。关于参数的详细描述,请参见使用镜像创建无状态Deployment应用

    3. 高级配置配置向导页面完成DaemonSet的高级参数设置。

      DaemonSet会忽略节点的不可调度状态,您可以通过设置节点亲和性、应用亲和性、调度容忍来指定Pod只运行在指定的节点上。关于参数的详细描述,请参见使用镜像创建无状态Deployment应用

  5. 单击创建

    成功创建守护进程集后,在守护进程集列表中可以查看新创建的守护进程集。

    说明

    守护进程集页面下方,通过选择批量重新部署可实现多个守护进程集重新部署。

使用模板创建DaemonSet

  1. 守护进程集页面右上角,单击使用YAML创建资源

  2. 创建页面,在模板区域编辑模板信息。

  3. 模板区域下方,单击创建

    成功创建守护进程集后,在守护进程集列表中可以查看新创建的守护进程集。

通过kubectl命令行创建

DaemonSet会忽略节点的无法调度状态,您可以设置以下参数将Pod调度至指定的节点上:

参数

描述

nodeSelector

只调度到匹配指定标签的节点上。

nodeAffinity

设置节点亲和性。根据节点标签将Pod调度到指定节点上,但支持更丰富的节点匹配策略。

podAffinity

设置Pod亲和性。根据Pod的标签来选择节点,仅调度到满足条件的Pod所在节点。

本文以创建一个名为fluentd-elasticsearch的DaemonSet为例,说明如何使用kubectl创建DaemonSet。

  1. 保存以下YAML内容至daemonset.yaml文件中。

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: fluentd-elasticsearch
      namespace: kube-system
      labels:
        k8s-app: fluentd-logging
    spec:
      selector:
        matchLabels:
          name: fluentd-elasticsearch
      template:
        metadata:
          labels:
            name: fluentd-elasticsearch
        spec:
          tolerations:
          # this toleration is to have the daemonset runnable on master nodes
          # remove it if your masters can't run pods
          - key: node-role.kubernetes.io/master
            effect: NoSchedule
          containers:
          - name: fluentd-elasticsearch
            image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2
            resources:
              limits:
                memory: 200Mi
              requests:
                cpu: 100m
                memory: 200Mi
            volumeMounts:
            - name: varlog
              mountPath: /var/log
            - name: varlibdockercontainers
              mountPath: /var/lib/docker/containers
              readOnly: true
          terminationGracePeriodSeconds: 30
          volumes:
          - name: varlog
            hostPath:
              path: /var/log
          - name: varlibdockercontainers
            hostPath:
              path: /var/lib/docker/containers
  2. 执行以下命令创建DaemonSet。

    kubectl create -f daemonset.yaml

    当输出daemonset.apps/fluentd-elasticsearch created时,则说明成功创建守护进程集DaemonSet。

相关操作

守护进程集创建完成后,您还可以进行以下操作:

  • 在守护进程集列表中单击标签字段,输入对应应用标签的keyvalue,单击确定后可过滤列表中的应用。

  • 在守护进程集名称右侧的操作列中,单击详情查看守护进程集的基本信息,包括容器组、访问方式、事件、日志等。

  • 在守护进程集名称右侧的操作列中,选择更多 > 查看Yaml更多 > 删除,查看守护进程集的YAML信息和删除守护进程集。