k8s的pod重启策略
Always deployment的yaml文件只能是Always pod的yaml三种模式都可以,不论正常退出还是非正常退出都重启
OnDailure: 只有状态码非0才会重启。正常退出是不重启的
Never 正常退出和非正常退出都不重启
容器的退出了,pod才会重启
pod可以有多个容器,只要有一个容器退出,整个pod都会重启,pod内的所有容器都会重启
docker的默认策略是Never
on-failure 非正常退出,才会重启容器
Always 只要容器退出都会重启
unless-stopped 只要容器退出就会重启,docker守护进程时已经停止的容器,不再重启
单机部署 docker 足够了
集群化部署 才使用k8s
生成deployment的yml文件
kubectl create deployment nginx1 --image=nginx1.22 --replicas=3 --dry-run=client -o yaml > /opt/test1.yaml
#--dry-run=client 只是调用api的对象不执行命令
生成pod的yml文件
kubectl run nginx1 --image=nginx:1.22 --dry-run=client -o yaml > /opt/test2.yml
生成service的yaml文件
kubectl expose deployment nginx --port=80 --target-port=80 --type=NodePort --dry-run=client -o yaml > /opt/test3.yml
crashloopbackoff pod当中的容器退出,kubelet正在重启
imagepillbackoff 正在重试拉去镜像
errimagepull 拉取镜像出错了
原因
1、网速太慢
2、镜像名字写错了
3、镜像仓库挂了
Evicte Pod被驱赶
node节点的资源不够部署pod,或者是资源不足,kubelet自动选择一个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被驱赶
1、request pod容器内需要的资源
2、limit 最高能占用系统多少资源
limit 需要多少,最多也只能占用这么多
两种限制
1、cpu
cpu的限制格式(两种格式)
1 2 0.5 0.2 0.3
1 可以占用一个cpu
2 可以占用两个cpu
0.5 半个
0.2 一个cpu的五分之一
0.1 是最小单位(不能最小)
要么是整数,要么就是小数点后只能跟一位,最小单位0.1
m 来表示cpu
cpu时间分片原理:
cpu时间分片:通过周期性的轮流分配cpu时间给各个进程,多个进程可以在cpu上交替执行
在k8s中就是表示占用的cpu的比率
m millicores 单位
1000m 表示一个cpu .... 500m 表示半个cpu
2、内存
内存的单位表示
ki 表示KB
Mi 表示MB
Gi 表示GB
Ti 表示TB
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: centos
name: centos
spec:
replicas: 1
selector:
matchLabels:
app: centos
template:
metadata:
labels:
app: centos
spec:
containers:
- image: centos:7
name: centos
command: ["/bin/bash","-c","sleep 3600"]
resources:
limits:
memory: "1Gi"
cpu: "1000m"
在创建pod时,一定要给容器做资源限制
k8s怎么设置拉取镜像的策略
默认策略:
IfNotPresent 如果本地镜像有,就不在拉取,本地没有才会去镜像仓库拉取
Always 不论是否存在,在创建时(重启)都会重新拉取镜像
Never 仅仅使用本地镜像,本地没有也不会主动拉取
都是本地部署,Never
如果涉及到外部部署,默认策略(事前要把docker镜像导入到目标主机)
Always 一般不用
探针 probe
k8s对容器执行的定期检查,诊断
1、存活探针
2、就绪探针
3、启动探针
存活探针 livenessProbe
作用: 探测容器是否正常运行,如果发现探测失败,会杀死容器,容器会根据重启策略来决定是否重启,不是杀掉pod
就绪探针
作用:探测容器是否进入ready状态,并做好接受请求的准备,探测失败 READY 0/1 没有进入ready状态,service 会把这个资源对象的端点从当中剔除,service也不会把请求转发到这个pod
kubectl get endpoints 查看pod的端点
启动探针
只是在容器的启动后开始检测,容器内的应用是否启动成功,在启动探测成功之前,所有的其他的其他探针都会处于禁用状态,但是一旦启动探针结束,后续的操作不再受启动他真的影响
在一个容器当中,可以有多个探针
启动探针:只在容器启动时探测
存活和就绪
1、exec探针:在容器内部执行命令,如果命令的返回码是0,表示成功
适用于需要在容器内自定义命令来检查容器的健康的情况
2、httpGet: 对指定IP+端口的容器发送一个httpget的请求,响应状态码大于等于200,小于400都是成功(x>=200<400)
适用于检查容器能否响应http的请求,web容器(nginx,tomcat)
3、tcpSocket:端口,对指定端口上的容器的IP地址进行tcp检查(三次握手),端口打开,认为探测成功
适用于检查特定容器容器的端口监听状态
1、成功 容器通过了 ,正常运行
2、失败,存活探针会重启
3、未知状态 诊断失败
exec方式
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: centos
name: centos
spec:
replicas: 1
selector:
matchLabels:
app: centos
template:
metadata:
labels:
app: centos
spec:
containers:
- image: centos:7
name: centos
command: ["/bin/bash","-c","touch /opt/123.txt;sleep 3600"]
livenessProbe:
exec:
command: ["/usr/bin/test", "-e", "/opt/123.txt"]
initialDelaySeconds: 3
#表示容器启动之后多少秒来进行探测,时间不要设置的太短,可能导致无效探测
periodSeconds: 2
#表示探针探测的间隔时间,每隔多少秒进行一次检查,应用的延迟敏感度,这个应用非常重要,是一个核心组件
failureThreshold: 2
#表示如果探测失败,失败几次之后,把容器标记为不健康
successThreshold: 1
#表示只要成功一个就标记就绪,健康,ready
timeoutSeconds: 1
#表示每次探测的超时时间,在多少秒内必须完成探测
livenessProbe 杀死容器重启,所有的探针策略伴随整个pod的生命周期,除了启动探针
httpGet方式
apiVersion: v1
kind: Pod
metadata:
labels:
run: nginx1
name: nginx1
spec:
containers:
- image: tomcat:8.0.52
name: nginx1
livenessProbe:
httpGet:
scheme: HTTP
port: 8080
path: /index.jsp
initialDelaySeconds: 4
periodSeconds: 2
telnet方式
apiVersion: v1
kind: Pod
metadata:
labels:
run: nginx1
name: nginx1
spec:
containers:
- image: tomcat:8.0.52
name: nginx1
livenessProbe:
tcpSocket:
port: 8081
initialDelaySeconds: 4
periodSeconds: 2