Kubernetes StatefulSet Manifest
External
Internal
Example
apiVersion: apps/v1 kind: StatefulSet metadata: name: postgresql labels: color: blue spec: replicas: 1 serviceName: postgresql-headless selector: matchLabels: # all labels declared here must exists and have same corresponding values in the template.metadata.labels section below app: postgresql role: master podManagementPolicy: OrderedReady updateStrategy: type: RollingUpdate template: metadata: name: postgresql labels: # this section may declare additional labels to .spec.selector.matchLabels app: postgresql role: master color: blue spec: containers: - ... initContainers: - ... dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: ... terminationGracePeriodSeconds: ... volumeClaimTemplates: # for details see Persistent Volume Claim Manifest - metadata: name: data spec: volumeMode: Filesystem # Optionally a storage class can be specified, otherwise the default storage class will be used # storageClassName: manual-local-storage accessModes: - ReadWriteOnce resources: requests: storage: 8Gi
.spec Elements
.spec.selector
.spec.selector.matchLabels
The labels declared in this section must exist also in the .spec.template.metadata.labels section, and have the same corresponding values, otherwise the StatefulSet deployment will fail with "spec.template.metadata.labels: Invalid value: [...]: 'selector' does not match template 'labels'". Note that the .spec.template.metadata.labels section may declare additional labels.
When the corresponding persistent volume claims are created, they will be automatically get all the labels declared in this section. For more details, see:
.spec.template
.spec.template.metadata
.spec.template.metadata.labels
volumeClaimTemplates
volumeClaimTemplates
is a list of persistent volume claim specifications, defining persistent volume claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one name-matching volumeMount in one container in the template. The name of the claim is specified as .metadata.name.A claim in this list takes precedence over any volumes in the template, with the same name.
For more details on StatefulSet persistent volume claims see:
For more details on persistent claim manifests, see: