当前位置: 首页 > 知识库问答 >
问题:

为什么Kubernetes在节点崩溃后不终止PODs?

谷越
2023-03-14

我正在运行一个自我管理的Kubernetes集群1.18.1。我已经部署了一些带有持久性卷的POD(基于longhorn项目)。现在,在做了一些测试之后,我观察到以下行为:

如果我模拟一个节点的硬关机,过了一段时间(5分钟),Kubernetes就会识别出丢失,并开始重新调度节点从死亡节点到另一个节点。

因为我的节点具有持久性卷,所以新的POD永远不会启动。原因是旧的pod(在死节点上)现在在终止状态下是持久的。

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"

如果手动删除“VolumeAttachment”,挂在终止状态的吊舱可以被释放

$ kubectl delete volumeattachment csi-08d9842e.......

但在任何情况下,这都是手动操作。

共有1个答案

伏德义
2023-03-14

5分钟是Kubernetes控制平面组件的默认驱逐时间。如果您想自定义,您可以使用基于污染的驱逐,并在部署yaml中添加以下内容

tolerations:
- key: "node.kubernetes.io/unreachable"
  operator: "Exists"
  effect: "NoExecute"
  tolerationSeconds: 60

请注意,Kubernetes会自动添加node.Kubernetes.io/not-ready容忍度容忍度seconds=300,除非用户提供的pod配置已经具有node.Kubernetes.io/not-ready容忍度。同样,它为node.kubernetes.io/unreachable添加了容忍度seconds=300的容忍度,除非用户提供的pod配置已经为node.kubernetes.io/unreachable提供了容忍度

 类似资料:
  • 我们有一个带有主节点(foo-1)和两个工作节点(foo-2和foo-3)的集群。我们有一个在foo-3上运行的吊舱(由库伯内特斯决定)。我们故意关闭foo-3作为实验。 我的期望是库伯内特斯会“看到”关闭,并在foo-2中自动重启吊舱。但是,这似乎没有发生。事实上,它似乎认为吊舱仍然在foo-3上运行。 经过五分钟的等待,库伯内特斯终于意识到集群节点已经消失,并优雅地做出回应,重启fo-2上的p

  • 我在一个片段中遇到了一个问题,该片段从新的Google Maps API中嵌入了SuportMapFragment。当创建我的片段时,它从方法开始,在中获取一些数据。当这种情况发生时,MapFragment保持在屏幕外,而是显示进度条。 完成后,我向MapView的事件注册。然后我显示片段,这导致地图视图被显示和布局。被触发,动画开始。 多谢!

  • 我第一次试着用docker。我需要它使selenium在服务器上运行。所以我可以把这个脚本放到任何一台服务器上,这样就可以毫不费力地工作了。但是突然间它就不起作用了,它就不起作用了。我试着在谷歌上搜索,但什么都没有。现在我在这里寻求帮助。也许我错过了什么,也许我把事情搞砸了,现在我看到了解决办法。解决方案是下载chromedriver,拒绝独立运行selenium。 开始硒 Dockerfile去

  • 在我的应用程序中,我已经授予了的权限,并且它正在顺利地检测接收/offhook/idle统计信息。 更新 这是Logcat错误: 04-26 04:55:04.422 140 6-2091/?W/Audio_HW_Generic:没有向哈尔提供足够的数据,预期位置为1097356,只写了1097280 04-26 04:55:04.434 506 5-5065/?d/AndroidRuntime:

  • 我想网页搜索。我使用ubuntu 20.04,python 3.8,selenium,ChromeDriver。但是为什么ChromeDriver崩溃了?版本有问题吗? 我尝试过各种Chrome选项,-没有沙盒,-禁用gpu,-禁用dev-shm使用,但没有改变。 密码 环境 错误信息 pip列表 pip冻结 我还应该尝试什么?

  • 我在VS Code中点击了“Kill terminal”后得到了这个错误: “无法解析您的外壳环境:从生成的外壳程序中意外退出代码(代码为空,信号为 SIGSEGV)” 现在,当我点击终端时,我的VSCode会这样做:它会打开窗口大约一秒钟,然后崩溃并消失。 我已经删除了settings.json文件,因为我发现了一个类似问题的帖子。不幸的是,这没有帮助。