什麼是 Sidecar 模式
將應用程式的功能劃分為單獨的程式,即 Sidecar
模式。Sidecar
譯為摩托車的邊車,用到軟體架構中,Sidecar
模式指在原來的業務邏輯上再新加一個抽象層。
Sidecar
模式是一種更具動態性的方法,其作為一種模式並不是 Kubernetes 的正式約定。它將應用程式的功能劃分為單獨的程式,執行在同一個 pod 中,Sidecar
模式允許在應用程式旁邊新增功能,而無需修改應用程式程式碼。
Sidecar 示意圖
Sidecar 的優勢
在 Sidecar
部署方式中,每個應用的容器旁都會部署一個或者多個伴生容器,多個容器共享儲存、網路等資源。具體優勢有:
- 將不同的功能抽象到不同的層來降低微服務的程式碼複雜性。
- 每個
Sidecar
可以獨立升級更新。 - 分離業務無關功能(例如:配置檔案獲取),提升程式碼重用度。
- 不再需要編寫相同的第三方元件配置檔案和程式碼,能夠降低程式碼重複度。
Sidecar 如何工作
本文使用 serivce mesh
做為示例。來自服務的所有傳入和傳出網路流量均透過 Sidecar
代理,完成服務之間的流量管理、限流、熔斷等策略的執行。它將網路依賴抽象成 Sidecar
,而服務對於網路是無感知的,只知道所附加的 Sidecar
代理。
Sidecar 如何注入
- 手動注入,透過手工修改工作負載的方式,新增
Sidecar
的配置。
kind: Deployment
apiVersion: apps/v1
metadata:
name: keeper
spec:
template:
spec:
volumes:
- name: config
emptyDir: {}
initContainers:
- name: install
image: 'dockerhub.qingcloud.com/lowcode/infantry:v20211228edfdfd'
resources: {}
volumeMounts:
- name: config
mountPath: /configs
containers:
- name: container
image: 'dockerhub.qingcloud.com/lowcode/keeper:alpha'
volumeMounts:
- name: config
readOnly: true
mountPath: /configs
- name: watchdog
image: 'dockerhub.qingcloud.com/lowcode/infantry:v202202081416'
command:
- /root/infantry
volumeMounts:
- name: config
mountPath: /configs
- 基於 Kubernetes 的 突變 webhook 入駐控制器
mutating webhook addmission controller
的自動Sidecar
注入。
kind: Deployment
apiVersion: apps/v1
metadata:
name: keeper
namespace: lowcode
annotations:
servicemesh.kubesphere.io/enabled: 'true'
spec:
template:
metadata:
annotations:
sidecar.istio.io/inject: 'true'
spec:
containers:
- name: container
image: 'dockerhub.qingcloud.com/lowcode/keeper:alpha'
restartPolicy: Always
經典使用案例
基本術語
容器(Container)
每個執行的容器都是可重複的,包含依賴環境在內的標準,意味著無論你在哪裡執行它,都會得到相同的行為。容器將應用程式從底層的主機設施中解耦,這使得更加容易在不同的雲或 OS 環境中部署。
Pod
Pod 的共享上下文包括一組 Linux 名字空間、控制組(cgroup)等。 在 Pod 的上下文中,每個獨立的應用可能會進一步實施隔離。
工作負載(Workload)
工作負載是在 Kubernetes 上執行的應用程式。無論你的負載是單一元件還是由多個一同工作的元件構成,在 Kubernetes 中你可以在一組 Pods 中執行它。 在 Kubernetes 中,Pod 代表的是叢集上處於執行狀態的一組容器。
公眾號:全象雲低程式碼
官網:https://www.quanxiang.dev/
GitHub:https://github.com/quanxiang-...