我在 perisistance.yaml 文件中为 elasticsearch 创建了 PersistentVolume、PersistentVolumeClaim 和 StorageClass。
PersistentVolume、StorageClass、PersistentVolumeClaim 创建成功。绑定(bind)也成功了。
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: ssd
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-ssd
reclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-persistent-volume
spec:
storageClassName: ssd
capacity:
storage: 30G
accessModes:
- ReadWriteOnce
gcePersistentDisk:
pdName: gke-webtech-instance-2-pvc-f5964ddc-d446-11e9-9d1c-42010a800076
fsType: ext4
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pv-claim
spec:
storageClassName: ssd
volumeName: pv-persistent-volume
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30G
我还在下面附上了 elasticsearch 的 deployment.yaml。
apiVersion: v1
kind: Service
metadata:
name: elasticsearch
labels:
name: elasticsearch
spec:
type: NodePort
ports:
- name: elasticsearch-port1
port: 9200
protocol: TCP
targetPort: 9200
- name: elasticsearch-port2
port: 9300
protocol: TCP
targetPort: 9300
selector:
app: elasticsearch
tier: elasticsearch
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: elasticsearch-application
labels:
app: elasticsearch
spec:
strategy:
type: Recreate
template:
metadata:
labels:
app: elasticsearch
tier: elasticsearch
spec:
hostname: elasticsearch
containers:
- image: gcr.io/xxxxxxx/elasticsearch:7.3.1
name: elasticsearch
ports:
- containerPort: 9200
name: elasticport1
- containerPort: 9300
name: elasticport2
env:
- name: discovery.type
value: single-node
volumeMounts:
- mountPath: "/usr/share/elasticsearch/html"
name: pv-volume
volumes:
- name: pv-volume
persistentVolumeClaim:
claimName: pv-claim
我也创建了 deployment.yaml 文件。 Elastic 搜索应用程序成功运行,没有任何问题,我也能够访问 elasticsearch URL。我已经运行测试并在 elaticsearch 中填充了数据,我也能够查看数据。
删除 Kubernetes 中的集群后,我尝试连接具有持久性数据的同一磁盘。一切都很完美。但我无法获取已存储的数据。我的数据丢失了,我猜我的磁盘是空的。
最佳答案
Kubernetes 有用于持久卷的reclaimPolicy
,在大多数情况下默认为delete
。您可以通过以下方式更改它:
kubectl patch pv -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
或者简单地在 persistentVolume.yaml 中添加 persistentVolumeReclaimPolicy: Retain
已编辑:如以下评论所述,此问题可能与数据丢失无关。在下面粘贴我的评论:
“我不认为你的数据丢失了。Elasticsearch 只需要索引现有数据,因为它不只是抓取现有存储的数据。你需要将数据重新摄取到 elasticsearch 或定期保存快照或使用 master、data、client架构。”
关于使用新的 kubernetes 集群使用现有磁盘创建时,Elasticsearch 数据被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57883782/