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:容器退出钩子,容器退出之后触发的条件