簡體   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