删除多个 pod 后 Kubernetes 持久卷数据损坏
Kubernetes persistent volume data corrupted after multiple pod deletions
我正在为 Kubernetes 集群上 official event store image 的一个简单副本部署而苦苦挣扎。我正在使用持久卷进行数据存储。
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没有上来。根据此讨论,我收到一条错误消息,指出 "record too large" 表明数据已损坏。 https://groups.google.com/forum/#!topic/event-store/gUKLaxZj4gw
我又试了几次。每次都是一样的结果。第二次删除 pod 后,数据已损坏。这让我担心实际失败会导致类似的结果。
但是,当部署新版本的映像或将部署中的 pods 缩放为零并返回到一时,不会发生数据损坏。经过几次尝试一切都很好。这很奇怪,因为它也完全取代了 pods(我检查了 pod id,它们改变了)。
这让我想知道使用 kubectl delete 删除 pod 是否以某种方式更有效地终止 pod。你们有没有类似的经历?对if/how删除的见解有何不同?预先感谢您的意见。
此致,
奥斯卡
我在 Github 上提到了这个 pull request,它指出进程没有被正确终止:https://github.com/EventStore/eventstore-docker/pull/52
使用拉取请求中的 Docker 文件构建新映像后,将此映像放入部署中。我左右杀 pods,不再有数据损坏问题。
希望这对面临同样问题的人有所帮助。
我正在为 Kubernetes 集群上 official event store image 的一个简单副本部署而苦苦挣扎。我正在使用持久卷进行数据存储。
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没有上来。根据此讨论,我收到一条错误消息,指出 "record too large" 表明数据已损坏。 https://groups.google.com/forum/#!topic/event-store/gUKLaxZj4gw
我又试了几次。每次都是一样的结果。第二次删除 pod 后,数据已损坏。这让我担心实际失败会导致类似的结果。
但是,当部署新版本的映像或将部署中的 pods 缩放为零并返回到一时,不会发生数据损坏。经过几次尝试一切都很好。这很奇怪,因为它也完全取代了 pods(我检查了 pod id,它们改变了)。
这让我想知道使用 kubectl delete 删除 pod 是否以某种方式更有效地终止 pod。你们有没有类似的经历?对if/how删除的见解有何不同?预先感谢您的意见。
此致,
奥斯卡
我在 Github 上提到了这个 pull request,它指出进程没有被正确终止:https://github.com/EventStore/eventstore-docker/pull/52
使用拉取请求中的 Docker 文件构建新映像后,将此映像放入部署中。我左右杀 pods,不再有数据损坏问题。
希望这对面临同样问题的人有所帮助。