K8s之污点、容忍度与Pod重启策略详解

news2024/11/24 19:40:45

文章目录

    • 一、污点-Taint
    • 二、容忍度-Tolerations
    • 二、Pod重启策略
      • 1、Pod常见状态
      • 2、Pod重启策略

一、污点-Taint

在 Kubernetes 中,污点(Taint)是一种标记,用于标识一个Node节点上的某些资源或条件不可用或不可接受。当一个节点被标记了污点后,只有那些能够容忍该污点的 Pod 才能被调度到该节点上。

污点常用与以下场景:

  • 将某些节点标记为“故障”,以防止新的 Pod 被调度到这些节点上;
  • 将某些节点标记为“高负载”,以防止过多的 Pod 被调度到这些节点上,导致节点过载;
  • 将某些节点标记为“专用”,以保证只有特定的 Pod 能够被调度到这些节点上。

1、查看定义taint 帮助信息

kubectl explain node.spec.taints

污点排斥等级如下:

  • NoSchedule:表示Pod不会被调度到具有该污点的节点上,不影响已经存在的Pod。
  • PreferNoSchedule:表示调度器会尽量避免将Pod调度到具有该污点的节点上。
  • NoExecute:表示如果节点上已经存在该污点,那么Pod将被驱逐出该节点。如果Pod没有相应的容忍度,那么Pod将被删除。

2、定义污点

kubectl taint nodes node-1 node-type=dev:NoSchedule

3、查看 node-1 Node节点污点信息

kubectl describe nodes node-1|grep Taints

4、删除 node-1 Node节点 node-type 污点

kubectl taint nodes node-1 node-type=dev:NoSchedule-

二、容忍度-Tolerations

当我们节点定义污点后,如果我们不定义对应的容忍度,那么Pod将不会调度到此Node节点。

为了方便下面实验,我把所有node节点全部定义上污点

kubectl taint nodes node-1 node-type=dev:NoSchedule
kubectl taint nodes node-2 node-type=dev:NoSchedule

查看定义容忍度帮助:

kubectl explain pod.spec.tolerations

1、定义Pod容忍度,容忍node-type=dev 且 排斥等级等于NoExecute 的污点,使用了operator=Equal 表示这三点必须同事满足。

cat pod-1.yml 
---
apiVersion: v1
kind: Pod
metadata:
  name: pod-1
  namespace: default
  labels:
    app: nginx
    env: dev

spec:
  tolerations:
  - effect: "NoExecute"   # 指定排斥等级
    key: "node-type"      # 污点key
    operator: "Equal"     # Equal表示等于
    value: "dev"          # 污点value
    tolerationSeconds: 3600 # 删除Pod前等待时间,默认30s

  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80

执行文件:

kubectl apply -f pod-1.yml

查看状态,因为没有任何节点满足该Pod容忍,所以该Pod处于Pending状态

kubectl get pods

NAME    READY   STATUS    RESTARTS   AGE
pod-1   0/1     Pending   0          10m

2、定义Pod容忍度,将排斥等级改为 NoSchedule,这样我们污点key,value,排斥等级都满足了,Pod才会调度 Pod资源清单文件如下:

cat pod-2.yml 
---
apiVersion: v1
kind: Pod
metadata:
  name: pod-2
  namespace: default
  labels:
    app: nginx
    env: dev

spec:
  tolerations:
  - effect: "NoSchedule"  # 指定排斥等级
    key: "node-type"      # 污点key
    operator: "Equal"     # Equal表示等于
    value: "dev"          # 污点value

  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80

执行文件

kubectl apply -f pod-2.yml 

查看状态,Pod成功调度,且状态为 Running

kubectl get pods pod-2

NAME    READY   STATUS    RESTARTS   AGE
pod-2   1/1     Running   0          5m32s

3、定义Pod容忍度,将 operator=Exists表示满足其中一项即可容忍,下面Pod没有定义key,value,表示没有key,value方面限制,容忍排斥等级=NoSchedule的节点。

cat pod-3.yml 
---
apiVersion: v1
kind: Pod
metadata:
  name: pod-3
  namespace: default
  labels:
    app: nginx
    env: dev

spec:
  tolerations:
  - effect: "NoSchedule"  # 指定排斥等级 
    operator: "Exists"    # Exists表示满足一项即可

  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80

执行文件

kubectl apply -f pod-3.yml 

查看状态,Pod成功调度,且状态为 Running

kubectl get pods pod-3

NAME    READY   STATUS    RESTARTS   AGE
pod-3   1/1     Running   0          5m16s

二、Pod重启策略

1、Pod常见状态

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZrU9W2Hz-1684594847635)(D:\MD归档文档\IMG\image-20230520215639218.png)]

常见状态:

  • Pending(挂起):Pod 已经被 Kubernetes API 接受,但是容器镜像还没有被拉取到本地,或者某些容器正在等待其他容器启动。

  • Running(运行):Pod 中的所有容器都已经被创建并且至少有一个容器正在运行。

  • Succeeded(成功):Pod 中的所有容器都已经成功地完成了它们的任务并退出。

  • Failed(失败):Pod 中的所有容器都已经退出,并且至少有一个容器以非零状态退出。

  • Unknown(未知):Pod 的状态无法被 Kubernetes API 服务器获取,通常是由于与 API 服务器的通信故障导致的。

其他状态:

  • Unschedulable:Pod不能被调度, scheduler没有匹配到合适的node节点。
  • PodScheduled:调度器已经为Pod选择了一个节点,并且该节点已经为该Pod分配了资源,表示Pod已经被调度到了一个节点上,但是它还没有被调度器标记为已经运行。
  • Initialized:所有pod中的初始化容器已经完成了。
  • ImagePullBackOff:Pod所在的node节点下载镜像失败。

2、Pod重启策略

Pod的重启策略,应用于Pod中所有的容器,可以通过在 Pod 的 YAML 文件中设置 restartPolicy 字段来指定 Pod 的重启策略。

  • Always:只要容器退出,kubelet就会自动重启该容器。(默认策略)
  • OnFailure:只有在 Pod 失败时才会被重启。
  • Never:Pod 不会被重启。
  • OnChanged:只有在 Pod 的配置发生变化时才会被重启。

1、创建 Pod,指定 Always 重启策略

cat pod-always.yaml 
---
apiVersion: v1
kind: Pod
metadata:
  name: nginx-always
  namespace: default
  labels:
    env: uat
    app: nginx
spec:
  restartPolicy: Always
  containers:
  - name: nginx-container
    image: nginx

执行文件 && 动态查看Pod状态:

kubectl apply -f  pod-always.yaml
kubectl get pods nginx-always -w

进入Pod内部将Nginx手动停止掉,查看Pod状态

kubectl exec -it nginx-always -- /bin/bash
nginx -s stop

可以看到Pod已经自动启动了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eo7VDLS4-1684594847636)(D:\MD归档文档\IMG\image-20230520225350040.png)]

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

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

相关文章

基于springboot的社区疫情防控平台

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SpringBoot 前端:HTML、Vue 数据库:MySQL5.7和Navicat管理工具结合 开发软件:IDEA / Eclipse 是否Maven项目:是 前言 基于springboot…

模板类与友元

目录 分类 一、非模板友元:友元函数不是模板函数,而是利用模板类参数生成的函数; 代码 分析 运行结果 二、约束模板友元:模板类实例化时,每个实例化的类对应一个友元函数;并且这个模板友元适用多种类模…

AtCoder Beginner Contest 302(A-D)

TOYOTA MOTOR CORPORATION Programming Contest 2023#2 (AtCoder Beginner Contest 302) Contest Duration: 2023-05-20(Sat) 20:00 - 2023-05-20(Sat) 21:40 (local time) (100 minutes) 暴搜场,1个小时出了4道,以为很有机会,结果E交了十发没…

栈和队列OJ题:LeetCode--232.用栈实现队列

朋友们、伙计们,我们又见面了,今天给大家带来的是LeetCode--232.用栈实现队列 数 据 结 构 专 栏:数据结构 个 人 主 页 :stackY、 LeetCode 专 栏 :LeetCode刷题训练营 LeetCode--232.用栈实现队列&#xff…

使用 compose 封装一个通用的关于页面库

前言 现在很多 APP 都会有一个关于页面,用于放置一些必要的信息,例如:版本号、版权信息等。有时也会用于展示设置、帮助、反馈等功能的入口。 通常,我们都会自己挨个创建不同的 item ,略显繁琐。 所以我就在想&…

ad18学习笔记一

如何自学altium designer如何自学altium designer? - 知乎如何自学altium designer 这里面有ad官方推荐的b站的视频:可以直接去b站关注ad官方账号 AltiumChina,它本身就发布了很多实用教程。 在知乎的这个界面也有Altium Designer Ver18_官…

万字长文,为你送上全网最全Flutter学习资料!

话不多说直接上目录,干货较多内容很长,建议先收藏供以后慢慢查阅。 目录 文章视频组件导航模板插件框架实验性游戏开源App实用工具社区书籍福利 文章 介绍 Google IO 2018 [1.1K👏] - 构建美观,灵活的用户界面。Presentation …

Stm32待机模式的进入与唤醒

1.基础介绍 1-1:单片机的“低功耗模式”,像是手机的待机模式,不同于正常运行模式,处于一种省电省资源的状态 1-2:在运行情况下,HCLK为cpu提供时钟,cortex-m3内核执行程序的代码,如…

CleanMyMac X2023Mac上下载最多的第三个实用程序

CleanMyMac X是一款广为人知的Mac优化应用程序,目前是Mac上下载最多的第三个实用程序,并获得苹果官方认证。为了满足用户更好体验Mac和新版系统,它们带来了新功能。这新功能可以帮助用户更好的监控Mac的健康状况,让用户畅享Mac新系…

base编码

https://www.qqxiuzi.cn/bianma/base64.htm 一眼就解密 一看就晓得是base64,问就是做多了(base64大小写加数字和) base编码概念 此博客列举的比较多,我信 https://blog.csdn.net/qq_53105813/article/details/127626450 简单聊几个…

少儿编程 中国电子学会图形化编程等级考试Scratch编程三级真题解析(选择题)2023年3月

2023年3月scratch编程等级考试三级真题 选择题(共25题,每题2分,共50分) 1、计算“2+4+8+……+128”,用变量n表示每项,根据变化规律,变量n的赋值用下列哪个最合适 A、 B、 C、 D、 答案:D 考点分析:考查数学逻辑推理能力,从给定的算式中可以看出后一项都是前一…

redis 数据库概述

一 概述 redis是一种nosql数据库,他的数据是保存在内存中,同时redis可以定时把内存数据同步到磁盘,即可以将数据持久化,并且他比memcached支持更多的数据结构(string,list列表[队列和栈],set[集合],sorted set[有序集合],hash(hash表))。相关…

基于springboot篮球竞赛预约平台

开发技术与环境配置 以Java语言为开发工具,利用了当前先进的springboot框架,以MyEclipse10为系统开发工具,MySQL为后台数据库,开发的一个篮球竞赛预约平台。 SpringBoot框架 SpringBoot是一个全新开源的轻量级框架。基于Spring…

Callback CBFS .NET 2022所有产品打包Crack

Callback CBFS .NET 所有产品打包 Callback Technologies CBFS Storage 2022 .NET Edition v22.0.8517 Callback Technologies CBFS Filter 2022 .NET Edition v22.0.8485 Callback Technologies CBFS Disk 2022 .NET Edition v22.0.8464 Callback Technologies CBFS Connect …

UART-STM32

UART-STM32 通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统 通信协议:制定通信的规则,通信双方按照协议规则进行数据收发 第一步,开启时钟,把需要用的USART和GPIO的时钟打开 第二步,GPIO初始化,把TX配置成复用输出,RX配置成输入 第三步,配置USART,直接使…

Kanzi Studio介绍与安装注意

文章目录 Kanzi介绍部署 Kanzi 应用程序到 Windows Kanzi介绍 Kanzi UI Solution是一个完整的UI解决方案,为嵌入式的UI的设计、开发和部署提供了一套完善的开发平台。它成功解决了实现和众多图形化用户界面分化的问题,使得用户界面的设计者和编程者可以…

vue的搭建以及命令

0.0 课程介绍 Vue介绍 【了解】 Vue项目的搭建 【掌握】 项目目录详解【掌握】 Vue组件化【掌握】 Vue的表达式 【重点】 Vue的指令【重点】 1.0 什么是Vue?【了解】 Vue是一个构建用户界面(UI)的JS库。 1.1Vue的特点 小 20k 【大概11000多行】…

HTTPS加密流程详解

文章目录 HTTPS与HTTP的关系HTTPS基本工作过程对称密钥非对称密钥中间人攻击证书 HTTPS与HTTP的关系 HTTPS协议基于HTTP,只是比HTTP多了一个加密层,为什么要加密呢?因为网络传输的过程中,明文传输的数据都有可能被劫持篡改&#…

系统分析师(一)软考简介

目录 1.证书简介2.考试简介3.考试报名4.各地考试机构5.考试要求6.考试教程用书 考试时间: 每年5月的最后一个周六 1.证书简介 ​ 软考全称是计算机技术与软件专业技术资格(水平)考试,是由国家人力资源和社会保障部、工业和信息化部…

【图】最小生成树

最小生成树:构造连通网的最小代价生成树。 最小生成树有两种算法:普利姆算法、克鲁斯卡尔算法。 普利姆(Prim)算法 加点,选择相邻点中边权最小的 需要两个一维数组,一个存权值,另一个存起始点…