簡體   English   中英

Kubernetes 持久卷覆蓋 pod/容器中的現有數據

[英]Kubernetes persistent volume overriding existing data in the pod/container

我們正在嘗試使用與 pod/container 目錄映射的 kubernetes 持久卷作為備份。 容器目錄 (/home) 已經有來自 dockerimage 的數據,但是當我們使用容器目錄 (/home) 掛載 kubernetes 持久卷時,容器數據會被覆蓋或消失。

如何使 kubernetes 持久卷不覆蓋容器的數據而僅使用預先存在的數據修改任何數據?

貓 pv.yml

 apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: task-pv-volume
      labels:
        type: local
    spec:
      storageClassName: manual
      capacity:
        storage: 10Gi
      accessModes:
        - ReadWriteOnce
      hostPath:
        path: "/home/xyz/dock/main/kube/storage"

貓 pvclaim.yml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: task-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi

下面是主要的清單文件,它部署具有持久卷的 pod

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  volumes:
    - name: task-pv-storage
      persistentVolumeClaim:
        claimName: task-pv-claim
    - name: cgroup
      hostPath:
        path: /sys/fs/cgroup
        type: Directory
  containers:
    - name: rbf-container
      image: 10.190.205.11:5000/myimage/ubuntu:1.0
      securityContext:
        privileged: true
      volumeMounts:
        - mountPath: "/home/xyz"      ##-> mounting persistent volume with container directory /home/xyz**
          name: task-pv-storage
        - mountPath: /sys/fs/cgroup
          name: cgroup

帶有 kubernetes 持久卷的輸出:

$ ssh 10.244.4.29
Failed to add the host to the list of known hosts (/home/xyz/.ssh/known_hosts).
xyz@10.244.4.29's password:
Last login: Tue Aug 25 11:16:48 2020 from 10.252.85.167
$ bash
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

xyz@mypod:~$ ls
xyz@mypod:~$ ls -l
total 0                    ##--> no data present it all get vanished
xyz@mypod:~$ pwd
/home/xyz

從沒有持久卷的 pod 輸出

$ ssh 10.244.4.29
Failed to add the host to the list of known hosts (/home/xyz/.ssh/known_hosts).
xyz@10.244.4.29's password:
Last login: Tue Aug 25 11:16:48 2020 from 10.252.85.167
$ bash
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

xyz@mypod:~$ ls
xyz@mypod:~$ ls -l
total 465780
drwxrwxrwx 1 xyz xyz      4096 Aug 13 12:44 Desktop
drwxr-xr-x 2 xyz xyz      4096 Aug 25 11:12 Documents
drwxr-xr-x 2 xyz xyz      4096 Aug 25 11:12 Downloads
drwxr-xr-x 2 xyz xyz      4096 Aug 25 11:12 Music
drwxr-xr-x 2 xyz xyz      4096 Aug 25 11:12 Pictures
drwxr-xr-x 2 xyz xyz      4096 Aug 25 11:12 Public
drwxr-xr-x 2 xyz xyz      4096 Aug 25 11:12 Templates
drwxr-xr-x 2 xyz xyz      4096 Aug 25 11:12 Videos
-rw------- 1 xyz xyz   2404352 Aug 25 11:12 core
drwx------ 4 root root      4096 Aug 10 08:39 local.bak
-rw-r--r-- 1 root root 474439680 Aug 10 08:35 local.tar

如您所見,dockerimage 中的數據無需使用持久卷即可使用

我才剛剛開始 Kubernetes 之旅,仍在努力掌握最佳實踐,但我認為您嘗試做的事情是不可能的(在 /home 到 /home 的情況下)。 AFAIK 數據不會被覆蓋,而是存在於安裝“下”。 您可以自己嘗試使用mount --bind folder_a folder_b文件夾,然后使用umount folder_b卸載文件夾。 創建掛載會隱藏 folder_b 中的文件,但卸載會使它們再次出現。

所以這意味着您只需要通過將文件復制到卷來初始化卷。 您可以使用kubectl exec <pod> -- <command>或通過運行job或使用initContainers或使用入口點 shell 腳本來實現此目的。 由於一遍又一遍地將文件復制到安裝的卷是浪費能源,我認為前兩個選項是首選。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM