# 1.pod的基本概念
- pod是一个抽象容器运行环境的概念
- k8s集群中的最小部署单元
- pod是由一个或多个container的集合
- 一个pod中的容器共享网络命名空间
- pod是短暂的
- 每个pod都有一个特殊的被称为"根容器"的
Pause容器
,Pause容器
对应的镜像属于kubernetes
平台的一部分,除了根容器,每个Pod还包含一个或多个紧密相关的用户业务容器
# 2.pod存在的意义
- 首先容器的"单进程模型",并不是指容器里只能运行"一个"进程,而是指容器没有管理多个进程的能力。这是因为容器里的主进程(PID=1 的进程)就是应用本身,其他的进程都是这个主进程的子进程。可是,用户编写的应用,并不能够像正常操作系统里的init进程或者systemd 那样拥有进程管理的功能。比如,你的容器启动命令是执行一个shell脚本,脚本里依次启动容器里的Nginx和Web应用。
- 比如是下面这个shell脚本:
sudo su -root -c "nginx -s start && /app/go_web_bin"
1
那么这个容器里主进程是sh,Nginx和Web应用是子进程。可是,当这个 Nginx进程异常退出的时候,主进程sh是感知不到的,也就没法对Nginx进行重启。Docker只能识别主进程的状态,如果主进程正常,Docker的状态就是Running所以在容器里不推荐跑多个进程。所以更确切的说法是每个容器应该只有一个关注点,只有一个单一的功能。将应用程序解耦到多个容器中,可以更轻松地水平缩扩和重复使用容器。例如,一个Web应用程序服务可能由三个单独的容器组成,每个容器都有自己的镜像,以松耦合的方式管理Web应用程序,数据库和Redis缓存。对于这些相互依赖的容器,则使用Docker容器网络来保持这些容器的通信。
- pod是“多进程模式”设计,可运行多个应用程序
- 一个pod有多个容器,一个容器里面运行一个应用程序
- pod存在是为了亲密性应用
- 两个应用之间进行交互
- 网络之前的调用
- 两个应用需要频繁调用
除了 Docker
之外,Kubernetes
支持 很多其他容器运行时, Docker
是最有名的运行时。
使用 Docker
的术语来描述 Pod
会比较好理解
# 3.Pod实现机制
# 3.1共享网络
- 容器本身之间是相互隔离的(namespace CGroup 来实现的)
- 前提条件---- 让容器在同一个 ns 中
- pod如何实现共享网络机制
- 首先创建 pause 容器 也可以叫 info容器
- 在info容器中会独立出 ip mac port
- 创建业务容器时会把业务容器加入到info容器中,
# 3.2共享存储
需要了解一个 volumes: 挂载(数据)卷的概念
pod持久化数据
- 日志数据
- 业务数据
使用数据卷进行持久化数据存储
pod重启机制
# 4.pod健康检测 probe(探针)
# 5.pod调度策略
kubectl create -f xxx.yaml
kubectl apply -f xxx.yaml
1
2
3
2
3
create是创建新的pod,并且相同yaml只能执行一次。 apply也是创建,但它的创建是有就更新,没有就新建,可以多次执行
# 6.资源限制对调度的影响
- pod资源限制对pod调度产生影响
- 节点选择器 标签影响pod调度
nodeSelector
kubectl label node nodeName env-role=prod
1
- 节点亲和性,nodeAffinity 对pod调度的影响
- 反亲和性
可以用操作符 NotIn DoesNotExists 来实现,与亲和性相反
- 污点和污点容忍
taint