Kubernetes:PersistentVolume 和 PersistentVolumeClaim - 共享声明
Kubernetes: PersistentVolume And PersistentVolumeClaim - Sharing Claims
这个问题是关于 Kubernetes 中 PersistentVolume 和 PersistentVolumeClaim 配置的行为。我们已经通读了 documentation 并留下了一些挥之不去的问题。
我们正在使用 Azure Kubernetes 服务来托管我们的集群,我们希望为我们的许多 Pods 提供一个共享的持久存储后端。我们计划使用 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 集群,并且每个都正确地在特定于每个 master 实例的共享上分配一个新文件夹。
现在回答我的问题
PersistentVolume 配置了 100G 的存储空间。这是否意味着 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 的所有 Deployment 是否都停止工作?
所以对于 pvc 来说,这个配置肯定只有 10Gig 可用。对于 pv 我假设它是相同的但在这种情况下我不确定但应该是,因为一致性。如果达到任何限制,它就会停止工作,所以如果你有 11 个 Jenkins 运行,它甚至会失败,尽管你没有达到单个 pvc 的限制。
这个问题是关于 Kubernetes 中 PersistentVolume 和 PersistentVolumeClaim 配置的行为。我们已经通读了 documentation 并留下了一些挥之不去的问题。
我们正在使用 Azure Kubernetes 服务来托管我们的集群,我们希望为我们的许多 Pods 提供一个共享的持久存储后端。我们计划使用 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 集群,并且每个都正确地在特定于每个 master 实例的共享上分配一个新文件夹。
现在回答我的问题
PersistentVolume 配置了 100G 的存储空间。这是否意味着 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 的所有 Deployment 是否都停止工作?
所以对于 pvc 来说,这个配置肯定只有 10Gig 可用。对于 pv 我假设它是相同的但在这种情况下我不确定但应该是,因为一致性。如果达到任何限制,它就会停止工作,所以如果你有 11 个 Jenkins 运行,它甚至会失败,尽管你没有达到单个 pvc 的限制。