Daemonset管理
概述
本文档介绍如何在容器引擎 CCE 中创建、查看、更新、管理和删除守护进程集。守护进程集(DaemonSet)确保集群中符合条件的节点上有且仅有一个 Daemon Pod 运行。守护进程适合于系统层面的应用,例如日志收集、资源监控等,可以有效保障集群中的基础服务可用性。关于 DaemonSet 的更多信息,请参见 官方文档。
用户可以通过表单方式基于镜像创建守护进程集,也可以通过百度智能云提供的 YAML 文件模板创建和修改守护进程集,并对其关联的容器组(Pod)、事件等进行控制管理。
DaemonSet 介绍
DaemonSet保证在每个Node上都运行一个容器副本,常用来部署一些集群的日志、监控或者其他系统管理应用。使用DaemonSet的一些典型用法:
- 运行集群存储daemon,例如在每个节点上运行glusterd、ceph。
- 在每个节点上运行日志收集daemon,例如fluentd、logstash。
- 在每个节点上运行监控daemon,例如Prometheus Node Exporter、collectd、Datadog代理、New Relic代理,或Ganglia gmond。
一种简单的用法是为每种类型的守护进程在所有的节点上都启动一个DaemonSet。一个稍微复杂的用法是为同一种守护进程部署多个DaemonSet;每个具有不同的标志, 并且对不同硬件类型具有不同的内存、CPU要求。
前提条件
- 账号状态正常,且已成功创建 CCE 集群。操作说明请参见 创建 CCE 集群。
- 通过
kubectl创建时,已安装kubectl并已通过 通过 kubectl 连接集群 连接到目标集群。 - 通过
kubectl创建或查询时,当前凭证具备创建DaemonSet和查看Pod的权限。
创建守护进程集 DaemonSet
用户可以选择通过 CCE 控制台使用表单形式或者通过 YAML 形式创建新的守护进程集,也可以选择通过 kubectl 命令创建。
通过控制台表单形式创建
导航路径:集群管理->集群列表->目标集群->工作负载->守护进程集
- 登录 容器引擎 CCE 控制台。
- 进入目标集群,在 工作负载->守护进程集 页面单击 【新建守护进程集】。
- 在基本信息模块完成相关配置后,单击 【下一步】 进入容器配置。
| 参数 | 说明 |
|---|---|
| 工作负载名称 | 根据系统提示,配置工作负载的名称。在同一个命名空间下,名称必须唯一。 |
| 命名空间 | 选择工作负载部署的命名空间,默认为default。支持选择自定义创建的命名空间,自定义命名空间,请参见 命名空间操作。 |
| 工作负载类型 | 选择守护进程集DaemonSet。 |
| 期望 Pod 数 | 输入工作负载的 Pod 实例个数。 |
| K8s标签 | 指定工作负载的标签,对应 Kubernetes 中的 Label,用于识别工作负载的键值对,配合选择器,帮助 Kubernetes 快速筛选目标工作负载。详细信息参考K8S 标签说明。 |
| 注释 | 指定工作负载的注解信息,对应 Kubernetes 中的 Annotation,主要记录用于应用部署、安全策略、调度策略的附加信息,不用于标识和区分资源。详细信息参考K8S 注释说明。 |
-
在容器配置模块,填写容器名称和镜像地址,可点击选择镜像后在弹窗中选择 CCR 中的镜像地址。点击下一步进入高级配置模块。
说明
- Pod 中可以配置多个容器,您可以单击右侧“添加容器”为 Pod 配置多个容器。
- 若使用了 CCR 私有镜像,还需在当前页面的高级设置中配置仓库访问凭证。
| 参数 | 说明 |
|---|---|
| 容器名称 | 根据系统提示的命名规则,输入容器名称。同一个工作负载下容器名称必须唯一。 |
| 镜像地址 | 单击后方“选择镜像”,选择容器使用的镜像。支持选择以下两种种类型的镜像。 |
| 镜像版本 | 选择需要部署的镜像版本。 |
| 镜像拉取策略 | 选择镜像拉取策略。CCE 支持以下三种镜像拉取策略(imagePullPolicy): |
| 容器配额 | 配置容器资源的resources.limits和容器资源的resources.requests。如不填写申请值和限制值,表示不限制配额。申请值和限制值的配置说明及建议,请参见Requests and Limits。
|
| 容器端口 | 设置容器端口名称、协议、端口。 |
| 环境变量 | 单击 添加环境变量,配置环境变量。Kubernetes 在创建 Pod 时,会将环境变量的信息注入到容器中。 支持以下类型: |
| 容器启动项 | 为容器添加启动项参数,当前支持以下容器启动项参数:kubectl exec -i -t命令的交互式操作,但区别在于该参数在Pod启动时就已经配置完成。 |
| 特权容器 | 默认不开启。开启后,特权模式允许容器拥有与所在的Worker节点操作系统近似的权限,例如访问硬件设备、挂载文件系统等。 |
| 初始化容器 | 默认不开启。选择容器是否作为初始化(Init)容器。初始化(Init)容器不支持设置健康检查。Init容器是一种特殊容器,可以在Pod中的其他应用容器启动之前运行。每个Pod中可以包含多个容器,同时Pod中也可以有一个或多个先于应用容器启动的Init容器,当所有的Init 容器运行完成时,Pod中的应用容器才会启动并运行。详细说明请参见 Init 容器。 |
| 健康检查 | 支持配置存活检查、就绪检查和启动检查。允许基于HTTP请求检查、TCP端口检查、执行命令检查和GRCP检查的方式,探测容器中的负载是否正常。以下以配置存活检查为例,介绍配置参数。
|
| 生命周期 | 在容器的生命周期的特定阶段配置需要执行的操作,例如启动命令、启动后处理和停止前处理,详情请参见设置容器生命周期。 |
| 数据卷 | 支持为容器挂载不同类型的数据卷进行数据持久化,支持通过subPath方式挂载卷的子路径;支持通过subPathExpr方式挂载卷的扩展路径:cm1:path1;cm2:path2。sc1:path1;sc2:path2。 |
| 仓库访问凭证 | 若有容器使用了私有镜像,请务必添加对应的镜像仓库的访问凭证。支持新建访问凭证和选择已有的,详细信息参考配置访问凭证。 |
- 在高级设置模块中,配置调度策略,点击完成进行工作负载的创建。
| 参数 | 说明 |
|---|---|
| 调度策略 | 通过配置亲和与反亲和规则,可实现灵活的工作负载调度,支持负载亲和与节点亲和。
|
| Pod标签 | 为该工作负载所属的每个Pod添加标签,对应 Kubernetes 中的 Label,用于识别Pod的键值对,配合选择器,帮助 Kubernetes 快速筛选目标Pod。详细信息参考K8S 标签说明。 |
| Pod注释 | 为该工作负载所属的每个Pod添加注解,对应 Kubernetes 中的 Annotation,主要记录用于应用部署、安全策略、调度策略的附加信息,不用于标识和区分资源。详细信息参考K8S 注释说明。 |
方式二:通过 YAML 创建
导航路径:集群管理->集群列表->目标集群->工作负载->守护进程集
- 在 工作负载->守护进程集 页面单击 【使用 YAML 创建】,进入新建工作负载页面。
- 选择命名空间,填写 YAML 文件内容后,单击 【确定】。
说明:
- 模板类型:可使用示例模板或 【我的模板】 创建。
- 复制:复制当前 YAML 文件的内容。
- 另存为:将当前文件模板另存为 【我的模板】。
- 取消:返回列表页。
- 确定:创建守护进程集。
工作负载 YAML 示例
1apiVersion: apps/v1
2kind: DaemonSet
3metadata:
4 name: <daemonset-name>
5spec:
6 minReadySeconds: 0
7 selector:
8 matchLabels:
9 app: <app-label>
10 revisionHistoryLimit: 10
11 template:
12 metadata:
13 labels:
14 app: <app-label>
15 spec:
16 containers:
17 - name: <container-name>
18 image: <image-address>:<image-tag>
19 command:
20 - <start-command>
21 - <start-argument>
22 updateStrategy:
23 type: RollingUpdate
方式三:通过 kubectl 创建
操作入口:本地终端->已连接目标集群的 kubectl 环境
- 准备 DaemonSet YAML 文件。
- 安装
kubectl并连接集群,详情请参见 通过 kubectl 连接集群。 - 复制下方 YAML 文件并保存到
daemonset.yaml。
注意:
- 创建工作负载前,请确保已通过
kubectl连接到集群。具体操作请参见 通过 kubectl 连接集群。- 请确保当前凭证具备创建
DaemonSet和查询Pod的权限。
1apiVersion: apps/v1
2kind: DaemonSet
3metadata:
4 name: <daemonset-name>
5spec:
6 minReadySeconds: 0
7 selector:
8 matchLabels:
9 app: <app-label>
10 revisionHistoryLimit: 10
11 template:
12 metadata:
13 labels:
14 app: <app-label>
15 spec:
16 containers:
17 - name: <container-name>
18 image: <image-address>:<image-tag>
19 command:
20 - <start-command>
21 - <start-argument>
22 updateStrategy:
23 type: RollingUpdate
- 执行以下命令创建 DaemonSet。
1kubectl apply -f daemonset.yaml
预期输出:
1daemonset.apps/<daemonset-name> created
- 执行以下命令查看 DaemonSet Pod 的详细信息。
1kubectl get pods --all-namespaces -o wide | grep <daemonset-name>
查看守护进程集详情
导航路径:集群管理->集群列表->目标集群->工作负载->守护进程集
- 在 工作负载->守护进程集 页面,单击目标工作负载名称。
- 在详情页查看工作负载详情、关联容器组、自动伸缩、更新升级、调度策略、监控和事件等信息。
更新守护进程集
支持通过控制台界面或 YAML 文件编辑已创建的守护进程集。
导航路径:集群管理->集群列表->目标集群->工作负载->守护进程集
- 在目标守护进程集的操作列,单击 【更新升级】 或 【编辑 YAML】。
说明:
通过控制台界面更新和编辑 YAML 文件更新,均不支持更新守护进程集名称、命名空间。
- 根据需要选择以下任一方式完成配置:
- 更新:在控制台更新配置信息。详细的参数说明,请参见 通过控制台创建。
- 编辑 YAML:编辑 YAML 文件更新配置信息。详细的 YAML 配置说明,请参见 通过 YAML 创建。
- 更新完成后,单击 【更新】。
标签注解管理
标签是以 key/value 键值对的形式附加在守护进程集工作负载上的。添加标签后,可通过标签对守护进程集工作负载进行管理和选择。您可以给多个工作负载打标签,也可以给指定的某个工作负载打标签。
说明:
标签格式要求如下:以字母和数字开头或结尾,由字母、数字、连接符(
-)、下划线(_)、点号(.)组成且63字符以内。详细信息请参见 K8S标签说明。
导航路径:集群管理->集群列表->目标集群->工作负载->守护进程集
- 在 守护进程集 页签,单击目标工作负载后的 【更多】 > 【标签注解】。
- 单击 【添加标签】,输入键和值后单击 【更新】。
查看监控
您可以通过 CCE 控制台查看工作负载和容器组的 CPU 和内存占用情况,以确定所需资源规格。
说明:
查看工作负载监控信息时,依赖集群接入 Prometheus 监控服务。若集群未接入 Prometheus 监控服务,请根据界面提示接入,详细信息请参见 使用Prometheus监控集群。
导航路径:集群管理->集群列表->目标集群->工作负载->守护进程集
- 在目标守护进程集的列表中,单击对应工作负载的 【监控】。
- 在监控页面查看守护进程集的监控数据。容器相关监控指标说明,请参见 监控指标说明。
查看日志
您可以通过 【日志】 功能查看守护进程集工作负载的日志信息。
说明:
当前显示的日志内容为容器标准输出日志,不具备持久化和高阶运维能力。如需使用更完善的日志能力,可使用 日志中心功能。
导航路径:集群管理->集群列表->目标集群->工作负载->守护进程集
- 在目标守护进程集工作负载的列表中,单击目标工作负载后的 【更多】 > 【日志】。
- 在日志页面查看容器日志数据。
删除守护进程集
若工作负载无需再使用,您可以将工作负载删除。
注意:
删除守护进程集工作负载可能导致服务不可用,请谨慎操作。
导航路径:集群管理->集群列表->目标集群->工作负载->守护进程集
- 在目标守护进程集工作负载的列表中,单击目标工作负载后的 【更多】 > 【删除】。
- 在系统弹出的二次确认对话框中,确认信息后单击 【确认】。
评价此篇文章
