D23 kubernetes 工作负载资源对象-DaemonSet{简介、创建、升级、回滚、删除}

news/2024/9/20 15:55:26/文章来源:https://www.cnblogs.com/suyj/p/18422654

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: filebeatnamespace: kube-system
spec:selector:matchLabels:app: filebeattemplate:metadata:labels:app: filebeatspec:containers:- name: filebeatimage: docker.elastic.co/beats/filebeat:8.10.1volumeMounts:- name: logsmountPath: /var/logvolumes:- name: logshostPath: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=filebeatcontroller-revision-hash=7b974cb5bc
Annotations:  deprecated.daemonset.template.generation: 1
API Version:  apps/v1
Data:Spec:Template:$patch:  replaceMetadata:Creation Timestamp:  <nil>Labels:App:  filebeatSpec:Containers:Image:              docker.elastic.co/beats/filebeat:8.10.1Image Pull Policy:  IfNotPresentName:               filebeatResources:Termination Message Path:    /dev/termination-logTermination Message Policy:  FileVolume Mounts:Mount Path:  /var/logName:        logsDns Policy:      ClusterFirstRestart Policy:  AlwaysScheduler Name:  default-schedulerSecurity Context:Termination Grace Period Seconds:  30Volumes:Host Path:Path:  /var/logType:Name:    logs
Kind:              ControllerRevision
Metadata:Creation Timestamp:  2024-09-20T04:06:54ZOwner References:API Version:           apps/v1Block Owner Deletion:  trueController:            trueKind:                  DaemonSetName:                  filebeatUID:                   65a60c23-2c4e-45cf-aee5-2a883310d0dfResource Version:        720105UID:                     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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/800569.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解Java对象结构

一、Java对象结构 实例化一个Java对象之后,该对象在内存中的结构是怎么样的?Java对象(Object实例)结构包括三部分:对象头、对象体和对齐字节,具体下图所示1、Java对象的三部分 (1)对象头 对象头包括三个字段,第一个字段叫作Mark Word(标记字),用于存储自身运行时的…

Kyutai 开源对话模型 Moshi;李飞飞空间智能公司已筹集超过 2.3 亿美元丨 RTE 开发者日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人观点…

P3224 [HNOI2012] 永无乡

题意思路 用并查集维护连通性,每个集合维护一个平衡树,每次合并两个集合的时候,将一个平衡树的节点一个一个加入到另一个中。 这么做不会超时,每次将小的平衡树拆掉放到大的中,可以证明不会超过 \(O(\log n)\) 次。 总时间复杂度 \(O(n \log ^ 2 n)\)。 代码 #include <…

C#使用HttpWebRequest读取网站内容遭遇503错误

本人多年编程小白,天生编程白痴体质。大家莫见笑。 自己用C#写了一段代码,使用HttpWebRequest,通过SOHU的API接口获取指定股票的交易信息。 该段代码一直运行正常。最近开始报错。 详细信息如下: System.Net.WebException HResult=0x80131509 Message=远程服务器返回错误: (…

算法随笔——wqs二分

学习链接 学习链接 应用条件选择恰好 \(x\) 个物品,求最优值 设 \(x\) 对应最优值 \(f_x\) ,\((x,f_x)\) 在图像上呈现为凸包。 无数量限制问题简单可做问题转化 有 \(n\) 个物品,恰好选 \(m\) 个,计算最优值。 做法例题 模版题:P2619

modbus设备数据 转 profinet IO项目案例

目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 准备工作 2 4 设置网关采集MODBUS从站数据 2 5 用PROFINET IO协议转发数据 8 6 案例总结 10 1 案例说明设置网关采集Modbus设备数据 把采集的数据转成profinet IO协议转发给其他系统。2 VFBOX网关工作原理 VFBOX网关是协议转换网关,…

WPF开发 direct3d11 调试报错

环境:VS2022 WPF Win11 过程:准备调试d3d11着色器转换nv12->rgb的过程 报错信息:DXGI_ERROR_SDK_COMPONENT_MISSING 应用程序请求的操作依赖于已缺失或不匹配的 SDK 组件。 解决方案::需要在自己电脑中进行设置 【设置】-【系统】-【可选功能】-【查看功能】-【图形工具…

Cloudera安装指南:打造你的大数据基础环境

Cloudera manage系统环境准备、基础环境安装、集群部署以及应用组件安装等全方位的技术运维内容。无论您是初学者还是资深工程师,都能在这里找到适合自己的学习资料和实战经验。我们致力于为您提供最新、最全面的Cloudera大数据技术运维知识,帮助您轻松应对各种技术挑战。Clo…

uni-app上架ios语言设置

客户反馈了一个问题,日文的应用上架后在商店中,却显示了其他语言,解决方案如下 1.添加要设置的语言2.最重要的一步,在 app-plus 中添加下述代码 name 是app名称"app-plus" : {"locales" : {"ja" : {"name" : "xxx","…

【算法】topk之字节题

1. 合并两个有序列表 🔗 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1:输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4] 示例 2: 输入:l1 = [], l2 = [] 输出:[] 示例 3: 输入:l1 = [], l2 = [0] …

flink 启动Job加载外部jar都有哪些方法?

flink 启动Job加载外部jar都有哪些方法 在 Apache Flink 版本中,启动 Job 时加载外部 Jar 包有几种不同的方法。这些方法允许用户引入自定义的 UDF(用户定义函数)或其他依赖项。以下是几种常见的方法: 1.使用 flink run 命令直接启动 你可以通过命令行工具 flink run 来指定…

切片器110-112

透视表切片器抓照片场景描述 针对产品汇总分析数据透视表,制做数据看板,样例如下所示:具体操作制作产品汇总分析数据透视表插入选项卡——勾选雇员——确定——插入选项卡——插入二维柱状图——将数据透视表右侧雇员拖拽到筛选字段——在空白单元格输入INDIRECT函数和MATCH…