K8S学习指南(15)-k8s核心对象DaemonSet

news/2024/6/3 17:22:13 标签: kubernetes, 容器, 云原生

文章目录

    • 前言
    • DaemonSet的基本概念
      • 什么是DaemonSet?
      • DaemonSet的主要作用
    • DaemonSet的详细示例
      • 示例:运行Fluentd日志收集器的DaemonSet
        • DaemonSet的定义
        • 创建DaemonSet
        • 查看DaemonSet状态
        • 自动扩展
      • DaemonSet的最佳实践
    • 结论

前言

Kubernetes(K8s)作为一个领先的容器编排平台,提供了多种核心对象来简化和自动化容器化应用的管理。其中,DaemonSet是一个重要的概念,用于确保集群中的每个节点上都运行一个副本的Pod实例。本文将深入探讨DaemonSet的基本概念、使用场景以及提供详细的示例,以帮助读者更好地理解和应用这一核心对象。

DaemonSet的基本概念

什么是DaemonSet?

DaemonSet是Kubernetes中的一个核心对象,用于确保在集群的每个节点上都运行一个或多个Pod的副本。与其他控制器(如ReplicaSet和Deployment)不同,DaemonSet主要用于在整个集群中的节点上运行系统级别的任务,如日志收集、监控代理等。

DaemonSet的主要作用

  1. 节点级别任务的部署:DaemonSet确保在每个节点上运行一个或多个Pod的副本,用于执行节点级别的任务。
  2. 自动扩展:当新的节点加入集群时,DaemonSet会自动在新节点上启动Pod实例,确保集群中每个节点都有一个或多个Pod的副本。
  3. 系统服务的运行:DaemonSet常用于运行集群中的系统服务,如日志收集、监控代理等。

DaemonSet的详细示例

为了更好地理解和应用DaemonSet,我们将通过一个详细的示例来演示DaemonSet的创建、自动扩展以及节点级别任务的运行。

示例:运行Fluentd日志收集器的DaemonSet

考虑一个场景,我们希望在Kubernetes集群的每个节点上运行Fluentd日志收集器,以收集各个节点的容器日志。

DaemonSet的定义
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd-daemonset
spec:
  selector:
    matchLabels:
      app: fluentd
  template:
    metadata:
      labels:
        app: fluentd
    spec:
      containers:
      - name: fluentd-container
        image: fluent/fluentd:latest
        volumeMounts:
        - name: varlog
          mountPath: /var/log
      tolerations:
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
  updateStrategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: fluentd
    spec:
      containers:
      - name: fluentd-container
        image: fluent/fluentd:latest
        volumeMounts:
        - name: varlog
          mountPath: /var/log
      tolerations:
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
  updateStrategy:
    type: RollingUpdate

在上述示例中:

  • selector 使用标签选择器选择具有标签 app: fluentd 的节点,以运行DaemonSet中定义的Pod。
  • template 定义了创建Pod的规范,包括使用的镜像、标签等。
  • volumeMounts 将节点的/var/log目录挂载到Fluentd容器中,以收集节点的容器日志。
  • tolerations 允许DaemonSet在Master节点上运行,这对于一些特殊的集群配置是必要的。
创建DaemonSet
kubectl apply -f fluentd-daemonset.yaml

以上命令将根据定义的DaemonSet在集群的每个节点上启动Fluentd的Pod实例。

查看DaemonSet状态
kubectl get daemonsets
kubectl get pods

通过上述命令,我们可以查看DaemonSet和Pod的状态,确保Fluentd的Pod实例已成功运行。

自动扩展

当新的节点加入集群时,DaemonSet会自动在新节点上启动Fluentd的Pod实例,确保每个节点都有一个Fluentd的副本。

DaemonSet的最佳实践

  1. 谨慎使用tolerations:在使用tolerations时,要注意不要过度使用,确保DaemonSet能够在需要的节点上正常运行。
  2. 合理设置Pod规范:根据具体任务的需求,合理设置DaemonSet中Pod的规范,包括镜像、标签、卷挂载等。
  3. 监控和报警:通过监控DaemonSet和相关的Pod状态,设置相应的报警机制,可以及时发现并解决潜在的问题,确保系统的稳定性。
  4. 考虑持久化存储:在一些场景下,DaemonSet可能需要使用持久化存储来保存状态或数据,要根据具体需求进行配置。
  5. 备份和恢复策略:根据应用的重要性,考虑实施备份和恢复策略,以防止意外数据丢失或服务中断。

结论

DaemonSet作为Kubernetes的核心对象之一,为在集群中每个节点上运行一个或多个Pod提供了便捷的方式。通过声明式的定义,DaemonSet能够确保系统级别的任务在整个集群中得到执行。通过本文的介绍和示例,希望读者能够更深入地理解和熟练使用DaemonSet,为在Kubernetes中管理节点级别任务提供有力的支持。


http://www.niftyadmin.cn/n/5261421.html

相关文章

华纳云:docker启动报错的原因和解决方法

Docker 启动报错可能由多种原因引起。以下是一些建议,可用于解决 Docker 启动问题: 查看 Docker 日志: 查看 Docker 的日志可以提供更多的详细信息,有助于定位问题。 sudo journalctl -xe | grep docker 或者查看 Docker 服务的详…

flutter调试器查看不了副页面(非主页面/子页面)

刚接触flutter,写了两个页面,通过按钮,可以从主页面跳转到副页面,副页面我自己写的一个独立的dart文件,在主页面的代码中导入使用。但是当我运行代码后,点击跳转的时候,却发现查看不到对应的副页…

NOIP2017提高组day2 - T2:宝藏

题目链接 [NOIP2017 提高组] 宝藏 题目描述 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 n n n 个深埋在地下的宝藏屋, 也给出了这 n n n 个宝藏屋之间可供开发的 m m m 条道路和它们的长度。 小明决心亲自前往挖掘所有宝藏屋中的宝藏。但…

cache教程 7.使用 protobuf 通信

0.对原教程的一些见解 原教程的作者的写法是抽象接口出来,而一般人或小白比较难能想到。原教程是修改了Get方法,而我的做法是修改getFromPeer,在其进行proto解码。 原教程的protbuf文件中写上service,而这是用在RPC中的&#xf…

虚拟机/etc/fstab 变更只读模式ready-only处理

虚拟机误操作将/etc/fstab中的根目录注释掉了,重启虚机后虚机可以正常启动,但无法进行修改 # vi /etc/fstab 提示文件只读 无法进行操作 解决办法: 1、重启虚机,按e进入单用户模式 2、修改内核所在那行参数,将ro 修…

QT QIFW Linux下制作软件安装包

一、概述 和windows的操作步骤差不多,我们需要下装linux下的安装程序,然后修改config.xml、installscript.qs和package.xml文件。 QT QIFW Windows下制作安装包(一)-CSDN博客 一、下装QIFW 下装地址:/official_releases/qt-installer-fra…

​multiprocessing.shared_memory --- 可跨进程直接访问的共享内存​

源代码: Lib/multiprocessing/shared_memory.py 3.8 新版功能. 该模块提供了一个 SharedMemory 类,用于分配和管理多核或对称多处理器(SMP)机器上进程间的共享内存。为了协助管理不同进程间的共享内存生命周期,multiprocessing.m…

Python PDF转DOCX文档

第三方包:pdf2docx from pdf2docx import Converterdef convert_pdf_to_docx(pdf_path, docx_path):# 创建一个转换器对象converter Converter(pdf_path)# 将PDF转换为DOCXconverter.convert(docx_path, start0, endNone)# 关闭转换器converter.close()# 调用函数…