sidecar模式
sidecar简单的说,一个pod内有多个容器应用在同时工作,相互协同,完成特定需求。sidecar的思想核心就是:不侵入主容器的前提下,可以进行服务功能扩展。一般都是一些共性的能力,比如说:日志代理/转发,例如 fluentd;Service Mesh,比如 Istio,Linkerd;代理,比如 Docker Ambassador;探活:检查某些组件是不是正常工作;其他辅助性的工作,比如拷贝文
·
sidecar
简单的说,一个pod内有多个容器应用在同时工作,相互协同,完成特定需求。
sidecar的思想核心就是:不侵入主容器的前提下,可以进行服务功能扩展。一般都是一些共性的能力,比如说:
- 日志代理/转发,例如 fluentd;
- Service Mesh,比如 Istio,Linkerd;
- 代理,比如 Docker Ambassador;
- 探活:检查某些组件是不是正常工作;
- 其他辅助性的工作,比如拷贝文件,下载文件等;
k8s不会明显区分主容器与sidecar容器,如果主容器与sidecar容器有启动顺序要求,目前没有特别优雅的方式(有扩展方案)。
示例
示例架构说明
两个sidecar应用向挂载的路径写入文件内容,主应用程序则可以读取到写入的文件。
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx-webapp
name: nginx-webapp
spec:
replicas: 1
selector:
matchLabels:
app: nginx-webapp
template:
metadata:
labels:
app: nginx-webapp
spec:
containers:
- image: busybox
command: ["/bin/sh"]
args: ["-c", "while true; do echo echo $(date -u) 'Hi I am from Sidecar container 1<br />' >> /var/log/index.html; sleep 5;done"]
name: sidecar-container1
volumeMounts:
- name: var-logs
mountPath: /var/log
- image: busybox
command: ["/bin/sh"]
args: ["-c", "while true; do echo echo $(date -u) 'Hi I am from Sidecar container 2<br />' >> /var/log/index.html; sleep 5;done"]
name: sidecar-container2
volumeMounts:
- name: var-logs
mountPath: /var/log
- image: nginx
name: main-container
ports:
- containerPort: 80
volumeMounts:
- name: var-logs
mountPath: /usr/share/nginx/html
volumes:
- name: var-logs
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: nginx-webapp
labels:
run: nginx-webapp
spec:
ports:
- port: 80
protocol: TCP
selector:
app: nginx-webapp
type: NodePort
测试验证:
$ kubectl get svc -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
nginx-webapp NodePort 10.106.215.126 <none> 80:30720/TCP 12m app=nginx-webapp
可以看到nodeport的映射端口是30720,可以在浏览器中输入localhost:30720即可查看
参考
更多推荐
已为社区贡献9条内容
所有评论(0)