1. Pod基本概念
·最小部署单元
·一组容器的集合
·一个Pod中的容器共享网络命名空间
·Pod是短暂的
2. Pod存在的意义
Pod为亲密性应用而存在。
亲密性应用场景:
- 两个应用之间发生文件交互
- 两个应用需要通过127.0.0.1或者socket通信(典型组合php+nginx)
- 两个应用需要发生频繁的调用
3.Pod实现机制与设计模式
共享网络
共享存储
apiVersion:v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
-name: write
image: centos
command:["bash","-c","for iin {1..100]; do echo $i>>/data/hello; sleep 1; done"]
volumeMounts:
-name: data
mountPath:/data
-name: read image: centos command:["bash","-c","tail-f/data/hello"]
volumeMounts:
-name: data mountPath:/data
-name: data emptyDir:
·Infrastructure Container:基础容器
· 维护整个Pod网络空间
·InitContainers:初始化容器
· 先于业务容器开始执行
·Containers:业务容器
· 并行启动
4.镜像拉取策略(imagePullPolicy)
- lfNotPresent:镜像在宿主机上不存在时才拉取
- Always:每次创建 Pod 都会重新拉取一次镜像
- Never:Pod 永远不会主动拉取这个镜像
5.资源限制
资源限制好处:避免某容器资源利用率异常突发影响其他容器,可能会产生雪崩效应!
Pod和Container的资源请求和限制:
容器资源限制:
内存
CPU
1imits:实际最大使用的配额
requests:申请的配额,主要用于k8s做资源调度分配时参考值
1000m=1c
500m=0.5c
250m=0.25c
·spec.containers[].resources.limits.cpu
·spec.containers[].resources.limits.memory
·spec.containers[].resources.requests.cpu
·spec.containers[].resources.requests.memory
6.重启策略(restartPolicy)
·Always:当容器终止退出后,总是重启容器,默认策略。
·OnFailure:当容器异常退出(退出状态码非0)时,才重启容器。
·Never:当容器终止退出,从不重启容器。
守护进程式:要求持续性运行,例如nginx、mysq1、redis
预期终止:批处理,定时任务
7.健康检查(Probe)
Probe有以下两种类型:
·livenessProbe (存活检查)
如果检查失败,将杀死容器,根据Pod的restartPolicy来操作。
readinessProbe(就绪检查)
如果检查失败,Kubernetes会把Pod从service endpoints中剔除。
Probe支持以下三种检查方法:
·httpGet
发送HTTP请求,返回200-400范围状态码为成功。
exec
执行Shell命令返回状态码是0为成功。
·tcpSocket
发起TCP Socket建立成功。
8.调度策略
9.故障排查
kubectl describe TYPE/NAME
例:
kubectl describe rs web-d86c95cc9
kubectl describe deploy web
kubectl logs TYPE/NAME [-c CONTAINER]
kubectl exec POD [-c CONTAINER]–COMMAND [args…]