文章目錄
Container 中沒有 sysctl 指令怎麼看 kernel 設定
這幾天因為某個 issue 需要檢查 linux kernel 的設定,但使用的 base image (mcr.microsoft.com/dotnet/core/aspnet:3.1) 沒有 sysctl
指令可以用,又找不到安裝的方式,幸虧在同事的強力支援下指點了一條明路
雖然用法簡單,但 SRE 需要的指令實在太多,加上這個語法又不是很常用到,過幾周一定會忘,快速筆記一下囉
基本環境設定
- CentOS 7
- docker 19.03.7
- Kubernetes v1.17.8
docker images
- mcr.microsoft.com/dotnet/core/aspnet:3.1
- yowko/healthcheck:healthy
錯誤訊息
訊息內容
bash: sysctl: command not found
錯誤截圖
解決方法
先找到 containerr 運行的 kubernetes node
kubectl get pod -o wide
切換至 container 運作的 node 上並使用 docker 指令找出 container_name 或是 container_id
docker ps
docker 指令找出 container 的 PID (process id)
語法
docker inspect -f '{{.State.Pid}}' {container_name or container_id}
範例
docker inspect -f '{{.State.Pid}}' d0a9aa881eb9
docker inspect -f '{{.State.Pid}}' k8s_checkhealthy_checkhealthy_default_76c99c1b-0122-49e0-8887-2228716045c8_0
使用
nsenter
對 container 下指令語法
nsenter -t {PID} -n {所需指令}
範例
nsenter -t 22770 -n sysctl -a
心得
使用當下到現在筆記,我還是相當佩服同事怎麼知道這個語法的 (想必也是經過一段心酸血淚吧 哈)
不過我也聯想到:假設 kubernetes 的 container engine 不再使用 docker,之後的 container engine 也可以用相同方式嗎?
參考資訊
文章作者 Yowko Tsai
上次更新 2020-09-24
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。