从主机访问 minikube 文件夹的数据

access minikube folder's data from host machine

我在 运行 我的 Kubernetes 部署中使用 minikube:

PVC:

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pipeline
spec:
  storageClassName:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

广告连播:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: test1
  name: test1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: test1
  template:
    metadata:
      labels:
        app: test1
    spec:
      containers:
      - env:
        - name: SHARED_FOLDER_PATH
          value: /data/shared
        image: docker.io/foo/test1:st3
        imagePullPolicy: Always
        name: test1
        ports:
        - containerPort: 8061
          name: protobuf-api
        - containerPort: 8062
          name: webui
        volumeMounts:
        - mountPath: /data/shared
          name: test1
      imagePullSecrets:
      - name: acumos-registry
      volumes:
      - name: test1
        persistentVolumeClaim:
          claimName: pipeline

我检查过pod和pvc是运行:

$ kubectl describe pv,pvc

Name:            pvc-34bbd532-9c55-45cc-ab96-1accd08ded6e
Labels:          <none>
Annotations:     hostPathProvisionerIdentity: c6eeb812-6b82-4546-bc5a-8917cf0d3d6b
                 pv.kubernetes.io/provisioned-by: k8s.io/minikube-hostpath
Finalizers:      [kubernetes.io/pv-protection]
StorageClass:    standard
Status:          Bound
Claim:           test/pipeline
Reclaim Policy:  Delete
Access Modes:    RWO
VolumeMode:      Filesystem
Capacity:        1Gi
Node Affinity:   <none>
Message:         
Source:
    Type:          HostPath (bare host directory volume)
    Path:          /tmp/hostpath-provisioner/test/pipeline
    HostPathType:  
Events:            <none>

我正在尝试从主机访问 minikube 文件夹中的数据:/tmp/hostpath-provisioner/test/pipeline。为此,我正在安装本地卷:

$ minikube mount /tmp/hostpath-provisioner/test/pipeline:/tmp/hostpath-provisioner/test/pipeline

我已经通过 ssh 检查了 minikube 文件夹中是否有任何数据:

docker@minikube:/tmp/hostpath-provisioner/test/pipeline$ ls -a

.  ..  classes.json

但我无法从本地文件夹中看到此信息

您创建的本地挂载将指定目录挂载到 minikube 中,但不会像您希望的那样从来宾到主机。

根据您主机的 OS,您必须使用主机文件夹共享或基于网络的文件系统来设置适当的文件共享。

通过一些工作,可以在主机和来宾 VM 之间设置 Syncthing 以实现持久文件同步。

为您的操作系统获取最新版本的 Syncthing 并将其解压缩(如果您使用 Debian/Ubuntu,您可能需要使用 Debian 存储库)

此时 Syncthing 还将为您设置一个名为 Default Folder 的文件夹,位于您主目录中名为 Sync 的目录中(Windows 上的 %USERPROFILE%)。您可以以此为起点,然后删除它或稍后添加更多文件夹。

管理 GUI 自动启动并在 http://localhost:8384/ 上保持可用。 Cookie 对于 GUI 的正确运行至关重要;请确保您的浏览器接受它们。

左侧是“文件夹”列表,或要同步的目录。您可以看到为您创建了默认文件夹,并且它当前标记为“未共享”,因为它尚未与任何其他设备共享。右侧是设备列表。目前只有一台设备:您所在的计算机运行。

要使 Syncthing 能够与另一台设备同步文件,必须告知该设备。这是通过交换“设备 ID”来实现的。设备 ID 是一个唯一的、加密安全的标识符,它是在您第一次启动 Syncthing 时作为密钥生成的一部分生成的。它打印在日志中,您可以通过 selecting“操作”(右上角)和“显示 ID”在 Web GUI 中看到它。

两个设备只有在都配置了彼此的设备 ID 时才会相互连接和通信。由于配置必须是相互的才能发生连接,因此设备 ID 不需要保密。它们本质上是 public 键的一部分。

要让你的两台设备互相通话,点击两台设备右下角的“添加远程设备”,然后输入对方的设备ID。您还应该 select 您想要共享的文件夹。设备名称是可选的,纯粹是装饰性的。如果需要,您可以稍后更改它。 单击“保存”后,新设备将出现在 GUI 的右侧(尽管已断开连接),然后在一分钟左右后连接到新设备。请记住为其他设备重复此步骤。

此时两台设备共享一个空目录。将文件添加到任一设备上的共享目录会将这些文件同步到另一端。

什么是同步: https://syncthing.net/

安装指南: https://docs.syncthing.net/intro/getting-started.html

syncthing 延迟发布: https://github.com/syncthing/syncthing/releases/tag/v1.18.5

Debian 回购: https://apt.syncthing.net/

问题出在防火墙上。问题 post 中详述的过程以及此答案中提出的解决方案(在 Ubuntu 上)对我有用: