【发布时间】:2020-07-25 21:53:43
【问题描述】:
我正在运行一个自我管理的 Kubernetes 集群 1.18.1。我已经部署了一些具有持久性卷的 pod(基于 longhorn 项目)。 现在经过一些测试后,我观察到以下行为:
如果我模拟一个节点的硬关闭,在一段时间(5 分钟)后,Kubernetes 会识别出丢失并开始将 POD 从死节点重新调度到另一个节点。
由于我的节点具有持久性卷,新的 POD 将永远不会启动。原因是旧的 pod(在死节点上)现在在终止状态下是持久的。
驻留在崩溃节点上的 Pod 没有终止这一事实似乎是众所周知的 Kubernetes 限制。另见问题描述here。
我的问题是:为什么 Kubernetes 不提供自动终止旧 POD 和持久卷等资源的功能。为什么我必须以管理员身份手动干预?对我来说,这种行为似乎与 Kubernetes 做出的承诺不合逻辑。
这是例如我的 yaml 文件的样子:
apiVersion: apps/v1
kind: Deployment
metadata:
name: db
labels:
app: db
spec:
replicas: 1
selector:
matchLabels:
app: db
strategy:
type: Recreate
template:
metadata:
labels:
app: db
spec:
containers:
- env:
- name: POSTGRES_DB
value: office
image: postgres:9.6.1
name: db
livenessProbe:
tcpSocket:
port: 5432
initialDelaySeconds: 30
periodSeconds: 10
ports:
- containerPort: 5432
resources: {}
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: dbdata
subPath: postgres
restartPolicy: Always
volumes:
- name: dbdata
persistentVolumeClaim:
claimName: office-demo-dbdata-pvc
# Storrage
---
kind: PersistentVolume
apiVersion: v1
metadata:
name: office-demo-dbdata-pv
spec:
capacity:
storage: 2Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
claimRef:
namespace: default
name: office-demo-dbdata-pvc
csi:
driver: io.rancher.longhorn
fsType: ext4
volumeHandle: office-demo-dbdata
storageClassName: longhorn-durable
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: office-demo-dbdata-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn-durable
resources:
requests:
storage: 2Gi
volumeName: "office-demo-dbdata-pv"
如上所述,该卷是在 Longhorn 上创建的。但是即使kubernetes开始将pod重新调度到另一个节点后,附件也没有释放。
如果我手动删除'volumeattachment',可以释放挂在终止状态的pod
$ kubectl delete volumeattachment csi-08d9842e.......
但无论如何,这是手动操作。
【问题讨论】:
-
持久卷通常不绑定到特定节点。 (在 AWS 上下文中,持久卷通常是 EBS 卷,它可以重新附加到不同的节点。)如果在删除节点时自动删除 pod 和卷,我必须作为操作员手动干预重新启动它们,目标是避免这种情况。
-
@Ralph,请使用您使用的 yamls(部署、pv、pvc 等)编辑您的问题!通过这种方式,我们可以重现您的环境并确定它是设计问题还是可以修复的问题。我试图弄清楚:你部署了什么样的 PV? PV在哪里?
-
@DavidMaze 我认为你应该写下你的评论作为答案并进一步解释你的观点。
-
一天后再次阅读这个问题,我认为我的评论本身并不是一个答案。实际的问题似乎是关于阻止访问 ReadWriteOnce 卷的陈旧(终止)pod;如果 pod 被删除,那么这些卷可以重新挂载到其他地方。
-
我将我的 yaml 文件添加到问题中。
标签: kubernetes