1. 程式人生 > 程式設計 >K8S平臺基於SideCar模式的Java應用部署方式

K8S平臺基於SideCar模式的Java應用部署方式


SideCar模式介紹

SideCar中文譯為邊車,是附著在摩托車旁的小型車輛,用於載客。在程式設計世界中,其主要功能是將主應用與外圍輔助服務進行解耦,提供更靈活的應用部署方式。其理念符合設計模式中的單一職責原則,讓主應用和輔助服務分離,更專注自身功能。


K8S環境中SideCar模式幾種用法

共享儲存

基於K8S Pod特性,同一個POD可以共享根容器中掛載的Volume。基於該特性,我們可以想到以下SideCar應用方式:

1.日誌收集上傳

我們可以應用日誌掛載到共享的Volume上,業務容器寫日誌,SideCar容器讀日誌,並上傳日誌分析平臺,以生產者消費者方式進行解耦。

2.應用Jar包掛載

因為Java應用需要依賴擁有Java執行環境,因此大多使用open-jdk等映象作為基礎映象。而這類映象大多上百M。通過共享儲存,我們可以利用busybox這類體積只有幾M的映象作為基礎映象,然後將jar包拷貝到共享Volume下。並將這個承載jar的映象作為InitContainer,主業務容器使用該共享Volume下的jar包啟動業務。後續應用版本更新,只需要更新jar包映象。這個jar包映象便是一個SideCar。

共享網路

K8S中同一個POD同時也共享一個IP。基於該特性,我們可以這樣使用SideCar模式:

1.容器代理

通過SideCar容器代理應用容器。

2.容器適配

當該容器需要提供給多個已有業務訪問,但不同業務資料互動格式不一致時,可以借鑑介面卡模式,把SideCar容器作為一個介面卡,在不修改原有業務程式碼的同時對外提供服務。


基於SideCar模式的Java應用部署示例

將InitContainer作為我們的SideCar容器,通過共享儲存方式將jar包掛載到主業務容器,主頁容器提供java執行環境。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-depl
  labels:
    app: demo
spec:
  selector:
    matchLabels:
app: demo replicas: 1 template: metadata: labels: app: demo spec: containers: - name: business-container image: java:8-jdk imagePullPolicy: IfNotPresent command: - java - -Djava.security.egd=file:/dev/./urandom - -Dspring.profiles.active=k8s - -jar - /temp/demo-1.0.0-SNAPSHOT.jar ports: - containerPort: 8062 volumeMounts: - mountPath: /temp name: jar-volume - name: TZ value: Asia/Shanghai initContainers: - image: registry.demo.com/demo:1.0.0 imagePullPolicy: IfNotPresent name: demo-jar command: - cp - /demo-1.0.0-SNAPSHOT.jar - /app/demo-1.0.0-SNAPSHOT.jar volumeMounts: - mountPath: /app name: jar-volume volumes: - emptyDir: {} name: jar-volume 複製程式碼

參考資料

1.CNCF X 阿里巴巴雲原生技術公開課 gitbook.cn/gitchat/col…