守护进程(DaemonSet)确保集群中符合条件的节点上运行一个 Pod 的副本。守护进程适合于系统层面的应用,例如日志收集、资源监控等,可以有效保障集群中的基础服务的可用性。本文描述了如何通过边缘智能控制台创建并部署守护进程。
关于 DaemonSet 的详细介绍,可参见 Kubernetes 官方文档。
登录边缘智能控制台。
在左侧导航栏顶部的 我的项目 区域,选择您的项目。
在左侧导航栏,选择 应用管理 > 工作负载。
单击 守护进程 页签。
单击 创建守护进程。
在 创建工作负载 对话框,选择一种创建方式,然后单击 确定。
可选择的创建方式包括:
根据以下说明,完成 创建守护进程 配置向导:
配置工作负载。
完成工作负载相关参数的配置,然后单击 下一步:配置部署节点。
工作负载配置包括 基础信息、容器配置、发布策略 配置。
基础信息
配置项 | 说明 |
---|---|
名称 | 为工作负载设置名称。输入要求如下:
|
描述 | 可选。为工作负载添加描述。 |
容器配置
类型 | 配置项 | 说明 |
---|---|---|
容器 | N/A | 单击左侧的 + 添加容器,可以添加多个容器。 |
基本信息 | 容器名称 | 为容器设置名称。输入要求如下:
|
镜像地址 | 输入镜像的 URL 地址。地址需符合 URL 格式。长度不超过 1024 个字符。 说明 您可以将制作好的应用镜像托管在某个镜像仓库,获取镜像的 URL。我们推荐您将镜像托管到火山引擎镜像仓库。 | |
仓库密钥 | 针对私有镜像仓库,可设置仓库密钥,以获得镜像访问权限。
注意 不使用免密组件,且需要拉取私有镜像时,必须配置该参数。 | |
资源配额 | 可选。按照业务需求,在容器维度配置 CPU 和内存的上下限,保障容器的健康运行。 注意 如果不设置资源配额和限额,则 K8s 会尽最大可能向工作负载提供资源,但是相应的优先级会降低。例如,另一个配置了资源配额和限额的工作负载,会更容易抢占到资源。
| |
特权级容器 | 默认不开启。开启后特权级容器表示赋予该容器特权,允许访问宿主机全部资源。支持部署在 Linux 系统上的容器控制网络堆栈或访问设备。 | |
Init容器 | 默认不开启。开启后表示将该容器设置为Init容器。Init容器是 Pod 中运行在应用容器前的容器,并且它可以包括仅在安装过程中使用的工具(例如 python、dig)和代码,避免在应用容器中的重复部署,提升应用镜像的安全性。 | |
容器端口 | 端口 | 可选。支持将容器内端口号与宿主机的端口号进行映射。支持 UDP 和 TCP 两种协议。单击 + 添加端口映射。可以添加多个端口映射。 |
环境变量 | 环境变量 | 可选。支持手动设置环境变量和引用实例字段作为环境变量。Kubernetes 在创建 Pod 时,会将环境变量的信息注入到容器中。
|
存储配置 | 存储卷 | 可选。在容器中存储数据分两步:先在 Pod 定义存储卷,也就是添加存储卷,然后在容器挂载卷。
|
挂载卷 | 可选。支持将宿主机的卷挂载到容器上,可以挂载多个卷。 | |
设备挂载 | 设备挂载 | 可选。选择是否开启设备挂载。 |
生命周期 | 启动命令 | 可选。
|
启动后处理 | 可选。输入容器启动后需要运行的命令。多行命令使用换行符分隔。 | |
停止前处理 | 可选。输入容器停止需要运行的命令。多行命令使用换行符分隔。 |
发布策略
配置项 | 说明 |
---|---|
发布策略 | 选择一种发布策略。仅支持 删除时更新。 |
标签 | 为工作负载添加标签。您可以使用标签来标识一个 Pod 所属的应用程序、环境、版本等信息,从而方便您查找和管理 Pod。标签的示例:
最多允许为工作负载指定 64 个标签。 |
配置部署节点。
工作负载支持两种部署方式:部署到指定节点、部署到节点组。
创建守护进程后,您可以在守护进程列表查看守护进程的状态。当守护进程已经就绪,表示守护进程已成功部署到节点上。
根据以下说明,完成 创建守护进程 配置向导:
配置工作负载。
您需要提供编写好的 YAML 文件,通过 YAML 文件定义工作负载的规范和预期状态。从以下方式中选择一种方式,提供 Yaml 文件:
fluentd-elasticsearch
Docker 镜像的 DaemonSet:apiVersion: apps/v1 kind: DaemonSet metadata: name: fluentd-elasticsearch labels: k8s-app: fluentd-logging spec: selector: matchLabels: name: fluentd-elasticsearch template: metadata: labels: name: fluentd-elasticsearch spec: tolerations: # these tolerations are to have the daemonset runnable on control plane nodes # remove them if your control plane nodes should not run pods - key: node-role.kubernetes.io/control-plane operator: Exists effect: NoSchedule - key: node-role.kubernetes.io/master operator: Exists effect: NoSchedule containers: - name: fluentd-elasticsearch image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2 resources: limits: cpu: 100m memory: 200Mi requests: cpu: 100m memory: 200Mi volumeMounts: - name: varlog mountPath: /var/log # it may be desirable to set a high priority class to ensure that a DaemonSet Pod # preempts running Pods # priorityClassName: important terminationGracePeriodSeconds: 30 volumes: - name: varlog hostPath: path: /var/log
在这个 YAML 文件中,我们定义了一个名为fluentd-elasticsearch
的 DaemonSet 对象,它的作用是在每个节点上运行一个名为fluentd-elasticsearch
的容器,这个容器负责收集和转发日志数据。
配置部署节点。
工作负载支持两种部署方式:部署到指定节点、部署到节点组。
创建守护进程后,您可以在守护进程列表查看守护进程的状态。当守护进程已经就绪,表示守护进程已成功部署到节点上。