K8s控制器---DaemonSet控制器(12)
一、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)的更多相关文章
- Kubernetes K8S之资源控制器Daemonset详解
		Kubernetes的资源控制器Daemonset详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2C/ ... 
- K8s无状态控制器原理介绍
		Pod控制器: ReplicationController:早期K8s只有这一个控制器,但后来发现让这一个来完成所有任务,太复杂.因此被废弃. ReplicaSet: 它用于帮助用户创建指定数量的Po ... 
- Kubernetes K8S之资源控制器StatefulSets详解
		Kubernetes的资源控制器StatefulSet详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2 ... 
- Kubernetes K8S之资源控制器Job和CronJob详解
		Kubernetes的资源控制器Job和CronJob详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2 ... 
- 还不会用 K8s 集群控制器?那你会用冰箱吗?(多图详解)
		作者 | 阿里云售后技术专家 声东 导读:当我们尝试去理解 K8s 集群工作原理的时候,控制器(Controller)肯定是一个难点.这是因为控制器有很多,具体实现大相径庭:且控制器的实现用到了一些较 ... 
- 【07】Kubernets:资源清单(控制器 - DaemonSet)
		写在前面的话 前面讲解了 Pod / ReplicaSet / Deployment 的资源清单,我们这里谈一下 DaemonSet 的资源清单. 之前说过,DaemonSet 控制器能够保证资源在每 ... 
- K8S Pod及其控制器
		Pod K8S里能够运行的最小逻辑单元,1个Pod可以运行多个容器 Pod 控制器 Pod控制器是Pod启动的一种模版,用来保证在K8S中启动的Pod始终按照人们的预期运行(副本数,生命周期.健康状态 ... 
- iOS开发——UI进阶篇(八)pickerView简单使用,通过storyboard加载控制器,注册界面,通过xib创建控制器,控制器的view创建,导航控制器的基本使用
		一.pickerView简单使用 1.UIPickerViewDataSource 这两个方法必须实现 // 返回有多少列 - (NSInteger)numberOfComponentsInPicke ... 
- iOS开发UI篇—使用storyboard创建导航控制器以及控制器的生命周期
		iOS开发UI篇—使用storyboard创建导航控制器以及控制器的生命周期 一.基本过程 新建一个项目,系统默认的主控制器继承自UIViewController,把主控制器两个文件删掉. 在stor ... 
- Jmeter(七)_if控制器+循环控制器+计数器控制接口分支
		最近查阅了一下网上关于if控制器的文章,大同小异,几乎找不到原创,于是决定自己写一篇 下午测试接口,遇到了一个审核的流程.逻辑很简单,就是审核不通过之后返回去继续修改再提交,然后再审核,直到通过为止. ... 
随机推荐
- DNS劫持怎么预防?
			DNS劫持,也称为域名劫持,是一种网络攻击手段,攻击者通过拦截域名解析的请求,将用户重定向到恶意站点,以达到获取用户信息或谋取非法利益的目的.DNS劫持可以分为以下几种基本类型: 1.路由器DNS劫持 ... 
- OpenCvSharp inputs[0].size[1] % blobs[0].size[1] == 0
			报错代码如图 详细错误 未处理 OpenCvSharp.OpenCVException HResult=-2146233088 Message=inputs[0].size[1] % blobs[0] ... 
- KingbaseES V8R6 集群运维案例 -- 脚本部署集群后ssh无法连接
			案例说明: 在kylin V10环境下,通过脚本方式部署KingbaseES V8R6集群后,发现ssh无法连接主机,通过分析发现在脚本部署过程中会对系统环境进行优化配置,在修改了/etc/ssh/s ... 
- KingbaseES 数据表复制语句的功能差异
			Kingbase 数据表复制操作 数据库使用过成中,经常会遇到在现有的表结构基础上,对表结构进行复制.在KingbaseES数据库可以采用select into,create table as sel ... 
- 终于来了!FastGPT 正式兼容 GPT 应用
			终于来了!FastGPT 正式兼容 GPT 应用 FastGPT V4.7 正式加入了工具调用功能,可以兼容 GPTs 的 Actions.这意味着,你可以直接导入兼容 GPTs 的 Agent 工具 ... 
- ET介绍——为什么使用C# .net core做服务端?
			为什么使用C# .net core做服务端? 游戏服务端从早期的单服到分布式,开发越来越复杂,对稳定性,开发效率要求越来越高.开发语言的选择也逐步发生了变化,C 到 C++ 到 C++ + PYTHO ... 
- DNS的各种记录类型的应用解析
			可能很多人平时工作中不会遇到DNS配置相关的问题, 但如果偶尔遇到不同类型DNS记录的配置, 在没有搞清楚它们都是干啥的情况下, 会眼花缭乱, 还记得很多年前实验室配置DNS不太对导致只能访问www. ... 
- MogDB企业应用 之 Rust驱动
			引子 Rust 是一门系统编程语言,专注于安全,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言.Rust 在语法上和类似 C++,但是设计者想要在保证性能的同时提供更好的内存安全. ... 
- 第十六篇:jQuery基础
			一.jQuery和Dom的关系 http://jquery.cuishifeng.cn/ 模块,类库 DOM/BOM/JavaScript的类库: 二.jQuery选择器 1.查找元素 DOM: 10 ... 
- k8s 深入篇———— 一些容器操作的原理[三]
			前言 简单介绍一下一些容器的操作原理. 正文 docker exec 是怎么做到进入容器里的呢. 比如说: 这里有一个容器,我们可以exec 进去: docker exec -it b265 /bin ... 
