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控制器的文章,大同小异,几乎找不到原创,于是决定自己写一篇 下午测试接口,遇到了一个审核的流程.逻辑很简单,就是审核不通过之后返回去继续修改再提交,然后再审核,直到通过为止. ...
随机推荐
- 《.NET内存管理宝典 》(Pro .NET Memory Management) 阅读指南 - 第5章
本章勘误: 暂无,等待细心的你告诉我哦. 本章注解: 出处:207页 原文: 在我们的应用程序中,是不太可能出现LargeHeapHandleTable的问题的.一般来说,可能出现问题会是在需要(动态 ...
- MongoDB4.0.11服务没有响应控制功能解决办法
如图 MongDB安装好后启动服务失败 解决办法 进入到你的MongDB bin目录下执行 mongod.exe --remove --serviceName "MongoDB" ...
- CentOS 安装webmin
下载地址 http://download.webmin.com/download/yum/ 安装依赖 sudo yum -y install openssl perl perl-Net-SSLeay ...
- Kingbase ES 自定义聚合函数和一次改写案例
文章概要: KES的SQL的语法暂时不兼容oracle的自定义聚合函数的创建语法和流程,但是可以使用KES已支持的语法改写. 本文整理和简单解析了自定义聚合函数的原理和解读了范例代码. 并根据客户代码 ...
- python爬虫等获取实时数据+Flume+Kafka+Spark Streaming+mysql+Echarts实现数据动态实时采集、分析、展示
使用爬虫等获取实时数据+Flume+Kafka+Spark Streaming+mysql+Echarts实现数据动态实时采集.分析.展示 [获取完整源码关注公众号:靠谱杨阅读人生 回复kafka获取 ...
- Web、Android等程序开发中src引入外部文件和资源的方法总结
方法一:使用相对于当前文件(源文件)的相对路径 使用 ../ 对于这个例子来说 ../ 把路径带到了项目根目录的下一级目录 1 <script src="../static/js/wo ...
- LeetCode 416. 分割等和子集(bitset优化)
LeetCode 416. 分割等和子集 1 题目描述 给你一个只包含正整数的非空数组nums.请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等. 1.1 输入测试 示例 1: 输入 ...
- 欢迎体验BotBattle!
目录 1.常规游玩 2.快速开始 3.规则介绍 3.推荐的示例代码 1.常规游玩 前往复制 最基础代码 到剪切板 这有助于您开始游戏,且对于您熟悉 Bot 代码的 I/O 进而创建其他 bot 很有意 ...
- 微服务集成Spring Cloud Alibaba Seata (二) 客户端连接
通过上篇文章后我们的Seata服务就部署成功了,如果还不清楚怎么部署或者还没有部署Seata服务的朋友可以看我写的上篇文章进行服务部署.Seata部署步骤:https://www.cnblogs.co ...
- 深入理解MD5算法:原理、应用与安全
第一章:引言 导言 在当今数字化时代,数据安全和完整性变得至关重要.消息摘要算法是一种用于验证数据完整性和安全性的重要工具.在众多消息摘要算法中,MD5(Message Digest Algorith ...