一、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升级

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 目前平台前端使用的是原生CSS+BEM命名,在多人协作的模式下,容易出现样式冲突.为了减少这一类的问题,提升研效,我调研了业界上主流的7种 ...

  2. 蓝牙HFP协议推荐的语音丢包补偿算法浮点实现的定点化

    最近在做蓝牙的宽带语音通话.相对于蓝牙窄带语音,主要变化是把采样率从8k变到16k,以及编解码器从CVSD变成mSBC(modified SBC,改进的SBC)等.蓝牙语音通话相关的HFP(Hand ...

  3. Jmeter的Throughput有误差与分布式测试时的坑

    我是两台压力机,分布式启动jmeter压测180秒,结果throughput显示3075,我用总请求数/总耗时,64万左右/180秒,得到的TPS是3500左右.误差17% 网上说jmeter的thr ...

  4. FPGA 原语之一位全加器

    FPGA原语之一位全加器 1.实验原理 一位全加器,三个输入,两个输出.进位输出Cout=AB+BC+CA,本位输出S=A异或B异或C.实验中采用三个与门.一个三输入或门(另外一个是两个或门,功能一致 ...

  5. 性能对比 Go、Python、Perl、Ruby、Rust、C/C++、PHP、Node.js、Java.. 等多编

    1. 有人说 Python 性能没那么 Low? 这个我用 pypy 2.7 确认了下,确实没那么差, 如果用 NumPy 或 其它版本 Python 的话,性能更快.但 pypy 还不完善,pypy ...

  6. go~istio加载wasm的步骤

    参考 https://github.com/higress-group/proxy-wasm-go-sdk/tree/main/proxywasm https://github.com/tetrate ...

  7. Git 教程:解密 .gitignore 文件、合并分支、解决冲突、及 Git 帮助

    Git 帮助 如果你忘记了命令或命令的选项,你可以使用 Git 帮助. 在命令行中,有几种不同的使用帮助命令的方式: git command -help - 查看特定命令的所有可用选项 git hel ...

  8. Qt6安装

    *:Qt现在基本都是在线安装了,但是下载的速度特别慢,所以此次记录下如何提速,快速安装 一.在线安装器下载 我用的这个(非官网):https://mirrors.tuna.tsinghua.edu.c ...

  9. JVM—垃圾收集器

    JVM-垃圾收集器 什么是垃圾 没有被引用的对象就是垃圾. 怎么找到垃圾 引用计数法 当对象引用消失,对象就称为垃圾. 对象消失一个引用,计数减去一,当引用都消失了,计数就会变为0.此时这个对象就会变 ...

  10. openGauss中如何管理表空间

    openGauss 中如何管理表空间 在 openGauss 中,表空间是一个目录,在物理数据和逻辑数据间提供了抽象的一层,为所有的数据库对象分配存储空间,里面存储的是它所包含的数据库的各种物理文件. ...