web-dev-qa-db-ja.com

Kubernetesステートフルセットに永続ボリュームを追加する

私はkubernetesを初めて使用し、statefulsetにPVCを追加しようとしています。 PVとPVCは次のとおりです。

NAME            CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS    CLAIM                      STORAGECLASS   REASON    AGE
neo4j-backups   5Gi        RWO            Retain           Bound     default/backups-claim      manual                   1h

NAME            STATUS    VOLUME          CAPACITY   ACCESS MODES   STORAGECLASS   AGE
backups-claim   Bound     neo4j-backups   5Gi        RWO            manual         51m

基本的には、ステートフルセットのすべてのポッドに、バックアップファイルが格納されているボリュームの内容を表示させたいです。

使用されているステートフルセットは次の場所にあります here

Minikubeバージョン:minikube version: v0.25.2
Kubernetesバージョン:GitVersion:"v1.9.4"

6
dimzak

volumeClaimTemplatesStatefulSetを使用する場合、k8sは動的プロビジョニングを実行し、ポッドごとに1つのPVCと対応するPVを作成するため、それぞれのポッドが独自のストレージを取得します。

必要なのは、1つのPVと1つのPVCを作成し、それをステートフルセットのすべてのレプリカで使用することです。

以下は、Kubernetes 1.10での実行例です。ここで、/var/www/htmlは3つのポッドすべてで共有されます。変更するのは/directory/on/Hostをマシンのローカルディレクトリに追加します。また、私はこの例をminikube v0.26.0で実行しました

以下のコースはアイデアを説明するための例にすぎませんが、実際の例では、ポッドのプロセスは共有ストレージへのアクセスの同期化に注意する必要があります。


kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: example-pv
spec:
  capacity:
    storage: 100Gi
  # volumeMode field requires BlockVolume Alpha feature gate to be enabled.
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Delete
  storageClassName: local-storage
  local:
    path: /directory/on/Host
  nodeAffinity:
    required:
      nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
                - minikube 
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: example-local-claim
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: local-storage
---
apiVersion: "apps/v1beta1"
kind: StatefulSet
metadata:
  name: nginx
spec:
  serviceName: nginx
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx-container 
          image: "nginx:1.12.2"
          imagePullPolicy: "IfNotPresent"
          volumeMounts: 
            - name: localvolume
              mountPath: /var/www/html
      volumes:
        - name: localvolume
          persistentVolumeClaim:
            claimName: example-local-claim
7
bits