Kubernetes - Stateful set ins't persisting data after cluster reboot

Viewed 25

I have a Kubernetes cluster and I installed Postgresql and TeamCity-Server, but, as my enviorment is a sandbox, I always shutdown after comercial time and start on the next day. Said that, my data from Postgresql and TeamCity-Server always get lost and I think I'm missing some here, here is all my YAMLs, from both services:

Postgresql:

ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: postgresql
  name: postgresql-config
  labels:
    app: postgresql
data:
  POSTGRES_DB: postgresql
  POSTGRES_USER: x
  POSTGRES_PASSWORD: x

Storage

kind: PersistentVolume
apiVersion: v1
metadata:
  namespace: postgresql
  name: postgresql-pv
  labels:
    type: local
    app: postgresql
spec:
  storageClassName: manual
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  hostPath:
    path: "/var/lib/postgresql/data"
    type: "DirectoryOrCreate"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  namespace: postgresql
  name: postgresql-pvc
  labels:
    app: postgresql
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi

Service

apiVersion: v1
kind: Service
metadata:
  namespace: postgresql
  name: postgresql
spec:
  type: NodePort
  selector:
    app: postgresql
  ports:
    - port: 5432
      targetPort: 5432
      nodePort: 30582

Statefulset

apiVersion: apps/v1
kind: StatefulSet
metadata:
  namespace: postgresql
  name: postgresql
spec:
  serviceName: postgresql
  selector:
    matchLabels:
      app: postgresql
  replicas: 1
  template:
    metadata:
      labels:
        app: postgresql
    spec:
      containers:
        - name: postgresql
          image: postgres:latest
          volumeMounts:
            - name: postgresql-pv
              mountPath: /postgresql/data
          envFrom:
            - configMapRef:
                name: postgresql-config
      volumes:
        - name: postgresql-pv
          persistentVolumeClaim:
            claimName: postgresql-pvc

TeamCity-Server

ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: teamcity-server-config
  labels:
    app: teamcity-server
type: backup-restorer
data:
  database.properties: |
    connectionProperties.user=x
    connectionProperties.password=x
    connectionUrl=jdbc:x

Storage

kind: PersistentVolume
apiVersion: v1
metadata:
  namespace: teamcity-server
  name: teamcity-server-datadir-pv
  labels:
    type: local
    app: teamcity-server
spec:
  storageClassName: manual
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteMany
  hostPath:
    path: "/var/lib/teamcity_server/data"
    type: "DirectoryOrCreate"
---
kind: PersistentVolume
apiVersion: v1
metadata:
  namespace: teamcity-server
  name: teamcity-server-log-pv
  labels:
    type: local
    app: teamcity-server
spec:
  storageClassName: manual
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteMany
  hostPath:
    path: "/var/lib/teamcity_server/log"
    type: "DirectoryOrCreate"
---
kind: PersistentVolume
apiVersion: v1
metadata:
  namespace: teamcity-server
  name: teamcity-server-backup-pv
  labels:
    type: local
    app: teamcity-server
spec:
  storageClassName: manual
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteMany
  hostPath:
    path: "/var/lib/teamcity_server/backup"
    type: "DirectoryOrCreate"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  namespace: teamcity-server
  name: teamcity-server-datadir-pvc
  labels:
    app: teamcity-server
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 2Gi
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  namespace: teamcity-server
  name: teamcity-server-log-pvc
  labels:
    app: teamcity-server
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 2Gi
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  namespace: teamcity-server
  name: teamcity-server-backup-pvc
  labels:
    app: teamcity-server
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 2Gi

Service

apiVersion: v1
kind: Service
metadata:
  namespace: teamcity-server
  name: teamcity-server
  labels:
    app: teamcity-server
spec:
  type: NodePort
  ports:
   - port: 8111
     targetPort: 8111
     protocol: TCP
  selector:
   app: teamcity-server

Statefulset

apiVersion: apps/v1
kind: StatefulSet
metadata:
  namespace: teamcity-server
  name: teamcity-server
spec:
  serviceName: teamcity-server
  selector:
    matchLabels:
      app: teamcity-server
  replicas: 1
  template:
    metadata:
      labels:
        app: teamcity-server
        teamcity: server
    spec:
      containers:
        - name: teamcity-server
          image: jetbrains/teamcity-server
          imagePullPolicy: Always
          volumeMounts:
            - name: teamcity-server-data-pv
              mountPath: /teamcity_server/data
            - name: teamcity-server-log-pv
              mountPath: /teamcity-server/logs
            - name: teamcity-server-backup-pv
              mountPath: /teamcity-server/backup
            - name: teamcity-server-database-properties-pv
              mountPath: /teamcity_server/data/config/database.properties
              subPath: database.properties
          ports:
            - containerPort: 8111
      volumes:
        - name: teamcity-server-data-pv
          persistentVolumeClaim:
            claimName: teamcity-server-data-pvc
        - name: teamcity-server-log-pv
          persistentVolumeClaim:
            claimName: teamcity-server-log-pvc
        - name: teamcity-server-backup-pv
          persistentVolumeClaim:
            claimName: teamcity-server-backup-pvc
        - name: teamcity-server-database-properties-pv
          configMap:
            name: teamcity-server-config
            items:
              - key: database.properties
                path: database.properties
0 Answers
Related