Kubernetes -- Pod + 容器设计模式
基本概念
容器 ► Pod ► Kubernetes
- 容器:一个视图被隔离、资源受限制的进程
- 容器 PID=1 的进程为应用本身(管理容器 = 管理应用)
- Pod:进程组
- Kubernetes:操作系统
- 容器镜像:软件安装包
进程组
- 容器是单进程模型(容器 == 应用 == 进程,只能管理 PID=1 的进程,并不是说容器内只能运行一个进程)
- 容器内 PID=1 的进程为应用进程,本身不具备进程管理能力
- 如果将 PID=1 的进程改为 systemd,导致:管理容器 = 管理systemd != 管理应用
- 因此需要引入 Pod
原子调度单位
紧密协作:必须部署在同一台机器上并共享某些信息
关系
- 亲密关系 – 调度解决
- 两个应用(Pod)需要运行在同一台宿主机上
- 超亲密关系 – Pod 解决
- 会发生直接的文件交换
- 使用 localhost 或者 Socket 文件进行本地通信
- 会发生非常频繁的 RPC 调用
- 会共享某些 Linux Namespace
实现机制
解决的问题
- 让 Pod 里的多个容器之间最高效地共享资源和数据
- 容器之间原本是被 Linux Namespace 和 cgroups 隔离开的
共享网络
Infra Container 会第一个启动,单独更新某一个镜像不会导致 Pod 重建或重启
共享存储
Volume 的定义是 Pod 级别的
容器设计模式 – Sidecar
InitContainer
Sidecar
- 通过在 Pod 里定义专门容器,来执行主业务容器需要的辅助工作(日志收集、应用监控等)
- 将辅助功能与主业务容器解耦,实现独立发布和能力重用
日志收集容器
代理容器
适配器容器
参考资料
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.