Docker

從我的筆記型電腦 Docker 捲到 Google Cloud Kubernetes 上的持久卷

  • September 13, 2019

在我的筆記型電腦上執行的 docker 映像,其中包含 docker 卷文件夾myVolume,綁定到我桌面上的文件夾(可以是主機上的任何目錄)Desktop-Volume

docker run -it -v ~/Desktop/Desktop-Volume:/myVolume ..

裡面有文件和文件夾Desktop-Volume,當 docker 應用程序執行時,這個文件夾中填充了新創建的文件,當然在關閉 docker 後它們仍然保留Desktop-Volume

現在,我在 Google Cloud 上創建了一個 Kubernetes 集群並製作了 PersistentVolumes 並執行,但是容器崩潰了,因為它依賴於那些為了初始化deployment而進行預處理的 文件,所以我需要將這些文件放入 PersistentVolumes中**,然後再**在 Kubernetes 集群上執行我的容器,但我不知道怎麼做。Desktop-Volume

吊艙是這樣的

   spec:
     volumes:
       - name: demo
         persistentVolumeClaim:
           claimName: disk
     containers:
       - name: myContainer
         image: "gcr.io/my-instance/myDocker:latest"

         volumeMounts:
           - mountPath: "/myVolume"
             name: disk

我也試過:

https://kubernetes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage/#create-a-persistentvolume

connect到集群外殼並從那裡上傳Desktop-Volume.zip從我的筆記型電腦到外殼然後解壓縮並設置

 hostPath:
   path: "/home/<name>/Desktop-Volume"

但容器崩潰no such a file or directory指的是駐留在myVolume通過的文件Desktop-Volume

  1. Desktop-Volume在集群上執行容器之前,如何將預處理文件的內容放入 PersistentVolumes 中?
  2. PersistentVolumes 的掛載路徑在哪裡,以便我可以ls到那裡查看我的文件?

這聽起來像您的容器需要一個預先填充的捲才能啟動。您可以像您提到的那樣使用 hostPath ,但出於幾個原因不建議這樣做。相反,您將數據傳輸到 GCE PD,確保您的 PV 使用該預先存在的磁碟,然後將其掛載到您的 pod。這裡有一些細節:

**1. 將數據複製到 GCE PD:**啟動 VM,然後將數據從本地電腦傳輸到 VM,或者創建文件系統並直接從 VM 而不是本地電腦準備所需的文件。

**2. 準備 GCE 磁碟以供 PV 使用:**從VM中分離 GCE 磁碟或拍攝磁碟快照並從快照創建新的 GCE PD。

**3. 創建一個 PV 來消耗磁碟:**請務必仔細遵循此步驟的文件。GKE 中 PVC 的預設行為是使用 StorageClass 動態配置。相反,我們要確保首先創建 PV 並明確地針對 GCE-PD。GCP 很好介紹瞭如何做到這一點。

**4. 創建PVC以定位PV:**正如我所提到的,預設行為將是動態創建一個全新的磁碟,這將是一個空白的新磁碟。一定要仔細地走一遍。如果任何欄位設置不正確,將創建不同的 PV。

**5. 在你的 pod 中掛載 PVC:**首先要注意 GCE 磁碟不支持多次讀寫,所以這個 PVC 只能被單個 pod 使用。

如果您需要擁有多個 pod,則需要使用上述步驟創建多個 PVC。如果容器需要的文件和文件系統必須是只讀的,那麼您有兩個其他選項可以使其更容易:

  1. 以 readOnlyMnay 模式創建 GCE 磁碟,這樣可以跨多個 Pod 使用相同的 PVC。
  2. 將 configMap 與您需要的所有文件一起使用。這需要事先進行更多計劃,以確保所有適當的文件都在正確的位置

引用自:https://serverfault.com/questions/979989