クベルネッツのStatefulSet


k 8 sのstatefulsetは多くの人が使ったことがあると信じていますが、1.5以降に導入されたもので、1.5以前はpetsetを使っていましたが、petsetについては以前の古いバージョンのpaas開発でpetsetを使っていましたが、多くの不足点は、後でお話しします.petsetもstatefulsetも、コンテナを解決するためのステータスサービスです.statefulsetを使ったときの小さな疑問と収穫についてお話しします.
statefulset volume pvc pvの関係を簡単に述べる
多くの人はvolume、pvc(persistentVolumeClaim)、pv(persistentVolume)、statefulsetを知っていますが、彼らの関係については理解すべきですが、特に深く理解していないかもしれません.だから私は簡単に彼らの関係を話したいです.
volume
volumeはpodでファイルからコンテナに掛けるために使用され、hostpath、emptydir、ceph-rbdなど、さまざまなvolumeタイプの掛けることをサポートしています.https://v1-7.docs.kubernetes.io/docs/concepts/storage/volumes/)、volumeはマウントされたブリッジを格納していると言えるでしょう.volume関連のpersistentVolumeClaimでpvcを関連付け、pvcで関連付けられたpvの格納を行うことができます.
pv(persistentVolume)
pvは、真のストレージサーバに真のストレージリソースを申請するためのobjectであり、このストレージリソースを誰が使用するかは、次に述べるpvcの役割である.
pvc(persistentVolumeClaim)
pvcはpvとpodを関連付ける橋で、pvの話を作成して、どのようにそれを使うか、pvcを関連付ける必要があります.2つの方法:1.あなたの容器のvolumeMountで対応するpvcの名前を指定します.2.podにおけるvolume関連におけるpersistentVolumeClaim関連pvc
statefulset
statefulsetは、対応するストレージの真の消費者であり、pvを関連付ける方法はpvc、あなたのコンテナのvolumeMountで対応するpvcの名前を指定するか、podのvolume関連のpersistentVolumeClaimでpvcを関連付けることができます.
実際の使用
方法1:volumeで作成しない:
pv
piVersion: v1
kind: PersistentVolume
metadata:
  name: datadir-aaaaa-0
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 512Mi
  persistentVolumeReclaimPolicy: Retain
  rbd:
    fsType: ext4
    image: xxxxxxx
    keyring: /etc/ceph/ceph.client.admin.keyring
    monitors:
    - x.x.x.x:6789
    - x.x.x.x:6789
    - x.x.x.x:6789
    pool: admin-pool
    user: admin

statefulset
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  labels:
    app: demo
  name: aaaaaaaa
spec:
  replicas: 1
  selector:
    matchLabels:
      app: demo
  serviceName: aaaaaaaa
  template:
    metadata:
      labels:
        app: demo 
    spec:
      containers:
        image: etcd:test
        imagePullPolicy: IfNotPresent
        name: aaaaaaaa1
        resources:
          limits:
            memory: 256Mi
          requests:
            memory: 256Mi
        terminationMessagePath: /dev/termination-log
        volumeMounts:
        - mountPath: /etcd/data
          name: datadir
        - mountPath: /etc
          name: aaaaaaaa-yaowei
        resources:
          limits:
            cpu: 100m
            memory: 512Mi
          requests:
            cpu: 100m
            memory: 512Mi
      restartPolicy: Always
  volumeClaimTemplates:
  - metadata:
      creationTimestamp: null
      name: datadir   //   volumeMounts:   mount name  
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 512Mi


volume方式の使用:
pv
piVersion: v1
kind: PersistentVolume
metadata:
  name: datadir-aaaaa-0
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 512Mi
  persistentVolumeReclaimPolicy: Retain
  rbd:
    fsType: ext4
    image: xxxxxxx
    keyring: /etc/ceph/ceph.client.admin.keyring
    monitors:
    - x.x.x.x:6789
    - x.x.x.x:6789
    - x.x.x.x:6789
    pool: admin-pool
    user: admin

pvc
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: datadir-aaaaa-0
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 512Mi

statefulset
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  labels:
    app: demo
  name: aaaaaaaa
spec:
  replicas: 1
  selector:
    matchLabels:
      app: demo
  serviceName: aaaaaaaa
  template:
    metadata:
      labels:
        app: demo 
    spec:
      containers:
        image: etcd:test
        imagePullPolicy: IfNotPresent
        name: aaaaaaaa1
        resources:
          limits:
            memory: 256Mi
          requests:
            memory: 256Mi
        terminationMessagePath: /dev/termination-log
        volumeMounts:
        - mountPath: /etcd/data
          name: datadir
        - mountPath: /etc
          name: aaaaaaaa-yaowei
        resources:
          limits:
            cpu: 100m
            memory: 512Mi
          requests:
            cpu: 100m
            memory: 512Mi
      restartPolicy: Always
      volumes:
        - name: datadir
        persistentVolumeClaim:
            claimName: datadir-aaaaa-0

説明
なぜ方式1で手動でpvcを作成しないのですか?statefulsetのcontrollerはstatefulsetを作成する際、彼のspecにvolumeClaimTemplatesが存在すると自動的に対応するpvcが作成されるので、手動で作成する必要はありません(petsetソースコードでも同様の処理です)、方式2ではvolume形式で参照するpvcですが、statefulsetのcontrollerはstatefulsetを作成するときに対応するpvcを作成しません.対応するpvcが存在しないことが判明するとstatefulsetの作成に失敗するので、手動で対応するpvcを作成する必要があります.
一般的な使用規則
一般的にstatefulsetを使用する場合、pvc pv volumeなどに使用されます.これまでの方式は手動またはapiを呼び出して対応するpvを作成するなどしていましたが、pvとpvcのライフサイクルはシステム管理者が手動で管理し、多くの時間を浪費したり、エラーが発生したりすることがよくありました.それは基本的にpvcであり、pvの作成はすべてk 8 s自身で完了し(クラスタの中で事前に対応するstoragclassを作成しなければならないことを前提としている)、ユーザーは対応するpvcを削除すれば、k 8 sは動的に対応するpvを削除することができ、pvの申請の記憶サイズの浪費をもたらすことはなく、1つのpvcが1つのpv、pvcがどれだけの記憶資源を申請すれば、どれだけの記憶資源のpvを作成することができ、このような特別な方法で、動的に作成されたpvのデフォルトはrecycleモードです.