【K8S】Kubernetes 中 API 资源对象之 DaemonSet

一、DaemonSet需求背景

  • 我们在使用 deployment 对象部署服务的时候虽然可以通过 replicas 字段指定 Pod 的副本数,但是我们没办法指定Pod 的分布。举个例子,如果我们一个 deployment 资源对象有4个 Pod 副本,存在一个节点node1,这4个Pod 副本可能全部都在node1上,也可能 node1 上一个也没有。
  • 但是存在这样的情况,我们只想在一个节点上部署一个服务实例。比如我们的节点监控,日志审计等,在每个节点上只需要一个相应的服务实例即可。根据这些特点,Kubernetes的开发者们创造了 DaemonSet 资源对象。

在Kubernetes集群中,DaemonSet 资源对象所管理的Pod叫Daemon Pod,该Pod主要有3个特征:

  • 运行在Kubernetes集群的每一个节点上;
  • 每个节点上仅有一个该Pod实例;
  • 当有新的节点加入到Kubernetes集群时,该Pod会自动的在新的节点创建出来;当老的节点被删除,它上面的Daemon Pod也会被回收;

DaemonSet 资源对象如何保证每个节点上有且仅有一个被管理的Daemon Pod的?
Kubernetes在创建DaemonSet资源时,会从Etcd上获取当前集群中所有node,遍历node列表,使用标签选择器检查当前节点是否有指定标签值的Pod。

  • 如果刚好有一个,正常情况,继续检查下一个节点;
  • 如果没有,则创建一个指定类型的Daemon Pod(创建时使用nodeAffinity字段指定节点名);
  • 如果有,但是多于一个,则进行删除操作;

在默认情况下,Kubernetes不允许用户在集群的master节点部署Pod。因此,master节点创建了一个叫node-role.kubernetes.io/master 的污点。所以,为了能让Daemon Pod能够部署在master节点,我们在yaml文件中定义该Pod的时候,必须设置这个Pod对该污点的容忍度。

二、资源对象 DaemonSet 的 Yaml 定义

2.1 在 Yaml 文件中定义 DaemonSet 资源对象

因为 DaemonSet 资源对象的Yaml 模版文件kubernetes 生成不了,下面是一个 DaemonSet 资源对象的定义。

apiVersion: apps/v1		# API 资源对象版本
kind: DaemonSet		# API 资源对象类型
metadata:
  name: prometheus-ds		# API 资源对象名称
  labels:
    app: prometheus-ds

spec:
  selector:
    matchLabels:
      name: prometheus-ds

  template:
    metadata:
      labels:
        name: prometheus-ds
    spec:
      containers:
      - image: prometheus-server	# 镜像名
        name: prometheus		# 容器名
        ports:
        - containerPort: 9191

我们可以看到 DaemonSet 资源对象跟 deployment 资源对象最大的差别就是 DaemonSet 资源对象没有 replicas 字段。这也暗示着 deployment 资源对象不会在K8S 集群中创建多个副本,而是在每个节点创建一个。

2.2 污点和容忍度

  • 污点就是 kubernetes 赋予节点的一种属性,或者说是标签。如果某个节点具有某个污点,也就是说这个节点被指定的key-value 键值对赋予了某个属性。容忍度是属于 Pod 的概念,Pod 的容忍度与节点的污点是相对的。表示某个Pod 在选择节点创建部署时是否可以容忍该节点的污点。
  • 污点、容忍度的概念是为了增强 kubernetes 编排、管理 Pod 的能力,丰富了调度 Pod 的方式,可以适配更多的使用场景;

三、资源对象 DaemonSet 的操作

下面是是使用 kubectl 命令工具操作 DaemonSet 的常见命令:

kubectl apply -f test-ds.yaml	# 根据yaml文件中的定义创建对应的 DaemonSet 资源对象
kubectl get ds	# 查看 daemonset 资源对象详情
kubectl get pod -o wide		# 查看pod状态详情

DaemonSet 资源对象的名称简写为ds

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!要在Kubernetes使用DaemonSet部署Zabbix,您可以按照以下步骤进行操作: 1. 配置Zabbix容器镜像:首先,您需要创建一个包含Zabbix Server或Zabbix Agent的容器镜像。您可以使用Zabbix官方提供的Docker镜像或自定义镜像,根据您的需求选择合适的镜像。 2. 编写DaemonSet配置文件:创建一个名为`zabbix-daemonset.yaml`的配置文件,并在其定义DaemonSet对象的规格。这个配置文件将指定Zabbix容器镜像、挂载卷、环境变量等配置。 以下是一个示例的`zabbix-daemonset.yaml`文件: ```yaml apiVersion: apps/v1 kind: DaemonSet metadata: name: zabbix-daemonset labels: app: zabbix spec: selector: matchLabels: app: zabbix template: metadata: labels: app: zabbix spec: containers: - name: zabbix image: your-zabbix-image:tag env: - name: ZBX_SERVER_HOST value: zabbix-server # 添加其他所需的环境变量 volumeMounts: - name: zabbix-data mountPath: /var/lib/zabbix volumes: - name: zabbix-data # 配置持久化据存储 # 添加其他所需的挂载卷配置 ``` 请根据您的环境和需求修改这个示例配置文件。 3. 应用配置文件:使用kubectl命令将配置文件应用到Kubernetes集群: ```shell kubectl apply -f zabbix-daemonset.yaml ``` Kubernetes将会创建一个DaemonSet对象,并在每个节点上创建一个Zabbix容器副本。 请注意,在部署之前,您需要确保在Kubernetes集群已经配置好了Zabbix Server,并且能够通过`zabbix-server`的主机名进行访问。您还可以根据需要添加其他环境变量和挂载卷的配置。 希望这些信息对您有所帮助!如果有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值