【发布时间】:2021-01-26 19:50:14
【问题描述】:
我正在尝试使用 kubernetes 设置容器化应用程序,但遇到了问题。当我更改应用程序的映像并重新部署时,持久卷似乎被清除了 - 例如,如果我使用 v1.0.0 进行部署,然后使用 v1.0.1 进行新部署。我尝试使用 Deployment 和 StatefuSet 设置应用程序,但结果相同,请检查以下代码。
我对 Kubernetes 还很陌生,如果能提供任何帮助,我们将不胜感激。
选项 1(StatefulSet):
kind: PersistentVolume
apiVersion: v1
metadata:
name: test-admin-db-pv
spec:
storageClassName: ''
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /var/lib/postgresql-test-admin-db/
---
apiVersion: v1
kind: Service
metadata:
name: admin-node
labels:
app: admin-node
annotations:
beta.cloud.google.com/backend-config: '{"ports": {"80":"backendConfig-test"}}'
spec:
type: NodePort
selector:
app: admin-node
ports:
- name: test-web-port
port: 80
targetPort: 4000
protocol: TCP
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: admin-node
spec:
replicas: 1
serviceName: admin-node
selector:
matchLabels:
app: admin-node
volumeClaimTemplates:
- metadata:
name: test-admin-db-claim
spec:
storageClassName: ''
accessModes:
- ReadWriteOnce
volumeName: test-admin-db-pv
resources:
requests:
storage: 1Gi
template:
metadata:
labels:
app: admin-node
spec:
terminationGracePeriodSeconds: 10
containers:
- image: 'postgres:10.4'
name: admin-db
env:
- name: POSTGRES_DB
value: db
- name: POSTGRES_USER
value: dbuser
- name: POSTGRES_PASSWORD
value: dbpassword
ports:
- containerPort: 5432
name: admin-db
volumeMounts:
- name: test-admin-db-claim
mountPath: /var/lib/postgresql
- image: 'eu.gcr.io/my-project/my-image:v1.0.0'
name: admin-node
ports:
- containerPort: 4000
name: admin-node
livenessProbe:
httpGet:
path: /api/health
port: 4000
scheme: HTTP
initialDelaySeconds: 30
timeoutSeconds: 10
readinessProbe:
httpGet:
path: /api/health
port: 4000
scheme: HTTP
initialDelaySeconds: 30
timeoutSeconds: 10
env:
- name: NODE_ENV
value: development
- name: LOG_LEVEL
value: info
- name: NAMESPACE
value: test
- name: DB_DB
value: db
- name: DB_HOST
value: 0.0.0.0
- name: DB_PASS
value: dbpassword
- name: DB_USER
value: dbuser
- name: DB_PORT
value: '5432'
restartPolicy: Always
选项 2(部署):
kind: PersistentVolume
apiVersion: v1
metadata:
name: test-admin-db-pv
spec:
storageClassName: ''
capacity:
storage: 1Gi
claimRef:
name: test-admin-db-claim
accessModes:
- ReadWriteOnce
hostPath:
path: /var/lib/postgresql-test-admin-db/
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-admin-db-claim
spec:
storageClassName: ''
accessModes:
- ReadWriteOnce
volumeName: test-admin-db-pv
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:
name: admin-node
labels:
app: admin-node
annotations:
beta.cloud.google.com/backend-config: '{"ports": {"80":"backendConfig-test"}}'
spec:
type: NodePort
selector:
app: admin-node
ports:
- name: test-web-port
port: 80
targetPort: 4000
protocol: TCP
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: admin-node
spec:
replicas: 1
selector:
matchLabels:
app: admin-node
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 0
maxSurge: 1
template:
metadata:
labels:
app: admin-node
spec:
containers:
- image: 'postgres:10.4'
name: admin-db
env:
- name: POSTGRES_DB
value: db
- name: POSTGRES_USER
value: dbuser
- name: POSTGRES_PASSWORD
value: dbpassword
ports:
- containerPort: 5432
name: admin-db
volumeMounts:
- name: test-admin-db-persistent-storage
mountPath: /var/lib/postgresql
- image: 'eu.gcr.io/my-project/my-image:v1.0.0'
name: admin-node
ports:
- containerPort: 4000
name: admin-node
livenessProbe:
httpGet:
path: /api/v1/health
port: 4000
scheme: HTTP
initialDelaySeconds: 30
timeoutSeconds: 10
readinessProbe:
httpGet:
path: /api/v1/health
port: 4000
scheme: HTTP
initialDelaySeconds: 30
timeoutSeconds: 10
env:
- name: NODE_ENV
value: development
- name: LOG_LEVEL
value: info
- name: NAMESPACE
value: test
- name: DB_DB
value: db
- name: DB_HOST
value: 0.0.0.0
- name: DB_PASS
value: dbpassword
- name: DB_USER
value: dbuser
- name: DB_PORT
value: '5432'
volumes:
- name: test-admin-db-persistent-storage
persistentVolumeClaim:
claimName: test-admin-db-claim
restartPolicy: Always
编辑 既然提到了我正在共享持久卷信息(回收策略已设置为保留)
Name: test-admin-db-pv
Labels: <none>
Annotations: pv.kubernetes.io/bound-by-controller: yes
Finalizers: [kubernetes.io/pv-protection]
StorageClass:
Status: Bound
Claim: wipetestdep/test-admin-db-claim-admin-node-0
Reclaim Policy: Retain
Access Modes: RWO
VolumeMode: Filesystem
Capacity: 10Gi
Node Affinity: <none>
Message:
Source:
Type: HostPath (bare host directory volume)
Path: /var/lib/postgresql-wipetestdep-admin-db/
HostPathType:
Events: <none>
【问题讨论】:
标签: kubernetes