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 的共享。