K8S之Pod常见的状态和重启策略

Pod常见的状态和重启策略

  • 常见的Pod状态
    • Pending
    • PodScheduled
    • Unschedulable
    • PodInitializing
    • ImagePullBackOff
    • Initialized
    • Running
    • Error
    • CrashLoopBackOff
    • Terminating
    • Succeeded
    • Failed
    • Evicted
    • Unknown
  • Pod的重启策略
    • 使用Always重启策略
    • 使用Never重启策略
    • 使用OnFailure重启策略(常用)

常见的Pod状态

在这里插入图片描述

Pending

发生原因:

  • Pod中的容器还没有全部创建完成。
    排查建议:检查Pod依赖的存储是否有权限挂载、镜像是否可以下载等。
  • 调度没有完成,没有任何一个节点能满足调度条件,已经创建了Pod 但是没有适合它运行的节点。
    排查建议:Pod里是否设定了 nodeName 或者 nodeSelector;是否受污点和容忍度的影响等。

PodScheduled

Pod正处于调度中,在scheduler刚开始调度的时候,还没有将Pod分配到指定的Node,在筛选出合适的节点后就会更新etcd数据,将Pod分配到指定的Node

Unschedulable

Pod不能被调度, scheduler没有匹配到合适的Node节点

PodInitializing

pod 初始化中

ImagePullBackOff

发生原因:Pod所在的Node节点下载镜像失败

Initialized

所有Pod中的初始化容器已经完成了

Running

Pod内部的容器已经被创建并且启动。

Error

发生原因:Pod 启动过程中发生了错误

CrashLoopBackOff

发生原因:容器曾经启动了,但可能又异常退出了。
排查建议:先看Pod里的容器运行的服务是否正常。通过看Pod日志 “kubectl logs -f {pod名称} -n {pod的命名空间}”

Terminating

Pod 正在被销毁

Succeeded

Pod 中的所有容器都被成功终止,即Pod 里所有的容器均已terminated。

Failed

Pod 中的所有容器都已终止了,但至少有一个容器是因为失败终止。例如:容器以非0状态退出或者被系统终止。

Evicted

发生原因:出现这种情况,多见于系统内存或硬盘资源不足。

排查建议:可df-h查看docker存储所在目录的资源使用情况,如果百分比大于85%,就要及时清理下资源,尤其是一些大文件、docker镜像。

Unknown

发生原因:通常是由于pod所在的node节点通信错误。pod是什么状态是apiserver和运行在pod节点的kubelet进行通信获取状态信息的。如果节点之上的kubelet本身出故障,那么apiserver就连不上kubelet,得不到信息了,就会看Unknown。

Pod的重启策略

Pod的重启策略(RestartPolicy)应用于Pod内的所有容器,当某个容器异常退出或者健康检查失败时,kubelet 将根据重启策略来进行相应的操作。

Pod 的 spec 字段中包含一个 restartPolicy 字段,其可能取值包括 Always、OnFailure 和 Never。

策略解读

  • Always:只要容器异常退出,kubelet就会自动重启该容器。(这个是默认的重启策略)
  • OnFailure(常用):当容器终止运行且退出码不为0时,由kubelet自动重启该容器。
  • Never:不论容器运行状态如何,kubelet都不会重启该容器。

使用Always重启策略

创建pod资源文件

vim pod.yaml
apiVersion: v1
kind: Pod
metadata:name: demo-podnamespace: default
spec:restartPolicy: Always # 设置Pod的重启策略containers:- name:  tomcat-pod-javaimage: tomcat:8.5-jre8-alpineimagePullPolicy: IfNotPresentports:- containerPort: 8080

创建资源

kubectl apply -f pod.yaml

1)正常停止容器里的tomcat服务
进入容器
(ps. “-c tomcat-pod-java”: 指定进入pod里的哪个容器内,如果pod里只有一个容器可不写 -c)

kubectl exec -it demo-pod -c tomcat-pod-java -- /bin/bash

正常关闭服务

/usr/local/tomcat/bin/shutdown.sh

在这里插入图片描述

查看pod状态

kubectl get pods -w

在这里插入图片描述

发现正常停止容器里的tomcat服务,容器重启了一次,pod又恢复正常了

2)非正常停止容器里的tomcat服务
进入容器

kubectl exec -it demo-pod -- /bin/bash

强行终止服务

kill 1

查看pod状态

kubectl get pods -w

在这里插入图片描述

上面可以看到容器终止了,并且又重启一次,重启次数增加了一次

使用Never重启策略

创建pod资源文件

vim pod.yaml
apiVersion: v1
kind: Pod
metadata:name: demo-podnamespace: default
spec:restartPolicy: Never # 设置Pod的重启策略containers:- name:  tomcat-pod-javaimage: tomcat:8.5-jre8-alpineimagePullPolicy: IfNotPresentports:- containerPort: 8080

创建资源

触发小提醒:没改镜像直接用apply无效。

kubectl apply -f pod.yaml

需要执行2个命令,重启pod

kubectl delete -f pod.yamlkubectl create -f pod.yaml

在这里插入图片描述

1)正常停止容器里的tomcat服务
进入容器
(ps. “-c tomcat-pod-java”: 指定进入pod里的哪个容器内,如果pod里只有一个容器可不写 -c)

kubectl exec -it demo-pod -c tomcat-pod-java -- /bin/bash

正常关闭服务

/usr/local/tomcat/bin/shutdown.sh

查看pod状态

kubectl get pods -w

在这里插入图片描述

发现正常停止容器里的tomcat服务,pod正常运行,容器没有重启

2)非正常停止容器里的tomcat服务
进入容器

kubectl exec -it demo-pod -- /bin/bash

强行终止服务

kill 1

查看pod状态

kubectl get pods -w

在这里插入图片描述

上面可以看到容器状态是error,并且没有重启,这说明重启策略是never,pod里容器服务无论如何终止,都不会重启

使用OnFailure重启策略(常用)

创建pod资源文件

vim pod.yaml
apiVersion: v1
kind: Pod
metadata:name: demo-podnamespace: default
spec:restartPolicy: OnFailure  # 设置Pod的重启策略containers:- name:  tomcat-pod-javaimage: tomcat:8.5-jre8-alpineimagePullPolicy: IfNotPresentports:- containerPort: 8080

创建资源

kubectl delete -f pod.yamlkubectl create -f pod.yaml

1)正常停止容器里的tomcat服务
进入容器
(ps. “-c tomcat-pod-java”: 指定进入pod里的哪个容器内,如果pod里只有一个容器可不写 -c)

kubectl exec -it demo-pod -c tomcat-pod-java -- /bin/bash

正常关闭服务

/usr/local/tomcat/bin/shutdown.sh

查看pod状态

kubectl get pods -w

在这里插入图片描述

发现正常停止容器里的tomcat服务,退出码是0,pod里的容器不会重启

2)非正常停止容器里的tomcat服务
进入容器

kubectl exec -it demo-pod -- /bin/bash

强行终止服务

kill 1

查看pod状态

kubectl get pods -w

在这里插入图片描述

上面可以看到非正常停止pod里的容器,容器退出码不是0,那就会重启容器

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

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

相关文章

MPLS VPN功能组件(3)

私网标签分配 通过MPBGP为VPNv4路由分配内层标签 PE从CE接收到IPv4路由后,对该路由加上相应VRF的RD(RD手动配置),使其成为一条VPNV4路由,然后在路由通告中更改下一跳属性为自己,通常是自己的Loopback地址…

NLP_语言模型的雏形 N-Gram 模型

文章目录 N-Gram 模型1.将给定的文本分割成连续的N个词的组合(N-Gram)2.统计每个N-Gram在文本中出现的次数,也就是词频3.为了得到一个词在给定上下文中出现的概率,我们可以利用条件概率公式计算。具体来讲,就是计算给定前N-1个词时&#xff0…

牛客网SQL进阶127: 月总刷题数和日均刷题数

官网链接: 月总刷题数和日均刷题数_牛客题霸_牛客网现有一张题目练习记录表practice_record,示例内容如下:。题目来自【牛客题霸】https://www.nowcoder.com/practice/f6b4770f453d4163acc419e3d19e6746?tpId240 0 问题描述 基于练习记录表…

【RT-DETR进阶实战】利用RT-DETR进行视频划定区域目标统计计数

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 Hello,各位读者,最近会给大家发一些进阶实战的讲解,如何利用RT-DETR现有的一些功能进行一些实战, 让我们不仅会改进RT-DETR,也能够利用RT-DETR去做一些简单的小工作,后面我也会将这些功能利用PyQt或者是…

一条 SQL 更新语句是如何执行的?

之前你可能经常听 DBA 同事说,MySQL 可以恢复到半个月内任意一秒的状态,惊叹的同时,你是不是心中也会不免会好奇,这是怎样做到的呢? 我们先从一条更新语句讲起,首先创建一个表,这个表有一个主键…

详解计算机软件基本概念

软件基本概念 软件的定义 一个完整的计算机系统是由硬件系统和软件系统协同工作来完成某一给定的任务的。 只有硬件的计算机称为裸机,裸机必须安装了计算机软件后才可以完成各项任务。 从广义地讲,软件是指计算机程序、数据以及开发、使用和维护程序…

django admin 自定义界面时丢失左侧导航 nav_sidebar

只显示了自定义模板的内容,左侧导航没有显示出来。 原因:context 漏掉了,要补上。 # 错误写法(左侧导航不显示)def changelist_view(self, request, extra_contextNone):form CsvImportForm()payload {"form&qu…

Android AOSP源码研究之万事开头难----经验教训记录

文章目录 1.概述2.Android源下载1.配置环境变量2.安装curl3.下载repo并授权4.创建一个文件夹保存源码5.设置repo的地址并配置为清华源6.初始化仓库7.指定我们需要下载的源码分支并初始化 2.1 使用移动硬盘存放Android源码的坑2.2 解决方法 3.Android源码编译4.Android源烧录 1.…

嵌入式单片机中晶振的工作原理

晶振在单片机中是必不可少的元器件,只要用到CPU的地方就必定有晶振的存在,那么晶振是如何工作的呢? 什么是晶振 晶振一般指晶体振荡器,晶体振荡器是指从一块石英晶体上按一定方位角切下的薄片,简称为晶片。 石英晶体谐…

报错ValueError: Unknown CUDA arch (8.6) or GPU not supported

文章目录 问题描述解决方案参考文献 问题描述 报错 ValueError: Unknown CUDA arch (8.6) or GPU not supported 本人显卡为 RTX 3060,CUDA 为 10.2,PyTorch 为 1.5 解决方案 修改 C:\Users\Administrator\Envs\test\Lib\site-packages\torch\utils\c…

MVC框架学习

大一的时候写过一个mvc框架的跑酷游戏,但是那时候基础不扎实,没学明白也没听懂。现在深入的学习一下 以下内容参考:MVC 模式 | 菜鸟教程 (runoob.com) MVC 模式 MVC 模式代表 Model-View-Controller(模型-视图-控制器&#xff…

单片机学习笔记---LED点阵屏显示图形动画

目录 LED点阵屏显示图形 LED点阵屏显示动画 最后补充 上一节我们讲了点阵屏的工作原理,这节开始代码演示! 前面我们已经说了74HC595模块也提供了8个LED,当我们不使用点阵屏的时候也可以单独使用74HC595,这8个LED可以用来测试7…

了解海外云手机的多种功能

随着社会的高度发展,海外云手机成为商家不可或缺的工具,为企业出海提供了便利的解决方案。然而,谈及海外云手机,很多人仍不了解其强大功能。究竟海外云手机有哪些功能,可以为我们做些什么呢? 由于国内电商竞…

ChatGPT 变懒最新解释!或和系统Prompt太长有关

大家好我是二狗。 ChatGPT变懒这件事又有了最新解释了。 这两天,推特用户Dylan Patel发文表示: 你想知道为什么 ChatGPT 和 6 个月前相比会如此糟糕吗? 那是因为ChatGPT系统Prompt是竟然包含1700 tokens,看看这个prompt里面有多…

波奇学Linux: 文件描述符

文件和操作系统的关系 操作系统控制进程,文件的打开是在进程中进行。意味着用来控制进程的PCB必然有文件的信息,操作系统通过控制PCB的信息来控制文件的读写。 Q1:如何证明文件打开是在进程中进行? 编写c文件调用fopen来操作文件…

032-安全开发-JavaEE应用Servlet路由技术JDBCMybatis数据库生命周期

032-安全开发-JavaEE应用&Servlet路由技术&JDBC&Mybatis数据库&生命周期 #知识点: 1、JavaEE-HTTP-Servlet技术 2、JavaEE-数据库-JDBC&Mybatis 演示案例: ➢JavaEE-HTTP-Servlet&路由&周期 ➢JavaEE-数据库-JDBC&Mybat…

2月3日作业

1.编程实现单向循环链表的头插&#xff0c;头删、尾插、尾删 尾插/头插&#xff0c;头删&#xff0c;尾删&#xff1a; 头文件&#xff1a; #ifndef __HEAD_H_ #define __HEAD_H_#include<stdio.h> #include<string.h> #include<stdlib.h>enum {FALSE-1,SU…

大模型是如何实现Function Call函数调用的?

▼最近直播超级多&#xff0c;预约保你有收获 近期直播&#xff1a;《Agent 企业级应用案例实战》 —1— 大模型如何实现函数调用&#xff1f; 大模型要实现精确的函数调用&#xff08;Function Call&#xff09;需要理解能力和逻辑能力&#xff0c;理解能力就是对用户的 Prom…

Ps:窗口排列

Ps菜单&#xff1a;窗口/排列 Window/Arrange Photoshop 的“窗口/排列” Arrange子菜单中提供了多种方式来组织和查看打开的文档窗口&#xff0c;这在处理多个文档或比较图像时非常有用。 ◆ ◆ ◆ 常用操作方法与技巧 1、同文档双窗口处理法 将同一个图像显示在两个窗口中&…

基于java+springboot+vue实现的仓库管理系统(文末源码+Lw)23-115

1 绪论 现在大家正处于互联网加的时代&#xff0c;对于物资信息的管理来说&#xff0c;传统的通过纸质文档记录信息的方式已经落后了&#xff0c;依靠手工管理物资信息&#xff0c;不仅花费较长的工作时间&#xff0c;在对记录各种信息的文档进行信息查询以及信息核对操作时&a…