容器的本质?
一个视图被隔离 资源受限的进程
容器里PID=1的进程就是应用本省
管理虚拟机=管理基础环境 管理容器 就是管理应用本身
pod? 进程组
理解POD
亲密关系
2个应用需要运行在同一台宿主机上
超亲密关系-pod 解决
会发生直接的文件交换
使用localhost或者socket 进行本地通信
频繁的RPC调用
共享LINUX namespace
容器之间原来是被linux namespace 和cgroup 隔离的
POD中的容器A跟容器B
通过INFRA CONTAINER共享同一个network namespace
镜像 k8s.gcr.io/pause; 汇编语言编写 永远处理暂停 大小100~200kb
直接使用localhost进行通信
看到的网络设备跟infra的容器也是完全一样
一个Pod只有一个Ip地址 也就是这个pod的network namespace 对应的Ip地址
所有网络资源都是 一个pod一份 并且被该pod中的所有容器共享
整个Pod 的生命周期跟infra容器一直 而与容器A和B无关
共享存储
shared-data对应在宿主机上的目录会被同时banding挂载进2个容器
容器设计模式
sidecar 辅助功能同主业务容器解耦 实现独立发布和能力重用
war包跟tomcat的容器化
应用日志手收集 sidecar
业务容器将日志写入VOLUME
日志容器共享该VOLUME从而转发到远程存储
代理容器 sidecar
代理容器对接对业务容器屏蔽被代理的服务集群 简化业务代码的实现逻辑
适配器容器 sidecar
适配器容器将业务容器暴露出来的借口转换为另一种格式 业务为/metrics 适配为 /healthz
POD是kubernetes项目里实现 容器设计模式的核心机制
容器设计模式是goole borg的大规模容器集群管理最佳实践之一 也是kubernetes进行复杂应用编码的基础依赖之一
所有设计模式的本质都是解耦和重用