K8S之DaemonSet控制器

2024-03-24 09:20

本文主要是介绍K8S之DaemonSet控制器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

DaemonSet控制器

  • 概念、原理解读、应用场景
    • 概述
    • 工作原理
    • 典型的应用场景介绍
    • DaemonSet 与 Deployment 的区别
  • 解读资源清单文件
  • 实践案例

概念、原理解读、应用场景

概述

DaemonSet控制器能够确保K8S集群所有的节点都分别运行一个相同的pod副本;
当集群中增加node节点时,新的node节点也会自动创建一个pod副本;
当node节点从集群移除,这些pod也会自动删除;删除Daemonset也会删除它创建的pod

工作原理

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

典型的应用场景介绍

在集群的每个节点上运行存储,比如:glusterd 或 ceph。
在每个节点上运行日志收集组件,比如:flunentd 、 logstash、filebeat等。
在每个节点上运行监控组件,比如:Prometheus、 Node Exporter 、collectd等。

DaemonSet 与 Deployment 的区别

Deployment :部署的 Pod副本 会分布在各个 Node 上,一个 Node 可能运行好几个副本

DaemonSet :每个 Node 上最多只能运行一个副本

解读资源清单文件

查看定义Daemonset资源需要的字段有哪些

kubectl explain ds

在这里插入图片描述
查看DaemonSet的spec字段如何定义

kubectl explain ds.spec

在这里插入图片描述
字段解释说明

  • minReadySeconds:当新的pod启动几秒种后,再kill掉旧的pod
  • revisionHistoryLimit:保存多少个历史版本
  • selector(必填):用于匹配pod的标签选择器
  • template(必填):定义Pod的模板,基于这个模板创建的所有pod是一样的
  • updateStrategy:daemonset的升级策略

实践案例

实验:部署日志收集组件fluentd
环境说明:使用K8S的 V1.25.0版本,集群是1个master,2个work节点
在这里插入图片描述
编写DaemonSet资源清单

vim daemonset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata: name: fluentd-elasticsearch # #资源的名字namespace: monitor # 资源使用的名称空间labels:  # DaemonSet资源具有的标签k8s-app: fluentd-logging
spec:selector:   # 标签选择器,匹配pod的标签matchLabels:name: fluentd-elasticsearchtemplate:metadata:labels:         # 基于模板定义的pod所具有的标签name: fluentd-elasticsearchspec:tolerations:   # 定义容忍度,master上自带了污点 为了让pod能调度到master节点上定义的容忍度- key: node-role.kubernetes.io/control-planeeffect: NoSchedulecontainers:  # 定义容器- name:  fluentd-elasticsearchimage: fluentd:v2.5.1resources:  # 资源配额limits: memory: 500Mirequests: cpu: 100mmemory: 200MivolumeMounts:- name: varlogmountPath: /var/log # 挂载容器目录- name: varlibdockercontainersmountPath: /var/lib/docker/containers # 把/var/lib/docker/containers/挂载到容器里readOnly: true # 挂载目录是只读权限terminationGracePeriodSeconds: 30 # 优雅的关闭服务volumes:- name: varloghostPath:path: /var/log # 基于本地目录创建一个卷- name: varlibdockercontainershostPath:path: /var/lib/docker/containers

启动资源

kubectl apply -f daemonset.yaml

查看DaemonSet创建情况

kubectl get ds -n monitor 

在这里插入图片描述

查看DaemonSet控制器创建的pod情况

kubectl get pods -n monitor -o wide

在这里插入图片描述

通过上面可以看到在k8s的三个节点均创建了fluentd这个pod

pod的名字是由 {控制器的名字} - {随机数} 组成的

这篇关于K8S之DaemonSet控制器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/841159

相关文章

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

k8s中实现mysql主备过程详解

《k8s中实现mysql主备过程详解》文章讲解了在K8s中使用StatefulSet部署MySQL主备架构,包含NFS安装、storageClass配置、MySQL部署及同步检查步骤,确保主备数据一致... 目录一、k8s中实现mysql主备1.1 环境信息1.2 部署nfs-provisioner1.2.

k8s admin用户生成token方式

《k8sadmin用户生成token方式》用户使用Kubernetes1.28创建admin命名空间并部署,通过ClusterRoleBinding为jenkins用户授权集群级权限,生成并获取其t... 目录k8s admin用户生成token创建一个admin的命名空间查看k8s namespace 的

k8s搭建nfs共享存储实践

《k8s搭建nfs共享存储实践》本文介绍NFS服务端搭建与客户端配置,涵盖安装工具、目录设置及服务启动,随后讲解K8S中NFS动态存储部署,包括创建命名空间、ServiceAccount、RBAC权限... 目录1. NFS搭建1.1 部署NFS服务端1.1.1 下载nfs-utils和rpcbind1.1

k8s容器放开锁内存限制问题

《k8s容器放开锁内存限制问题》nccl-test容器运行mpirun时因NCCL_BUFFSIZE过大导致OOM,需通过修改docker服务配置文件,将LimitMEMLOCK设为infinity并... 目录问题问题确认放开容器max locked memory限制总结参考:https://Access

一文详解SpringBoot中控制器的动态注册与卸载

《一文详解SpringBoot中控制器的动态注册与卸载》在项目开发中,通过动态注册和卸载控制器功能,可以根据业务场景和项目需要实现功能的动态增加、删除,提高系统的灵活性和可扩展性,下面我们就来看看Sp... 目录项目结构1. 创建 Spring Boot 启动类2. 创建一个测试控制器3. 创建动态控制器注

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

详解如何在SpringBoot控制器中处理用户数据

《详解如何在SpringBoot控制器中处理用户数据》在SpringBoot应用开发中,控制器(Controller)扮演着至关重要的角色,它负责接收用户请求、处理数据并返回响应,本文将深入浅出地讲解... 目录一、获取请求参数1.1 获取查询参数1.2 获取路径参数二、处理表单提交2.1 处理表单数据三、

k8s部署MongDB全过程

《k8s部署MongDB全过程》文章介绍了如何在Kubernetes集群中部署MongoDB,包括环境准备、创建Secret、创建服务和Deployment,并通过Robo3T工具测试连接... 目录一、环境准备1.1 环境说明1.2 创建 namespace1.3 创建mongdb账号/密码二、创建Sec

centos7基于keepalived+nginx部署k8s1.26.0高可用集群

《centos7基于keepalived+nginx部署k8s1.26.0高可用集群》Kubernetes是一个开源的容器编排平台,用于自动化地部署、扩展和管理容器化应用程序,在生产环境中,为了确保集... 目录一、初始化(所有节点都执行)二、安装containerd(所有节点都执行)三、安装docker-