容器的本质
-
一个视图被隔离,资源受限制的进程
-
容器里PID = 1 的进程就是应用本省
-
管理虚拟机 = 管理基础设施; 管理容器 = 直接管理应用本身
-
Kubernetes = 操作系统
容器 =进程
Pod = 进程组
Pod 一个逻辑单元,多个容器的组合,Kubernetes的院子调度单元
亲密关系-调度解决
-
两个应用需要运行在同一台宿主机上
超亲密关系-Pod 解决(pod)
-
会发生直接的文件交互
-
使用localhost或者socket文件进行本地通信
-
会发生频发的rpc调用
-
会共享某些Linux Namespce
Pod 实现
共享网路
-
容器A和B
-
通过Infra Container的方式共享同一个Network nAMESPCE
-
直接使用loclhost进行通信
-
看到的网络设备跟infra容器看到的完全一样。
-
一个Pod只有一个IP地址,也就是这个Pod的Network Namespace 对应的IP地址
-
所有网络资源,都是一个pod一份,并且被该Pod中的所有容器共享。
-
-
整个Pod的生命周期Infra容器一致,而与容器A和B无关
-
共享存储
Share-data 对应在宿主机上的目录会被同时绑定挂载了要共享的容器。
容器设计模式
Sidecar
Sidcar模式是一种将应用功能从应用本省剥离出来作为单独进程的方式。该模式允许向应用虎浸入添加多种功能,避免了为了满足第三方组件需求而向应用添加额外的配置代码。
Sidecar附加到主应用(父应用),以扩展/增强功能特性,同时Sidecar与主应用是松耦合的。
通过在pod里定义专门容器,来执行主业务容器需要的辅助工作的。
优势:
-
将辅助功能同主业务容器解耦,实现独立发布和能力重用。
应用
日志收集
-
业务容器将日志写在Volume里
-
日志容器共享该Volume从而将日志转发远程存储中
代理容器
-
代理容器对业务容器屏蔽被代理的服务器集群,减缓业务代码的实现逻辑
-
容器之间通过locakhost直接通信
-
代理容器的代码可被重用
-
适配器容器
-
适配器容器将业务容器暴露出来的接口转换为另一种格式。
-
容器之间通过localhost直接通信
-
代理容器的代码可被重用
-
参考<阿里云 云原生技术公开课>