POD解決了什麼問題?
<br /> 成組資源調度問題的解決。
mesos採用的資源囤積策略容易出現死鎖和調度效率低下問題;<br />google採用的樂觀調度技術難度非常大;<br /> <br />而k8s使用pod優雅的解決了這個問題。<br /> <br />pod的出現解決了兩個問題。 <br />第一:解決了超親密關係的進程協作; <br />第二:容器設計模式sidecar應用的載體;<br /> <br />
POD是什麼?
<br /> <br />pod是邏輯概念,在linux操作系統中並不存在,對應了容器組,是k8s中原子調度單位,物理結構如下圖:<br /> <br />![image.png](https://oscimg.oschina.net/oscnet/up-5670228d5cbe2eb6033819f850e26910fec.png)<br /> <br /> <br /> <br />infra容器是一個使用編譯語言編寫的輕量級程序,其它業務容器共享了infra容器的network namespace,即pod的所有網絡流量都是通過infra容器來處理的,永遠處於暫停狀態,跟pod同生命週期。<br /> <br />pod裏的容器共享volumn ;<br /> <br /> <br />物理結構決定了它非常適合用來處理超親密關係的容器或者說程序。<br /> <br /> <br />
POD的應用例子
<br /> <br />共享volumn:的兩個容器 <br />
apiVersion: v1
kind: pod
metadata:
name: two-container
spec:
restartPolicy: Never
volumes:
- name: shared-data
hostPath:
path: /data
containers:
- name: nginx-container
image: nginx
volumeMounts:
- name: shared-data
mountPath: /usr/share/nginx/html
- name: debian-container
image: debian
volumeMounts:
- name: shared-data
mountPath: /pod-data
command: ["/bin/sh"]
args: ["-c","echo hello from > /pod-data/index.html"]
<br /> <br />sidecar模式應用例子:(javaweb程序採用sidecar模式共享volumn,是的war跟tomcat獨立更新和演進)<br />
apiVersion: v1
kind: Pod
metadata:
name: javaweb
spec:
initContainers:
- image: war:v2
name: war
command: ["cp", "/sample.war","app"]
volumeMounts:
- mountPath: /app
name: app-volunn
containers:
- image: tomcat
name: tomcat
command: ["sh","-c","startup.sh"]
volumeMounts:
- mountPath: /app
name: app-volunn
volumes:
- name: app-volumn
emptyDir: {}
<br /> <br />
小結
<br /> <br /> <br />pod的物理結構決定了它非常適合處理超親密關係的一組容器,也是sidecar即服務網格的基礎。<br /> <br /> <br /> <br />![pod.png](https://oscimg.oschina.net/oscnet/up-ebee80f526f45db9d38b352e15457a5d0c9.png)
原創不易,關注誠可貴,轉發價更高!轉載請註明出處,讓我們互通有無,共同進步,歡迎溝通交流。