我有四個java應用程序(構成一個大的java應用程序),它們使用兩個具有大約8個不同數據庫(每個postgres服務器上有四個)的postgres服務器。與Kubernetes postgres中的多個數據庫?
由於我們正在與kubernetes我不舒服怎麼做會產生良好的結果?我能否以一致的方式創建一個包含8個數據庫的postgres副本?這在Kubernetes中甚至可能嗎?也許有更好的方法來處理這種情況?
TNX, 湯姆
我有四個java應用程序(構成一個大的java應用程序),它們使用兩個具有大約8個不同數據庫(每個postgres服務器上有四個)的postgres服務器。與Kubernetes postgres中的多個數據庫?
由於我們正在與kubernetes我不舒服怎麼做會產生良好的結果?我能否以一致的方式創建一個包含8個數據庫的postgres副本?這在Kubernetes中甚至可能嗎?也許有更好的方法來處理這種情況?
TNX, 湯姆
如果您不需要在2級不同的服務器的8個數據庫(因爲接近或以其他方式),然後我會把所有的8個數據庫的一個實例。還有一件事要管理。
您可以在Kubernetes內的單個副本(或多個副本)中運行postgres數據庫。在容器中運行數據庫意味着您還需要設置持久性存儲,否則當容器停止時您將丟失數據。
要在具有永久存儲的Kubernetes中運行數據庫,您需要創建一個deployment,persistent volume和persistent volume claim。在這個例子中我使用的是NFS,但還有很多其他存儲選項可用。
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: {}
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
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副本),您應該在做任何生產之前進一步研究這一點。網上有很多關於此的文章。
很多人仍然在虛擬機或裸機上運行他們的數據庫,只在容器中運行數據庫僅用於本地開發。
是的,我想我也不打算在生產中的容器中運行postgres ...很多未知數... tnx的答案! –