这个问题是关于Kubernetes中PersistentVolume和PersistentVolumeClaim配置的行为。我们已经阅读了documentation,并留下了一些挥之不去的问题。
我们正在使用Azure Kubernetes服务托管我们的群集,并且我们想为我们的许多Pod提供一个共享的持久性存储后端。我们正在计划使用PersistentVolumes完成此任务。
在这种情况下,我们要发布由AzureFile存储资源支持的PersistentVolume。我们将Jenkins部署到集群中,并将jenkins_home目录存储在PersistentVolume中,以便我们的实例可以承受pod和节点故障。我们将运行多个Master Jenkins节点,所有这些节点都配置有类似的部署Yaml。
我们已经提前创建了所有所需的存储帐户和适用的共享以及所需的 secret 。
首先,我们发布了以下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 Masters部署到了我们的Kubernetes集群,并且每个人都在特定于每个Master实例的共享上正确分配了一个新文件夹。
现在我的问题
PersistentVolume配置有100Gig的存储。这是否意味着Kubernetes在此卷中最多只能允许100Gig的总存储量?
当PersistentVolumeClaim绑定(bind)到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时;
使用此配置,当单个PersistentVolumeClaim容量被完全利用时会发生什么?使用此单个PersistentVolumeClaim的所有部署都停止工作吗?
最佳答案
因此对于pvc,肯定是这种配置只有10Gig可用的情况。对于PV,我认为它是相同的,但是在这种情况下,由于一致性我不确定,但应该确定。如果达到任何此限制,它将停止工作,因此,如果您运行了11个Jenkins,即使您未达到单个PVC的限制,它甚至会失败。