簡體   English   中英

Kubernetes 持久卷和主機路徑

[英]Kubernetes Persistent Volume and hostpath

我正在嘗試使用 Kubernetes Persistent Volumes 進行一些實驗,我在 Kubernetes 文檔中找不到明確的解釋,而且行為不是我所期望的,所以我想在這里提問。

我配置了以下持久卷和持久卷聲明。

kind: PersistentVolume
apiVersion: v1
metadata:
  name: store-persistent-volume
  namespace: test
spec:
  storageClassName: hostpath
  capacity:
    storage: 2Gi
  accessModes:
  - ReadWriteOnce
  hostPath:
    path: "/Volumes/Data/data"

---

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: store-persistent-volume-claim
  namespace: test
spec:
  storageClassName: hostpath
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

以及以下部署和服務配置。

kind: Deployment
apiVersion: apps/v1beta2
metadata:
  name: store-deployment
  namespace: test
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: store
  template:
    metadata:
      labels:
        k8s-app: store
    spec:
      volumes:
      - name: store-volume
        persistentVolumeClaim:
          claimName: store-persistent-volume-claim
      containers:
      - name: store
        image: localhost:5000/store
        ports:
        - containerPort: 8383
          protocol: TCP
        volumeMounts:
        - name: store-volume
          mountPath: /data

---
#------------ Service ----------------#

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: store
  name: store
  namespace: test
spec:
  type: LoadBalancer
  ports:
  - port: 8383
    targetPort: 8383
  selector:
    k8s-app: store

如您所見,我將“/Volumes/Data/data”定義為 Persistent Volume,並希望將其安裝到“/data”容器中。

所以我假設主機中“/Volumes/Data/data”中的任何內容都應該在容器的“/data”目錄中可見。 這個假設正確嗎? 因為目前這絕對不會發生。

我的第二個假設是,我在 '/data' 中保存的任何內容都應該在主機上可見,這也不會發生。

我可以從 Kubernetes 控制台看到一切正常啟動,(持久卷、聲明、部署、Pod、服務......)

我是否正確理解了持久卷概念?

附注。 我正在使用 Docker (18.05.0-ce-mac67(25042) -Channel edge) 的 Mac 中嘗試這個,它可能不應該在 Mac 上工作?

謝謝解答

假設您使用的是多節點 Kubernetes 集群,您應該能夠在pod 運行的特定工作節點上的/Volumes/Data/data 中看到本地掛載的數據

您可以使用命令kubectl get pods -o wide -n test檢查您的 pod 被調度的工作人員

請注意,根據 kubernetes 文檔,HostPath(僅限單節點測試 - 本地存儲不受任何方式支持,不會在多節點集群中工作) PersistentVolume

在我的情況下它確實有效。

使用以下命令,您可以檢查您的持久卷和聲明:

kubectl get pv

kubectl get pvc

並查看您定義的卷是否與您的聲明綁定。

吊艙啟動后,您可以進入容器並在/data查看/data

kubectl exec -ti <your_pod> -- bash

當您使用主機路徑時,您應該在運行 pod 的工作節點中檢查這個“/data”。

就像樓上那位說的。 您需要運行“kubectl get po -n test -o wide”,然后您將看到 Pod 所在的節點。 然后,如果您通過 SSH 連接該工作人員,您可以看到音量

暫無
暫無

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

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