以下是我的总体目标:
我采取的方法是:
下面是配置的简化版本:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: some-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: do-block-storage
---
apiVersion: v1
kind: Service
metadata:
name: some-headless-service
labels:
app: my-app
spec:
ports:
- port: 27017
name: my-app-database
clusterIP: None
selector:
app: my-app
tier: database
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: my-app-database
labels:
app: my-app
tier: database
spec:
serviceName: some-headless-service
replicas: 1
selector:
matchLabels:
app: my-app
tier: database
template:
metadata:
labels:
app: my-app
tier: database
spec:
containers:
- name: my-app-database
image: mongo:latest
volumeMounts:
- name: some-volume
mountPath: /data
ports:
- containerPort: 27017
name: my-app-database
volumes:
- name: some-volume
persistentVolumeClaim:
claimName: some-pvc这正如期而至。我可以把复制品降到0:
kubectl scale —replicas=0 statefulset/my-app-database
把它转回来:
kubectl scale —replicas=1 statefulset/my-app-database
这些数据将持续存在。
但有一次,当我在上下缩放状态时,遇到了以下错误:
Volume is already exclusively attached to one node and can't be attached to another作为k8s的新手,我删除了PVC并“重新创建”了相同的一个:
kubectl delete pvc some-pvc
kubectl apply -f persistent-volume-claims/在默认情况下,statefulset与新PV分离,旧PV被删除,因为persistentVolumeReclaimPolicy被设置为Delete。
我将这个新的PV persistentVolumeReclaimPolicy设置为Retain,以确保数据不会被自动删除。我意识到:我不知道该如何收回光伏。为了通过“卷附件”错误,我删除了PVC,这将创建另一个新的PV与我的设置,现在我剩下我的数据在Released PV。
我的主要问题是:
claimRef添加到动态创建的PV中,然后使用该claimRef重新创建一个新的PVC,如这里所提到的:PVC能否绑定到特定的PV上?statefulset PVC真正使用旧的PV吗?发布于 2019-05-30 09:30:52
如果您想使用具有可伸缩性的StatefulSet,您的存储也应该支持这一点,有两种方法可以处理这个问题:
do-block-storage存储类支持ReadWriteMany,那么将所有pod的数据放在单个卷中。volumeClaimTemplate添加到您的StatefulSet.spec中,然后k8s将自动创建PVC类some-pvc-{statefulset_name}-{idx}:spec:
volumeClaimTemplates:
- metadata:
name: some-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: do-block-storage更新:
StatefulSet副本必须与mongodb复制一起部署,这样StatefulSet中的每个pod都将具有相同的数据存储。
因此,当容器运行mongod命令时,必须添加选项--replSet={name}。当所有文件都打开时,执行命令rs.initiate()告诉mongodb如何处理数据复制。当您向上或向下扩展StatefulSet时,执行命令rs.add()或rs.remove()来告诉mongodb成员已经更改。
https://stackoverflow.com/questions/56368453
复制相似问题