【Kubernetes资源篇】DaemonSet控制器入门实战详解

这篇具有很好参考价值的文章主要介绍了【Kubernetes资源篇】DaemonSet控制器入门实战详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、DaemonSet控制器理论知识

中文官方文档参考:

1、DaemonSet控制器是什么?

Kubernetes中的DaemonSet(简写ds)控制器是一种用来运行守护进程应用程序的控制器,它确保每个Node节点都运行具有指定配置的 Pod副本,当Node节点的加入或删除DaemonSet控制器会自动创建或删除相应的 Pod副本。

特点:

  1. 每个节点只运行一个实例:DaemonSet确保每个节点上只运行一个 Pod 实例。这确保了在每个节点上部署的守护进程能够与主机紧密结合,以提供更高的可用性和可靠性。

  2. 滚动升级:在更新 DaemonSet 时,可以通过几种不同的方式控制滚动升级。可以选择一次更新所有 Pod 实例,也可以在运行新版本之前逐步删除旧的 Pod 实例。

  3. 在启动前执行任务:可以通过 DaemonSet 的

2、DaemonSet控制器工作原理

DaemonSet控制器会监听K8s的daemonset对象、pod对象、node对象,如果这些被监听的对象变动,就会触发syncLoop循环,让K8s集群朝着daemonset对象描述的状态进行演进。

3、DaemonSet典型应用场景

  • 日志和指标收集:在每个节点上运行日志和指标收集器,比如flunentd 、 logstash、filebeat等。

  • 数据存储:在每个节点上运行数据存储,比如glusterd 、ceph等。

  • 监控组件:在每个节点上运行监控组件,比如prometheus、node_exporter、collectd等。

4、DaemonSet与Deployment的区别

  • deployment创建出来的Pod,会分布在各个Node节点,每个节点都可能运行好几个副本。
  • daemonset创建出来的Pod,每个Node节点上最多只能运行一个Pod副本,通常用来运行后台服务和守护进程应用程序。

因此,一般情况下,如果要部署后台服务和守护进程等单节点应用程序,可以使用DaemonSet;如果需要部署复杂的应用程序,如Web服务等,那就需要使用deployment了。

二、案例:DaemonSet控制器实战演示

1、使用DaemonSet部署日志收集组件

部署 fluentd 日志收集组件(只简单演示DaemonSet使用,并非做ELK整体实验)YAML资源清单如下:

cat fluentd-daemonset.yaml 
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: elasticsearch-fluentd
  namespace: default
spec:
  selector:
    matchLabels:
      app: elasticsearch-fluentd
  template:
    metadata:
      labels:
        app: elasticsearch-fluentd
    spec:
      tolerations:              # 定义容忍度,运行在master节点运行(根据自己master的污点定义)
      - effect: NoSchedule  
        key: node-role.kubernetes.io/control-plane
      volumes:                 # 定义卷名称为 system-log
      - name: system-log
        hostPath: 
          path: /var/log
      containers:
      - name: elasticsearch-fluentd
        image: qinziteng/fluentd:2.5.1 
        imagePullPolicy: IfNotPresent
        resources:              # 定义资源限制
          requests:
            cpu: 100m
            memory: 300Mi
          limits:
            memory: 300Mi
        volumeMounts:
        - name: system-log    # 使用system-log卷,挂载到容器/var/log目录
          mountPath: /var/log

执行YAML文件:

kubectl apply -f fluentd-daemonset.yaml

查看Pod状态,如下图可以看到分包在K8s集群每个节点上创建Pod

kubectl get pods -o wide

【Kubernetes资源篇】DaemonSet控制器入门实战详解

2、DaemonSet管理Pod滚动更新

DaemonSet更新策略在 spec.updateStrategy 字段定义,目前支持两种更新策略:

  • rollingUpdate:由于daemonset不支持一个节点运行多个Pod,所以rollingUpdate更新策略是先删除在更新。
  • OnDelete:默认不做更新,需要手动删除后更新。

第一步:创建daemonset资源并使用 nginx:1.18.0 镜像,YAML 如下:

cat web-daemonset.yaml 
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: web-daemonset
  namespace: default
spec:
  updateStrategy:
    rollingUpdate:
      maxUnavailable: 1
  selector:
    matchLabels:
      app: web-daemonset
  template:
    metadata:
      labels:
        app: web-daemonset
    spec:
      tolerations:            
      - effect: NoSchedule    # 容忍度根据master 污点定义
        key: node-role.kubernetes.io/control-plane
      containers:
      - name: web-daemonset
        image: nginx:1.18.0
        imagePullPolicy: IfNotPresent
        resources:             
          requests:
            cpu: 100m
            memory: 300Mi
          limits:
            memory: 300Mi

执行YAML 文件:

kubectl apply -f web-daemonset.yaml

查看Pod状态:

kubectl get pods -o wide -l app=web-daemonset

【Kubernetes资源篇】DaemonSet控制器入门实战详解

第二步:更新镜像使用nginx:latest

只更改image地方,其余地方不做操作,然后重新apply 使其生效。

【Kubernetes资源篇】DaemonSet控制器入门实战详解

kubectl apply -f web-daemonset.yaml

第三步:验证镜像是否更新

kubectl describe pod web-daemonset-2vtd9|grep Image

【Kubernetes资源篇】DaemonSet控制器入门实战详解

可以看到镜像版本更新成功了,这种更新其实就是先删除旧版本,再使用新的镜像版本进行创建。文章来源地址https://www.toymoban.com/news/detail-498172.html

三、总结

  • DaemonSet控制器用于控制每个Node节点有运行指定Pod副本集,当添加或删除Node节点时,DaemonSet会自动创建指定的Pod副本集,来保证每一个Node节点都运行此Pod。用于收集日志、监控等场景。
  • DaemonSet rollingUpdate更新策略是先删除旧版本Pod,在创建新版本Pod,因为每个Node节点只能创建一个Pod副本集。

到了这里,关于【Kubernetes资源篇】DaemonSet控制器入门实战详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【云原生|Kubernetes】13-Deployment资源控制器详解

    kubernetes中有很多资源控制器,这些资源控制器我们只说一些重要且常用的。在介绍Deploymen之前,我们会逐个介绍这些控制器。 Pod控制器介绍 ​ Pod控制器是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试 进行重启,当根据重启策略无效

    2024年02月16日
    浏览(38)
  • k8s控制器之DaemonSet--第五弹更新 DaemonSet

    DaemonSet 有两种更新策略: OnDelete : 使用 OnDelete 更新策略时,在更新 DaemonSet 模板后,只有当你手动删除老的 DaemonSet pods 之后,新的 DaemonSet Pod 才会 被自动创建。跟 Kubernetes 1.6 以前的版本类似。 RollingUpdate : 这是默认的更新策略。使用 RollingUpdate 更新策略时,在更新 DaemonSe

    2024年02月11日
    浏览(12)
  • k8s控制器之DaemonSet--第二弹创建DaemonSet

    下面是 DaemonSet 的 YAML 文件示例 daemonset.yaml。该例子中的 DaemonSet 运行了一个 fluentd-elasticsearch 的 docker 镜像: 执行如下命令可创建该 DaemonSet: 执行结果: 与其他所有 Kubernetes API 对象相同,DaemonSet 需要如下字段: apiVersion kind metadata 除此之外,DaemonSet 还需要 .spec 字段 .spec

    2024年02月10日
    浏览(10)
  • k8s控制器之DaemonSet--第三弹DaemonSet 是如何调度的

    v1.12以后默认禁用 通常,Kubernetes Scheduler(调度器)决定了 Pod 在哪个节点上运行。然而 DaemonSet Controller 创建的 Pod 已经指定了 .spec.nodeName 字段,因此: Node 节点的 unschedulable (opens new window)字段将被 DaemonSet Controller 忽略 DaemonSet Controller 可以在 kubernetes scheduler 启动之前创建

    2024年02月10日
    浏览(16)
  • Kubernetes 启动Pod的方法-Pod的调度算法-Pod间的通信-k8s的控制器-Pod资源控制-发布Service服务

    Kubernetes 启动Pod的方法-Pod的调度算法-Pod间的通信-k8s的控制器-Pod资源控制-发布Service服务

    目录 Pod 参考文档:Pod | Kubernetes Pod配置文件:simple-pod.yaml 对master进行如下操作 Pod的状态有: 参考文档:(70条消息) Pod生命周期中的状态解释_pod状态_闹玩儿扣眼珠子的博客-CSDN博客 进入Pod内的nginx容器: 当我们创建一个Pod,其中的步骤是什么?(启动Pob的流程) 大概步骤:

    2024年02月13日
    浏览(50)
  • 学习笔记二十七:K8S控制器Statefulset入门到企业实战应用

    学习笔记二十七:K8S控制器Statefulset入门到企业实战应用

    用于管理有状态应用程序的部署。与无状态应用程序不同,有状态应用程序在运行时通常要求稳定的网络标识和持久性存储。 有状态服务:StatefulSet是有状态的集合,管理有状态的服务,它所管理的Pod的名称不能随意变化。数据持久化的目录也是不一样,每一个Pod都有自己独

    2024年02月06日
    浏览(17)
  • 18-k8s控制器资源-cronjob控制器

    18-k8s控制器资源-cronjob控制器

            job控制器是执行完一次任务,就结束;         cronjob控制器,是基于job控制器,定期频率性执行任务;等同于linux系统中的crontab一样; [root@k8s231 pi]# vim cronjob.yaml apiVersion: batch/v1 kind: CronJob metadata:   name: xinjizhiwa spec:   schedule: \\\"* * * * *\\\"   #定义job的模板   jobTemplate

    2024年02月22日
    浏览(58)
  • kubernetes-控制器

    kubernetes-控制器

    目录 一、replicaset 二、deployment 1、版本迭代 2、回滚 3、滚动更新策略 4、暂停与恢复 三、daemonset 四、statefulset 五、job 六、cronjob ReplicaSet用于保证指定数量的 Pod 副本一直运行 replicaset是通过标签匹配pod replicaset自动控制副本数量,pod可以自愈 回收资源 Deployment 的主要作用是实

    2024年02月06日
    浏览(11)
  • Kubernetes 准入控制器

    Kubernetes 准入控制器

    Kubernetes 极大地提高了当今生产中后端集群的速度和可管理性。由于灵活、可扩展、易用,Kubernetes 已成为容器编排的事实标准。Kubernetes 还提供了一系列保护功能。而 Admission Controllers(准入控制器) 是一组安全相关的插件,启用后能进一步使用 Kubernetes 更高级的安全功能。

    2024年02月06日
    浏览(12)
  • 15-k8s控制器资源-deployment/部署控制器

    15-k8s控制器资源-deployment/部署控制器

            在学习rc和rs控制器资源时,我们指导,这两个资源都是控制pod的副本数量的,但是,他们两个有个缺点,就是在部署新版本pod或者回滚代码的时候,需要先apply资源清单,然后再删除现有pod,通过资源控制,重新拉取新的pod来实现回滚或者迭代升级;         那么

    2024年02月21日
    浏览(17)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包