[英]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您可能無法執行此操作,如果hostIPC
、 hostNetwork
和hostPID
是不允許的。
您還需要確保 pod 被安排在您想要訪問的特定節點上。 使用.spec.nodeName: <name>
來實現它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.