K8S调度

K8S调度

一、List-Watch 机制

在这里插入图片描述

controller-manager、scheduler、kubelet 通过 List-Watch 机制监听 apiserver 发出的事件,apiserver 通过 List-Watch 机制监听 etcd 发出的事件

1.scheduler 的调度策略

预选策略/预算策略:通过调度算法过滤掉不满足条件的Node节点,如果没有满足条件的Node节点,Pod会处于Pending状态,直到有符合条件的Node节点出现
PodFitsResources、PodFitsHost、PodFitsHostPorts、PodSelectorMatches、NoDiskConflict
优选策略:根据优先级选项为满足预选策略条件的Node节点进行优先级权重排序,最终选择优先级最高的Node节点来调度Pod
LeastRequestedPriority、BalancedResourceAllocation、ImageLocalityPriority

二、如何将Pod调度到指定节点

1)使用 nodeName 字段指定 Node节点名称
2)使用 nodeSelector 指定 Node节点的标签
3)使用 节点/Pod 亲和性
4)使用 污点+容忍 

1.标签的管理

kubectl label <资源类型> <资源名称>  标签key=标签value               ##设置标签
kubectl label <资源类型> <资源名称>  标签key=标签value --overwrite   ##修改标签
kubectl label <资源类型> <资源名称>  标签key-                       ##删除标签kubectl get <资源类型> <资源名称> --show-labels                     ##展示资源名称下的所有标签
kubectl get <资源类型> -l 标签key[=标签value]                       ##列出符合条件的标签下的资源

2.亲和性

2.1节点亲和性

节点亲和性(nodeAffinity):匹配指定的Node节点标签,将要部署的Pod调度到满足条件的Node节点上

2.2Pod亲和性

拓扑域:具有相同标签的node节点
Pod亲和性(podAffinity):匹配指定的Pod标签,将要部署的Pod调度到与指定Pod所在的Node节点处于 同一个拓扑域 的Node节点上
Pod反亲和性(podAntiAffinity):匹配指定的Pod标签,将要部署的Pod调度到与指定Pod所在的Node节点处于 不同的拓扑域 的Node节点上

2.3亲和性的策略

硬策略(required....):要强制性的满足指定条件,如果没有满足条件的Node节点,Pod会处于Pending状态,直到有符合条件的Node节点出现软策略(preferred....):非强制性的,会优先选择满足条件的Node节点调度,即使没有满足条件的Node节点,Pod依然会完成调度

3.污点(taint)

3.1配置

kubectl taint node <node名称>  key=value:effecteffect支持的选项NoSchedule(一定不会被调度)  
PreferNoSchedule(尽量不被调度)  
NoExecute(不会被调度,并驱逐节点上的Pod)

3.2污点删除

kubectl taint node <node名称>  key[=value:effect]-

3.3查看节点有哪些污点

kubectl describe nodes  <node名称>  | grep Taints

4.容忍 (tolerations)

4.1配置

spec:tolerations:- key: 污点键名operator: Equal|Existsvalue: 污点键值effect: NoSchedule|PreferNoSchedule|NoExecute

5.不可调度(cordon)

kubectl cordon 	<node名称>    ##设置为不可调度kubectl uncordon  <node名称>   ##解除不可调度

6.不可调度 + 驱逐(drain)

kubectl drain  <node名称>  --ignore-daemonsets --delete-emptydir-data --force

7.Pod的启动过程

1)通过 scheduler 根据调度算法选择一台在最适合的 Node节点运行 Pod
2)拉取镜像
3)挂载 存储卷 等
4)创建并运行容器
5)根据容器的探针探测结果设置 Pod 状态

8.Pod的生命周期

生命周期状态说明
PendingPod已经创建,但是处于包括Pod还未完成调度到Node节点的过程或者处于镜像拉取过程中、存储卷挂载失败等情况
RunningPod中至少有一个容器正在运行
SucceededPod中的所有容器都已经成功退出,且不再重启。(Completed)
FailedPod中的所有容器都已终止,且至少有一个容器异常退出。(Error)
UnknownMaster节点的 controller-manager 无法获取 Pod 的状态,通常是因为 Master节点与 Pod 所在的 Node 节点通信失联导致的
Pod遵循预定义的生命周期,起始于Pending阶段,如果至少其中有一个主要容器正常启动,则进入Running阶段,之后取决于Pod中是否有容器以失败状态结束而进入Succeeded或者Failed阶段。

三、K8S中排障方法

kubectl get pods                                                                查看Pod运行状态
kubectl describe <资源类型|pods> <资源名称>                                     查看资源的详细信息和事件
kubectl logs <pod名称> [-c <容器名>] [-p]                                       查看容器的进程日志
kubectl exec -it <pod名称> [-c <容器名>] sh|bash                                进入Pod容器,查看容器内部相关状态信息
kubectl debug -it <pod名称> --image=<临时容器的镜像名>  --target=<目标容器>     在Pod中创建临时容器进入目标容器进行调试在Pod容器的宿主机使用nsenter转换网络等命名空间,直接在宿主机进入目标容器的命名空间进行调试

查看k8s集群中相关信息

kubectl get nodes     查看Node节点的运行状态
kubectl get cs        查看Master组件的状态
kubectl cluster-info  查看集群信息journalctl -u kubelet -f   跟踪查看Kubelet进程日志

看k8s集群中相关信息

kubectl get nodes     查看Node节点的运行状态
kubectl get cs        查看Master组件的状态
kubectl cluster-info  查看集群信息journalctl -u kubelet -f   跟踪查看Kubelet进程日志

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

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

相关文章

Ceph集群安装部署

Ceph集群安装部署 目录 Ceph集群安装部署 1、环境准备 1.1 环境简介1.2 配置hosts解析(所有节点)1.3 配置时间同步2、安装docker(所有节点)3、配置镜像 3.1 下载ceph镜像(所有节点执行)3.2 搭建制作本地仓库(ceph-01节点执行)3.3 配置私有仓库(所有节点执行)3.4 为 Docker 镜像…

opencv实战项目 手势识别-手势控制鼠标

手势识别系列文章目录 手势识别是一种人机交互技术&#xff0c;通过识别人的手势动作&#xff0c;从而实现对计算机、智能手机、智能电视等设备的操作和控制。 1. opencv实现手部追踪&#xff08;定位手部关键点&#xff09; 2.opencv实战项目 实现手势跟踪并返回位置信息&…

register_chrdev函数简单使用

register_chrdev函数网上介绍的文章比较多&#xff0c;就不概述了。 以下是例子。 #include<linux/module.h> #include<linux/kernel.h> #include<linux/init.h> #include<linux/fs.h> #include<linux/slab.h> #include<linux/timer.h> …

AAAI论文阅读

文章目录 Open-Vocabulary Multi-Label Classifcation via Multi-Modal Knowledge Transfer——知识蒸馏的范畴Med-EASi: Finely Annotated Dataset and Models for Controllable Simplifcation of Medical Texts——医学领域数据集构建“Nothing Abnormal”: Disambiguating M…

UE 5 GAS 在项目中处理AttributeSet相关

这一篇文章是个人的实战经验记录&#xff0c;如果对基础性的内容不了解的&#xff0c;可以看我前面一篇文章对基础的概念以及内容的讲解。 设置AttributeSet 使用GAS之前&#xff0c;首先需要设置参数集AS&#xff0c;这个是用于同步的一些参数&#xff0c;至于如何设置GAS&a…

Mysql之安装-字符集设置-用户及权限操作-sqlmode设置

1、概述 MySQL支持大型数据库&#xff0c;支持5000万条记录的数据仓库&#xff0c;32位系统表文件最大可支持4GB&#xff0c;64位系统支持最大的表文件为8TB。使用标准的SQL数据语言形式。 2、Linux的mysql安装 &#xff08;1&#xff09;检查是否已安装&#xff1a;rpm -qa…

梯度下降求极值,机器学习深度学习

目录 梯度下降求极值 导数 偏导数 梯度下降 机器学习&深度学习 学习形式分类

Apollo让自动驾驶如此简单

前言&#xff1a; 最近被新能源的电价闹的不行&#xff0c;买了电车的直呼上当了、不香了。但电车吸引人不只是公里油耗低&#xff0c;还有良好的驾车使用感。比如辅助驾驶、甚至是自动驾驶。今天来介绍一个头部自动驾驶平台Apollo&#xff0c;Apollo是一个开源的、自动驾驶的软…

Linux 创建用户赋予root权限,并限定登录ip

1.创建jms用户 创建组 groupadd jms创建用户 -g 指定分组 useradd -m -d /home/jms jms -g jms -s /bin/bash设置用户密码 passwd jms2.赋予root权限 编辑文件 vim /etc/sudoers添加如下内容 jms ALL(ALL:ALL) NOPASSWD: ALL3.限定登录ip 编辑文件&#xff0c;在末尾添…

【论文阅读】基于深度学习的时序预测——FEDformer

系列文章链接 论文一&#xff1a;2020 Informer&#xff1a;长时序数据预测 论文二&#xff1a;2021 Autoformer&#xff1a;长序列数据预测 论文三&#xff1a;2022 FEDformer&#xff1a;长序列数据预测 论文四&#xff1a;2022 Non-Stationary Transformers&#xff1a;非平…

git checkout -b

创建分支&#xff1a; $ git branch mybranch 切换分支&#xff1a; $ git checkout mybranch 创建并切换分支&#xff1a; $ git checkout -b mybranch 更新master主线上的东西到该分支上&#xff1a;$git rebase master 切换到master分支&#xff1a;$git checkout master …

模拟栈(c++题解)

实现一个栈&#xff0c;栈初始为空&#xff0c;支持四种操作&#xff1a; push x – 向栈顶插入一个数 xx&#xff1b;pop – 从栈顶弹出一个数&#xff1b;empty – 判断栈是否为空&#xff1b;query – 查询栈顶元素。 现在要对栈进行 M 个操作&#xff0c;其中的每个操作 …

3.6 Spring MVC文件上传

1. 文件上传到本地 实现方式 Spring MVC使用commons-fileupload实现文件上传&#xff0c;注意事项如下&#xff1a; l HTTP请求方法是POST。 l HTTP请求头的Content-Type是multipart/form-data。 SpringMVC配置 配置commons-fileupload插件的文件上传解析器CommonsMultip…

tp5伪静态设置

nginx伪静态 location / {if (!-e $request_filename) {rewrite ^(.*)$ /index.php?s$1 last;break;} } apache伪静态 <IfModule mod_rewrite.c>Options FollowSymlinks -MultiviewsRewriteEngine OnRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME…

SpringBoot复习:(34)@EnableWebMvc注解为什么让@WebMvcAutoconfiguration失效?

它导入了DelegatingWebMvcConfiguration 它会把容器中的类型为WebMvcConfigurer的bean注入到类型为WebMvcConfigurerComposite的成员变量configurers中。 可以看到它继承了WebMvcConfigurerSupport类 而WebMvcConfigureAutoConfiguration类定义如下 可以看到一个Conditional…

Flink源码之RPC

Flink是一个典型的Master/Slave分布式实时处理系统&#xff0c;分布式系统组件之间必然涉及通信&#xff0c;也即RPC&#xff0c;以下图展示Flink组件之间的关系&#xff1a; RPCGateWay 一般RPC框架可根据用户业务类生成客户端和服务器端通信底层代码&#xff0c;此时只需定…

边缘计算:连接智能世界的变革之力

随着物联网和人工智能的迅猛发展&#xff0c;边缘计算作为一种新兴的计算模式正受到越来越多的关注。边缘计算将数据处理和分析的能力从云端向网络的边缘推移&#xff0c;为各行各业带来了巨大的机遇和挑战。本文将探讨边缘计算的定义、应用领域以及对未来智能世界的影响。 1.…

【微信小程序篇】-请求封装

最近自己在尝试使用AIGC写一个小程序&#xff0c;页面、样式、包括交互函数AIGC都能够帮我完成(不过这里有一点问题AIGC的上下文关联性还是有限制&#xff0c;会经常出现对于需求理解跑偏情况&#xff0c;需要不断的重复强调&#xff0c;并纠正错误&#xff0c;才能得到你想要的…

基于机器学习进行降雨预测 -- 机器学习项目基础篇(13)

在本文中&#xff0c;我们将学习如何构建一个机器学习模型&#xff0c;该模型可以根据一些大气因素预测今天是否会有降雨。这个问题与使用机器学习的降雨预测有关&#xff0c;因为机器学习模型往往在以前已知的任务上表现得更好&#xff0c;而这些任务需要高技能的个人来完成。…

mysql正则表达式

mysql正则表达式 : REGEXP 规则基本和java正则规则一样,有些特殊字符有差异. 举例: -- 匹配以英文开头,4位英文字母8位数字/4位数字-4位数字 select * from tableName where code REGEXP ^[A-Z]{4}[0-9]{8}/[0-9]{3}-[0-9]{3}$ ;将code中的3位数字改成4位.高位补0. -- 数据…