iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 25
0
Kubernetes

從Docker到Kubernetes-新手入門筆記系列 第 25

Day25 Database Pod為什麼需要Volume

跟昨天一樣繼續建立Database的deployment跟clusterip service

新增postgres-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata: 
  name: postgres-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      component: pgdb
  template:
    metadata:
      labels:
        component: pgdb
    spec:
      containers:
        - name: postgres
          image: postgres
          ports:
            - containerPort: 5432

新增postgres-clusterip-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: postgres-clusterip-service
spec:
  type: ClusterIP
  ports:
    - port: 5432
      targetPort: 5432
  selector:
    component: pgdb

套用設定檔

因為replicas是2,所以會有兩個Pod,然而問題是兩個pod各自的container裡面存放各自的database file,理論上應該存取同一份database file

另外如果Pod crash,Deployment會自動重新建立一個,然而資料就全部不見了。

我們需要一個空間是獨立於Pod之外或是在somewhere,在Kubernetes裡面有Volumn Object。

Kubernetes Volume跟Docker Volume定義上來看不一樣

Docker Volume是Container與Docker Machine之間共享的空間

Kubernetes Volume分成三種

  • Volume
  • Persistent Volume
  • Persistent Volume Claim

每一種生命週期跟Pod的狀態(status)有關

Volume是當Pod底下某個container掛了,其他的container還可以存取Volume底下的資料,但如果是Pod掛掉了,Volume也跟著重建了,所以這種不適合當作Database的Volume。

其他兩個明天繼續。


上一篇
Day24 Cluster IP Service-只有Node內才看得到
下一篇
Day26 建立Persistent Volume Claim(上)
系列文
從Docker到Kubernetes-新手入門筆記30

尚未有邦友留言

立即登入留言