kubernetes实践之三:深入理解Pod对象
一.pod定义
- 最小部署单元
- 一组容器集合
- 一个pod中的容器共享网络命名空间
- pod是短暂的
二.pod容器分类
-
基础容器
维护整个pod的网络命名空间
-
初始化容器
先于业务容器开始执行,在应用启动之前进行初始化操作
-
业务容器
并行启动
三.镜像拉取策略(imagepullpolicy)
- ifnotpresent:(建议)表示如果本地有该镜像,则使用本地的镜像,本地不存在时下载镜像。
- always: 默认值,表示每次都重新下载该镜像。
- never: 表示仅使用本地镜像
认证镜像拉取(例如k8s拉取harbor镜像仓库):
创建secret 认证:
# kubectl create secret docker-registry harborkey --docker-username=xubaolong --docker-password=xbl --docker-email=admin@126.com --docker-server="192.168.1.156"
引用认证:
sepc.imagepullsecrets:harborkey
四.资源限制
pod和container的资源请求和限制:
-
spec.containers[].resources.limits.cpu :
cpu限制,单位core数,将用于docker run --cpu-shares参数
-
spec.containers[].resources.limits.memory
内存限制,单位可以为mib/gib等,将用于docker run --memory参数
-
spec.containers[].resources.requests.cpu
cpu请求,单位core数,容器启动的初始可用数量
-
spec.containers[].resources.requests.memory
内存请求, 单位可以为mib/gib等,容器启动的初始可用数量
五.重启策略(restartpolicy)
- always:当容器终止退出后,总是重启容器,默认策略。
- onfailure:当容器异常退出(退出状态码非0)时,才重启容器。
- never:当容器终止退出,从不重启容器。
六.健康检查(probe)
probe有以下两种类型:
- livenessprobe
如果检查失败,将杀死容器,根据pod的restartpolicy来操作。
- readinessprobe
如果检查失败,kubernetes会把pod从service endpoints中剔除。
probe支持以下三种检查方法:
- httpget
发送http请求,返回200-400范围状态码为成功。
- exec
执行shell命令返回状态码是0为成功。
- tcpsocket
发起tcp socket建立成功。
七. 调度约束
- nodename用于将pod调度到指定的node名称上
-
nodeselector用于将pod调度到匹配label的node上
八. 故障排查
值 |
描述 |
pending |
pod创建已经提交到kubernetes。但是,因为某种原因而不能顺利创建。例如下 载镜像慢,调度不成功。 |
running |
pod已经绑定到一个节点,并且已经创建了所有容器。至少有一个容器正在运行 中,或正在启动或重新启动。 |
succeeded |
pod中的所有容器都已成功终止,不会重新启动。 |
failed |
pod的所有容器均已终止,且至少有一个容器已在故障中终止。也就是说,容器 要么以非零状态退出,要么被系统终止。 |
unknown |
由于某种原因apiserver无法获得pod的状态,通常是由于master与pod所在主机 kubelet通信时出错。 |
kubectl describe type/name
kubectl logs type/name [-c container]
kubectl exec pod [-c container] -- command [args...]