该节点的条件:[DiskPressure]导致azure/aks中k8s中的pod逐出

该节点的条件:[DiskPressure]导致azure/aks中k8s中的pod逐出,azure,kubernetes,Azure,Kubernetes,我正在azure中运行K8S1.14 我在集群中的一些豆荚上不断收到豆荚驱逐 例如: $ kubectl describe pod kube-prometheus-stack-prometheus-node-exporter-j8nkd ... Events: Type Reason Age From Message ---- ------ ---- ----

我正在azure中运行K8S1.14

我在集群中的一些豆荚上不断收到豆荚驱逐

例如:

$ kubectl describe pod kube-prometheus-stack-prometheus-node-exporter-j8nkd
...
Events:
  Type     Reason     Age    From                             Message
  ----     ------     ----   ----                             -------
  Normal   Scheduled  3m22s  default-scheduler                Successfully assigned monitoring/kube-prometheus-stack-prometheus-node-exporter-j8nkd to aks-default-2678****
  Warning  Evicted    3m22s  kubelet, aks-default-2678****  The node had condition: [DiskPressure].
我也可以通过以下方式确认:

$ kubectl describe node aks-default-2678****
...
Unschedulable:      false
Conditions:
  Type                 Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message
  ----                 ------  -----------------                 ------------------                ------                       -------
  NetworkUnavailable   False   Wed, 27 Nov 2019 22:06:08 +0100   Wed, 27 Nov 2019 22:06:08 +0100   RouteCreated                 RouteController created a route
  MemoryPressure       False   Fri, 23 Oct 2020 15:35:52 +0200   Mon, 25 May 2020 18:51:40 +0200   KubeletHasSufficientMemory   kubelet has sufficient memory available
  DiskPressure         True    Fri, 23 Oct 2020 15:35:52 +0200   Sat, 05 Sep 2020 14:36:59 +0200   KubeletHasDiskPressure       kubelet has disk pressure
由于这是一个受管理的azure k8s群集,我无法访问节点或主节点上的kubelet。在没有SSH访问节点的情况下,我能做些什么来调查/调试这个问题吗

我还假设这来自节点上的存储,而不是安装在POD中的PV/PVC。那么,在没有SSH访问的情况下,如何获得工作节点上存储消耗的概览呢

那么,在没有SSH访问的情况下,如何获得工作节点上存储消耗的概览呢

您可以创建如下特权pod:

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: privileged-pod
  name: privileged-pod
spec:
  hostIPC: true
  hostNetwork: true
  hostPID: true
  containers:
  - args:
    - sleep
    - "9999"
    image: centos:7
    name: privileged-pod
    volumeMounts:
    - name: host-root-volume
      mountPath: /host
      readOnly: true
  volumes:
  - name: host-root-volume
    hostPath:
      path: /
然后执行它:

kubectl exec -it privileged-pod -- chroot /host
然后就可以访问整个节点,就像使用ssh一样

注意:如果您的k8s用户已连接,您可能无法执行此操作,如果更改
hostIPC
hostNetwork
hostPID
,则不允许执行此操作


您还需要确保pod被安排在您想要访问的特定节点上。使用
.spec.nodeName:
来实现它。

创建集群时,为每个节点添加了多少容量?您是否有使用过多磁盘的播客?一种方法是将持久卷与使用过多磁盘的pod一起使用,这些pod不会从节点获取磁盘,而是创建一个安装在该pod中的磁盘。是的,所有pod都使用PVC,因此节点本身没有实际使用的磁盘空间。但更重要的是,如何识别节点上占用磁盘的内容,以及在必要时如何清理或扩展?