[英]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.