首页 > 其他分享 >D23 kubernetes 工作负载资源对象-DaemonSet{简介}

D23 kubernetes 工作负载资源对象-DaemonSet{简介}

时间:2024-09-20 15:45:21浏览次数:12  
标签:filebeat k8s kubernetes D23 DaemonSet kube 节点 daemonset

1、DaemonSet简介

  • DaemonSet资源用于在集群中的每个节点上运行一个pod副本,具有以下特点
- 在每个节点上运行一个pod
- 当向集群中加入一个新节点或者从集群中移除一个节点时,DaemonSet会自动在新节点上启动一个pod或在移除的节点上删除pod
- 可以使用节点选择器或亲和性来定义pod应该在哪些节点上运行
  • DaemonSet的特点也决定了它具有以下的应用场景:
- 在每个节点上运行日志采集程序:如filebeat、fluentd,以手机节点级别的日志
- 在每个节点运行监控代理程序,如:Prometheus exporter、 zabbix agent,以收集节点上的监控指标数据
- 在每个节点运行存储组件,如:ceph、glusterfs,以在每个节点上提供分布式存储能力,供应用程序使用
- 在每个节点上运行网络插件,如:calico、flannel,以在每个节点上实现网络转发功能。

2、DaemonSet创建

  • 创建一个filebeat日志采集程序,需要在每个节点上进行部署进行采集日志。就要用到DaemonSet来管理filebeat,配置示例如下:
[root@k8s-master k8s]# cat filebeat-ds.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: filebeat
  namespace: kube-system
spec:
  selector:
    matchLabels:
      app: filebeat
  template:
    metadata:
      labels:
        app: filebeat
    spec:
      containers:
      - name: filebeat
        image: docker.elastic.co/beats/filebeat:8.10.1
        volumeMounts:
        - name: logs
          mountPath: /var/log
      volumes:
      - name: logs
        hostPath:
          path: /var/log
  • 在上述示例中,定义了一个hostpath类型的卷,用于将节点上的系统日志目录/var/log 挂载到容器中,以便filebeat可以读取系统日志文件
  • 创建DaemonSet资源
[root@k8s-master k8s]# kubectl apply -f filebeat-ds.yaml
  • 查看DaemonSet资源
[root@k8s-master k8s]# kubectl get daemonset -n kube-system
NAME         DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
filebeat     2         2         2       2            2           <none>                   3m12s
kube-proxy   3         3         3       3            3           kubernetes.io/os=linux   24d
  • 除了刚刚创建的filebeat,还有kube-proxy,也是通过DaemonSet进行管理
  • 查看与filebeat相关的pod和运行的节点
[root@k8s-master k8s]# kubectl get pod -l app=filebeat -n kube-system -o wide
NAME             READY   STATUS    RESTARTS   AGE     IP              NODE         NOMINATED NODE   READINESS GATES
filebeat-9vl65   1/1     Running   0          5m46s   10.244.58.196   k8s-node02   <none>           <none>
filebeat-p7hq5   1/1     Running   0          5m46s   10.244.85.218   k8s-node01   <none>           <none>
  • 可以看到,pod分别运行在k8s-node01和k8s-node02节点上,为什么k8s-master节点上没有运行呢,这是因为k8s-master节点默认设置了污点,需要配置相应的污点容忍度才能将其调度到该节点上

3、DaemonSet升级

  • 可通过更新DaemonSet对象中的image字段或通过 kubectl set image 命令来实现filebeat的升级。
将filebeat从8.10.1 升级到8.10.2
[root@k8s-master k8s]# kubectl set image daemonset/filebeat filebeat=docker.elastic.co/beats/filebeat:8.10.2 -n kube-system
daemonset.apps/filebeat image updated
升级过程中进行检查
[root@k8s-master k8s]# kubectl get pod -l app=filebeat -n kube-system -o wide
NAME             READY   STATUS              RESTARTS   AGE   IP              NODE         NOMINATED NODE   READINESS GATES
filebeat-bxtjx   1/1     Running             0          85s   10.244.85.224   k8s-node01   <none>           <none>
filebeat-tf8mx   0/1     ContainerCreating   0          38s   <none>          k8s-node02   <none>           <none>

4、DaemonSet回滚

  • 如果升级失败,可以回滚到上一个稳定版本
[root@k8s-master k8s]# kubectl rollout history daemonset/filebeat -n kube-system
[root@k8s-master k8s]# kubectl rollout history daemonset/filebeat -n kube-system
daemonset.apps/filebeat
REVISION  CHANGE-CAUSE
1         <none>
2         <none>

[root@k8s-master k8s]# kubectl rollout undo daemonset/filebeat -n kube-system
daemonset.apps/filebeat rolled back
[root@k8s-master k8s]# kubectl rollout history daemonset/filebeat -n kube-system
daemonset.apps/filebeat
REVISION  CHANGE-CAUSE
2         <none>
3         <none>

[root@k8s-master k8s]# kubectl get pod -l app=filebeat -n kube-system -o wide
NAME             READY   STATUS    RESTARTS   AGE   IP              NODE         NOMINATED NODE   READINESS GATES
filebeat-8q9h7   1/1     Running   0          23s   10.244.58.210   k8s-node02   <none>           <none>
filebeat-skjrk   1/1     Running   0          20s   10.244.85.222   k8s-node01   <none>           <none>
	与Deployment不同,DaemonSet是通过Controllerrevision进行历史版本管理的。每次升级版本时,都会创建一个新的Controllerrevision对象,用于保存该版本的完整配置
  • 查看Controllerrevision对象
[root@k8s-master k8s]# kubectl get controllerrevision -n kube-system
NAME                    CONTROLLER                  REVISION   AGE
filebeat-7b974cb5bc     daemonset.apps/filebeat     3          3h40m
filebeat-96bd7b554      daemonset.apps/filebeat     2          12m
kube-proxy-67485c9d66   daemonset.apps/kube-proxy   1          24d
查看详情
[root@k8s-master k8s]# kubectl describe controllerrevision filebeat-7b974cb5bc -n kube-system
Name:         filebeat-7b974cb5bc
Namespace:    kube-system
Labels:       app=filebeat
              controller-revision-hash=7b974cb5bc
Annotations:  deprecated.daemonset.template.generation: 1
API Version:  apps/v1
Data:
  Spec:
    Template:
      $patch:  replace
      Metadata:
        Creation Timestamp:  <nil>
        Labels:
          App:  filebeat
      Spec:
        Containers:
          Image:              docker.elastic.co/beats/filebeat:8.10.1
          Image Pull Policy:  IfNotPresent
          Name:               filebeat
          Resources:
          Termination Message Path:    /dev/termination-log
          Termination Message Policy:  File
          Volume Mounts:
            Mount Path:  /var/log
            Name:        logs
        Dns Policy:      ClusterFirst
        Restart Policy:  Always
        Scheduler Name:  default-scheduler
        Security Context:
        Termination Grace Period Seconds:  30
        Volumes:
          Host Path:
            Path:  /var/log
            Type:
          Name:    logs
Kind:              ControllerRevision
Metadata:
  Creation Timestamp:  2024-09-20T04:06:54Z
  Owner References:
    API Version:           apps/v1
    Block Owner Deletion:  true
    Controller:            true
    Kind:                  DaemonSet
    Name:                  filebeat
    UID:                   65a60c23-2c4e-45cf-aee5-2a883310d0df
  Resource Version:        720105
  UID:                     779a82cf-90f3-4fbb-9ae8-38c1f6ba368c
Revision:                  3
Events:                    <none>
  • ControllerRevision对象实际上将更新的完整配置保存在data字段中。当执行回滚操作时,会读取data字段的内容来应用配置

5、删除

  • 删除名为filebeat的DaemonSet资源
[root@k8s-master k8s]# kubectl delete daemonset filebeat -n kube-system
daemonset.apps "filebeat" deleted

标签:filebeat,k8s,kubernetes,D23,DaemonSet,kube,节点,daemonset
From: https://www.cnblogs.com/suyj/p/18422654

相关文章

  • Kubernetes-POD生成 java dump文件
    目录背景配置钩子函数验证背景在今天的线上业务中,某服务频繁重启。经过排查日志和事件信息,确认是由于OOM(OutofMemory)导致服务重启。为了方便研发团队定位OOM的具体原因,我们决定在OOM发生时自动生成内存快照(heapdump),供后续分析使用。关于OOM的详细介绍,可以参考这篇博......
  • Kubernetes-etcd集群证书更新
    目录问题现象排错思路查看kubelet状态查看apiserver容器日志查看etcd状态查看证书到期时间etcd集群证书更新查看证书路径所有节点备份证书所有节点备份etcd数据生成etcd集群配置文件生成ca证书生成etcd证书查看新证书修改etcd启动配置文件所有节点同时启动etcd问题现象开发环境......
  • 一文读懂DaemonSet以及实践攻略
    一文读懂DaemonSet以及实践攻略目录1概念1.1什么是DaemonSet1.2DaemonSet的工作机制1.3适用场景1.4DaemonSet与Deployment的区别1.5DaemonSet的通信模式2实践案例:部署和更新Fluentd日志收集器2.1部署FluentdDaemonSet2.1.1定义FluentdDaemonSet2.1.2......
  • 从零开始掌握 Kubernetes:Pod 和 Deployment 的幕后故事
     1.引言在如今的技术世界中,随着微服务架构的广泛应用和云原生理念的兴起,应用程序的开发、部署和管理发生了翻天覆地的变化。容器技术的出现使得开发者可以轻松地将应用及其所有依赖打包在一个轻量级、可移植的容器中,这种方式大大提升了应用的部署效率和一致性。然而,随着应......
  • Kubernetes(K8S)实战:构建高可用的微服务架构
    Kubernetes(K8S)实战:构建高可用的微服务架构在云计算与容器化技术日新月异的今天,Kubernetes(简称K8S)凭借其强大的容器编排能力,已成为企业构建云原生应用的首选平台。本文将深入探讨Kubernetes的核心概念、架构设计原则,并通过一个实际案例——构建一个高可用的微服务架构,展示如......
  • 大数据新视界 --大数据大厂之Kubernetes与大数据:容器化部署的最佳实践
           ......
  • Kubernetes Ingress
    目录一、为什么需要Ingress二、什么是Ingress,IngressController三、Ingress的工作原理四、Ingress配置资源模版五、实例1、搭建Ingress环境1.1、Ingress-Nginx官网地址1.2、master节点下载deploy.yaml1.3、所有节点提前pull必须的镜像1.4、修改并应用deploy.yaml文件......
  • GD230531B. 猜测
    GD230531B.猜测Alice和Bob又在玩游戏。天天玩,玩不死你给你\(n\)个数,\(n\le10^7\),数字离散化之后,Alice每次选取值域相等或相邻的两个数,分别放到Bob的左右手,Bob可以选择看左手或者看右手,问最优策略下,不管Alice怎么选,Bob的获胜概率最少为多少。首先左手右手本质是一......
  • Kubernetes Service与服务发现
    1.Service资源基础概念1.1Service资源Service是Kubernetes标准的API资源类型之一为动态的Pod资源提供近似静态的流量入口服务发现:通过标签选择器筛选同一名称空间下的Pod资源的标签,完成Pod筛选实际上是由与Service同名的Endpoint或EndpointSlice资源及控制器完成流量......
  • D22 kubernetes 工作负载资源对象-Deployment{应用回滚、应用扩缩容、应用下线、应用
    1、应用回滚简介 在滚动更新过程中,如果新版本的pod启动失败或者已升级完成,但新版本中存在bug,则可以选择回滚到之前的可用版本。‘kubectlrollout‘命令可以方便的执行回滚和其他滚动更新管理,该命令支持Deployment、DaemonSet和statefulset资源查看博客网站的历史版本[root@......