从 Docker 桌面上的 Kubernetes 集群 运行 清除持久卷

Clear persistent volume from a Kubernetes cluster running on Docker Desktop

我是 运行 我的单节点集群中的一个 MySQL 图像,仅用于本地测试目的。

我希望能够在需要时删除数据库,让图像从头开始构建新数据库,但我似乎无法找到在哪里或如何轻松地做到这一点。

我在 Windows,使用 Docker 桌面管理我的 Docker 图像和 Kubernetes 集群与 WSL2。 Pod 使用持久性 volume/claim,如下所示。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 3Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/var/MySQLTemp"
    type: DirectoryOrCreate
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi

我部署的卷部分如下所示:

        volumeMounts:
        - name: mysql-persistent
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent
        persistentVolumeClaim:
          claimName: mysql-pv-claim

是否有命令可以用来查看此数据库在我的 Windows 或 WSL2 机器上的存储位置,以便我可以手动删除它,或者通过 docker 从命令行删除它或 kubectl?

对于未来寻找此解决方案但不想通过深入 github 讨论进行挖掘的任何人,我的解决方案是:

定义路径时将hostPath:改为local:。 hostPath 显然适用于您的 kubernetes 节点提供商是否具有外部永久性磁盘,例如 GCE 或 AWS。

其次,从 Docker 桌面指向您本地计算机的符号链接的路径显然可以在 /run/desktop/mnt/host/c 中找到您的 C 驱动器。我将我的路径设置为 /run/desktop/mnt/host/c/MySQLTemp 并在我的 C 驱动器的根目录中创建了一个 MySQLTemp 文件,并且它有效。

第三,local: 路径定义需要 nodeAffinity。您可以像这样告诉它使用 Docker 桌面:

spec:
  nodeAffinity:
    required:
      nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
                - docker-desktop

当主机文件系统为 Windows。

时,Docker 桌面无法使用 WSL2 和 KinD 轻松支持持久卷的出色解决方法

我也无法让主机路径工作。为了在使用 KinD 和 Docker Desktop 时使其成为通用解决方案,我只是修改了此条目:

/run/desktop/mnt/host/c/MySQLTemp 到 /run/desktop/mnt/host/v <- 我想要访问的 windows 驱动器,它成功了!

向拉尔致敬:-)