3

我正在努力在 Kubernetes 集群上对官方事件存储映像进行简单的单副本部署。我正在使用持久卷进行数据存储。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: my-eventstore
spec:
  strategy:
    type: Recreate
  replicas: 1
  template:
    metadata:
      labels:
        app: my-eventstore
    spec:
      imagePullSecrets:
        - name: runner-gitlab-account
      containers:
        - name: eventstore
          image: eventstore/eventstore
      env:
        - name: EVENTSTORE_DB
          value: "/usr/data/eventstore/data"
        - name: EVENTSTORE_LOG
          value: "/usr/data/eventstore/log"
      ports:
        - containerPort: 2113
        - containerPort: 2114
        - containerPort: 1111
        - containerPort: 1112
      volumeMounts:
        - name: eventstore-storage
          mountPath: /usr/data/eventstore
  volumes:
    - name: eventstore-storage
      persistentVolumeClaim:
        claimName: eventstore-pv-claim

这是我的持久卷声明的 yaml:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: eventstore-pv-claim
spec:
  accessModes:
    - ReadWriteOnce
 resources:
    requests:
      storage: 1Gi

部署工作正常。当我测试耐用性时,我开始遇到问题。我删除了一个 pod 以强制实际状态脱离期望状态,并查看 Kubernetes 的反应。

它立即启动了一个新的 pod 来替换已删除的 pod。并且管理 UI 仍然显示相同的数据。但是第二次删除一个pod后,新的pod没有出现。根据此讨论,我收到一条错误消息,显示“记录太大”,表明数据已损坏。https://groups.google.com/forum/#!topic/event-store/gUKLaxZj4gw

我又试了几次。每次都是一样的结果。第二次删除 pod 后,数据已损坏。这让我担心实际失败会导致类似的结果。

但是,在部署新版本的映像或将部署中的 pod 缩放到零并返回到 1 时,不会发生数据损坏。多次尝试后一切正常。这很奇怪,因为它也完全取代了 pod(我检查了 pod id 并且它们改变了)。

这让我想知道使用 kubectl delete 删除 pod 在终止 pod 的方式上是否更有力。大家有没有类似的经历?关于删除是否/如何不同的见解?提前感谢您的意见。

问候,

奥斯卡

4

1 回答 1

3

我在 Github 上提到了这个拉取请求,指出进程没有被正确杀死:https ://github.com/EventStore/eventstore-docker/pull/52

使用拉取请求中的 Docker 文件构建新映像后,将此映像放入部署中。我正在左右杀死 pod,不再有数据损坏问题。

希望这可以帮助面临同样问题的人。

于 2018-08-07T12:38:12.010 回答