自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Kubernetes 節(jié)點(diǎn)磁盤(pán)故障排查,你學(xué)會(huì)了嗎?

存儲(chǔ) 存儲(chǔ)架構(gòu)
在Kubernetes 環(huán)境中,隨著時(shí)間的推移,這可能會(huì)成為災(zāi)難性的,因?yàn)橐坏┏d,Kubernetes將開(kāi)始“拯救”自己。這是通過(guò)殺死pod來(lái)實(shí)現(xiàn)的,從而減少節(jié)點(diǎn)上的負(fù)載。如果應(yīng)用程序不知道如何正確處理突然的異常,這可能會(huì)導(dǎo)致問(wèn)題,或者可能導(dǎo)致沒(méi)有足夠的資源來(lái)處理給定的負(fù)載。

通過(guò)本文,您將了解有關(guān)Kubernetes節(jié)點(diǎn)遇到磁盤(pán)壓力時(shí)的正確處理方式,包括磁盤(pán)壓力的原因以及故障排除的每一個(gè)步驟。

無(wú)論您運(yùn)行的是什么應(yīng)用程序,都需要一些基本的資源。CPU、內(nèi)存和磁盤(pán)空間是通用的,將用于所有應(yīng)用程序。大多數(shù)工程師都對(duì)如何處理CPU和內(nèi)存有著正確的理解,但并不是每個(gè)人都會(huì)花時(shí)間來(lái)理解如何正確使用磁盤(pán)。

在Kubernetes 環(huán)境中,隨著時(shí)間的推移,這可能會(huì)成為災(zāi)難性的,因?yàn)橐坏┏d,Kubernetes將開(kāi)始“拯救”自己。這是通過(guò)殺死pod來(lái)實(shí)現(xiàn)的,從而減少節(jié)點(diǎn)上的負(fù)載。如果應(yīng)用程序不知道如何正確處理突然的異常,這可能會(huì)導(dǎo)致問(wèn)題,或者可能導(dǎo)致沒(méi)有足夠的資源來(lái)處理給定的負(fù)載。

通過(guò)本文,我們就能很好的了解以及處理類(lèi)似的磁盤(pán)故障。

什么是Node Disk Pressure

Node disk pressure,顧名思義,就是連接到節(jié)點(diǎn)的磁盤(pán)處于壓力之下。您不太可能遇到Node disk pressure,因?yàn)?Kubernetes 內(nèi)置了一些措施來(lái)避免它,但它確實(shí)會(huì)不時(shí)發(fā)生。雖然有多種因素會(huì)導(dǎo)致Node disk pressure,但您可能會(huì)遇到兩個(gè)主要原因。

您可能遇到Node disk pressure的第一個(gè)原因是 Kubernetes 沒(méi)有及時(shí)清理未使用的鏡像。默認(rèn)情況下,這不應(yīng)該發(fā)生,因?yàn)?Kubernetes 會(huì)定期檢查是否有未使用的鏡像,然后進(jìn)行刪除。這不太可能是節(jié)點(diǎn)磁盤(pán)壓力的來(lái)源;但是,應(yīng)該牢記這一點(diǎn)。

另一個(gè)你很可能遇到的問(wèn)題是日志的積累問(wèn)題。Kubernetes中的默認(rèn)行為是在兩種情況下保存日志:它將保存任何正在運(yùn)行的容器的日志,以及保存最近退出的容器的日志,以幫助進(jìn)行故障排除。這是一種試圖在保留重要日志和隨著時(shí)間推移刪除無(wú)用日志之間取得平衡的嘗試。但是,如果您有一個(gè)包含大量日志的長(zhǎng)時(shí)間運(yùn)行的容器,那么這些日志可能會(huì)累積到足以使節(jié)點(diǎn)磁盤(pán)的容量過(guò)載的程度。

要弄清楚確切的問(wèn)題是什么,您需要找到哪些文件占用的空間最多的詳細(xì)信息。

節(jié)點(diǎn)磁盤(pán)壓力故障排除

要解決節(jié)點(diǎn)磁盤(pán)壓力問(wèn)題,您需要弄清楚哪些文件占用的空間最多。由于 Kubernetes 在 Linux 上運(yùn)行,因此可以通過(guò)運(yùn)行du命令輕松完成。您可以手動(dòng)通過(guò) SSH 連接到每個(gè) Kubernetes 節(jié)點(diǎn),也可以使用DaemonSet(https://www.containiq.com/post/using-kubernetes-daemonsets-effectively)。

部署和理解 DaemonSet

要部署 DaemonSet,您可以直接使用 DaemonSet 的GitHub Gist(https://gist.githubusercontent.com/omerlh/cc5724ffeea17917eb06843dbff987b7/raw/1e58c8850aeeb6d22d8061338f09e5e1534ab638/daemonset.yaml) ,也可以創(chuàng)建一個(gè)包含以下內(nèi)容的文件:

apiVersion: apps/v1
kind: DaemonSet
metadata:
name: disk-checker
labels:
app: disk-checker
spec:
selector:
matchLabels:
app: disk-checker
template:
metadata:
labels:
app: disk-checker
spec:
hostPID: true
hostIPC: true
hostNetwork: true
containers:
- resources:
requests:
cpu: 0.15
securityContext:
privileged: true
image: busybox
imagePullPolicy: IfNotPresent
name: disk-checked
command: ["/bin/sh"]
args: ["-c", "du -a /host | sort -n -r | head -n 20"]
volumeMounts:
- name: host
mountPath: "/host"
volumes:
- name: host
hostPath:
path: "/"

現(xiàn)在您可以運(yùn)行以下命令:

$ kubectl apply -f https://gist.githubusercontent.com/omerlh/cc5724ffeea17917eb06843dbff987b7/raw/1e58c8850aeeb6d22d8061338f09e5e1534ab638/daemonset.yaml

在使用 DaemonSet 進(jìn)行故障排除之前,了解其中發(fā)生的事情很重要。如果您查看上面的清單文件,您會(huì)注意到它實(shí)際上是一個(gè)非常簡(jiǎn)單的服務(wù)。其中很多是樣板文件,但要注意的重要一點(diǎn)是command和args字段。這是設(shè)置du命令運(yùn)行的地方,然后打印前 20 個(gè)結(jié)果。再往下,您還可以看到主機(jī)卷在路徑/host處綁定到容器中。

使用 DaemonSet

首先,您需要確保 DaemonSet 已正確部署,您可以通過(guò)運(yùn)行kubectl get pods -l app=disk-checker來(lái)完成。這應(yīng)該產(chǎn)生和輸出如下:

$ kubectl get pods -l app=disk-checker


NAME READY STATUS RESTARTS AGE
disk-checker-bwkbj 1/1 Running 0 2s?

您在此處看到的 pod 數(shù)量取決于集群內(nèi)運(yùn)行的節(jié)點(diǎn)數(shù)量。確認(rèn)節(jié)點(diǎn)正在運(yùn)行后,您可以通過(guò)執(zhí)行kubectl logs -l app=disk-checker開(kāi)始查看正在運(yùn)行的 pod 的日志。這可能需要一些時(shí)間,但最后您應(yīng)該會(huì)看到一個(gè)文件列表及其大小,這將使您更深入地了解哪些內(nèi)容占用了節(jié)點(diǎn)上的空間。您接下來(lái)要做什么取決于占用空間的文件——您需要查看 DaemonSet 的輸出并了解正在發(fā)生的事情,以及它是否是日志文件、應(yīng)用程序文件或其他正在使用您的磁盤(pán)空間的文件。

可能的解決方案

分析和理解DaemonSet的輸出是很重要的,我們可以從中解決當(dāng)前的問(wèn)題。有兩種可能的解決方案。

您可能會(huì)發(fā)現(xiàn)問(wèn)題是由應(yīng)用程序數(shù)據(jù)引起的,因此無(wú)法刪除文件。在這種情況下,您將不得不增加節(jié)點(diǎn)磁盤(pán)的大小以確保有足夠的空間來(lái)存儲(chǔ)應(yīng)用程序文件。這是一個(gè)比較簡(jiǎn)單的解決方式,但會(huì)增加運(yùn)行集群的成本。因此,更好的方式應(yīng)該是首先查看應(yīng)用程序的結(jié)構(gòu),看看是否可以找到減少對(duì)應(yīng)用程序文件的依賴(lài)的方法,從而減少對(duì)磁盤(pán)使用的總體需求。

另一方面,您可能會(huì)發(fā)現(xiàn)您的應(yīng)用程序生成了大量不再需要的文件。在這種情況下,就像刪除不必要的文件一樣簡(jiǎn)單。根據(jù)您的應(yīng)用程序在可用性方面的設(shè)置方式,您可能只需重新啟動(dòng) pod,從而導(dǎo)致 Kubernetes 自動(dòng)清理容器中的任何文件。請(qǐng)注意,只有在使用臨時(shí)卷時(shí)才會(huì)這樣做,而不是在使用持久卷時(shí)。

最后

到目前為止,您應(yīng)該了解當(dāng)您遇到節(jié)點(diǎn)磁盤(pán)壓力問(wèn)題時(shí)這意味著什么,以及當(dāng)您遇到問(wèn)題時(shí)您的直接想法應(yīng)該是什么:收集相關(guān)的錯(cuò)誤日志。

您可能必須升級(jí)集群中磁盤(pán)的大小,或者清理未使用的文件。無(wú)論問(wèn)題和解決方案如何,您現(xiàn)在都可以更好地了解遇到此問(wèn)題。

責(zé)任編輯:武曉燕 來(lái)源: 新鈦云服
相關(guān)推薦

2022-11-09 07:20:43

調(diào)用日志502報(bào)錯(cuò)nginx

2023-12-05 07:12:39

優(yōu)化排查性能

2024-07-29 10:35:44

KubernetesCSI存儲(chǔ)

2024-09-30 09:05:46

Linux網(wǎng)絡(luò)延遲

2024-10-29 08:08:44

2023-03-14 23:24:27

Mongodb副本集架構(gòu)

2023-01-02 08:20:14

MySQL數(shù)據(jù)庫(kù)

2024-01-30 18:29:29

微服務(wù)架構(gòu)Ingress

2022-10-13 08:02:13

死鎖運(yùn)算系統(tǒng)

2024-01-02 12:05:26

Java并發(fā)編程

2023-08-01 12:51:18

WebGPT機(jī)器學(xué)習(xí)模型

2024-02-04 00:00:00

Effect數(shù)據(jù)組件

2023-07-26 13:11:21

ChatGPT平臺(tái)工具

2024-01-19 08:25:38

死鎖Java通信

2023-01-10 08:43:15

定義DDD架構(gòu)

2024-01-26 06:05:16

KuberneteseBPF網(wǎng)絡(luò)

2022-06-16 07:50:35

數(shù)據(jù)結(jié)構(gòu)鏈表

2022-12-06 07:53:33

MySQL索引B+樹(shù)

2023-07-30 22:29:51

BDDMockitoAssert測(cè)試

2023-10-06 14:49:21

SentinelHystrixtimeout
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)