我现在正在使用kubernetes来运行Docker容器。我只是创建了容器,我使用SSH连接到我的pod。
我需要进行一些系统配置更改,所以我需要重新启动容器,但是当我重新启动容器时,它将丢失容器中的所有数据。 kubernetes将像Docker图像原始一样运行一个新的pod。
那么如何重启pod并将数据保存在其中呢?
kubernetes提供了我的Bluemix
答案 0 :(得分:4)
您需要了解有关容器的更多信息,因为您的问题表明您并未完全掌握这些概念。
最后一项意味着您可以在Pod清单中定义环境变量,或使用Kubernetes配置文件来存储配置文件。您的Pod将读取这些内容,您的容器中的进程将得到正确配置。如果不是你的Pod会死,或者你的进程无法正常运行,你可以编辑环境变量或配置映射。
我的主要建议是,在您正确编写Docker镜像并仔细考虑配置之前,不要使用Kubernetes,您不必在容器中执行以使您的进程运行。
最后,更一般地说,你不应该将状态保存在容器中。
答案 1 :(得分:0)
为了存储您需要设置持久存储的数据,如果您使用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 - Persistent storage documentation
我自己不使用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
挂载点。
重新启动后将保留的唯一数据将位于该文件夹中。
例如,如果要存储日志,可以对日志文件夹进行符号链接。
/var/log/someapplication -> /data/log/someapplication
它有效,但推荐不!
我不清楚你是在搜索节点还是使用某种工具来执行容器内的shell。即使每个容器运行多个进程是不好的做法,但如果你密切关注内存和cpu的使用,它似乎运行得很好。
例如,在同一容器中运行ssh服务器和cronjobs绝对有效,尽管它不是最好的解决方案。
我们一直在使用多个(2-5)生产过程的主管超过一年,而且它的工作效果非常好。
有关各种平台中持久卷的更多信息。 https://kubernetes.io/docs/concepts/storage/persistent-volumes/