当前位置: 首页 > article >正文

linux系统kubernetes的pod的状态

pod的状态

    • pod状态
      • Pending
      • Running
      • Succeeded
      • Failed
      • Unknown
      • CrashLoopBackOff
      • ImagePullBackOff
      • Terminating
      • Evicted
      • OOMKilled
      • ContainerCreating
      • Completed
    • 实现机制
      • 共享网络
      • 共享存储
    • 资源限制
    • 创建pod数据流
    • 节点选择器
    • 亲和性
    • 污点和污点容忍

pod状态

Pending

Pod 已被 Kubernetes 系统接受,但有一个或多个容器镜像尚未创建。
Pod 等待被调度到一个节点上。
网络配置等前期准备工作正在进行中。

Running

Running Pod 已经被调度到一个节点上,并且所有的容器都已创建。 
至少有一个容器正在运行,或者正在启动或重启。 

Succeeded

Pod 中的所有容器都正常运行完毕,并已经退出。 
这通常适用于一次性或批处理作业。 

Failed

Pod 中至少有一个容器以非零状态退出。 
表明容器启动失败或运行中出现错误。 

Unknown

由于某种原因,Pod的状态无法确定。 
通常是与Pod通信出现问题,如节点故障。

CrashLoopBackOff

表明 Pod 中的一个或多个容器尝试启动后失败,正在尝试重启。
这可能是由于应用程序错误、配置问题等引起的。

ImagePullBackOff

Pod无法拉取一个或多个容器镜像。 
可能是因为镜像不存在,或者与容器注册中心的认证问题。 

Terminating

当 Pod 被标记为删除并开始终止过程时,会进入此状态。 这个状态意味着 Kubernetes 正在停止 Pod 中的所有容器。

Evicted

当节点上的资源(如内存或磁盘空间)不足时,Pod可能会被驱逐。 
驱逐行为是 Kubernetes 为了保护节点稳定性而自动执行的操作。 

OOMKilled

如果 Pod 中的容器使用超出其分配的内存限制,它可能会被系统的 Out-Of-Memory (OOM) killer 终止。 这通常表明容器配置的内存限制过低或应用程序内存泄露。

ContainerCreating

当 Kubernetes 正在创建 Pod 中的容器时,Pod 会处于此状态。 
这可能涉及到拉取容器镜像、创建容器等操作。

Completed

这是一个非常用状态,表明 Pod 中的所有容器都已成功完成其任务并且正常退出。 
这通常用于有限期或批处理任务。

实现机制

共享网络

容器用docker创建,本身之间相互隔离
namespace:命名空间
group:组

共享网络的前提条件
容器在同一个ns里面

共享网络的机制
通过pause容器,把其他业务容器加入到pause容器里面,让所有的业务容器在同一个名称空间中,可以实现网络共享

共享存储

pod持久化数据
日志数据
业务数据

持久化存储:数据卷:Volumn

共享存储:引入数据卷的概念,使用数据卷进行持久化存储

资源限制

资源限制本身也是由docker做到的,而不是pod

pod的资源限制对pod的调用产生影响

根据request找到足够的node节点进行调度

创建pod数据流

master节点
create pod==》api server==》etcd

scheduler==》api server==》etcd ==》调度算法,把pod调度到某个node节点上
调度算法:
预选:输入所有节点,过滤掉不符合创建pod请求的节点
优选:输入时预选后的节点,根据优选策略进行排名,选择排名最高的node节点进项创建pod,
优选策略:比如负载最小的node,资源最富裕的node

node节点
kubelet==》api server==》读取etcd拿到分配给当前节点pod==》docker创建容器

======================================================

kubectl向kubernetes集群api server发起一个create pod请求

kubernetes集群api server接收到pod创建请求后,生成一个包含创建信息的yaml

apiserver将刚才的yaml信息写入etcd数据库

scheduler查看kubernetes api,判断:pod.spec.Node==null,若为null,表示这个Pod请求是新来的,需要创建;因此先进行调度计算,找到最适合的node。并更新数据库

node节点上的Kubelet通过监听数据库更新,发现有新的任务与自己的node编号匹配,则进行任务创建

======================================================

kubectl发起创建Pod请求
 
用户通过kubectl create命令(或其他等效方式)向Kubernetes API Server发起一个创建Pod的请求。这个请求包含了Pod的定义,通常是一个YAML或JSON格式的文件

API Server接收请求并处理
 
Kubernetes API Server接收到创建Pod的请求后,会对请求进行验证和授权检查
API Server不会直接创建Pod,而是将这个请求转化为一个内部表示(如一个含有Pod创建信息的YAML格式的对象)

写入Etcd数据库
 
API Server将这个Pod对象的信息写入到Etcd数据库。Etcd作为Kubernetes的数据存储,保存了集群的状态和配置

Scheduler进行调度
 
Kubernetes Scheduler持续监视API Server,检查新的或未被调度的Pod
当Scheduler发现一个新的Pod(pod.spec.Node == null表示这个Pod还没有被调度到任何节点),它将根据资源需求、亲和性规则、污点和容忍度等因素选择一个合适的节点
一旦选择了节点,Scheduler将更新该Pod的信息,指定其运行在选择的节点上,并将这个更新写回到Etcd

Kubelet监听并创建Pod
 
每个节点上的Kubelet进程持续监视Etcd,查找分配给自己节点的新任务
当Kubelet发现有新的Pod分配到它所在的节点,它会根据Pod定义开始创建和启动Pod中的容器
Kubelet调用容器运行时(如Docker)来实际启动容器,并设置必要的网络和存储配置

Pod状态更新和汇报
 
在Pod创建过程中,Kubelet将Pod的状态更新回API Server。这些状态信息包括Pod是否成功启动,运行中的容器等

API Server更新Etcd中的状态信息,确保集群状态的一致性

在这里插入图片描述

节点选择器

节点选择器标签影响pod的调度

首先对节点创建标签
起标签的命令:
kubectl label node <node-name> <label-key>=<label-value>
<node-name> 是要标记的节点名称
<label-key> 是标签的键
<label-value> 是标签的值。

kubectl label node node1 env_role=prod



nodeSelector:
节点选择器:可以指定node的标签,查看标签指令:
nodeName:
节点名称: 可以指定node的名称进行调度

kubectl get node --show-labels

亲和性

节点的亲和性影响pod调度

节点亲和性标签:nodeAffinty和之前nodeSelector基本一样,根据节点上标签约束来决定pod调度到那些节点

pod的亲和性和反亲和性是处理pod与pod之间的关系。
pod亲和性主要是想把pod和某个依赖的pod放在一起,以实现pod的标签进行标记,并将pod标签一样的几个pod部署到同一个节点上。
pod反亲和性主要想把pod和某个pod分开。

pod的亲和性和反亲和性都有硬亲和和软亲和之分:
硬亲和性:约束条件必须满足
软亲和性:尝试满足,不保证满足

支持常用的操作符号
In
NotIn
Exists
Gt
Lt
DoesNotExists

污点和污点容忍

影响pod调度
污点和污点容忍

1.
基本介绍
nodeSelector和nodeAffinity
pod调度到某些节点,pod属性,调度的时候实现
Taint:污点,节点不做普通的分配调度,是节点属性

2.应用场景
专用节点:
配置特定硬件节点
基于Taint驱逐

3.具体演示
1)查看当前节点污点情况:kubetcl describe node 当前节点名称 | grep Taint
污点值有三个
NoSchedule:一定不被调度
PreferNoSchedule:尽量不被调度
NoExecute:不会调度,还会驱逐Node已有的pod

2)为节点添加污点
kubetcl taint node [节点名称] key=value:污点值

3)为节点删除污点
kubetcl taint node [节点名称] key=value:污点值-


4.污点容忍

污点容忍yaml文件修改


http://www.kler.cn/a/272842.html

相关文章:

  • 【狂热算法篇】探秘图论之 Floyd 算法:解锁最短路径的神秘密码(通俗易懂版)
  • Vue篇-07
  • 【大前端】Vue3 工程化项目使用详解
  • 深入云电脑PC Farm技术探讨,以阿里云、华为云、ToDesk为例
  • IEC103 转 ModbusTCP 网关
  • 【网络云SRE运维开发】2025第3周-每日【2025/01/15】小测-【第14章ospf高级配置】理论和实操解析
  • 【vue baidu-map】实现百度地图展示基地,鼠标悬浮标注点展示详细信息
  • C语言深入理解指针(4)
  • KD-Tree的原理及其在KNN中的应用(附Python代码)
  • flask 继续学习
  • 微信小程序小案例实战
  • c语言大小写字母的转换
  • 用C语言链表实现图书管理
  • 23.1 微服务理论基础
  • 本人遇到大数据面试题和参考答案(超过1万字精华版)
  • LLM大模型统一封装接口解决方案
  • 论文笔记:Llama 2: Open Foundation and Fine-Tuned Chat Models
  • VMware 16下载安装,多图详细版
  • vue3+element-plus中dialog对话框组件去掉遮罩层后可以操作底层页面,以及弹窗嵌套弹窗如何去掉遮罩层且可以操作底层页面
  • MySQL学习Day32——数据库备份与恢复
  • 阿里云服务器配置怎么选择?
  • 本地虚拟机安装与网络配置
  • 数仓建模简介
  • 机器学习揭秘:如何让你的电脑变身智能侦探,预测未来趋势!
  • Spring集成hazelcast实现分布式缓存
  • Unity PS5开发 天坑篇 之 DEVKit环境部署与系统升级02