背景描述
測試環境某臺Docker主機觸發磁盤空間報警,經過排查與分析發現是某個docker容器內的應用日誌過大導致的,下面是具體的排查步驟。
環境描述
日誌文件: php容器 stderr日誌
PHP容器: 使用 php:5.6-fpm 鏡像
Docker主機:
系統: Ubuntu Server 16.04
Storage Driver: overlay2
容器平臺: Rancher 1.6
操作步驟
- 磁盤空間(文件系統)狀態
df -Th /
Filesystem Type Size Used Avail Use% Mounted on
/dev/vda1 ext4 99G 70G 25G 75% /
- 統計目錄佔用磁盤空間
du -h --max-depth=1 /
發現最大目錄依次如下列表:
/var/
/var/lib/
/var/lib/docker/
/var/lib/docker/overlay2/
最終佔用最大的目錄是:
ef24649...省略...f7e6933/
這個目錄是某個容器臨時存儲層目錄,其生命週期取決於這個容器的生命週期,目錄的名稱也是臨時存儲層的ID,我們可以根據這個ID找到目標容器。
- 找到這個容器
for c in `docker ps -qa`; \
do \
docker inspect $c \
| grep -i 'ef24649...省略...f7e6933' && \
echo $c; \
done
8b251ce7f7ae
這裏使用Shell循環依次對比當前主機的容器是否包含這個臨時存儲層ID。
- 根據容器ID找到容器名字
docker inspect -f '{{ .Name }}' 8b251ce7f7ae
/r-css-css-server-1-d3579e44
- 釋放磁盤空間
最後我們要釋放被佔用的磁盤空間,可以根據找到容器ID/名稱在rancher平臺上升級這個應用(舊的容器將被刪除替換)。
- 驗證磁盤空間
df -Th /
Filesystem Type Size Used Avail Use% Mounted on
/dev/vda1 ext4 99G 17G 78G 18% /
小結
最後來總結下文章中的知識點
- 容器存儲層的生存週期和容器一樣,容器消亡時容器存儲層也隨之消亡。
- 任何保存於容器存儲層的信息都會隨容器刪除而消失。
- 容器數量較多時可以使用Shell循環,批量對比容器配置信息來找到目標容器。
doker&k8s Qun [703906133]