如何在Kind中引用本地卷(docker中的kubernetes)

问题描述 投票:0回答:4

我想设置一个由 kind 集群中的 Pod 共享的持久卷(PV 和 PVC)。但是,我需要确保数据也保留在我的笔记本电脑(主机服务器)上。因此,该卷的路径应该在我的笔记本电脑上,我可以直接访问。

如果我删除

kind cluster
,该卷应该会被保留而不是被破坏。

我还希望能够在我的笔记本电脑主机上轻松添加、更新或复制该卷中的文件。

如何让

Kind cluster
中的 Pod 知道此设置?

请找到我的

kind.yaml
文件供您参考。

$ kind
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
- role: worker
docker kubernetes local-storage kind
4个回答
22
投票

创建类型集群时,您可以指定要安装在虚拟节点上的主机目录。如果这样做,那么您可以使用

hostPath
存储配置卷,它们将引用节点上的安装路径。

因此您将创建一个配置文件:

apiVersion: kind.x-k8s.io/v1alpha4
kind: Cluster
nodes:
  - role: control-plane
    extraMounts:
      - hostPath: /home/bill/work/foo
        containerPath: /foo

然后运行

kind create cluster --config kind-config.yaml

创建集群。

在 Kubernetes YAML 文件中,您需要将其挂载为节点上的“主机路径”。 Pod 规范可能包含部分内容:

containerPath

请注意,此设置对于种类来说是极其特定的。一般来说,主机路径不是可靠的存储:您无法控制将 Pod 安排在哪个节点上,并且在现实集群中 Pod 和节点都可能被删除。在某些托管设置(AWS EKS、Google GKE)中,您可能根本无法控制主机内容。

您可能会重新审视您的应用程序设计,以尽量减少对“文件”作为第一类对象的需求。考虑部署一个包含更新内容的新 Docker 镜像,而不是“更新卷”;考虑可以通过入口控制器公开的 HTTP 服务,而不是“复制文件”。


21
投票
volumes: - name: foo hostPath: path: /foo # matches kind containerPath: containers: - name: foo volumeMounts: - name: foo mountPath: /data # in the container filesystem

,您应该使用

Kind
,这样真实集群上的配置只会在pv的定义上有所不同。
因此,如果您在 Kind 集群上配置 extraMounts:

pv / pvc

然后在该集群上创建 PV 和 PVC:

apiVersion: kind.x-k8s.io/v1alpha4 kind: Cluster nodes: - role: control-plane extraMounts: - hostPath: /home/bill/work/www containerPath: /www

之后您可以像这样在部署中使用它:

--- apiVersion: v1 kind: PersistentVolume metadata: name: pv-www spec: storageClassName: standard accessModes: - ReadWriteOnce capacity: storage: 2Gi hostPath: path: /www/ --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-www spec: volumeName: pv-www accessModes: - ReadWriteOnce resources: requests: storage: 1Gi

因此,您本地的 
--- apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: volumes: - name: www persistentVolumeClaim: claimName: pvc-www containers: - name: nginx image: nginx:1.14.2 volumeMounts: - name: www mountPath: /var/www

将被安装到容器内的

/home/bill/work/www
    


2
投票

/var/www

因此,您的主机(笔记本电脑)中的路径是 
... extraMounts: - hostPath: /home/bill/work/www containerPath: /www ...

,kubernetes 节点中的路径是

/home/bill/work/www
您正在运行,并且可以利用它正在运行 docker 的事实来检查节点。做一个

/www

这将向您展示那种 docker 镜像,它们都是 kubernetes 节点。因此,您可以通过从上面的 docker ps -a 获取 CONTAINER_ID 来检查节点并执行 a

docker ps -a

现在您已经在该节点上运行了一个 shell。检查节点是否正确安装了您的主机文件系统

只需检查

docker exec -it CONTAINER_ID /bin/bash

在节点上。你应该看到
ls /www

的内容
因此,您所归档的是节点文件系统的这一部分由主机(笔记本电脑)保存。因此,您可以销毁集群并使用相同的 kind-config 文件重新创建它。节点将重新挂载并且不会丢失任何信息。

因此,通过此工作设置,您可以创建一个持久卷 (pv),并使用如上所述的持久卷声明 (pvc) 声明此 pv。

希望这有帮助。


0
投票
/home/bill/work/www

Persistent Volume (PV)
并将数据保留在您的笔记本电脑上,您可以按照以下步骤操作:
在您的笔记本电脑上创建一个目录作为 PV。
为 PV 和 PVC 创建一个 YAML 文件,指定笔记本电脑上目录的路径作为 PV 的源。
将 YAML 文件应用到您的 KIND 集群以创建 PV 和 PVC。
在您的 pod 规范中,通过名称引用 PVC 来挂载卷。

以下是 PV 和 PVC 的 YAML 文件示例:

Persistent Volume Claim (PVC)

要应用 YAML 文件,请运行:

apiVersion: v1 kind: PersistentVolume metadata: name: mypv spec: capacity: storage: 1Gi accessModes: - ReadWriteOnce hostPath: path: /path/to/your/laptop/directory persistentVolumeReclaimPolicy: Retain --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mypvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi

在您的 Pod 规范中,通过名称引用 PVC 来挂载卷:

kubectl apply -f pv-pvc.yaml

注意:需要调整并测试。

© www.soinside.com 2019 - 2024. All rights reserved.