我在哪里可以找到 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。
我刚刚创建了以下 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 usereadOnly
mounts for the policy to be effective.
在您的情况下,使用 gcePersistentDisk
卷类型要好得多 - 检查 this article。