この質問は、Kubernetes 内の PersistentVolume および PersistentVolumeClaim 構成の動作に関するものです。ドキュメントを読みましたが、いくつかの疑問が残りました。
Azure Kubernetes Service を使用してクラスターをホストしており、多くのポッドに共有永続ストレージ バックエンドを提供したいと考えています。これを実現するために PersistentVolumes を使用する予定です。
このシナリオでは、AzureFile ストレージ リソースに基づく PersistentVolume を発行します。Jenkins をクラスターにデプロイし、jenkins_home ディレクトリを PersistentVolume に保存して、インスタンスがポッドとノードの障害に耐えられるようにします。複数のマスター 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 マスターを Kubernetes クラスターにデプロイしており、それぞれが各マスター インスタンスに固有の共有に新しいフォルダーを正しく割り当てています。
今、私の質問のために
PersistentVolume は 100Gig のストレージで構成されています。これは、Kubernetes がこのボリュームで最大 100Gig の合計ストレージしか許可しないということですか?
PersistentVolumeClaim が PersistentVolume にバインドされている場合、PersistentVolumeClaim が 10Gig のストレージ用に構成されていても、PersistentVolumeClaim は合計で 100Gig のストレージを使用できることを示しているように見えます。
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 を使用しているすべての展開は機能しなくなりますか?