如(ru)何(he)區分應用所在的運(yun)行環(huan)境:物(wu)理機(ji)、虛擬機(ji)、容(rong)器(qi)還是(shi) K8s?
本文主要介紹(shao)如何通過一種簡單方式來(lai)判斷應用當前所(suo)在的運行環境。
1 物理機
物理(li)機和(he)虛擬機因為都(dou)是(shi)完整的(de)(de)操作(zuo)系統。因此可(ke)(ke)以用dmidecode來檢查計算機所在的(de)(de)環境。dmidecode是(shi)一個(ge)可(ke)(ke)以將DMI table中的(de)(de)內容以人類可(ke)(ke)讀格(ge)式(shi)導出的(de)(de)工具。DMI (也被(bei)稱為) Table中保存的(de)(de)是(shi)該表包含系統硬件(jian)組件(jian)的(de)(de)描述,以及其(qi)他有用的(de)(de)信(xin)息,例(li)如序列號和(he)BIOS版本。
dmidecode -s system-product-name
2 虛擬機
不(bu)同的虛擬平臺檢查出(chu)來(lai)的結果會有所不(bu)同。
3. 容器
docker容器通(tong)常會在 "/" 目錄下有一個(ge)dockerenv文件(jian)。一些(xie)老(lao)版本(ben)可能是(shi)dockerinit文件(jian)
或者可以直接通過查看信(xin)息中是否包含docker字(zi)樣(yang)來判斷。在容器技術中,cgroup主要用作資(zi)源管理和隔離。
阿里云的容器
k8s又分兩(liang)種情況,使(shi)用(yong)docker為(wei)容(rong)器(qi)底(di)(di)座和使(shi)用(yong)為(wei)容(rong)器(qi)底(di)(di)座。k8s的pod中都帶(dai)有k8s的環境變(bian)量。
所以我們可(ke)以通過env來判斷是(shi)否是(shi)運(yun)行在k8s環境。
如果根目錄下有docker文件,且env有k8s環境變量說明容器底座使用的是(shi)docker。否(fou)則是(shi)containerd。也可(ke)以通(tong)過cgroup進一步(bu)確(que)認,cgroup信息中會包含(han)有kube和containerd字樣。
關注公眾號 singless,獲取更多有(you)價(jia)值的文(wen)章