Docker$Kubernetes笔记---04---Pod基础&生命周期
2023-12-12 14:40:48 0 举报
Docker$Kubernetes笔记---04---Pod基础&生命周期
作者其他创作
大纲/内容
Pod基础---结构定义
每个pod中都包含一个或多个容器,这些容器可以分为两类:
用户自定义容器:数量可多可少
Pause根容器:每个pod都会有一个根容器,根容器的作用有两个
可以以根容器作为依据,评估整个pod的健康状态
可以在根容器上设置IP地址,用户可以通过根容器IP访问到其他容器(实现Pod内部通信)
pod之间相互通信可以采用虚拟二层网络技术来实现,我们当前实验环境为calico网络插件实现
Pod定义的资源清单
在kubernetes中基本所有资源的一级属性都是一样的,主要分为五部分
apiVersion 版本,由k8s内部定义,版本号必须可以通过kubectl api-versions 查询到
kind 类型,由k8s内部定义,类型必须可以通过kubectl api-resources查询到
metadata 主要是指定资源标识与说明,常用的有name、namespace、labels等
spec 描述,这是配置中最重要的一部分,里边对各种资源配置的详细描述
status 状态信息,里边的内容不需要定义,有k8s自动生成
explain选项用于查看资源文档
命令格式:kubect explain 资源名称
查看pod资源文档
kubectl explain pods
kubectl explain pods
以下是比较详细的资源清单介绍
KIND: Pod 资源类型类型
VERSION: v1 资源版本
DESCRIPTION: 资源描述
FIELDS: 资源可配置的属性,如下
VERSION: v1 资源版本
DESCRIPTION: 资源描述
FIELDS: 资源可配置的属性,如下
apiVersion: v1 必选的一级属性,版本号,例如v1
kind: Pod 必选的一级属性,资源类型,例如Pod
metadata: 必选的一级属性,元数据
name: 必选的二级属性,Pod名称
namespace: dev 二级属性,Pod所属的名称空间,例如dev,默认为default名称空间
labels: 二级属性,自定义标签列表
name: 三级属性,标签名称
spec: 必选的一级属性,Pod中容器的详细定义
containers: 必选的二级属性,Pod中容器列表
name: 必选的三级属性,容器名称
image: 必选的三级属性,容器镜像名称
imagePullPolicy: 三级属性,镜像的拉取策略
command: 三级属性,容器的启动命令列表,如不指定,使用打包时使用的启动命令
args: 三级属性,容器的启动命令参数列表
workingDir: 三级属性,容器的工作目录
volumeMounts: 三级属性,挂载到容器内部的存储卷配置
name: 四级属性,引用pod定义的共享存储卷的名称
mountPath: 四级属性,存储卷在容器内mount的绝对路径,应少于512字节
readOnly: 四级属性,是否为只读模式
ports: 三级属性,需要暴露的端口库号列表
name: 四级属性,端口的名称
containerPort: 四级属性,容器需要监听的端口号
hostPort: 四级属性,容器所在的主机需要监听的端口号,默认与Container相同
protocol: 四级属性,端口协议,支持TCP/UDP,默认为TCP
env: 三级属性,容器运行前需要设置的环境变量列表
name: 四级属性,环境变量名称
value: 四级属性,环境变量的值
resources: 三级属性,资源限制和请求的设置
limits: 四级属性,资源限制的设置
CPU: 五级属性,CPU资源限制,单位为core数,将用于docker run --cpu-shares参数
memory: 五级属性,内存资源限制,单位可以为Mib/Gib,将用于docker run --memory参数
requests: 四级属性,资源请求的设置
CPU: 五级属性,CPU请求,容器启动的初始可用数量
memory: 五级属性,内存请求,容器启动的初始可用数量
lifecycle: 三级属性,生命周期钩子
postStart: 四级属性,容器启动后立即执行此钩子,如果执行失败,会根据重启策略进行重启
preStop: 四级属性,容器终止前执行此钩子,无论结果如何,容器都会终止
livenessProbe: 三级属性,对Pod内个容器健康检查设置,当探测容器无响应后将自动重启该容器
tcpSocket: 三级属性,对Pod内容器健康检查方式
initialDelaySeconds: 三级属性,容器启动完成后,首次探测时间,单位为秒
timeoutSeconds: 三级属性,对容器健康检查探测等待相应的超时时间,单位秒,默认1秒
periodSeconds: 三级属性,对容器监控检查的定期探测时间设置,单位秒,默认10秒一次
restartPolicy: 二级属性,Pod的重启策略
nodeName: 二级属性,设置pod调度到指定的node节点上
nodeSelector: 二级属性,设置Pod调度到指定的label的node节点上
imagePullSecrets: 二级属性,拉取镜像时,使用secret名称,以key:secretkey格式指定
hostNetwork: 二级属性,是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络
volumes: 二级属性,在该Pod上定义共享存储卷列表
name: 三级属性,共享存储卷名称
emptyDir: 三级属性,类型为emptyDir的存储卷,与Pod同生命周期的一个临时目录,为空值
hostPath: 三级属性,类型为hostPath的存储卷,挂载集群与定义的secret对象到容器内部
path: 四级属性,Pod所在宿主机的目录,将被用于容器中挂载的目录
secret: 三级属性,类型为secret的存储卷,挂载集群与定义的secret对象到容器内部
configMap: 三级属性,类型为configMap的存储卷,挂载预定义的configMap对象到容器内部
Pod基础---基本配置
以下是对spec属性下常见的子属性介绍
containers 容器列表,用于定义容器的详细信息,这是pod配置中最关键的一项配置
nodeName 根据nodeName的值将pod调度到指定的Node节点上
nodeSelector 根据NodeSelector中定义的信息选择将该pod调度到包含这些label的Node节点
hostNetwork 是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络
volumes 存储卷,用于定义pod上面挂载的存储信息
restartPolicy 重启策略,表示pod在遇到故障时的处理策略
以下是对containers属性的说明
通过下边命令可以获取containers支持的子属性
kubectl explain pod.spec.containers
kubectl explain pod.spec.containers
RESOURCE: containers <[]Object> 数组,代表可以有多个容器
FIELDS:
name <string> 容器名称,类型<字符串>
image <string> 容器镜像地址,类型<字符串>
imagePullPolicy <string> 镜像拉取策略,类型<字符串>
command <[]string> 容器启动的命令列表,如不指定,使用打包时使用的命令,类型<字符串>
args <[]string> 容器启动的命令需要的参数列表,类型<字符串>
env <[]Object> 容器环境变量的配置,类型<对象>
ports <[]Object> 容器需要暴露的端口号列表,类型<对象>
resources <Object> 资源限制和资源请求的设置,类型<对象>
以下是对containers下的name、image属性的案例演示
通过配置文件创建两个pod,nginx镜像用于提供web服务,busybox是一个小巧的linux命令集合,可以用来当测试工具使用
vim pod-base.yml
先删除dev名称空间,主要将dev下的pod删除,创建dev名称空间
kubectl delete ns dev
kubectl create ns dev
kubectl delete ns dev
kubectl create ns dev
通过配置文件创建pod
kubectl create -f pod-base.yml
kubectl create -f pod-base.yml
查看pod信息
kubectl describe pods pode-base -n dev
NAME:pod名称
READY:准备好的pod数量
STATUS:pod状态,CrashLoopBackOff(崩溃)
RESTARTS:重启次数
kubectl describe pods pode-base -n dev
NAME:pod名称
READY:准备好的pod数量
STATUS:pod状态,CrashLoopBackOff(崩溃)
RESTARTS:重启次数
Pod基础---镜像拉取策略
imagePullPolicy用于设置镜像拉取策略,k8s支持三种拉取策略,可通过下边命令查看
Always:总是从远程仓库拉取镜像
IfNotPresent:本地有则使用本地镜像,本地没有则从远程仓库拉取镜像
Never:只使用本地镜像,从不去远程仓库拉取,本地如果没有就报错
默认值说明:如果镜像标签为具体版本号,默认策略是IfNotPresent,如果镜像标签为latest,默认策略是Always
imagePullPolicy属性案例演示
创建pod,并指定镜像拉取策略为Never,只使用本地镜像,不从远程仓库拉取
vim pod-imagepullpolicy.yml
创建pod
kubectl create -f pod-imagepullpolicy.yml
kubectl create -f pod-imagepullpolicy.yml
查看pod信息
kubectl get po -n dev
kubectl get po -n dev
查看pod详细描述信息
kubectl describe pod pod-imagepullpolicy -n dev
kubectl describe pod pod-imagepullpolicy -n dev
PS:提示:本实验集群环境默认没有下载过nginx:1.17.2镜像,所以会创建失败
创建pod,并指定镜像拉取策略为IfNotPresent,本地有则使用本地镜像,本地没有则从远程仓库拉取镜像
vim pod-ifnotpresent.yml
创建pod
kubectl create -f pod-ifnotpresent.yml
kubectl create -f pod-ifnotpresent.yml
查看pod信息
kubectl get po -n dev
kubectl get po -n dev
查看pod详细信息
kubectl describe pod pod-ifnotpresent -n dev
kubectl describe pod pod-ifnotpresent -n dev
Pod基础---启动命令
前边案例中,busybox容器没有运行成功,是应为busybox并不是一个程序,而是类似于一个工具类的集合,k8s集群启动管理后,会自动关闭,解决方式就是让其一直运行,这时候可以使用command属性配置
对command属性的案例演示
创建pod-command.yml文件,并设置busybox容器的启动命令
vim pod-command.yml
命令解释
"/bin/sh","-c", 使用sh执行命令(busybox内没有bash,使用bash会失败)
"touch /tmp/hello.txt; 创建文件在tmp目录
while true;do /bin/echo $(date +%T) >> /tmp/hello.txt;sleep 3;done;" 每隔3秒向文件写入当前时间
创建pod
kubectl create -f pod-command.yml
kubectl create -f pod-command.yml
查看pod信息
kubectl get po -n dev
kubectl get po -n dev
进入busybox容器,查看文件内容
kubectl exec pod-command -n dev -it -c busybox /bin/sh
kubectl exec pod-command -n dev -it -c busybox /bin/sh
命令解释
exec 进入容器
pod-command pod名称
-it 交互进入容器,并为容器分配一个终端
-c 容器名称 指定容器名称,容器名称通过配置文件中定义的名称进入
/bin/sh 容器内执行命令的程序
容器内部查看文件内容
ls tmp
cat tmp/hello.txt
ls tmp
cat tmp/hello.txt
Pod基础---环境变量
env属性是用于设置容器环境变量的列表,环境变量的定义要根据容器具体需求定义
对env属性的案例演示
vim pod-env.yml
创建pod
kubectl create -f pod-env.yml
kubectl create -f pod-env.yml
查看pod信息
kubectl get po -n dev
kubectl get po -n dev
进入容器并查看变量
kubectl exec -it pod-env -n dev -c busybox /bin/sh
kubectl exec -it pod-env -n dev -c busybox /bin/sh
Pod基础---端口设置
ports属性用于配置容器需要暴露的端口列表
对ports属性的案例演示
通过下边命令可以获取ports属性可以使用的子属性
kubectl explain pod.spec.containers.ports
kubectl explain pod.spec.containers.ports
name 端口名称,如果指定,必须保证name在pod中是唯一的
containerPort 容器要监听的端口
hostPort 容器要在主机上公开的端口,如果设置,主机上只能运行容器的一个副本(一般省略)
hostIP 要将外部端口帮定到的主机IP(一般省略)
protocol 端口协议,必须是TCP、UDP或SCTP,默认为TCP
containerPort 容器要监听的端口
hostPort 容器要在主机上公开的端口,如果设置,主机上只能运行容器的一个副本(一般省略)
hostIP 要将外部端口帮定到的主机IP(一般省略)
protocol 端口协议,必须是TCP、UDP或SCTP,默认为TCP
创建pod-ports.yml文件,指定容器暴露的端口
vim pod-ports.yml
vim pod-ports.yml
创建pod
kubectl create -f pod-ports.yml
kubectl create -f pod-ports.yml
查看pod信息
kubectl get po -n dev
kubectl get po -n dev
查看pod描述信息
kubectl describe po pod-ports -n dev
kubectl describe po pod-ports -n dev
访问pod中的容器需要访问pod的IP加容器端口
curl http://10.244.196.171:80
curl http://10.244.196.171:80
Pod基础---资源配额
resources属性用于限制容器对系统的资源的使用量(资源配额),避免容器出现问题大量吞噬系统资源,k8s目前提供了对内存和CPU的资源限制;当我们对容器配置资源限额以后,如果容器超出资源使用量,k8s则会认位该容器出现故障,则重新启动该容器。
对resources属性的案例演示
resources属性提供了两个子属性用于资源限制,可通过下边命令查看
kubectl explain pod.spec.containers.resources
limits 用于限制容器运行时最大的资源使用量,当容器超出该使用量时,容器会被终止,并进行重启(上限)
requests 用于限制容器需要的最小资源,如果环境资源不够,容器将无法启动(下限)
编写pod-resources.yml文件,设置容器资源的上下限
vim pod-resources.yml
vim pod-resources.yml
这里对cpu与memory的单位做一个说明:
cpu:cpu数量可以为整数或小数
memory:内存大小,单位可以使用Gi、Mi、G、M等形式
创建pod
kubectl create -f pod-resources.yml
kubectl create -f pod-resources.yml
查看pod信息
kubectl get po -n dev
kubectl get po -n dev
查看pod描述信息
kubectl describe po pod-resources -n dev
kubectl describe po pod-resources -n dev
Pod生命周期---概述
我们将pod从创建到终止的这段时间范围称为pod的生命周期,主要包含下面几个过程:
pod创建过程:创建pod的过程
运行初始化容器(init container)过程
运行主容器(maincontainer)过程:主容器也叫用户容器,在运行主容器时又有很多的子过程
容器启动后钩子(post start)函数执行的过程
容器终止前钩子(pre stop)函数执行的过程
容器的存活性探测(liveness probe)过程
容器就绪性探测(readiness probe)过程
pod终止过程
在整个pod的生命周期中,pod会出现5种状态,分别如下:
挂起状态(Pending):pod正在被调度到node节点或者正在下载镜像的过程
运行中(Running):pod已经被调度到node节点,并且所有容器都已经创建完成
成功(Succeeded):pod中的所有容器执行完毕并且都成功终止且不会被再次重启
失败(Failed):终止失败的容器处于该状态
未知(Unknown):apiserver无法正常获取到pod的状态信息,通常由于网络通信失败导致(少见)
pod创建过程
1.用户通过kubectl或其他的api客户端提交需要创建的pod信息给apiServer
2.apiServer开始生成pod对象的信息,并将信息存储到etcd数据库,然后返回确认信息至客户端
3.apiServer开始反映etcd中的pod对象的变化,其他组件使用watch机制来跟踪检查apiServer上的变动
4.scheduler发现有新的pod对象要创建,开始为pod分配主机并将结果信息更新至apiServer
5.node节点上的kubelet发现有pod调度过来,调用docker启动容器,并将结果返回至apiServer
6.apiServer将接收到的pod状态信息存入etcd中
pod终止过程
1.用户向apiServer发送删除pod对象的命令
2.apiServer会将该pod标记为termination(终止)状态
3.kubelet在监控到pod转为terminating状态的同时启动pod关闭过程
4.端点控制器监控到pod关闭以后,会从对应的service列表中移除该pod
5.如果当前pod对象定义了preStop钩子处理器,则执行preStop中的参数,如果用户没定义,则不执行
6.pod对象中的容器进程收到停止信号
7.宽限期结束后(默认30s),若pod中还存在运行的进程,那么pod对象会收到强制终止的信号
8.kubelet请求apiServer将此pod的宽限期设置为0从而完成删除操作,此时pod对于用户已不可见
Pod生命周期---初始化容器
初始化容器是在pod的主容器启动之前要运行的容器,我们称为初始化容器,主要是做一些主容器的前置工作
初始化容器有两大特征:
1.初始化容器必须运行完成,主容器才可以运行,若某初始化容器运行失败,那么k8s需要重启它,直到启动成功为止
2.初始化容器必须按照定义的顺序执行,前一个运行成功,后一个才能运行
初始化容器有很多的应用场景,下面列举几个常见的:
提供主容器镜像中不具备的工具程序或自定义代码
初始化容器要先于应用容器启动并运行完成,因此可用于延后应用容器的启动直至其依赖的条件得到满足
如下案例模拟上边第二个需求:
假设要以主容器来运行nginx,但是要求在运行nginx之前先要能够连接上MySQL与Redis所在的服务器
为了简化测试,事先定义好MySQL地址(192.168.18.20)和Redis地址(192.168.18.21)
创建pod-initcontainer.yml文件
vim pod-initcontainer.yml
vim pod-initcontainer.yml
创建pod
kubectl create -f pod-initcontainer.yml
kubectl create -f pod-initcontainer.yml
查看pod信息
kubectl get po -n dev
kubectl get po -n dev
动态查看该pod信息:-w动态查看
kubectl get po pod-initcontainer -n dev -w
kubectl get po pod-initcontainer -n dev -w
接下来为集群中的master节点添加以上两个IP地址,添加以后初始化容器则可以ping通该地址
ifconfig ens192:1 192.168.18.20 netmask 255.255.255.0 up
ifconfig ens192:2 192.168.18.21 netmask 255.255.255.0 up
ifconfig ens192:1 192.168.18.20 netmask 255.255.255.0 up
ifconfig ens192:2 192.168.18.21 netmask 255.255.255.0 up
查看pod信息
kubectl get po -n dev
kubectl get po -n dev
Pod生命周期---钩子函数
钩子函数能够感知自生命周期的时间,并在相应的时刻到来时,运行用户指定的程序代码
k8s在主容器的启动之后和终止之前提供了两个钩子函数:
post start:容器启动后钩子,定义在该钩子中的代码在容器启动后被执行,如果代码执行失败,会重启容器
pre stop:容器终止前钩子,定义在该钩子中的代码在容器终止前执行,代码执行完毕后,容器将被终止
钩子处理器支持定义动作可通过下边命令查看:
kubectl explain pod.spec.containers.lifecycle
钩子处理器支持三种方式定义动作,可通过下边命令查看
kubectl explain pod.spec.containers.lifecycle.postStart
kubectl explain pod.spec.containers.lifecycle.preStop
kubectl explain pod.spec.containers.lifecycle.preStop
exec 在容器内执行一次命令
lifecycle:
postStart:
exec:
command:
- cat
- /etc/passwd
lifecycle:
postStart:
exec:
command:
- cat
- /etc/passwd
httpGet: 在当前容器中向某url发起http请求
lifecycle:
postStart:
tcpSocket:
port: 8080
lifecycle:
postStart:
tcpSocket:
port: 8080
tcpSocket: 在当前容器尝试访问指定的socket
lifecycle:
postStart:
httpGet:
path: / URL地址
port: 80 端口号
host: 192.168.18.10 主机地址
Scheme: HTTP 支持的协议,HTTP/HTTPS
lifecycle:
postStart:
httpGet:
path: / URL地址
port: 80 端口号
host: 192.168.18.10 主机地址
Scheme: HTTP 支持的协议,HTTP/HTTPS
提示:以上三种钩子处理器定义方式,第一种exec使用场景较多,本案例也已exec定义方式演示
创建pod
kubectl create -f pod-hook-exec.yml
kubectl create -f pod-hook-exec.yml
查看pod信息
kubectl get po -n dev
kubectl get po -n dev
查看pod详细信息
kubectl get po pod-hook-exec -n dev -o wide
kubectl get po pod-hook-exec -n dev -o wide
访问nginx页面
curl http://10.244.196.174:80
curl http://10.244.196.174:80
Pod生命周期---容器探测
容器探测类似于健康检查,用来探测容器中的程序是否可以正常工作,如果探测到容器出现故障,k8s会尝试重启,如果重启失败,k8s不会将流量分配给该容器,不承担业务流量
k8s提供了两种探针来实现容器的探测,可通过下边命令查看
kubectl explain pod.spec.containers
kubectl explain pod.spec.containers
livenessProbe 存活性探针,用于检测容器当前是否处于正常运行状态,如果不是,k8s会重启该容器
kubectl explain pod.spec.containers.livenessProbe
readinessProbe 就绪性探针,用于检测容器当前是否可以接收请求,如果不能,k8s不会转发流量
kubectl explain pod.spec.containers.readinessProbe
FIELDS:
exec 命令探测方式
tcpSocket 端口探测方式
httpGet URL 请求探测方式
initialDelaySeconds 容器启动后等待多少秒执行第一次探测
timeoutSeconds 探测超时时间,默认1秒,最小可设置1秒
failureThreshold 连续探测失败多少次才被认定失败,默认3次为失败,最小可设置1
periodSeconds 执行探测频率,默认是10秒,最小可设置1秒
successThreshold 连续探测成功多少次才被认定为成功,默认1次
exec 命令探测方式
tcpSocket 端口探测方式
httpGet URL 请求探测方式
initialDelaySeconds 容器启动后等待多少秒执行第一次探测
timeoutSeconds 探测超时时间,默认1秒,最小可设置1秒
failureThreshold 连续探测失败多少次才被认定失败,默认3次为失败,最小可设置1
periodSeconds 执行探测频率,默认是10秒,最小可设置1秒
successThreshold 连续探测成功多少次才被认定为成功,默认1次
这里给大家介绍三种常用的探测方式:
exec:命令探测方式,在容器内执行一次命令,如果命令执行的退出码为0,则认位程序正常,否则不正常
livenessProbe:
exec:
command:
- cat
- /etc/passwd
livenessProbe:
exec:
command:
- cat
- /etc/passwd
tcpSocket:端口探测方式,访问容器的端口,如果能够建立连接,则认位程序正常,否则不正常
livenessProbe:
tcpSocket:
port: 8080
livenessProbe:
tcpSocket:
port: 8080
httpGet:调用容器内web应用的URL,如果返回的状态码在200与399之间,则为程序正常,否则不正常
livenessProbe:
httpGet:
path: / #URL地址
port: 80 #端口号
host: 192.168.18.10 #主机地址
Scheme: HTTP #支持的协议,HTTP/HTTPS
livenessProbe:
httpGet:
path: / #URL地址
port: 80 #端口号
host: 192.168.18.10 #主机地址
Scheme: HTTP #支持的协议,HTTP/HTTPS
下面以livenessProbe存活性探针做使用的讲解
方式一:exec
创建pod-livenessProbe-exec.yml文件,并用探针在容器执行一条命令,如果命令执行成功,容器则正常
vim pod-livenessProbe-exec.yml
vim pod-livenessProbe-exec.yml
创建pod
kubectl create -f pod-livenessProbe-exec.yml
kubectl create -f pod-livenessProbe-exec.yml
查看pod信息(pod启动失败)
kubectl get po -n dev
kubectl get po -n dev
查看pod详细描述
kubectl describe po pod-livenessprobe-exec -n dev
kubectl describe po pod-livenessprobe-exec -n dev
修改pod-livenessProbe-exec.yml文件,并用探针在容器执行一条成功的命令测试
vim pod-livenessProbe-exec.yml
vim pod-livenessProbe-exec.yml
创建pod
kubectl create -f pod-livenessProbe-exec.yml
kubectl create -f pod-livenessProbe-exec.yml
查看pod信息 PS:提示:pod属于正常运行状态,并没有出现重启
kubectl describe pod pod-livenessprobe-exec -n dev
kubectl describe pod pod-livenessprobe-exec -n dev
方式二:tcpSocket
创建pod-livenessProbe-tcpSocket.yml文件,探测容器端口是否可以访问
vim pod-livenessProbe-tcpSocket.yml
vim pod-livenessProbe-tcpSocket.yml
创建pod
kubectl create -f pod-livenessProbe-tcpSocket.yml
kubectl create -f pod-livenessProbe-tcpSocket.yml
查看pod信息 提示:发现pod在重启
kubectl get po -n dev
kubectl get po -n dev
查看pod描述信息
kubectl describe po pod-livenessprobe-tpcsocket -n dev
kubectl describe po pod-livenessprobe-tpcsocket -n dev
修改 pod-livenessProbe-tcpSocket.yml文件,指定探测端口为80
vim pod-livenessProbe-tcpSocket.yml
vim pod-livenessProbe-tcpSocket.yml
创建pod
kubectl create -f pod-livenessProbe-tcpSocket.yml
kubectl create -f pod-livenessProbe-tcpSocket.yml
查看pod信息 提示:pod属于正常运行状态,并没有出现重启
kubectl get po -n dev
kubectl get po -n dev
方式三:httpGet
创建pod-livenessProbe-httpGet.yml文件,探测容器内不存在的一个路径
vim pod-livenessProbe-httpGet.yml
vim pod-livenessProbe-httpGet.yml
创建pod
kubectl create -f pod-livenessProbe-httpGet.yml
kubectl create -f pod-livenessProbe-httpGet.yml
查看pod信息
kubectl get po -n dev
kubectl get po -n dev
查看pod描述信息 提示:HTTP探测失败,状态码404
kubectl describe po pod-livenessprobe-httpget -n dev
kubectl describe po pod-livenessprobe-httpget -n dev
修改pod-livenessProbe-httpGet.yml文件,探测一个存在的路径
vim pod-livenessProbe-httpGet.yml
vim pod-livenessProbe-httpGet.yml
创建pod
kubectl create -f pod-livenessProbe-httpGet.yml
kubectl create -f pod-livenessProbe-httpGet.yml
查看pod信息 提示:pod运行正常,并没有出现重启
kubectl get po -n dev
kubectl get po -n dev
Pod生命周期---重启策略
容器一旦出现了问题,K8s就会对容器所在的pod进行重启,重启操作是由pod的重启策略决定的,pod的重启策略有三种,可通过下边命令查看
kubectl explain pod.spec.restartPolicy
Always:容器失效时,自动重启该容器,默认策略
OnFailure:容器终止运行且退出码不为0时重启
Never:无论容器状态如何,都不重启该容器
重启策略适用于pod对象中的所有容器,首次需要重启的容器,将在其需要时立即进行重启,随后再次需要重启的操作将由kubelet延迟一段时间后进行,且反复的重启操作延时时长为10s、20s、40s、80s、160s、300s,最长延时为300s,以后重启延时均为300s,直至重启成功
创建pod-restartpolicy.yml,通过探针探测一个不存在的路径,然后设置重启策略为Never
vim pod-restartpolicy.yml
vim pod-restartpolicy.yml
创建pod
kubectl create -f pod-restartpolicy.yml
kubectl create -f pod-restartpolicy.yml
查看pod信息 PS:提示:发现该pod并没有出现重启,但是该pod并没有运行
kubectl create -f pod-restartpolicy.yml
kubectl create -f pod-restartpolicy.yml
查看pod描述信息 PS:提示:HTTP探测失败,状态码404,停止了该容器,容器并没有出现重启
kubectl describe po pod-restartpolicy -n dev
kubectl describe po pod-restartpolicy -n dev
0 条评论
下一页
为你推荐
查看更多