Kubernetes 部署持久卷和 VM 磁盘大小
Kubernetes Deployment Persistent Volume and VM disk size
为集群中的 运行 部署之一创建 NFS 持久卷后,容器能够存储文件数据并在彼此之间共享文件数据。文件数据在容器生命周期之间也是持久的。那太好了!但我想知道这个文件数据到底存储在哪里:它 "physically" 位于何处?它是保存到容器本身还是保存到 VM 磁盘的某个地方 - 用于 运行 Deployment 的 VM?
默认情况下,用于托管 Deployment 的 VM 只有 20 Gb 可用磁盘 space。假设我 运行 在节点(又名 VM)上的 pod 中 运行 宁一个 Docker 容器 运行 一些文件服务器。如果我尝试将 100 Gb 文件传输到该文件服务器会怎样?如果 VM 磁盘本身只有 20 Gb 可用space,那么这个巨大的文件将保存在哪里?
稍后通过附加 yaml 文件的部分进行编辑:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pv-claim
labels:
app: deployment
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
# ---
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment
spec:
selector:
matchLabels:
app: app
replicas: 1
minReadySeconds: 10
strategy:
type: RollingUpdate # Recreate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
template:
metadata:
labels:
app: app
spec:
containers:
- name: container
image: 12345.dkr.ecr.us-west-2.amazonaws.com/container:v001
ports:
- containerPort: 80
imagePullPolicy: IfNotPresent
volumeMounts:
- name: volume-mount
mountPath: /data
volumes:
- name: volume-mount
persistentVolumeClaim:
claimName: pv-claim
卷的 "physical" 位置由供应商定义,由存储 class 定义。您的 PV 声明没有分配存储 class。这意味着使用默认存储 class,它可以是任何东西。我怀疑在 EKS 中默认存储 class 将是 EBS,但你应该仔细检查一下。
首先,查看实际分配给您的持久卷的存储 class:
kubectl get pv -o wide
然后查看分配给该存储的供应商class:
kubectl get storageclass
您很可能会看到类似 kubernetes.io/aws-ebs
的内容。然后 google 特定供应商的文档,以了解卷的存储位置 "physically"。
在您的情况下,数据存储在 NFS 共享上。连接到 NFS 服务器并浏览共享并找到安装到 pod 的共享。
为集群中的 运行 部署之一创建 NFS 持久卷后,容器能够存储文件数据并在彼此之间共享文件数据。文件数据在容器生命周期之间也是持久的。那太好了!但我想知道这个文件数据到底存储在哪里:它 "physically" 位于何处?它是保存到容器本身还是保存到 VM 磁盘的某个地方 - 用于 运行 Deployment 的 VM?
默认情况下,用于托管 Deployment 的 VM 只有 20 Gb 可用磁盘 space。假设我 运行 在节点(又名 VM)上的 pod 中 运行 宁一个 Docker 容器 运行 一些文件服务器。如果我尝试将 100 Gb 文件传输到该文件服务器会怎样?如果 VM 磁盘本身只有 20 Gb 可用space,那么这个巨大的文件将保存在哪里?
稍后通过附加 yaml 文件的部分进行编辑:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pv-claim
labels:
app: deployment
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
# ---
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment
spec:
selector:
matchLabels:
app: app
replicas: 1
minReadySeconds: 10
strategy:
type: RollingUpdate # Recreate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
template:
metadata:
labels:
app: app
spec:
containers:
- name: container
image: 12345.dkr.ecr.us-west-2.amazonaws.com/container:v001
ports:
- containerPort: 80
imagePullPolicy: IfNotPresent
volumeMounts:
- name: volume-mount
mountPath: /data
volumes:
- name: volume-mount
persistentVolumeClaim:
claimName: pv-claim
卷的 "physical" 位置由供应商定义,由存储 class 定义。您的 PV 声明没有分配存储 class。这意味着使用默认存储 class,它可以是任何东西。我怀疑在 EKS 中默认存储 class 将是 EBS,但你应该仔细检查一下。
首先,查看实际分配给您的持久卷的存储 class:
kubectl get pv -o wide
然后查看分配给该存储的供应商class:
kubectl get storageclass
您很可能会看到类似 kubernetes.io/aws-ebs
的内容。然后 google 特定供应商的文档,以了解卷的存储位置 "physically"。
在您的情况下,数据存储在 NFS 共享上。连接到 NFS 服务器并浏览共享并找到安装到 pod 的共享。