新聞中心
sysctl是一個允許改變正在運行中的Linux系統(tǒng)內(nèi)核參數(shù)的接口??梢酝ㄟ^sysctl修改Linux系統(tǒng)內(nèi)核中的TCP/IP 堆棧和虛擬內(nèi)存系統(tǒng)的高級選項,而且不需要重新啟動Linux系統(tǒng),就可以實現(xiàn)優(yōu)化Linux系統(tǒng)和提高應用進程運行性能。

通過Linux系統(tǒng)中的/proc虛擬文件系統(tǒng)來實現(xiàn)動態(tài)配置Linux系統(tǒng)內(nèi)核參數(shù),在/proc/sys目錄下有Linux系統(tǒng)絕大多數(shù)的內(nèi)核參數(shù),這些內(nèi)核參數(shù)可以在Linux系統(tǒng)運行時進行修改,并且不需要重新啟動Linux系統(tǒng)便可以立刻生效,但是這種修改在重新啟動Linux系統(tǒng)后便會失效,要是想永久生效的話,需要更改配置文件/etc/sysctl.conf中相應的內(nèi)核參數(shù)配置項。
可以通過下面命令獲取sysctl可以操作的所有內(nèi)核參數(shù)配置項和已經(jīng)配置的數(shù)值:
# sysctl –a
這些內(nèi)核參數(shù)主要包括下面幾類配置項:
全局內(nèi)核配置項:以“kernel.”為配置項前綴,舉例:
kernel.shmmax = 33554432(共享內(nèi)存段的最大尺寸,以字節(jié)為單位)
kernel.threads-max = 139264(Linux內(nèi)核所能使用的線程最大數(shù)量)
網(wǎng)絡配置項:以“net.”為配置項前綴,舉例:
net.ipv4.ipfrag_low_thresh = 196608(用于IP分片匯聚的最小內(nèi)存用量)
net.ipv4.ipfrag_high_thresh = 262144(用于IP分片匯聚的最大內(nèi)存用量)
虛擬內(nèi)存配置項:以“vm.”為配置項前綴,舉例:
vm.swappiness = 60(減少系統(tǒng)對于swap頻繁的寫入,將加快應用程序之間的切換,有助于提升系統(tǒng)性能)
vm.dirty_ratio = 40(該文件表示如果進程產(chǎn)生的廢數(shù)據(jù)到達系統(tǒng)整體內(nèi)存的百分比,此時進程自信把廢數(shù)據(jù)寫回磁盤)
設備專用配置項:以“dev.”為配置項前綴,舉例:
dev.raid.speed_limit_max = 200000(需要初始化同步RAID的同步最大速度限制)
dev.raid.speed_limit_min = 1000(需要初始化同步RAID的同步最小速度限制)
文件系統(tǒng)專用配置項:以“fs.”為配置項前綴
fs.file-max = 779703(可以分配的文件句柄的最大數(shù)目)
fs.file-nr = 3930 0 779703(已分配文件句柄的數(shù)目,已使用文件句柄的數(shù)目,文件句柄的最大數(shù)目,該文件是只讀的,僅用于顯示信息)
容器相關內(nèi)核參數(shù)
上面介紹了通過sysctl可以操作Linux系統(tǒng)內(nèi)核參數(shù),在這些內(nèi)核參數(shù)中,有些不但是操作系統(tǒng)全局級別的內(nèi)核參數(shù),還是命名空間級別的內(nèi)核參數(shù)。對于容器來說,是通過命名空間實現(xiàn)隔離的,那么就意味著這些命名空間級別的參數(shù)是容器相關的內(nèi)核參數(shù)。
Linux系統(tǒng)命名空間的分類如下:
命名空間級別的內(nèi)核參數(shù)包括:
kernel.shm*(內(nèi)核中共享內(nèi)存相關參數(shù)),舉例:
kernel.shmall = 3774873(可以使用的共享內(nèi)存的總量)
kernel.shmmax = 15461882265(單個共享內(nèi)存段的最大值)
kernel.msg*(內(nèi)核中SystemV消息隊列相關參數(shù))
kernel.msgmnb = 16384(每個消息隊列的最大字節(jié)限制)
kernel.msgmni = 128(同時運行的最大的消息隊列個數(shù))
kernel.sem(內(nèi)核中信號量參數(shù))
kernel.sem = 250 32000 100 128(每個信號集中的最大信號量數(shù)目、系統(tǒng)范圍內(nèi)的最大信號量總數(shù)目、每個信號發(fā)生時的最大系統(tǒng)操作數(shù)目、系統(tǒng)范圍內(nèi)的最大信號集總數(shù)目)
fs.mqueue.*(內(nèi)核中POSIX消息隊列相關參數(shù))
fs.mqueue. msg_max = 32678(隊列里緩存的軟最大消息數(shù)目)
fs.mqueue. msgsize_max = 8192(最大消息長度上限)
net.*(內(nèi)核中網(wǎng)絡配置項相關參數(shù))
net.ipv4.ipfrag_low_thresh = 196608(用于IP分片匯聚的最小內(nèi)存用量)
net.ipv4.ipfrag_high_thresh = 262144(用于IP分片匯聚的最大內(nèi)存用量)
新特性
因為sysctl可以修改命名空間級別的內(nèi)核參數(shù),所以在Kubernetes1.4中通過sysctl來配置POD中Linux內(nèi)核參數(shù)的功能,通過修改POD中Linux內(nèi)核參數(shù),可以優(yōu)化POD性能,提升POD中容器運行效率。在Kubernetes1.4中這還是一個阿爾法特性。
修改Linux內(nèi)核參數(shù)存在安全風險,修改錯誤很可能會降低系統(tǒng)性能,甚至會引起系統(tǒng)崩潰,所以需要謹慎對待。在Kubernetes1.4中將命名空間級別的內(nèi)核參數(shù)分成了兩類,一類是安全的內(nèi)核參數(shù),一類是不安全的內(nèi)核參數(shù)。所謂安全的命名空間級別內(nèi)核參數(shù),就是要能夠?qū)崿F(xiàn)相同節(jié)點上不同POD之間的完全隔離,要滿足如下條件:
不能對相同節(jié)點上其他POD產(chǎn)生任何影響
不能對節(jié)點上操作系統(tǒng)健康造成影響
不能在POD資源限制以外獲取更多的CPU和內(nèi)存資源
根據(jù)上面三個條件可以發(fā)現(xiàn),大多數(shù)的命名空間級別內(nèi)核參數(shù)都不是安全的。在Kubernetes1.4中,認為下面的命名空間級別內(nèi)核參數(shù)是安全的:
kernel.shm_rmid_forced = 1(表示是否強制將共享內(nèi)存和一個進程聯(lián)系在一起,這樣的話可以通過殺死進程來釋放共享內(nèi)存)
net.ipv4.ip_local_port_range =1024 65000(表示允許使用的端口范圍)
net.ipv4.tcp_syncookies = 1(表示是否打開TCP同步標簽,同步標簽可以防止一個套接字在有過多試圖連接時引起過載)
在Kubernetes以后的版本中,還會繼續(xù)擴充安全的命名空間級別內(nèi)核參數(shù)。在Kubernetes中,所有安全的命名空間級別內(nèi)核參數(shù)默認都是啟用狀態(tài)的,所有不安全的命名空間級別內(nèi)核參數(shù)默認都是禁用狀態(tài)的,如果想設置不安全的內(nèi)核參數(shù),需要Kubernetes管理員手工啟用。如果管理員沒有手工啟用不安全的內(nèi)核參數(shù),那么Kubernetes仍然會進行調(diào)度,將這些帶有不安全內(nèi)核參數(shù)的POD分配到節(jié)點上,但是這些POD在啟動時會失敗。
在啟動kubelet時通過增加參數(shù)“experimental-allowed-unsafe-sysctls”來啟用不安全的命名空間級別內(nèi)核參數(shù):
可以在POD配置文件中設置已經(jīng)被啟用的命名空間級別內(nèi)核參數(shù):
上面的配置文件在POD中設置了安全的命名空間級內(nèi)核參數(shù):kernel.shm_rmid_forced,并且在POD中設置了兩個不安全的命名空間級內(nèi)核參數(shù):net.ipv4.route.min_pmte和kernet.msgmax。
在annotations中的“security.alpha.kubernetes.io/sysctls”參數(shù)上設置安全的命名空間級內(nèi)核參數(shù),在annotations中的“security.alpha.kubernetes.io/unsafe-sysctls”參數(shù)上設置不安全的命名空間級內(nèi)核參數(shù)。
網(wǎng)站欄目:詳解kubernetes1.4新特性支持sysctl命令
網(wǎng)站URL:http://fisionsoft.com.cn/article/cdcjigh.html


咨詢
建站咨詢
