Pod
为什么需要Pod?
容器的本质
容器的本质是一个资源被隔离、资源受限制的进程
容器里PID=1的进程就是应用本身
管理虚拟机=管理基础设施;管理容器=直接管理应用本身
k8s
k8s就是云时代的操作系统
容器就是这个操作系统的软件安装包
类比
- k8s = 操作系统(如:linux)
- 容器 = 进程(如:linux线程)
- Pod = 进程组(如:linux线程组)
注意:linux线程是轻量级的进程
比如:
4个进程组成程序 => 由4个容器组成的Pod
他们需要共享资源
为什么Pod必须是原子调度单位
调度方案
Mesos:资源囤积
- 所有设置了Affinity约束的任务都达到了,才会开始统一调度
- 调度效率损失和死锁
Google Omega:乐观调度处理冲突
- 不管这些冲突的异常情况,先调度,同时设置一个非常精妙的回滚机制,这样经过冲突后,通过回滚来解决问题
- 高效优雅、实现机制
k8s:Pod
Pod的实现
网络共享
通过Infra Container(一个非常小汇编写的image)的方式,,其他所有容器都会通过 Join Namespace 的方式加入到 Infra container 的 Network Namespace 中,共享同一个网络Network Namespace
- 一个Pod只有一个Ip地址
- 容器网络视图一致
共享存储
通过volume共享存储
容器设计模式
Sidercar
通过在Pod里定义专门容器,来执行主业务容器需要的辅助工作
比如:
- ssh进去执行的脚本
- 日志收集
- Debug应用
- 应用监控
优势: - 将辅助功能同主业务容器解耦,实现独立发布和能力重用
评论
评论插件加载失败
正在加载评论插件