k8s之 Pod简介
1、Pod
kubernetes中,最基础单元就是Pod。Pod主要用来管理容器,通常Pod中包含的是一个调用链的服务。例如Nginx 和 Django
1.1、Pod的生命周期
[root@k8s-master-01 k8s]# vim pod.yaml
kind: Pod
apiVersion: v1
metadata:
name: testv1
spec:
containers:
- name: nginx
image: nginx
# 部署
[root@k8s-master-01 k8s]# kubectl apply -f pod.yaml
pod/testv1 created
# 查看
[root@k8s-master-01 k8s]# kubectl get pods
NAME READY STATUS RESTARTS AGE
testv1 1/1 Running 0 52s
Pod名称 启动数量 运行状态 重启次数 启动时间
kubectl get pods -o wide #显示更多
1.2、Pod的重启策略(restartPolicy)
当Pod出现了问题时,Pod怎么解决。
Always :无论什么情况下退出,都重启
OnFailure :只有当非正常情况下退出时,才会重启
Never :无论什么情况下退出,都不重启
1.3、Pod中容器的拉取策略(imagePullPolicy)
容器的 imagePullPolicy 和镜像的标签会影响 kubelet 尝试拉取(下载)指定的镜像。
IfNotPresent : 当本地没有该镜像时,下载
Always :无论本地有没有该镜像,都去远程下载
Never :无论本地有没有该镜像,都不去远程下载
kind: Pod
apiVersion: v1
metadata:
name: testv1
spec:
restartPolicy: OnFailure
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
# 删除Pod
[root@k8s-master-01 k8s]# kubectl delete -f pod.yaml
# 部署Pod
[root@k8s-master-01 k8s]# kubectl apply -f pod.yaml
pod/testv1 created
1.4、静态Pod和动态Pod之间的区别
静态Pod:没有控制器
动态Pod:有控制器
1.5、Pod的回调钩子
1.5.1、启动回调
#当Pod中所有的容器创建完成之后,立即调用的命令。 lifecycle 里面有postStart(创建后执行) 和PreStop(终止之前回调)
执行失败:如果启动回调钩子执行失败,容器无法进入正常启动状态。
exec : 执行命令
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"
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
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命令,探测端口