kubernetes pod 掛載configmap報錯:read only fie system
背景:使用的是騰訊雲的容器服務,鏡像是我們研發同學開發的鏡像,其中在pod啟動時需要新建一個路徑 /app/subserver/config/disconf/ 。
但是發現啟動的時候報錯:
(read only fie system)
檢查一下pod的設置,發現掛載的路徑是可讀寫的:
進入容器檢查也沒問題:
搜索引擎了一番,發現幾個類似的報錯。但是仔細看看其實不對,他們這些返回的報錯都是直接的物理或虛擬機系統報錯的,不是k8s pod 的報錯。而pod是無法直接重新掛載文件系統的。
權限也有,路徑也在,為什么還是說是只讀文件系統呢?
百度必應谷歌都沒找到可以借鑒的。
正好看到旁邊研發同事有空,遂請教。大佬回:這個啟動時候要創建寫入文件,路徑有嗎?權限有嗎?我一一檢查,都有。
大佬沉吟兩秒:你進去創建一個文件試試。
另外提一句,騰訊雲的容器服務是可以設置啟動命令的,比如我現在,就需要讓pod啟動后休眠一會兒,不然因為pod報錯,它會不斷自啟,那就沒辦法進去檢查了。在高級設置里面,或者可以直接加在yaml文件里:
我進入容器,嘗試創建文件:
熟悉的報錯。
明明路徑有權限,為什么提示只讀呢?
大佬問:他這個路徑是主機文件系統的嗎?
主機文件系統?我看看。
一語驚醒夢中人!
這個不是pod的主機路徑啊,這是掛載的configmap的路徑。
原來如此。因為掛載的configmap是外部掛載的,不屬於pod自有的系統路徑,所以是無法在一個configmap路徑下面再新建路徑的。
那就好辦了。把 /app/subserver/config/disconf/ 改為 /app/config/disconf/ 這樣他就是在/app/這個路徑下面創建路徑並寫入文件,這樣應該就沒問題了吧。
可以看到,已經正常寫入了三個文件。
感謝lyy大佬!