k8s的策略

集群调度:

Scheduler的调度算法:

预算策略

过滤出合适的节点

优先策略

选择部署的节点

NodeName:硬策略,不走调度策略,node1

nodeSelector:根据节点的标签选择,会走一个调度算法

只要是走调度算法,在不满足预算策略的情况下,所有的pod都是pending

Node节点的亲和性:

硬策略:必须满足的条件。匹配原则根据节点的标签

软策略:尽量满足,而不是一定满足

以上说的都是node节点

接下来我们来说pod的

亲和性和反亲和性:

调度策略:      匹配标签         操作符                      拓扑域   调度目标

Node的亲和性: 主机标签        in¬in exists doesNotExist Gt Lt 不支持    指定主机

Pod 的亲和性    pod的标签      in notin exists doesnotexist       支持     pod和指定标签的pod部署在同一拓扑图

Pod的反亲和性  pod的标签      in notin exists doesnotexist       支持

拓扑域:

k8s集群节点当中的一个组织结构,可以根据节点的物理关系或者逻辑关系进行划分,可以用来表示节点之间的空间关系,网络关系或者其他类型的关系

标签,主机标签

Pod

注意点:

Pod的亲和性和策略,在配置时,必须加上拓扑域的关键字topologykey,指向节点标签

Pod亲和性的策略分为硬策略和软策略

Pod亲和性的notin可以替代反亲和性

Pod亲和性主要是为了把相关联的pod部署在同一节点

你在进行部署的时候怎么考虑node节点:

污点和容忍可以配合node节点一块使用

演示:

演示:

解析:

添加标签

另外一种方式:

硬策略:

软策略写法:

反亲和性:

软策略:

硬策略:

污点

是node的调度机制,不是pod

被设为污点的节点,不会部署pod

污点和亲和性相反,亲和性是尽量选择和一定选择

污点的节点一定不被选择吗?

Taint三种:

  1. NoSchedule:k8s不会把pod调度到这个节点上
  2. preferNoSchedule:如果污点类型是他,只是尽量避免把pod部署在该节点上,而不是一定
  3. NoExecute:如果污点类型是它的话,k8s将会把该节点pod驱逐出去,而且也不会调度到这个节点,基于控制器创建的pod,虽然被驱逐,会在其他节点部署,自主pod会被直接杀死

注意点:节点服务器需要维护时,服务器关机,节点上的pod将会失效,在工作中我们主要部署pod的方式控制控制器部署,deployment最多的,一旦节点设置被驱逐,控制器创建的pod会在其他节点继续部署

所有的pod都会被驱逐,更命名空间无关,所有的一切都会被驱逐,不论你的创建方式是什么,都会被驱逐,系统集群组件不会被驱逐

查看污点命令:

kubectl describe nodes node01 | grep -i taints

清缓存命令

echo 1 > /proc/sys/vm/drop_caches

污点演示三种情况:

第一种:

设置污点

删除污点

第二种:

尽量不调度

第三种:

如果污点类型是它的话,k8s将会把该节点pod驱逐出去,而且也不会调度到这个节点

容忍:

即使集群节点上设置了污点,有了容忍机制,依然可以在设置为污点的节点上部署pod

特殊情况,NoExecute依然可以部署pod,但是是有生命周期,时间一到,pod被销毁然后重新拉起。生命周期结束之后,会驱逐一部分pod到其他节点上,有点节点还是会保留在污点节点上。

该节点维护完毕,测试一下节点的工作是否正常

删除所有污点:

设置污点:

kubectl taint node master01 key=1:NoSchedule

配置容忍:

设置为驱逐类型

kubectl describe nodes node01 | grep -i taints

kubectl taint node master01 key=1:NoExecute

kubectl taint node node02 key=1:NoSchedule-

设置容忍时间

apiVersion: apps/v1

kind: Deployment

metadata:

  labels:

    app: nginx2

  name: nginx2

spec:

  replicas: 3

  selector:

    matchLabels:

      app: nginx2

  template:

    metadata:

      labels:

        app: nginx2

    spec:

      containers:

      - image: nginx:1.22

        name: nginx2

      tolerations:

      - key: key

        operator: Equal

        value: "1"

        effect: NoExecute

        tolerationSeconds: 36

36秒之后,被驱逐之后,也会出现

演示污点容忍机制

kubectl describe nodes node01 | grep -i taints

kubectl taint node node02 key=1:NoExecute-

kubectl taint node node01 key=1:NoSchedule

第二种情况

解析:

指定key的值,指标节点的标签,但是不指定污点的类型,那么所有节点上只要包含了这个指定的标签,可以容忍所有的污点

没有key,不匹配节点标签,容忍所有污点,但是类型是指定的类型

总结:

Node的亲和性

Pod的亲和性和反亲和性

污点和容忍

总结起来就是如何选择节点部署pod,选择一个期望的节点部署pod

举例:

我有多个master节点:

Kubectl taint node master节点名称

尽量不往master节点上部署pod,但是不是一定的,防止资源浪费,自定义一个标签

业务维护:

Node02需要维护两个小时,但是这个节点上还有业务pod在运行

就需要把这个节点的污点设置为驱逐

我们部署pod,一般都是使用deployment部署的pod,会在其他节点重新部署,并不是被杀死,自主试的pod会被杀死

一旦节点恢复,一定要把污点去除

Cordon和drain

Cordon:可以直接把节点标记为不可用状态

Drain:排水,把该节点下的pod全部转移到其他的node节点上云霄

一旦执行了drain,被执行的节点就会变成不可调度状态

会驱逐该节点上的所有pod

清空污点

kubectl taint node node02 key=1:NoExecute-

kubectl describe nodes master01 | grep -i taints

演示Drain

解析:

kubectl drain node02 --ignore-daemonsets --delete-emptydir-data --force

Drain:排水,标记node节点为不可调度,然后驱逐pod

--ignore-daemonsets:忽视daemonset部署的pod,daemonset部署的pod还在节点

--delete-local-data:有本地挂载卷的pod会被强制杀死

--force:强制释放,不是控制器管理的pod

如何改回来

重点:

node亲和性

Pod亲和性

污点:NoExeccute(驱逐)

Cordon和drain

--ignore-daemonset daemonset部署的一般是重要后台运行的,系统pod,所以不动

总结:

Node亲和性

Pod亲和性

Pod反亲和性

污点:NoExecute

容忍

Cordon

Drain

如何部署pod时比较重要的集群调度机制,合理的配置pod的调度机制可以是资源最大化应用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/622743.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

系统性学习vue-vue核心

做了三年前端,但很多系统性的知识没有学习 还是从头系统学习一遍吧 课程是b站的Vue2.0Vue3.0课程 后续还会学习的如下,就重新开一篇了,不然太长,之后放链接 vue组件化编程 vue-cli 脚手架 vue中的ajax vue-router vuex element-ui vue3 老师推荐的vscode针对vue的插件: Vue 3…

机器学习~从入门到精通(二)线性回归算法和多元线性回归

为什么要做数据归一化 一、数据归一化: 1.最值归一化 2.均值方差归一化import numpy as npX np.random.randint(1,100,size100) X X.reshape(-1,2) X.shape X np.array(X,dtypefloat) X[:,0] (X[:,0]-np.min(X[:,0]))/(np.max(X[:,0])-np.min(X[:,0])) X[:,1]…

Postgres 中文周报:Postgres Weekly 537 期

本周报由 Cloudberry Database 社区编译自英文版《Postgres Weekly》,译文较原文有所调整。 推荐博文 🏆 PostgreSQL: The DBMS of the Year 2023 PostgreSQL 荣获 DB-Engines 网站 2023 年度 DBMS 冠军。DB-Engines 收集了 480 款数据库系统信息并跟踪…

机器学习笔记 - 基于OpenCV+稀疏光流的无监督运动检测

一、简述 在各种高级开源库的帮助下,检测固定摄像机拍摄的运动行为是轻而易举可以实现的,但检测移动的摄像机拍摄的移动物体的运动检测依然是一个复杂的问题。在这里,我们将继续基于稀疏光流,并检测移动的无人机相机的运动。 这里…

设计模式-传输对象模式

设计模式专栏 模式介绍模式特点应用场景传输对象模式和序列化的区别代码示例Java实现传输对象模式Python实现传输对象模式 传输对象模式在spring中的应用 模式介绍 传输对象模式(Transfer Object Pattern)是一种设计模式,用于从客户端向服务…

MT8766安卓核心板/开发板_MTK联发科4G安卓手机主板方案定制开发

MT8766采用台积电 12 nm FinFET 制程工艺,4*A53架构,Android 9.0操作系统,搭载2.0GHz 的 Arm NEON 引擎。提供了支持最新 OpenOS 及其要求苛刻的应用程序所需的处理能力,专为具有全球蜂窝连接的高移动性和功能强大的平板设备而设计…

MySQL进阶篇(五) 锁

一、概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问…

深入浅出Android dmabuf_dump工具

目录 dmabuf是什么? dmabuf_dump工具介绍(基于Android 14) Android.bp dmabuf_dump.cpp 整体架构结构如下 dmabuf_dump主要包含以下功能 前置背景知识 fdinfo 思考 bufinfo Dump整个手机系统的dmabuf Dump某个进程的dmabuf​​​​​​​ 以Table[buff…

【JVM 基础】类字节码详解

JVM 基础 - 类字节码详解 多语言编译为字节码在JVM运行Java字节码文件Class文件的结构属性从一个例子开始反编译字节码文件字节码文件信息常量池方法表集合类名 再看两个示例分析try-catch-finallykotlin 函数扩展的实现 源代码通过编译器编译为字节码,再通过类加载…

文件指针 FILE结构体

C语言中的文件指针是指向FILE类型结构体的指针。(也就是说 文件指针的类型就是FILE类型) 在C语言中,使用文件指针来操作文件。FILE类型是一个结构体类型,它包含了与文件相关的信息,例如文件位置指示器、文件读写状态等。通过文件指针&#x…

【MySQL】多表查询

文章目录 多表查询是什么?一、笛卡尔积(或交叉连接)二、多表查询分类分类1:等值连接 vs 非等值连接等值连接非等值连接 分类2:自连接 vs 非自连接分类2:内连接 vs 外连接 三、SQL99SQL99 实现 内连接SQL99 …

深度解析Pytest插件pytest-html

在软件开发中,测试报告是开发者获取测试结果和问题定位的关键工具之一。然而,标准的控制台输出有时难以满足我们对测试报告的需求。幸运的是,Pytest插件 pytest-html 提供了一种简单而强大的方式,可以生成漂亮、可视化的HTML格式测…

1992年-2020年ESA_CCI土地覆盖数据介绍、下载与数据分享

数据介绍 ESA CCI Land Cover是欧洲空间局(European Space Agency,ESA)的一个项目,其目标是生成全球土地覆盖的高质量、一致性和长期的时间序列数据,分辨率大约为300米。 该项目是ESA气候变化计划(Climate…

AI大模型学习笔记二

文章目录 一、Prompt Engineering1)环境准备 二、LangChain(一个框架名字)三、Fine-tuning(微调) 一、Prompt Engineering 1)环境准备 ①安装OpenAI库 pip install --upgrade openai附加 安装来源 pyth…

阶段十-分布式锁

5.1 节 为什么要使用分布式锁 锁是多线程代码中的概念,只有当多任务访问同一个互斥的共享资源时才需要。如下图: 在我们进行单机应用开发,涉及并发同步的时候,我们往往采用synchronized或者lock的方式来解决多线程间的代码同步问…

远程登陆利器 ssh

文章目录 远程登陆利器 ssh登陆远程服务器指定用户名多数情况的登陆方式查看服务器的时间指定端口更多信息 远程登陆利器 ssh ssh命令是openssh套件中的客户端连接工具,使用加密协议实现安全的远程登录服务器,实现对服务器的远程管理。 官方定义为&…

ZZULIOJ 1110: 最近共同祖先(函数专题)

题目描述 如上图所示,由正整数1, 2, 3, ...组成了一棵无限大的二叉树。从某一个结点到根结 点(编号是1 的结点)都有一条唯一的路径,比如从10 到根结点的路径是(10, 5, 2, 1), 从4 到根结点的路径是(4, 2, 1)&#xff0…

网络地图服务(WMS)详解

文章目录 1.概述2.GetCapabilities3.GetMap4.GetFeatureInfo 阅读本文之前可参考前文:《地图服务器GeoServer的安装与配置》与《GeoServer发布地图服务(WMS、WFS)》。 1.概述 经过前文的介绍,相信我们对WMS/WFS服务已经有了一个非…

Modbus协议学习第二篇之Modbus poll slave仿真软件初体验

软件准备 学习Modbus离不开硬件,好在我们可以通过仿真软件来模拟硬件,本篇博客就来简单介绍一下Modbus仿真软件的最基础使用方法,需要用到的3款仿真软件如下: Modbus Poll 64位 / Modbus Poll 32位(根据自己机器位数选…

C++——map和set的基本使用

目录 一,关联式容器 二,键值对 三,set的使用 3.1 set介绍 3.2 set的插入和删除 3.3 set的pair 3.4 multiset 四,map的使用 4.1 map介绍 4.2 map实现简易字典 4.3 map实现统计次数 4.4 map的[] 五,使用map或…