4

我在 persistance.yaml 文件中为弹性搜索创建了 PersistentVolume、PersistentVolumeClaim 和 StorageClass。

PersistentVolume、StorageClass、PersistentVolumeClaim 创建成功。绑定也成功了。

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

pv-claim_bound_successful

我还在下面为 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 文件。弹性搜索应用程序成功运行,没有任何问题,我也可以访问弹性搜索 URL。我已经运行测试并在 elaticsearch 中填充了数据,我也可以查看数据。

在 Kubernetes 中删除集群后,我尝试连接具有持久性数据的同一个磁盘。一切都很完美。但我无法获取已经存储的数据。我的数据丢失了,我猜我的磁盘是空的。

4

1 回答 1

1

Kubernetes 具有reclaimPolicy持久卷,在大多数情况下默认为delete. 你可以改变它:

kubectl patch pv -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'

或者简单地添加persistentVolumeReclaimPolicy: RetainpersistentVolume.yaml

编辑:如下面的评论,这个问题可能与数据丢失无关。在下面粘贴我的评论:

“我不认为你的数据丢失了。Elasticsearch 只需要索引现有数据,因为它不只是抓取现有存储的数据。你需要将数据重新摄取到 elasticsearch 或定期保存快照或使用主、数据、客户端架构。”

于 2019-09-11T08:19:54.027 回答