美文网首页
Kubernetes-Pod详解

Kubernetes-Pod详解

作者: ssttIsme | 来源:发表于2023-03-12 22:27 被阅读0次

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
  • Always当容器终止退出后,总是重启容器,默认策略
  • OnFailure当容器异常退出(退出状态码为非0)时,才重启容器
  • 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调度

  • 硬亲和性requiredDuringSchedulingIgnoredDuringExecution
    约束条件必须满足,不满足则等待
  • 软亲和性preferedDuringSchedulingIgnoredDuringExecution
    尝试满足,不保证绝对满足

支持的常用操作符
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调度

相关文章

  • Kubernetes-Pod详解

    Pod 为什么需要Pod Pod,是Kubernetes项目中的原子调度单位。容器就是未来云计算系统中的进程;容器...

  • Kubernetes-Pod控制器详解

    1.Pod控制器介绍 Pod是kubernetes的最小管理单元,在kubernetes中,按照pod的创建方式可...

  • kubernetes-pod资源

    kubernetes是docker集群的编排工具 kubernetes的核心功能: 自愈: 重新启动失败的容器,在...

  • Kubernetes-Pod/ReplicaSet/Deploy

    本文主要记录解决自己学习和工作中的一个疑惑:k8s中的Pod/ReplicaSet/Deployment/Serv...

  • Mysql性能调优

    SQL执行原理详解 连接器详解 分析器详解 优化器详解 执行器详解 Innodb的Buffer Pool机制详解 ...

  • Kubernetes-Pod基本概念(六)

    1 pod介绍   一个pod是一组紧密相关的容器,是一期运行在同一个工作节点上,以及同一个Linux命名空间中。...

  • Kubernetes-Pod使用的详细讲解

    1.Pod介绍 1.1 Pod结构 每个Pod中都可以包含一个或者多个容器,这些容器可以分为两类: 用户程序所在的...

  • C/C++的30个冷知识

    数据格式详解 输入输出函数详解 字符串处理函数详解 内存函数详解 类详解 数据格式详解 2^8=256(同样是一个...

  • TSNE 详解

    TSNE 详解 TSNE 详解

  • SwiftSyntax 详解

    SwiftSyntax 详解SwiftSyntax 详解

网友评论

      本文标题:Kubernetes-Pod详解

      本文链接:https://www.haomeiwen.com/subject/tjsqrdtx.html