[英]Postgres running on kubernetes looses data upon Pod recreation or cluster reboot
[英]How to reboot kubernetes pod and keep the data
我現在正在使用kubernetes運行Docker容器。我只是創建了容器,然后使用SSH連接到了我的Pod。
我需要進行一些系統配置更改,因此我需要重新啟動容器,但是當我重新啟動容器時,它將丟失Pod中的所有數據。 kubernetes會像Docker鏡像原版一樣運行一個新的pod。
那么我如何重新啟動Pod並將其保留在其中呢?
我的Bluemix提供給kubernetes
您需要了解有關容器的更多信息,因為您的問題表明您沒有完全掌握這些概念。
最后一項意味着您可以在Pod清單中定義環境變量,或使用Kubernetes configmaps存儲配置文件。 您的Pod會讀取這些內容,並且您容器中的進程將得到正確配置。 如果不是這樣,您的Pod將會死,或者您的進程將無法正常運行,您只需編輯環境變量或配置映射即可。
我的主要建議是在正確編寫docker映像並仔細考慮配置之前,不要使用Kubernetes,您不必在容器中執行即可使進程運行。
最后,更籠統地說,您不應該在容器內保持狀態。
為了存儲數據,您需要設置永久性存儲,例如,如果您使用Google Cloud作為平台,則需要創建一個磁盤來存儲數據,並在清單中定義該磁盤的用途。
使用Bluemix,看起來您只需要創建卷並使用它們即可。
bx ic volume-create myapplication_volume ext4
bx ic run --volume myapplication_volume:/data --name myapplication registry.eu-gb.bluemix.net/<my_namespace>/my_image
我自己沒有使用Bluemix,所以我將繼續使用Google的永久性磁盤進行示例清單。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: myapplication
namespace: default
spec:
replicas: 1
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
type: RollingUpdate
selector:
matchLabels:
app: myapplication
template:
metadata:
labels:
app: myapplication
spec:
containers:
- name: myapplication
image: eu.gcr.io/myproject/myimage:latest
imagePullPolicy: Always
ports:
- containerPort: 80
- containerPort: 443
volumeMounts:
- mountPath: /data
name: myapplication-volume
volumes:
- name: myapplication-volume
gcePersistentDisk:
pdName: mydisk-1
fsType: ext4
此處,磁盤mydisk-1
映射到/data
掛載點。 重新啟動后將保留的唯一數據將在該文件夾內。
例如,如果要存儲日志,則可以符號鏈接logs文件夾。
/var/log/someapplication -> /data/log/someapplication
它有效,但是不建議這樣做!
我不清楚是要切入節點還是使用某些工具在容器內執行Shell。 即使每個容器運行多個進程都是不好的做法,但如果您密切關注內存和cpu的使用情況,它似乎也可以很好地工作。
例如,雖然不是最好的解決方案,但在同一個容器中運行ssh服務器和cronjobs絕對可以。
一年多來,我們一直在生產中使用主管進行多個(2-5)流程,並且運行良好。
有關各種平台上的持久卷的更多信息。 https://kubernetes.io/docs/concepts/storage/persistent-volumes/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.