Kubernetes-Pod详解

2023-03-12  本文已影响0人  ssttIsme

Pod基本概念

1最小部署单元
2包含多个容器
3一个pod中容器共享命名空间
4pod是短暂的

Pod存在的意义

1创建容器使用docker,一个docker对应一个容器,一个容器有进程,一个容器运行一个应用程序
2Pod是多进程设计,运行多个应用程序,一个Pod有多个容器,一个容器里面运行一个应用程序
3Pod存在为了亲密性应用
*两个应用之间交互
*网络之间调用
*两个应用需要频繁调用

Pod实现机制

1共享网络
2共享存储

共享网络

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

共享存储

引入数据卷的概念Volume,使用数据卷进行持久化存储

Pod镜像拉取策略

IfNotPresent默认值,镜像在宿主机上不存在时才拉取
Always每次创建Pod都会重新拉取一次镜像
NeverPod永远不会主动拉取这个镜像

Pod资源限制

request为调度资源限制 limits为最大资源限制

Pod重启机制

例如

restartPolicy:Never

Pod健康检查

livenessProbe存活检查

如果检查失败,将杀死容器,根据Pod的restartPolicy来操作

readinessProbe就绪检查

如果检查失败,Kubernetes会把Pod从service endpoints中剔除

Pod支持三种检查方法

httpGet

发送HTTP请求,返回200-400范围状态码为成功

exec

执行shell命令返回状态码是0为成功

tcpSocket

发起TCP Scoket建立成功

Pod调度策略

创建pod完整流程

1.master节点的createpod-进入apiserver进行创建-行为信息存储到etcd
2.master节点的scheduler-进入apiserver监听到新pod创建-通过apiserver读取etcd-通过调度算法把pod分配到某个节点中-最终结果返回apiserver-存储etcd
3.node节点的kubelet组件-访问apiserver-读取etcd拿到分配给当前节点的pod-通过docker创建容器-状态返回apiserver-etcd中进行存储

影响调度的属性

1.Pod资源限制对Pod调用产生影响
根据request找到足够应付资源大小的node进行调度
2.节点选择器nodeSelector标签影响Pod调度

nodeSelector:
  env_role:dev

首先对节点创建标签

kubectl label node k8snode1 env_role=dev

查看

kubectl get node k8snode1 --show-labels

3.节点亲nodeAffinity和性影响Pod调度

支持的常用操作符
In NotIn Exists Gt Lt DoseNotExists

nodeSelector和nodeAffinity是Pod的属性

4.污点Taint影响Pod调度

污点Taint里的节点不做普通的调度做一些特别处理,污点本身不是Pod中的属性而是节点里的属性
应用场景 1专用节点 2配置特定的硬件的节点 3基于Taint驱逐(本身不分配、分配到本身以外的节点中去)

# 查看污点
kubectl describe node k8smaster|grep Taint

污点的值有三个
1NoSchedule一定不被调度
2PreferSchedule尽量不被调度(有调度的几率)
3NoExecute不会调度并且还会驱逐Node已有Pod

# 为节点添加污点
kubectl taint node k8snode1 env_role=yes:NoSchedule
kubectl create deployment web --image=nginx
kubectl get pods -o wide
kubectl scale deployment web --replicas=5
kubectl get pods -o wide
# 删除污点
kubectl describe node k8snode1 |grep Taint
kubectl taint node k8snode1 env_role:NoSchedule-

5.污点容忍tolerations影响Pod调度

上一篇 下一篇

猜你喜欢

热点阅读