クベルネッツの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
statefulset
volume方式の使用:
pv
pvc
statefulset
説明
なぜ方式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モードです.
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モードです.