k8s之pod进阶

1.k8s的pod重启策略

Always :不论正常退出还是非正常退出都重启deployment的yaml文件只能是always pod的yaml三种模式都可以。

OnFailure:只有状态码非0才会重启,正常退出不重启

Never:正常退出和非正常退出都不重启

容器的退出了,pod才会重启。

一个pod可以有多个容器,只要有一个容器退出,pod内的所有容器都会重启

2.docker的重启策略

docker的默认策略是never

on-failure:非正常退出时,才会重启容器

always:只要容器退出都会重启

unless-stopped:只要容器退出就会重启,但是docker守护进程时已经停止的容器,不在重启

3.pod生命周期状态(补充)

CrashLoopBackOff: 容器退出,kubelet正在将它重启

InvalidImageName: 无法解析镜像名称

ImageInspectError: 无法校验镜像

ErrImageNeverPull: 策略禁止拉取镜像

ImagePullBackOff: 正在重试拉取

RegistryUnavailable: 连接不到镜像中心

ErrImagePull: 通用的拉取镜像出错

CreateContainerConfigError: 不能创建kubelet使用的容器配置

CreateContainerError: 创建容器失败

m.internalLifecycle.PreStartContainer 执行hook报错

RunContainerError: 启动容器失败

PostStartHookError: 执行hook报错

ContainersNotInitialized: 容器没有初始化完毕

ContainersNotReady: 容器没有准备完毕

ContainerCreating: 容器创建中

PodInitializing:pod 初始化中

DockerDaemonNotReady: docker还没有完全启动

NetworkPluginNotReady: 网络插件还没有完全启动

Evicte: pod被驱赶

4.pod内的容器使用节点资源的限制

1.request:需要的资源

2.limit:最高能占用系统多少资源

limit需要多少,最多也只能占用这么多

两个限制:cpu 内存

cpu的限制格式:

1 2 0.5 0.2 0.3

1 可以占1个cpu

2 可以占2个cpu

0.5 可以占 0.5个cpu

0.2 可以占 五分之一个cpu

0.1 是最小的单位

要么是整数,要么就是小数点后只能跟疑问,最小单位0.1

m来表示cpu

cpu时间分片原理:通过周期性的轮流分配cpu时间给各个进程,多个进程可以在cpu上交替执行

在k8s中就是表示占用cpu的比率:

m:millicores 单位

1个cpu:1000m

2个cpu:2000m

0.1个cpu:100m 最小单位

内存:

Ki:KB

Mi:MB

Gi:GB

Ti:TB

5.k8s怎么设置拉去镜像的策略

默认策略:IfNotPresent:如果本地镜像有,就不在拉取,本地没有才会去镜像仓库拉取

Always:不论镜像是否存在,创建时(重启)都会重新拉去镜像

Never:仅仅使用本地镜像。本地没有也不会主动拉取

都是本地部署,Never

如果涉及到外部部署,默认策略(事前要把docker的镜像导入到目标主机)

always:一般不用

6.pod的容器健康检查:探针

探针有三种规则

1.存活探针:livenessProbe 探测是否正常运行,如果发现探测失败,会杀掉容器,容器会根据重启策略来决定是否重启,不是杀掉pod

2.就绪探针:探测容器是否进入ready状态,并且做好接受请求的准备

探测失败,READY 0/1 没有进入ready状态,service会把资源对象的端点从当中删除,service也不会把请求转发到这个pod

3.启动探针

只是在容器的启动后开始检测,容器内的应用是否启动成功。在启动探测成功之前,所有的其他探针都会处于禁用状态。但是,一旦启动探针结束,后续的操作不再受启动探针的影响

在一个容器当中的可以有多个探针,启动探针:只在容器启动时探测

7.探针的检测方法

1.exec探针:在容器内部执行命令,如果命令的返回码是0,表示成功

适用于需要在容器内自定义命令来检查容器的健康的情况

2.httpGet:

对指定ip+端口的容器发送一个httpget的请求。响应状态码大于等于200小于400都是成功,适用于检查容器能否响应http的请求。web容器(nginx,tomcat)

3.tcpSocket:端口,对指定端口上的容器的IP地址进行tcp检查(三次握手),端口打开,认为探测成功。检查特定容器的端口监听状态

8.探针的周期

initialDelaySeconds: 3 一般设置为10-30s

表示容器启动之后多少秒来进行探测,时间不要设置的太短,可能导致无效探测

periodSeconds: 2 一般设置10-60

表示探针探测的间隔时间。每隔多少秒进行一次检查,应用的延迟敏感度。这个应该非常重要,是核心组件

failureThreshold: 2 可以不加 默认是3

表示如果探测失败,失败几次之后,把容器标记为不健康

successThreshold: 1 可以不加 默认就是1

只有成功一次就标记为就绪,健康,ready

timeoutSeconds: 1 默认10-30

表示每次探测的超时时间,在多少秒内必须完成探测

9.容器启动和退出时的动作

postStart:容器启动钩子,容器启动之后触发的条件

preStop:容器退出钩子,容器退出之后触发的条件

相关推荐
巅峰程序12 小时前
[docker]拉取镜像失败
docker·容器·eureka
MonkeyKing_sunyuhua13 小时前
sudo docker ps才能查看,docker ps不能查看问题
docker·容器·eureka
小龙在山东13 小时前
使用Docker快速部署FastAPI Web应用
docker·容器·fastapi
苏格拉真没有底13 小时前
docker配置代理解决不能拉镜像问题
运维·docker·容器
A ?Charis16 小时前
我来讲一下-Service Mesh.
云原生·service_mesh
ciao-lk17 小时前
docker desktop运行rabittmq容器,控制台无法访问
docker·容器
严格要求自己19 小时前
nacos-operator在k8s集群上部署nacos-server2.4.3版本踩坑实录
云原生·容器·kubernetes
少吃一口就会少吃一口19 小时前
k8s笔记
云原生·容器·kubernetes
葡萄皮Apple19 小时前
[CKS] K8S ServiceAccount Set Up
服务器·容器·kubernetes
星海幻影20 小时前
云原生-docker安装与基础操作
网络·安全·docker·云原生·容器