![](/img/trans.png)
[英]Kubernetes on docker for windows, persistent volume with hostPath gives Operation not permitted
[英]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.