1

这个问题是关于 Kubernetes 中 PersistentVolume 和 PersistentVolumeClaim 配置的行为。我们已经阅读了文档,并留下了一些挥之不去的问题。

我们正在使用 Azure Kubernetes 服务来托管我们的集群,并且我们希望为我们的许多 Pod 提供一个共享的持久存储后端。我们正计划使用 PersistentVolumes 来实现这一点。

在这种情况下,我们要发出一个由 AzureFile 存储资源支持的 PersistentVolume。我们将 Jenkins 部署到我们的集群并将 jenkins_home 目录存储在 PersistentVolume 中,以便我们的实例能够在 pod 和节点故障中幸免于难。我们将运行多个 Master Jenkins 节点,所有节点都配置了类似的部署 yaml。

我们已经提前创建了所有需要的存储帐户和适用的共享,以及所需的秘密。

首先,我们发布了以下 PersistentVolume 配置;

apiVersion: v1
kind: PersistentVolume
metadata:
  name: jenkins-azure-file-share
  labels:
    usage: jenkins-azure-file-share
spec:
  capacity:
    storage: 100Gi
  accessModes:
   - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  azureFile:
    secretName: azure-file-secret
    shareName: jenkins
    readOnly: false
  mountOptions:
    - dir_mode=0777
    - file_mode=0777
    - uid=1000
    - gid=1000

之后,我们发布了以下 PersistentVolumeClaim 配置;

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: jenkins-file-claim
  annotations:
    volume.beta.kubernetes.io/storage-class: ""
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi
  volumeName: "jenkins-azure-file-share"

接下来,我们以下列方式在我们的部署中使用此声明;

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: jenkins-instance-name
spec:
  replicas: 1
  template:
    metadata:
      labels:
        role: jenkins
        app: jenkins-instance-name
    spec:
      containers:
      - name: jenkins-instance-name
        image: ContainerRegistry.azurecr.io/linux/jenkins_master:latest
        ports:
        - name: jenkins-port
          containerPort: 8080
        volumeMounts:
        - name: jenkins-home
          mountPath: /var/jenkins_home
          subPath: "jenkins-instance-name"
      volumes:
      - name: jenkins-home
        persistentVolumeClaim:
          claimName: "jenkins-file-claim"
      imagePullSecrets:
      - name: ImagePullSecret

这一切都按预期工作。我们已经将多个 Jenkins Master 部署到我们的 Kubernetes 集群中,并且每个都在特定于每个主实例的共享上正确分配了一个新文件夹。 在此处输入图像描述

现在我的问题


PersistentVolume 配置了 100Gig 的存储。这是否意味着 Kubernetes 在这个卷中最多只能允许 100Gig 的总存储?


当 PersistentVolumeClaim 绑定到 PersistentVolume 时,PersistentVolumeClaim 似乎显示它有 100Gig 的可用总存储空间,即使 PersistentVolumeClaim 配置为 10Gig 的存储空间;

C:\ashley\scm\kubernetes>kubectl get pv
NAME                        CAPACITY   ACCESS MODES   RECLAIM POLICY  STATUS    CLAIM     STORAGECLASS   REASON    AGE
jenkins-azure-file-share    100Gi     RWX            Retain           Bound     default/jenkins-file-claim                          2d

C:\ashley\scm\kubernetes>kubectl get pvc
NAME                       STATUS    VOLUME                      CAPACITY   ACCESS MODES   STORAGECLASS   AGE
jenkins-homes-file-claim   Bound     jenkins-azure-file-share    100Gi     RWX                           2d

这只是 get pvc 命令的错误输出,还是我误解了 get pvc 命令的输出?


以这种方式共享 PersistentVolumeClaim 时;

  1. 每个部署是否只能从 PersistentVolume 的 100Gig 容量访问配置的最大 10Gig 存储?
  2. 或者,每个部署是否可以访问为 PersistentVolume 配置的总 100G 存储中自己的 10G 片?

使用此配置,当单个 PersistentVolumeClaim 容量得到充分利用时会发生什么?所有使用这个 PersistentVolumeClaim 的部署都停止工作了吗?

4

1 回答 1

1

所以对于 pvc 来说,这个配置肯定只有 10Gig 可用。对于 pv,我认为它是相同的,但在这种情况下,我不确定但应该是,因为一致性。如果达到这些限制中的任何一个,它就会停止工作,所以如果你有 11 个 Jenkins 正在运行,它甚至会失败,尽管你没有达到单个 pvc 的限制。

于 2018-05-25T15:54:39.373 回答