簡體   English   中英

節點有條件:[DiskPressure] 在 azure/aks 中導致 k8s 中的 pod 驅逐

[英]The node had condition: [DiskPressure] causing pod eviction in k8s in azure/aks

我在 azure 中運行 k8s 1.14。

我在集群中的一些 pod 上不斷收到 pod 驅逐。

舉個例子:

$ 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 用戶附加了pod-security-policy您可能無法執行此操作,如果hostIPChostNetworkhostPID是不允許的。

您還需要確保 pod 被安排在您想要訪問的特定節點上。 使用.spec.nodeName: <name>來實現它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM