概述
Kubernetes的核心技术——Pod
1、Pod概述
- pod是k8s系统中可以创建和管理的最小单元
- pod可以包含多个容器(一组容器的集合)
- 一个pod容器共享网络命名空间
2、pod存在的意义
- 创建容器使用docker,一个docker对应一个容器,一个容器有进程,一个容器运行一个应用程序
- pod是多进程设计,运行多个应用程序。一个pod有多个容器,一个容器运行一个应用程序
- pod存在为了亲密性应用:两个应用进行交互、网络间调用、两个应用需要频繁调用
3、实施机制
- 共享网络:通过pause容器,把其业务容器加入到pause容器中,让所有业务容器在同一名称空间中,可以实现网络共享
- 共享存储:引入数据卷概念Volum,使用数据卷进行持久化存储
4、pod镜像拉取策略
- IfNotPresent:默认值,镜像在宿主机上不存在时才拉取
- Always:每次创建pod都会重新拉取一次镜像
- Never:pod永远不会主动拉取这个镜像
5、pod资源限制
resource:
requests:
......
#调度
limits:
...... #最大
6、pod重启机制
restartPlicy:never
# Always:当容器终止推出之后,总是重启容器,默认策略
# OnFailure:当容器异常退出(退出状态码非0)时,才重启
# Never:当容器终止退出,从不重启容器
7、pod健康检查
-
livenessProbe(存活检查)
如果检查失败,将杀死容器,根据pod的restartPolicy来操作
-
readinessProbe(就绪检查)
如果检查失败,k8s会把pod从service endPoints中剔除
-
probe支持以下三种检查方法
- httpGet:发送http请求,返回200-400范围状态码为成功
- exec:执行shell命令返回状态码为0是成功
- tepSocket:发起TCP Socket建立成功
8、创建pod的流程
由client向master上的API Sever请求,然后将pod存储在etcd上,存储信息返回至API Server,由API Server告知Schedule为其分配node,在分配完node之后将结果返回API Server,并将结果存储在etcd上;node节点访问API Server然后读取etcd拿到分配给当前节点的pod,然后响应给docker创建容器。
详细过程点击查看图解
9、pod调度
影响调度的属性
-
pod资源限制对pod调度产生影响
-
节点选择标签影响pod调度
-
节点亲和性影响pod调度
节点亲和性nodeAffinity和之前nodeSelector基本一样的,根据节点上标签约束来决定pod调度到哪些节点上
- 硬亲和性:约束条件必须满足
- 软亲和性:尝试满足,不保证完全满足
支持常用的操作符:
operator:In,NotIn,Exists,Gt,Lt,DoesNotExists
-
污点和污点容忍
Taint污点:节点不做普通分配调度,是节点属性
场景:
专用节点、配置特点硬件节点、基于Taint驱逐
污点值有三个:NoSchedule:一定不被调度
PreferNoSchedule:尽量不被调度
NoExecute:不会嗲殴打,并且还会驱逐Node已有pod
查看污点:
kubectl describe node node1 | grep Taint
为节点添加污点:
kubectl taint node [node] key=value:污点三个值 kubectl taint node node1 env=yes:NoSchedule
删除节点:
kubectl taint node node1 env:Noschedule -node/node1 untainted
污点容忍:
tolerations:
类似于软亲和,即是NoSchedule,也可能被调用
最后
以上就是害羞皮带为你收集整理的Kubernetes的核心技术——Pod的全部内容,希望文章能够帮你解决Kubernetes的核心技术——Pod所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复