我在哪里可以找到 Kubernetes PV 主机路径的实际文件

Where can I locate the actual files of Kubernates PV hostpath

我刚刚创建了以下 PersistantVolume。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: sql-pv
  labels:
    type: local
spec:
  storageClassName: standard
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/var/lib/sqldata"

然后我 SSH 节点并遍历到 /var/lib。但是我在其中的任何地方都看不到创建的 sqldata 目录。

真正创建的目录在哪里?

我创建了一个 POD,将此卷挂载到容器内的路径。当我 SSH 容器时,我可以在挂载路径中看到该文件。这些文件存储在哪里?

您已在 Google Kubernetes Engine 上设置集群,这意味着 节点是 GCP 上的虚拟机实例。您可能一直在使用 Kubernetes Engine 仪表板和 Connect to the cluster 选项连接到集群。它不会将您通过 SSH 连接到任何节点,它只是使用以下命令启动 GCP Cloud Shell 终端实例:

gcloud container clusters get-credentials {your-cluster} --zone {your-zone} --project {your-project-name}

该命令正在配置 kubectl agent on GCP Cloud Shell by setting proper cluster name, certificates etc. in ~/.kube/config file so you have access to the cluster (by communicating with the cluster endpoint),但是您没有通过 SSH 连接到任何节点。这就是为什么您无法访问 hostPath.

中定义的路径的原因

要查找 hostPath 目录,您需要:

  • 找到pod在哪个节点上
  • SSH 进入此节点

正在寻找节点:

运行 在 kubectl get pod {pod-name} 之后使用 -o wide 标志命令 - 将 {pod-name} 更改为您的 pod 名称

user@cloudshell:~ (project)$ kubectl get pod task-pv-pod -o wide
NAME          READY   STATUS    RESTARTS   AGE   IP            NODE                                         NOMINATED NODE   READINESS GATES
task-pv-pod   1/1     Running   0          53m   xx.xx.x.xxx   gke-test-v-1-21-default-pool-82dbc10b-8mvx   <none>           <none>

SSH 到节点:

运行 按照 gcloud compute ssh {cluster-name} 命令 - 将 {cluster-name} 更改为上一个命令的节点名称:

user@cloudshell:~ (project)$ gcloud compute ssh gke-test-v-1-21-default-pool-82dbc10b-8mvx

Welcome to Kubernetes v1.21.3-gke.2001!

You can find documentation for Kubernetes at:
  http://docs.kubernetes.io/

The source for this release can be found at:
  /home/kubernetes/kubernetes-src.tar.gz
Or you can download it at:
  https://storage.googleapis.com/kubernetes-release-gke/release/v1.21.3-gke.2001/kubernetes-src.tar.gz

It is based on the Kubernetes source at:
  https://github.com/kubernetes/kubernetes/tree/v1.21.3-gke.2001

For Kubernetes copyright and licensing information, see:
  /home/kubernetes/LICENSES

user@gke-test-v-1-21-default-pool-82dbc10b-8mvx ~ $ 

现在会有一个 hostPath 目录(在你的例子中 /var/lib/sqldata),如果 pod 创建了一些文件,也会有文件。


尽可能避免使用 hostPath

不推荐使用hostPath。如评论中所述,当在不同节点上创建 pod 时会导致问题(但你有一个单节点集群)但它也 presents many security risks:

Warning: HostPath volumes present many security risks, and it is a best practice to avoid the use of HostPaths when possible. When a HostPath volume must be used, it should be scoped to only the required file or directory, and mounted as ReadOnly. If restricting HostPath access to specific directories through AdmissionPolicy, volumeMounts MUST be required to use readOnly mounts for the policy to be effective.

在您的情况下,使用 gcePersistentDisk 卷类型要好得多 - 检查 this article