2017-10-09 75 views
0

我有四個java應用程序(構成一個大的java應用程序),它們使用兩個具有大約8個不同數據庫(每個postgres服務器上有四個)的postgres服務器。與Kubernetes postgres中的多個數據庫?

由於我們正在與kubernetes我不舒服怎麼做會產生良好的結果?我能否以一致的方式創建一個包含8個數據庫的postgres副本?這在Kubernetes中甚至可能嗎?也許有更好的方法來處理這種情況?

TNX, 湯姆

回答

3

如果您不需要在2級不同的服務器的8個數據庫(因爲接近或以其他方式),然後我會把所有的8個數據庫的一個實例。還有一件事要管理。

您可以在Kubernetes內的單個副本(或多個副本)中運行postgres數據庫。在容器中運行數據庫意味着您還需要設置持久性存儲,否則當容器停止時您將丟失數據。

要在具有永久存儲的Kubernetes中運行數據庫,您需要創建一個deployment,persistent volumepersistent volume claim。在這個例子中我使用的是NFS,但還有很多其他存儲選項可用。

Postgres的-deployment.yml

apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    name: my-database 
    labels: 
    app: my-database 
spec: 
    replicas: 1 
    strategy: 
    type: Recreate 
    template: 
    metadata: 
     labels: 
     app: my-database 
    spec: 
     containers: 
     - image: postgres:9.6.3 
     name: my-database 
     ports: 
     - containerPort: 5432 
     resources: {} 
     volumeMounts: 
     - mountPath: "/var/lib/postgresql/data:Z" 
      name: postgresdb-storage 
     restartPolicy: Always 
     volumes: 
     - name: postgresdb-storage 
     persistentVolumeClaim: 
      claimName: postgresdb-volume-claim 
status: {} 

Postgres的-pvolume.yml

apiVersion: v1 
kind: PersistentVolume 
metadata: 
    name: postgresdb-volume 
spec: 
    storageClassName: postgresdb-class 
    accessModes: 
    - ReadWriteMany 
    capacity: 
    storage: 100Gi 
    nfs: 
    server: <NFS_SERVER_IP_ADDRESS> 
    path: /var/nfs/data/my-database-data 

Postgres的-pvolume-claim.yml

apiVersion: v1 
kind: PersistentVolumeClaim 
metadata: 
    name: postgresdb-volume-claim 
spec: 
    storageClassName: postgresdb-class 
    accessModes: 
    - ReadWriteMany 
    resources: 
    requests: 
     storage: 100Gi 
status: {} 

然後你就可以添加這些到您的Kubernetes使用以下命令集羣:

kubectl create -f postgres-pvolume.yml 
kubectl create -f postgres-pvolume-claim.yml 
kubectl create -f postgres-deployment.yml 

但有一點要小心。容器化世界中的持久性存儲仍處於起步階段,並且在運行多個副本時,在高流量環境中可能會出現問題。如果您計劃擴展您的數據庫(即運行多個postgres副本),您應該在做任何生產之前進一步研究這一點。網上有很多關於此的文章。

很多人仍然在虛擬機或裸機上運行他們的數據庫,只在容器中運行數據庫僅用於本地開發。

+0

是的,我想我也不打算在生產中的容器中運行postgres ...很多未知數... tnx的答案! –