一、DaemonSet控制器:概念、原理解读

1.1 DaemonSet概述

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

1.2 DaemonSet工作原理:如何管理Pod?

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

1.3 DaemonSet典型应用场景

在集群的每个节点上运行存储,比如:glusterd 或 ceph。

在每个节点上运行日志收集组件,比如:flunentd 、 logstash、filebeat 等。

在每个节点上运行监控组件,比如:Prometheus、 Node Exporter 、collectd 等。

1.4 DaemonSet与Deployment的区别

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

DaemonSet 的不同之处在于:每个 Node 上最多只能运行一个副本。

二、DaemonSet 资源清单文件编写技巧

# 查看定义 Daemonset 资源需要的字段有哪些?
[root@master statefulset]# kubectl explain ds
KIND: DaemonSet
VERSION: apps/v1 FIELDS:
apiVersion <string> #当前资源使用的 api 版本,跟 VERSION: apps/v1 保持一致
kind <string> #资源类型,跟 KIND: DaemonSet 保持一致
metadata <Object> #元数据,定义 DaemonSet 名字的
spec <Object> #定义容器的
status <Object> #状态信息,不能改 #查看 DaemonSet 的 spec 字段如何定义?
[root@master statefulset]# kubectl explain ds.spec
KIND: DaemonSet
VERSION: apps/v1 RESOURCE: spec <Object>
FILEDS:
minReadySeconds <integer> #当新的 pod 启动几秒种后,再 kill 掉旧的pod。
revisionHistoryLimit <integer> #历史版本
selector <Object> -required- #用于匹配 pod 的标签选择器
template <Object> -required- #定义 Pod 的模板,基于这个模板定义的所有 pod 是一样的
updateStrategy <Object> #daemonset 的升级策略 #查看 DaemonSet 的 spec.template 字段如何定义?
#对于 template 而言,其内部定义的就是 pod,pod 模板是一个独立的对象
[root@master statefulset]# kubectl explain ds.spec.template
FIELDS:
metadata <Object>
spec<Object>
kubectl explain ds.spec
kubectl explain ds.spec.template
kubectl explain ds.spec.template.spec
kubectl explain ds.spec.template.spec.containers
kubectl explain ds.spec.template.spec.containers.resources
https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
kubectl explain ds.spec.template.spec.tolerations
kubectl explain ds.spec.template.spec.volumes kubectl describe nodes master 对于每个容器,您可以指定资源限制和请求,包括以下内容:
spec.containers[].resources.limits.cpu
spec.containers[].resources.limits.memory
spec.containers[].resources.limits.hugepages-<size>
spec.containers[].resources.requests.cpu
spec.containers[].resources.requests.memory
spec.containers[].resources.requests.hugepages-<size> apiVersion: apiVersion
kind: DaemonSet # 资源类型
metadata:
name: fluentd-elasticsearch
namespace: kube-system
labels:
k8s-app: fluentd-elasticsearch # 资源具有的标签
spec:
selector: # 标签选择器
matchLabels: # 与template中labels一致,DaemonSet通过标签选择器找到关联的pod,如果不满足预期的数量基于template模板就会创建出来
name: fluentd-elasticsearch
template:
metadata:
labels:
name: fluentd-elasticsearch # 要与matchLabels中name一致
spec:
tolerations: # 定义容忍度
- key: node-role.kubernetes.io/master
effect: NoSchedule
containers: # 定义容器
- name: fluentd-elasticsearch
image: xianchao/fluentd:v2.5.1
imagePullPolicy: IfNotPresent
resources: # 资源配额
requests:
cpu: 100m
memory: 200Mi
limits:
cpu: 100m
memory: 200Mi
volumeMounts:
- name: varlog
mountPath: /var/log # 把本地/var/log挂载到容器
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
readOnly: true # 挂载目录是只读权限
volumes:
- name: varlog
hostPath:
path: /var/log #基于本地目录创建一个卷
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers [root@master ds]# kubectl apply -f ds.yaml
daemonset.apps/fluentd-elasticsearch created [root@master ds]# kubectl get pods -n kube-system -l name=fluentd-elasticsearch -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
fluentd-elasticsearch-p68tv 1/1 Running 0 65s 10.244.75.243 monitor <none> <none>
fluentd-elasticsearch-qx47f 1/1 Running 0 65s 10.244.135.48 node3 <none> <none>
fluentd-elasticsearch-z4t47 1/1 Running 0 65s 10.244.219.84 master <none> <none>

#通过上面可以看到在 k8s 的三个节点均创建了 fluentd这个 pod
#pod 的名字是由控制器的名字-随机数组成的

三、Daemonset实现Pod滚动更新

#查看 daemonset 的滚动更新策略
kubectl explain ds.spec.updateStrategy
#查看 rollingUpdate 支持的更新策略
kubectl explain ds.spec.updateStrategy.rollingUpdate
FIELDS:
maxUnavailable <string>
#上面表示 rollingUpdate 更新策略只支持 maxUnavailabe,先删除在更新;因为我们不支持一个节点运行两个 pod,因此需要先删除一个,在更新一个
# 更新镜像命令
kubectl set image daemonset --help [root@master ds]# kubectl set image daemonsets fluentd-elasticsearch fluentd-elasticsearch=xxx/filebeat:5.6.6-alpine -n kube-system
daemonset.apps/fluentd-elasticsearch image updated

K8s控制器---DaemonSet控制器(12)的更多相关文章

  1. Kubernetes K8S之资源控制器Daemonset详解

    Kubernetes的资源控制器Daemonset详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2C/ ...

  2. K8s无状态控制器原理介绍

    Pod控制器: ReplicationController:早期K8s只有这一个控制器,但后来发现让这一个来完成所有任务,太复杂.因此被废弃. ReplicaSet: 它用于帮助用户创建指定数量的Po ...

  3. Kubernetes K8S之资源控制器StatefulSets详解

    Kubernetes的资源控制器StatefulSet详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2 ...

  4. Kubernetes K8S之资源控制器Job和CronJob详解

    Kubernetes的资源控制器Job和CronJob详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2 ...

  5. 还不会用 K8s 集群控制器?那你会用冰箱吗?(多图详解)

    作者 | 阿里云售后技术专家 声东 导读:当我们尝试去理解 K8s 集群工作原理的时候,控制器(Controller)肯定是一个难点.这是因为控制器有很多,具体实现大相径庭:且控制器的实现用到了一些较 ...

  6. 【07】Kubernets:资源清单(控制器 - DaemonSet)

    写在前面的话 前面讲解了 Pod / ReplicaSet / Deployment 的资源清单,我们这里谈一下 DaemonSet 的资源清单. 之前说过,DaemonSet 控制器能够保证资源在每 ...

  7. K8S Pod及其控制器

    Pod K8S里能够运行的最小逻辑单元,1个Pod可以运行多个容器 Pod 控制器 Pod控制器是Pod启动的一种模版,用来保证在K8S中启动的Pod始终按照人们的预期运行(副本数,生命周期.健康状态 ...

  8. iOS开发——UI进阶篇(八)pickerView简单使用,通过storyboard加载控制器,注册界面,通过xib创建控制器,控制器的view创建,导航控制器的基本使用

    一.pickerView简单使用 1.UIPickerViewDataSource 这两个方法必须实现 // 返回有多少列 - (NSInteger)numberOfComponentsInPicke ...

  9. iOS开发UI篇—使用storyboard创建导航控制器以及控制器的生命周期

    iOS开发UI篇—使用storyboard创建导航控制器以及控制器的生命周期 一.基本过程 新建一个项目,系统默认的主控制器继承自UIViewController,把主控制器两个文件删掉. 在stor ...

  10. Jmeter(七)_if控制器+循环控制器+计数器控制接口分支

    最近查阅了一下网上关于if控制器的文章,大同小异,几乎找不到原创,于是决定自己写一篇 下午测试接口,遇到了一个审核的流程.逻辑很简单,就是审核不通过之后返回去继续修改再提交,然后再审核,直到通过为止. ...

随机推荐

  1. 记录--有关CSS盒模型之内边距、边框、外边距的十九问题

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 本篇文章主要探讨盒模型,以及内边距.边框.外边距的面试题与思考,也希望您能把您的思考和遇到的问题以评论的方式补充下,后期,我将会补充到文章 ...

  2. uniapp 微信对接地图的三种操作

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1.uni.getLocation 获取当前经维度 先上代码 let that = this // 获取用户是否开启 授权获取当前的地理位 ...

  3. Springboot Mybatis 全局变量使用

    application.properties中配置 mybatis.configuration.variables.k1='v1' mybatis.configuration.variables.k2 ...

  4. mybatis xml 文件 sql include 的用法

    mybatis xml 文件中对于重复出现的sql 片段可以使用标签提取出来,在使用的地方使用标签引用即可具体用法如下: <sql id="Base_Column_List" ...

  5. 5 更换npm为国内镜像

    更改npm为国内镜像 在终端执行. npm set registry http://registry.npmmirror.com 首先, 打开"我的电脑". 找到"c盘中 ...

  6. CTFshow pwn31 wp

    PWN31 使用checksec查看保护 发现除了canary剩下保护全开,那么就没有前面几个题目那么简单了,ida打开看见他给了我们main函数地址 虽然开了pie但是在他们之间的偏移是一定的,那么 ...

  7. 使用Python插入100万条数据到MySQL数据库并将数据逐步写出到多个Excel

    Python插入100万条数据到MySQL数据库 步骤一:导入所需模块和库 首先,我们需要导入 MySQL 连接器模块和 Faker 模块.MySQL 连接器模块用于连接到 MySQL 数据库,而 F ...

  8. 首届OpenHarmony竞赛训练营结营颁奖,75所高校学子助力建设开源生态

      由OpenAtom OpenHarmony(以下简称"OpenHarmony")项目群工作委员会和OpenHarmony项目群技术指导委员会主办的首届OpenHarmony竞赛 ...

  9. HMS Core分析服务智能运营6.5.1版本上线

    HMS Core分析服务智能运营6.5.1版本上线,三大"更"新,助力开发者提升运营体验. 1.活动效果更前置:支持受众预估,提前判断活动效果: 2.活动流程更规范:新增活动审核功 ...

  10. HMS Core视频编辑服务:AI着色, 忆往昔看今朝

    近期热播的电视剧<人世间>,讲述了70年代无数普通人的故事,细腻的人物形象和真实的故事感动着我们.原来在那个年代,我们的父母和祖辈都在为新中国的美好生活而奋斗着,为国家舍弃了小家团聚的机会 ...