k8s总结之边车模式sidecar
一、什么是边车模式sidecar
边车模式sidecar是在不改变原有container功能的情况下,在同一个pod下增加其他container来增加对应的功能,因为在同一个Pod下的容是共享一个namespace空间的,所以对应的网络、存储等资源也是同一个空间下的,这就可以很方便的进行两个containers之间交互。当然这个比较理解,举个通俗的例子:在近代战争电影里,我们经常看到一群日本兵开着三轮摩托,插着膏药旗进城,通常这个三轮摩托上还架着机关枪。这个就可以理解成sidecar模式,因为三轮摩托的主要作用肯定是一个交通载具,但是旁边坐的老日在那驾个枪就多了警戒防护的功能。
这下有个形象感觉了吧(题外话:虽然我不推崇暴力,但不介意你对上面这帮军国主义的小胡子来上一梭子:stuck_out_tongue_winking_eye:)
二、nignx演示sidecar功能
这个通过了一个busybox image进行内容生成,生成的内容通过nginx进行展示出来,这里nginx container就是主容器,生成日志首页内容的container就是sidecar container,先看yaml文件内容:
1apiVersion: v1
2kind: Pod
3metadata:
4 name: sidecar-container-demo
5spec:
6 containers:
7 - image: busybox
8 command: ["/bin/sh"]
9 args: ["-c", "while true; do echo echo $(date -u) 'Hi I am from Sidecar container' >> /var/log/index.html; sleep 5;done"]
10 name: sidecar-container
11 resources: {}
12 volumeMounts:
13 - name: var-logs
14 mountPath: /var/log
15 - image: nginx
16 name: main-container
17 resources: {}
18 ports:
19 - containerPort: 80
20 volumeMounts:
21 - name: var-logs
22 mountPath: /usr/share/nginx/html
23 dnsPolicy: Default
24 volumes:
25 - name: var-logs
26 emptyDir: {}
这里注意下里面有个Volumes卷的功能,两者之间都使用了var-logs卷,只不过挂载的目录是有区别的,但里面的内容在两个container里是共用的,对应的数据也是一致的。
注:英文不好的同学可以看volumes的中文翻译,这里在官方文档里说明了有两个功能:
一是当容器崩溃时文件丢失。 kubelet 会重新启动容器,但容器会以干净的状态重启(数据的持久化存储)
二个问题会在同一 Pod 中运行多个容器并共享文件时出现(同一个pod下的容器之间共享数据)
查看运行结果:
1// create the pod
2kubectl create -f pod.yaml
3// list the pods
4kubectl get po
5// exec into pod
6kubectl exec -it sidecar-container-demo -c main-container -- /bin/sh
7curl localhost
上面列的是进入容器内部运行的,当然也可以选择不进入容器内部,直接使用容器IP运行,如下:
这里可以看到sidecar-container-demo这个pod里是有两个containers的,而且访问的页面内容就是busybox里生成的内容。
三、增加点难度Deployment
挑战下难度,换用一个5个副本集,两个sidecar容器,通过Deployment以NodePort模式发布
1apiVersion: apps/v1
2kind: Deployment
3metadata:
4 creationTimestamp: null
5 labels:
6 app: nginx-webapp
7 name: nginx-webapp
8spec:
9 replicas: 5
10 selector:
11 matchLabels:
12 app: nginx-webapp
13 strategy: {}
14 template:
15 metadata:
16 creationTimestamp: null
17 labels:
18 app: nginx-webapp
19 spec:
20 containers:
21 - image: busybox
22 command: ["/bin/sh"]
23 args: ["-c", "while true; do echo echo $(date -u) 'Hi I am from Sidecar container 1' >> /var/log/index.html; sleep 5;done"]
24 name: sidecar-container1
25 resources: {}
26 volumeMounts:
27 - name: var-logs
28 mountPath: /var/log
29 - image: busybox
30 command: ["/bin/sh"]
31 args: ["-c", "while true; do echo echo $(date -u) 'Hi I am from Sidecar container 2' >> /var/log/index.html; sleep 5;done"]
32 name: sidecar-container2
33 resources: {}
34 volumeMounts:
35 - name: var-logs
36 mountPath: /var/log
37 - image: nginx
38 name: main-container
39 resources: {}
40 ports:
41 - containerPort: 80
42 volumeMounts:
43 - name: var-logs
44 mountPath: /usr/share/nginx/html
45 dnsPolicy: Default
46 volumes:
47 - name: var-logs
48 emptyDir: {}
49status: {}
50
51---
52
53apiVersion: v1
54kind: Service
55metadata:
56 name: nginx-webapp
57 labels:
58 run: nginx-webapp
59spec:
60 ports:
61 - port: 80
62 protocol: TCP
63 selector:
64 app: nginx-webapp
65 type: NodePort
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/k8s-sidecar/6689.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.