[英]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.