所属技术领域:
云原生
| 名词定义 |
sidecar是一种将应用功能从应用本身剥离出来作为单独进程的设计模式,可以允许向应用中无侵入的添加功能,避免为了满足第三方需求而添加额外的代码。
在软件架构中,sidecar附加到主应用,或者叫父应用上,以扩展/增强功能特性,同时sidecar与主应用是松耦合的。
一般来讲,Sidecar 容器可以:
日志代理/转发,例如 fluentd;
Service Mesh,比如 Istio,Linkerd;
代理,比如 Docker Ambassador;
探活:检查某些组件是不是正常工作;
其他辅助性的工作,比如拷贝文件,下载文件等;
| 技术特点 |
顺序依赖
假设我们在一个 Pod 内注入了多个 Sidecar,但是 Sidecar 之间或者 Sidecar 和业务容器之间有相互依赖关系。如下这个例子,我们需要先启动 proxy Sidecar 容器用于建立网络连接,这样 mysql client 才能连接到远端的 mysql 集群,并在本地暴露服务。而后主的业务容器才能正常工作。
| 相关词 |
sidecar 容器的资源管理
一般来讲 Sidecar 容器占用的资源都比较小,那么这个资源要不要计算到整个 pod 当中?还是可以直接共享业务容器的资源即可?相同的 Sidecar 在和不同的应用容器搭配使用,如何准确给 Sidecar 容器分配资源这些都需要进行考虑。
Sidecar 容器的容错性
一般来讲,Sidecar 容器都是非主要容器,那么这类容器出现问题时,比如 liveness 探活,要不要对主容器的状态或者整个 pod 的状态也产生影响。再或者,Sidecar 镜像更新出现问题时,要不要直接标记整个 pod 出现问题。当然,还有一些其他的挑战,我们只是列举了几个通用的。对于这些挑战,我们需要大家一起集思广益,找到比较合理的解法。
资料来源:
- 阿里云大学-视频网站
- CSDN-资讯网站