首页 > 解决方案 > 从 Docker Desktop 上运行的 Kubernetes 集群中清除持久卷

问题描述

我在我的单节点集群中运行 MySQL 映像,仅用于本地测试目的。

我希望能够在需要让图像从头开始构建新数据库时删除数据库,但我似乎无法找到可以轻松做到这一点的位置或方式。

我在 Windows 上,使用 Docker Desktop 使用 WSL2 管理我的 Docker 映像和 Kubernetes 集群。该 pod 使用持久卷/声明,如下所示。

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

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

标签: kubernetesdocker-desktoppersistent-volumes

解决方案


对于任何在未来寻找这个解决方案并且不想通过深入的 github 讨论来挖掘的人,我的解决方案是这样的:

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

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

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

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

推荐阅读