使用NAS、OSS掛載慢的問(wèn)題
現(xiàn)象:
在Kubernetes中部署應(yīng)用時(shí),如果使用了NAS、OSS這類(lèi)存儲(chǔ)卷,有時(shí)會(huì)出現(xiàn)Pod啟動(dòng)很慢的問(wèn)題;
啟動(dòng)時(shí)間可能會(huì)是幾分鐘或者幾十分鐘;
原因:
出現(xiàn)這個(gè)情況,可以查看一下部署的應(yīng)用,看看是否給pod配置了fsGroup(可能是主動(dòng)配置的,也可能是istio注入的);
如果pod的spec中有fsGroup的配置,kubelet在執(zhí)行完數(shù)據(jù)卷的掛載后會(huì)根據(jù)fsGroup進(jìn)行掛載點(diǎn)的權(quán)限設(shè)置,即:執(zhí)行chown、chmod操作;
由于您掛載的目錄可能有數(shù)量較多的文件,導(dǎo)致linux在執(zhí)行chown、chmod的時(shí)候就會(huì)非常慢,即最終表現(xiàn)為掛載很慢(其實(shí)純粹掛載過(guò)程很快已經(jīng)結(jié)束);
場(chǎng)景詳解:
Flexvolume:
如果應(yīng)用掛載數(shù)據(jù)卷使用的是Flexvolume插件;
pod配置了fsGroup;
數(shù)據(jù)卷不是只讀類(lèi)型;
符合上面的條件就會(huì)觸發(fā)chmod、chown操作,可能導(dǎo)致掛載(pod啟動(dòng))很慢;
解決:
去掉fsGroup的配置;
對(duì)掛載點(diǎn)預(yù)先配置其歸屬和權(quán)限;
例如,掛載某個(gè)NAS目錄,可以預(yù)先手動(dòng)掛載這個(gè)目錄,執(zhí)行chmod、chown后,就不需要在pod啟動(dòng)時(shí)候再配置了。
CSI:
如果應(yīng)用掛載數(shù)據(jù)卷使用的是CSI插件;
pod配置了fsGroup;
數(shù)據(jù)卷不是只讀類(lèi)型;
數(shù)據(jù)卷是ReadWriteOnce類(lèi)型;
符合上面的條件就會(huì)觸發(fā)chmod、chown操作,可能導(dǎo)致掛載(pod啟動(dòng))很慢;
解決1:
去掉fsGroup的配置;
對(duì)掛載點(diǎn)預(yù)先配置其歸屬和權(quán)限;
例如,掛載某個(gè)NAS目錄,可以預(yù)先手動(dòng)掛載這個(gè)目錄,執(zhí)行chmod、chown后,就不需要在pod啟動(dòng)時(shí)候再配置了。
解決2:
將PV配置為非ReadWriteOnce類(lèi)型。