首页 文章

Kubernetes:PersistentVolume和PersistentVolumeClaim - 分享声明

提问于
浏览
0

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

我们使用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

这一切都按预期工作 . 我们已经为我们的Kubernetes集群部署了多个Jenkins Masters,每个人都在特定于每个主实例的共享上正确分配一个新文件夹 .
enter image description here

Now for my questions


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时;

  • 每个部署是否只能从PersistentVolume的100Gig容量访问配置的最大10Gig存储空间?

  • 或者,每个部署是否都可以访问为PersistentVolume配置的总共100Gig存储的10Gig片段?


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

1 回答

  • 0

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

相关问题