我想在本地计算机(macOS)上的Kubernetes PersistentVolume 中访问和编辑文件,但我不知道在哪里可以找到这些文件!
我将我的hostPath
指向/tmp/wordpress-volume
,但是我找不到它。我想念的隐藏秘密是什么
我在 docker-for-desktop 群集Version 2.0.0.2 (30215)
上使用以下配置。
kind: PersistentVolume
metadata:
name: wordpress-volume
spec:
# ...
hostPath:
path: /tmp/wordpress-volume
kind: PersistentVolumeClaim
metadata:
name: wordpress-volume-claim
# ...
kind: Deployment
metadata:
name: wordpress
# ...
spec:
containers:
- image: wordpress:4.8-apache
# ...
volumeMounts:
- name: wordpress-volume
mountPath: /var/www/html
volumes:
- name: wordpress-volume
persistentVolumeClaim:
claimName: wordpress-volume-claim
答案 0 :(得分:1)
首先,您需要记住的是Kubernetes在minikube
集群上运行。
minikube
本身在虚拟机上运行。这样,该路径就不会在您的主机上,而是在虚拟机中的路径。
但是使用minikube
,我们可以轻松做到这一点。首先,您必须将主机目录安装到minikube
。
(如果您使用的是云提供商,则可以通过某种方式创建存储。对于GCE,您可以使用gcePersistentDisk
)
minikube mount /path/to/dir/to/mount:/vm-mount-path
现在
kind: PersistentVolume
metadata:
name: wordpress-volume
spec:
# ...
hostPath:
path: /vm-mount-path
如果创建此资源,则应将文件保存在主机中。
答案 1 :(得分:1)
由于@ aman-tuladhar和互联网上的一些时间浪费,我发现您只需要确保为您设置storageClassName
PersistentVolume 和 PersistentVolumeClaim 。
根据documentation,如果您想避免 Kubernetes 动态生成 PersistentVolumes 而无需考虑您静态声明的那个,则可以设置一个空字符串{ {1}}。
就我而言,我设置了" "
。
storageClassName: manual
kind: PersistentVolume
metadata:
name: wordpress-volume
spec:
# ...
storageClassName: manual
hostPath:
path: /tmp/wordpress-volume
这对于kind: PersistentVolumeClaim
metadata:
name: wordpress-volume-claim
spec:
storageClassName: manual
# ...
群集是有效的(只要将docker-for-desktop
设置为绝对路径)。
参考文献:
答案 2 :(得分:1)
在Mac的Docker中使用MacOS和Kubernetes的情况。如何找到基于目录的本地卷的真实位置到 VM
1)创建具有唯一路径的新PersistentVolume:
blablabla.yml:
kind: PersistentVolume
apiVersion: v1
metadata:
name: blablabla
spec:
storageClassName: manual
capacity:
storage: 1G
accessModes:
- ReadWriteMany
hostPath:
path: "/mnt/blablabla"
kubectl apply -f blablabla.yml
2)登录到虚拟机:
screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
# then press Enter
3)查找您的音量:
find / -name blablabla
/containers/services/docker/rootfs/mnt/blablabla # <= got it!
/containers/services/docker/tmp/upper/mnt/blablabla
4)从屏幕退出:Ctrl-a y,从屏幕分离:Ctrl-a d
有时您有机会断开屏幕会话,看起来好像是乱码的stdout带有混乱的符号,stdin仍然可以正常工作。在这种情况下,请尝试终止所有屏幕会话并重新连接到第一个屏幕会话。或者只是为Mac重新启动docker。
答案 3 :(得分:0)
我创建了一个 PersistentVolume
并使用了 storageClassName
(在下面的示例中为 local-storage
)。确保将 path
(/Users/user/data-pv1
) 替换为 Mac 上的实际路径。
apiVersion: v1
kind: PersistentVolume
metadata:
name: local-pv1
spec:
capacity:
storage: 30Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: local-storage
local:
path: /Users/user/data-pv1
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- docker-desktop
如果您想访问 hostPath
,您需要使用 nsenter
:
docker run -it --rm --privileged --pid=host alpine:edge nsenter -t 1 -m -u -n -i sh
或 nsenter1
docker run -it --rm --privileged --pid=host justincormack/nsenter1
并导航到以下目录:
/var/lib/k8s-pvs