k8s核心技术-Pod

pod基本概念

pod是最小部署单元,包含对各容器(一组容器的集合),每个pod都有一个"根容器"——Pause容器,一个pod中的容器共享网络命名空间,pod是短暂的

pod存在的意义

①创建容器使用docker,一个docker对应一个容器,一个容器有一个进程,一个容器运行一个应用程序

②pod是多进程设计,运行多个应用程序,一个pod可以有多个容器,可以同时运行多个应用程序

③pod的存在为了亲密性应用(多个应用之间进行交互,也可以提供网络之间调用)

pod实现机制

共享网络:通过Pause容器,把其他业务容器加入到Pause容器里,让所有业务容器在同一个命名空间(namespace)中,可以实现网络共享       

共享存储:引入数据卷概念volume,使用数据卷进行持久化存储

pod镜像拉取策略

imagePullPolicy:Always

#IfNotPresent:默认值,镜像在宿主机不存在时进行拉取
#Always:每次创建镜像都会进行镜像拉取
#Never:pod永远不会主动拉取镜像

pod资源限制

其实是通过docker实现

resources:
  requests:
    memory: "64Mi"
    cpu: "250M"
  limits:
    memory: "128Mi"
    cpu: "500M"

pod重启机制

restartPolicy:Never

#Always:默认策略,当容器停止退出后,总是重启容器
#OnFailure:当容器异常退出(退出状态码非0)时,才重启容器
#Never:当容器终止退出,从不重启容器 (批量任务使用次策略)

pod健康检查

livenessProbe(存活检查):如果检查失败,将杀死容器,根据pod的restartPolicy来操作

readinessProbe(就绪检查):如果检查失败,k8s会把pod从service endpoints中剔除

Probe三种检查方法:

httpGet:发送http请求,返回200-400状态码为成功

exec:执行shell命令返回状态0为成功

tcpSocket:发起TCP Socket建立成功

pod调度

创建pod的流程:

master节点:

createPod --apiserver --etcd存储

scheduler --apiserver --etcd --调度算法,把pod调度到某个node节点(工作节点)上

node节点:

kubelet --apiserver --读取etcd数据,拿到分配给当前节点的pod--docker创建容器

影响调度的属性:
1、pod资源限制对pod调度产生影响

2、节点选择器(nodeSelector)标签影响pod调度

spec:
  nodeSelector:
    env-role: dev

#对节点创建标签
kubectl label node node1 env_role=dev

3、节点亲和性影响pod调度

nodeAffinity:硬亲和性------约束条件必须满足

                      软亲和性------尝试满足,不保证

支持常用操作符:In        NotIn        Exists        Gt        Lt        DoesNotExists

4、污点和污点容忍

nodeSelector和nodeAffinity:pod调度到某些节点上,是pod的属性,调度时实现

污点Taint:节点不做普通分配调度,是节点的属性

应用场景:专用节点

                  配置特定硬件的节点

                  基于Taint驱逐

#查看节点污点情况
kubectl describe node [节点名称] | grep Taint

污点值:

NoSchedule:一定不被调度

PreferNoSchedule:尽量不被调度

NoExcute:不会调度,并且还会驱逐节点上已有的pod

#为节点添加污点
kubectl taint node [node] key=value:污点值
kubectl taint node k8smaster name=env_role:NoSchedule

#删除污点
kubectl taint node [node]

污点容忍tolerations:即使给吴点设置了NoSchedule的污点值,也可能存在被调度到的情况

在pod中添加容忍规则:

tolerations:
- key: "name"
  value: "env_role"
  effect: "NoExecute"
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐