簡體   English   中英

Kubernetes - 有狀態集在集群重啟后不會持久化數據

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

我有一個 Kubernetes 集群,我安裝了 Postgresql 和 TeamCity-Server,但是,由於我的環境是一個沙箱,我總是在商業時間后關閉並在第二天開始。 也就是說,我來自 Postgresql 和 TeamCity-Server 的數據總是丟失,我想我在這里遺漏了一些,這是我所有的 YAML,來自這兩種服務:

后備數據庫:

配置圖

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

貯存

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

服務

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

狀態集

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服務器

配置圖

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

貯存

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

服務

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

狀態集

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

正如@Daniel Mann 所建議的那樣,將回收策略設置為retain

僅對不請求綁定任何特定類的 PVC 使用默認 StorageClass。

每個 StorageClass 都有一個provisioner ,用於確定使用哪個卷插件來供應PV。 可以通過兩種方式提供 PV:靜態或動態。 如果需要在卷中預填充數據,則選擇靜態配置。 然而,如果您需要按需創建卷,則可以進行動態配置。

根據工作負載要求,您可以配置存儲。 例如,一個類可能是為經常訪問的文件或僅偶爾訪問的文件設計的。 可以為經常訪問的文件配置高級固態驅動器 (SSD),而可以為偶爾訪問的文件配置成本較低但速度較慢的硬盤驅動器 (HDD)。

存儲類具有描述屬於存儲類的卷的參數 根據提供者的不同,可以接受不同的參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM