1

我创建了一个简单的本地存储卷。像这样的东西:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: vol1
spec:
  capacity:
    storage: 1Gi
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: local-storage
  local:
    path: /srv/volumes/vol1
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - my-node

我创建一个声明:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: myclaim
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage:1Gi

由于未知原因,他们没有得到匹配。我究竟做错了什么?

4

3 回答 3

2

关于本地存储,值得注意的是:

使用本地存储将您的应用程序绑定到该特定节点,使您的应用程序更难调度。如果该节点或本地卷遇到故障并变得不可访问,那么该 pod 也将变得不可访问。此外,许多云提供商没有为本地存储提供广泛的数据持久性保证,因此在某些情况下您可能会丢失所有数据。

这是针对 Kubernetes 1.10的。在 Kubernetes 1.14中,本地持久卷变成了 GA。

您发布了需要用户的答案。只是为了澄清你的意思的用户是一个像 pod、deployment、statefullset 等的消费者。所以只使用一个简单的 pod 定义将使你的 PV 成为绑定:

kind: Pod
apiVersion: v1
metadata:
  name: mypod
spec:
  containers:
    - name: myfrontend
      image: nginx
      volumeMounts:
      - mountPath: "/var/www/html"
        name: mypd
  volumes:
    - name: mypd
      persistentVolumeClaim:
        claimName: myclaim

现在,当您删除 pod 并尝试运行另一个 pod 时,就会出现问题。在这种情况下,如果您或其他人想要寻找解决方案,它已在此GitHub 问题中描述。

希望这能解决问题。

于 2019-04-26T15:54:01.623 回答
1

您应该volumeName在您的 PVC 中指定将其专门绑定到您刚刚创建的 PV:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: myclaim
spec:
  accessModes:
    - ReadWriteOnce
  volumeName: "vol1"
  resources:
    requests:
      storage:1Gi

此外,如果您在 PVC 中指定storageClassName,您的 PVC 也将绑定到与该规范匹配的 PV(尽管它不保证如果该存储类的 PV 超过 1 个,它将绑定到您的“vol1”PV )。

希望这可以帮助!

于 2019-04-20T03:43:03.660 回答
0

我想到了。我只需要一个用户。只要我有一个用户,一切都很完美。

于 2019-04-20T00:09:01.240 回答