繁体   English   中英

如何重启kubernetes pod并保留数据

[英]How to reboot kubernetes pod and keep the data

我现在正在使用kubernetes运行Docker容器。我只是创建了容器,然后使用SSH连接到了我的Pod。

我需要进行一些系统配置更改,因此我需要重新启动容器,但是当我重新启动容器时,它将丢失Pod中的所有数据。 kubernetes会像Docker镜像原版一样运行一个新的pod。

那么我如何重新启动Pod并将其保留在其中呢?

我的Bluemix提供给kubernetes

您需要了解有关容器的更多信息,因为您的问题表明您没有完全掌握这些概念。

  1. 在容器中运行SSH是一种反模式,容器不是虚拟机。 因此,从其中删除SSH服务器。
  2. 运行SSH的事实表明每个容器可能正在运行多个进程。 这通常是不好的做法。 因此,请删除该主管,然后直接在入口点调用您的主流程。
  3. 设置容器映像主进程,以使用环境变量或配置文件在运行时进行配置。

最后一项意味着您可以在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-持久性存储文档

我自己没有使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM