Box

Allgemein

Profil

Aktionen

Deployment vs StatefulSet » Historie » Revision 1

Revision 1/3 | Weiter »
Peter Pfläging, 18.03.2022 16:17


Deployment-vs-StatefulSet

Taking PostgreSQL as example:

StatefulSet

kind: StatefulSet
apiVersion: apps/v1
metadata:
  name: postgresql
spec:
  replicas: 1
  serviceName: postgresql
  selector:
    matchLabels:
      app: postgresql
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: postgresql
    spec:
      containers:
        - name: postgresql
          image: docker.io/centos/postgresql-12-centos8:latest
          envFrom:
            - secretRef:
                name: database
          ports:
            - name: postgresql
              containerPort: 5432
              protocol: TCP
          resources:
            requests:
              cpu: "200m"
              memory: "128Mi"
            limits:
              cpu: "400m"
              memory: "256Mi"
          readinessProbe:
            tcpSocket:
              port: 5432
            timeoutSeconds: 1
            periodSeconds: 10
            successThreshold: 1
            failureThreshold: 3
          livenessProbe:
            tcpSocket:
              port: 5432
            timeoutSeconds: 1
            periodSeconds: 10
            successThreshold: 1
            failureThreshold: 3
          volumeMounts:
            - name: postgresql
              mountPath: /var/lib/pgsql/data
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          imagePullPolicy: Always
      restartPolicy: Always
      terminationGracePeriodSeconds: 10
      dnsPolicy: ClusterFirst
      securityContext: {}
      schedulerName: default-scheduler
  volumeClaimTemplates:
    - metadata:
        name: postgresql
        labels:
          app: postgresql
      spec:
        accessModes:
          - ReadWriteOnce
        storageClassName: changed-by-upper-kustomize
        volumeMode: Filesystem
        resources:
          requests:
            storage: 500Mi

Deployment

Here we have a split. We have to explicit declare the PVC:

---
kind: Deployment
apiVersion: apps/v1
metadata:
  name: postgresql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: postgresql
  template:
    metadata:
      labels:
        app: postgresql
    spec:
      containers:
        - name: postgresql
          image: docker.io/centos/postgresql-12-centos8:latest
          envFrom:
            - secretRef:
                name: database
          resources:
            requests:
              cpu: "200m"
              memory: "128Mi"
            limits:
              cpu: "400m"
              memory: "256Mi"
          readinessProbe:
            tcpSocket:
              port: 5432
            timeoutSeconds: 1
            periodSeconds: 10
            successThreshold: 1
            failureThreshold: 3
          livenessProbe:
            tcpSocket:
              port: 5432
            timeoutSeconds: 1
            periodSeconds: 10
            successThreshold: 1
            failureThreshold: 3
          volumeMounts:
            - name: postgresql
              mountPath: /var/lib/pgsql/data
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          imagePullPolicy: Always
      restartPolicy: Always
      terminationGracePeriodSeconds: 10
      dnsPolicy: ClusterFirst
      securityContext: {}
      schedulerName: default-scheduler
      volumes:
      - name: postgresql
        persistentVolumeClaim:
          claimName: postgresql
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 25%
      maxSurge: 25%
  revisionHistoryLimit: 10
  progressDeadlineSeconds: 600
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: postgresql
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi
  storageClassName: changed-by-upper-kustomize
  volumeMode: Filesystem

Von Peter Pfläging vor etwa 3 Jahren aktualisiert · 3 Revisionen