从 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 驱动器,它成功了!
向拉尔致敬:-)
我是 运行 我的单节点集群中的一个 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 驱动器,它成功了!
向拉尔致敬:-)