pod
kubernetes中,最基础单元就是Pod。Pod主要用来管理容器,通常Pod中包含的是一个调用链的服务。例如Nginx 和 Django
1.1、Pod的生命周期
1.2、Pod的重启策略(restartPolicy)
https://kubernetes.io/zh/docs/concepts/workloads/pods/pod-lifecycle/
[root@k8s-master-01 k8s]# kubectl explain pod.spec #这个路径下的 restartPolicy
Pod 的 spec 中包含一个 restartPolicy 字段,其可能取值包括 Always、OnFailure 和 Never。默认值是 Always。
?
restartPolicy 适用于 Pod 中的所有容器。restartPolicy 仅针对同一节点上 kubelet 的容器重启动作。当 Pod 中的容器退出时,kubelet 会按指数回退 方式计算重启的延迟(10s、20s、40s、...),其最长延迟为 5 分钟。 一旦某容器执行了 10 分钟并且没有出现问题,kubelet 对该容器的重启回退计时器执行 重置操作
?
当Pod出现了问题时,Pod怎么解决。
Always :无论什么情况下退出,都重启
OnFailure :只有当非正常情况下退出时,才会重启
Never :无论什么情况下退出,都不重启
1.3、Pod中容器的拉取策略(imagePullPolicy)
https://kubernetes.io/docs/concepts/containers/images#updating-images
[root@k8s-master-01 k8s]# kubectl explain pod.spec.containers
容器的 imagePullPolicy 和镜像的标签会影响 kubelet 尝试拉取(下载)指定的镜像。
IfNotPresent : 当本地没有该镜像时,下载
Always :无论本地有没有该镜像,都去远程下载
Never :无论本地有没有该镜像,都不去远程下载
kind
1.4、静态Pod和动态Pod之间的区别
静态Pod:没有控制器
动态Pod:有控制器
1.5、Pod的回调钩子
1.5.1、启动回调
[root@k8s-master-01 k8s]# kubectl explain pod.spec.containers.lifecycle
当Pod中所有的容器创建完成之后,立即调用的命令。
?
执行失败:如果启动回调钩子执行失败,容器无法进入正常启动状态。
?
exec : 执行命令
[root@k8s-master-01 k8s]# >pod.yaml
[root@k8s-master-01 k8s]# vim pod.yaml
?
kind: Pod
apiVersion: v1
metadata:
name: testv1
spec:
restartPolicy: OnFailure
containers:
- name: nginx
image: nginx:1.18
imagePullPolicy: IfNotPresent
lifecycle:
postStart:
exec:
command:
- "/bin/sh"
- "-c"
- "echo 'Hello World!' > /root/1.txt"
[root@k8s-master-01 k8s]# kubectl apply -f pod.yaml
[root@k8s-master-01 k8s]# kubectl exec -it testv1 --bash
?
httpGet : 通过HTTP协议访问
?
kind: Pod
apiVersion: v1
metadata:
name: testv1
spec:
restartPolicy: OnFailure
containers:
- name: nginx
image: nginx:1.18
imagePullPolicy: IfNotPresent
lifecycle:
postStart:
httpGet:
port: 80
path: /
host: www.baidu.com #域名
[root@k8s-master-01 k8s]# kubectl describe pod testv1
?
tcpSocket : 通过Ping命令,探测端口
kind: Pod
apiVersion: v1
metadata:
name: testv1
spec:
restartPolicy: OnFailure
containers:
- name: nginx
image: nginx:1.18
imagePullPolicy: IfNotPresent
lifecycle:
postStart:
tcpSocket:
port: 80
host: 106.13.81.75
?
1.5.2、就绪性检测
检测容器是否正常运行。
?
执行失败:如果就绪性检测执行失败,Pod会立即驱离出负载均衡。
?
exec : 执行命令
httpGet : 通过HTTP协议访问
tcpSocket : 通过Ping命令,探测端口
1.5.3、存活性检测
检测容器是否正常启动。
?
执行失败:如果存活性检测执行失败,Pod会按照一定时间周期不断重启,直至Pod正常启动。
?
exec : 执行命令
httpGet : 通过HTTP协议访问
tcpSocket : 通过Ping命令,探测端口
1.5.4、结束回调
当Pod收到了销毁指令时,立即执行。
执行失败:如果结束回调执行失败,容器依然会终止。
exec : 执行命令
httpGet : 通过HTTP协议访问
tcpSocket : 通过Ping命令,探测端口