自訂節點設定可讓您調整作業系統 (OS) 設定或 kubelet 參數,以符合工作負載需求。 當您建立 AKS 叢集或將節點集區新增至叢集時,可以自訂常用 OS 和 kubelet 設定子集。 若要設定此子集以外的設定,您可以使用精靈集來自訂所需的設定,而不會遺失節點的 AKS 支援 (部分機器翻譯)。
OS 和 kubelet 組態變更需要您建立具有參數和所需設定的新組態檔。 如果未指定參數的值,則值會設定為預設值。
建立含有下列內容的檔案 linuxkubeletconfig.json
:
{
"cpuManagerPolicy": "static",
"cpuCfsQuota": true,
"cpuCfsQuotaPeriod": "200ms",
"imageGcHighThreshold": 90,
"imageGcLowThreshold": 70,
"topologyManagerPolicy": "best-effort",
"allowedUnsafeSysctls": [
"kernel.msg*",
"net.*"
],
"failSwapOn": false
}
注意
Windows kubelet 自訂設定僅支援參數 imageGcHighThreshold
、imageGcLowThreshold
、containerLogMaxSizeMB
和 containerLogMaxFiles
。
建立含有下列內容的檔案 windowskubeletconfig.json
:
{
"imageGcHighThreshold": 90,
"imageGcLowThreshold": 70,
"containerLogMaxSizeMB": 20,
"containerLogMaxFiles": 6
}
建立含有下列內容的檔案 linuxosconfig.json
:
{
"transparentHugePageEnabled": "madvise",
"transparentHugePageDefrag": "defer+madvise",
"swapFileSizeMB": 1500,
"sysctls": {
"netCoreSomaxconn": 163849,
"netIpv4TcpTwReuse": true,
"netIpv4IpLocalPortRange": "32000 60000"
}
}
建立新的叢集時,您可以使用在先前步驟中建立的自訂設定檔來指定 kubelet 設定、OS 設定或兩者。
注意
如果您在建立叢集時指定設定,則只有初始節點集區中的節點才會套用該設定。 JSON 檔案中未設定的任何設定都會保留預設值。 不支援 CustomLinuxOsConfig
的 OS 類型:Windows。
使用 az aks create
(部分機器翻譯) 命令並指定您的設定檔,使用自訂設定檔來建立新的叢集。 下列範例命令會建立具有自訂 ./linuxkubeletconfig.json
和 ./linuxosconfig.json
檔案的新叢集:
az aks create --name myAKSCluster --resource-group myResourceGroup --kubelet-config ./linuxkubeletconfig.json --linux-os-config ./linuxosconfig.json
將節點集區新增到叢集時,您可以使用在先前步驟中建立的自訂設定檔來指定 kubelet 設定。 Linux 和 Windows 10 節點集區不支援 CustomKubeletConfig
。
注意
當您將 Linux 節點集區新增至現有叢集時,可以指定 kubelet 設定、OS 設定或兩者。 當您將 Windows 節點集區新增至現有叢集時,僅能指定 kubelet 設定。 如果您在新增節點集區時指定設定,則只有新節點集區中的節點才會套用該設定。 JSON 檔案中未設定的任何設定都會保留預設值。
az aks nodepool add --name mynodepool1 --cluster-name myAKSCluster --resource-group myResourceGroup --kubelet-config ./linuxkubeletconfig.json
az aks nodepool add --name mynp1 --cluster-name myAKSCluster --resource-group myResourceGroup --os-type Windows --kubelet-config ./windowskubeletconfig.json
下列設定可以用來修改其他作業系統設定:
傳遞具有檔案位置的 --message-of-the-day
旗標,以在叢集建立或節點集區建立時取代 Linux 節點上當天的訊息。
az aks create --cluster-name myAKSCluster --resource-group myResourceGroup --message-of-the-day ./newMOTD.txt
az aks nodepool add --name mynodepool1 --cluster-name myAKSCluster --resource-group myResourceGroup --message-of-the-day ./newMOTD.txt
在套用自訂節點設定之後,您可以連線至主機 (部分機器翻譯),並驗證已在檔案系統上進行 sysctl
或設定變更,以確認這些設定已套用至節點。
Linux 和 Windows 節點集區支援 kubelet 自訂設定。 支援的參數有所不同,如下所述。
展開資料表
參數
允許的值/間隔
預設
描述
cpuManagerPolicy
無、靜態
none
靜態原則可讓具有整數 CPU 要求的保證 Pod 中的容器存取節點上的獨佔 CPU。
cpuCfsQuota
True、False
true
針對指定 CPU 限制的容器啟用/停用 CPU CFS 配額強制執行。
cpuCfsQuotaPeriod
間隔 (毫秒)
100ms
設定 CPU CFS 配額期間值。
imageGcHighThreshold
0-100
85
磁碟使用量的百分比,在此百分比之後,一律會執行映像記憶體回收。 將 觸發記憶體回收的最小磁碟使用量。 若要停用映像記憶體回收,請設定為 100。
imageGcLowThreshold
0-100,不高於 imageGcHighThreshold
80
磁碟使用量的百分比,在此百分比之前,絕不會執行映像記憶體回收。 可 觸發記憶體回收的最小磁碟使用量。
topologyManagerPolicy
none、best-effort、restricted、single-numa-node
none
最佳化 NUMA 節點對齊方式,如需詳細資訊,請參閱這裡 。
allowedUnsafeSysctls
kernel.shm*
、、 kernel.msg*
、 kernel.sem
、 fs.mqueue.*
、 net.*
無
不安全 sysctls 或不安全 sysctl 模式的允許清單。
containerLogMaxSizeMB
大小 (MB)
50
容器記錄檔在輪替之前的大小上限 (例如 10 MB)。
containerLogMaxFiles
≥ 2
5
容器可存在的容器記錄檔數目上限。
podMaxPids
-1 到核心 PID 限制
-1 (∞)
可在 Pod 中執行的程序識別碼數量上限
seccompDefault
Unconfined
, RuntimeDefault
Unconfined
設定所有工作負載的預設 seccomp 設定檔。 RuntimeDefault
會使用 containerd 的預設 seccomp 配置檔,限制特定系統呼叫來增強安全性。 受限制的 syscalls 將會失敗。 Unconfined
不會限制 syscalls,而且允許所有系統呼叫以減少安全性。 如需詳細資訊,請參閱 containerD default seccomp 配置檔 。 此參數處於預覽狀態。 使用az feature register
命令搭配 --namespace “Microsoft.ContainerService” 註冊 “KubeletDefaultSeccompProfilePreview” 功能旗標。
展開資料表
參數
允許的值/間隔
預設
描述
imageGcHighThreshold
0-100
85
磁碟使用量的百分比,在此百分比之後,一律會執行映像記憶體回收。 將 觸發記憶體回收的最小磁碟使用量。 若要停用映像記憶體回收,請設定為 100。
imageGcLowThreshold
0-100,不高於 imageGcHighThreshold
80
磁碟使用量的百分比,在此百分比之前,絕不會執行映像記憶體回收。 可 觸發記憶體回收的最小磁碟使用量。
containerLogMaxSizeMB
大小 (MB)
10
容器記錄檔在輪替之前的大小上限 (例如 10 MB)。
containerLogMaxFiles
≥ 2
5
容器可存在的容器記錄檔數目上限。
重要
為了簡化搜尋和可讀性,本文會依名稱顯示 OS 設定,但應該使用 camelCase 大寫慣例 ,將其新增至設定 JSON 檔案或 AKS API。
例如,如果您修改 'vm.max_map_count' 設定,則應該在設定 JSON 檔案中重新格式化為 'vmMaxMapCount'。
服務大量流量時,流量通常來自大量本機檔案。 您可以調整下列核心設定和內建限制,讓您能夠處理更多項目,但會耗用部分系統記憶體。
展開資料表
設定
允許的值/間隔
預設
描述
fs.file-max
8192 - 12000500
709620
Linux 核心將配置的檔案控制代碼數目上限,而增加此值,即可增加允許的已開啟檔案數目上限。
fs.inotify.max_user_watches
781250 - 2097152
1048576
系統允許的檔案監看式次數上限。 每個「監看式」 在 32 位元核心上大約是 90 個位元組,而在 64 位元核心上大約是 160 個位元組。
fs.aio-max-nr
65536 - 6553500
65536
aio-nr 顯示目前全系統的非同步 IO 要求數目。 aio-max-nr 可讓您變更 aio-nr 可成長為的最大值。
fs.nr_open
8192 - 20000500
1048576
程序可配置的檔案控制代碼數目上限。
針對預期要處理非常大量並行工作階段的代理程式節點,您可以使用下面的 TCP 和網路選項子集,以調整每個節點集區。
展開資料表
設定
允許的值/間隔
預設
描述
net.core.somaxconn
4096 - 3240000
16384
可針對任何所指定接聽通訊端排入佇列的連線要求數目上限。 傳遞至 listen(2) 函數的待處理項目參數值上限。 如果待處理項目引數大於 somaxconn
,則會以無訊息方式截斷此限制。
net.core.netdev_max_backlog
1000 - 3240000
1000
介面接收封包的速度比核心處理封包的速度還要快時,在 INPUT 端排入佇列的封包數目上限。
net.core.rmem_max
212992 - 134217728
212992
接收通訊端緩衝區大小上限 (位元組)。
net.core.wmem_max
212992 - 134217728
212992
傳送通訊端緩衝區大小上限 (位元組)。
net.core.optmem_max
20480 - 4194304
20480
每個通訊端允許的輔助緩衝區大小上限 (選項記憶體緩衝區)。 少數情況會使用通訊端選項記憶體來儲存與通訊端使用相關的額外結構。
net.ipv4.tcp_max_syn_backlog
128 - 3240000
16384
尚未接收到連線端用戶端通知的佇列連線要求數目上限。 如果超過此數目,則核心將會開始卸除要求。
net.ipv4.tcp_max_tw_buckets
8000 - 1440000
32768
系統同時持有的 timewait
通訊端數目上限。 如果超過此數目,則會立即終結時間等候通訊端,並列印出警告。
net.ipv4.tcp_fin_timeout
5 - 120
60
孤立 (任何應用程式都不再參考) 連線在本機端中止之前,將維持 FIN_WAIT_2 狀態的時間長度。
net.ipv4.tcp_keepalive_time
30 - 432000
7200
啟用 keepalive
時,TCP 送出 keepalive
訊息的頻率。
net.ipv4.tcp_keepalive_probes
1 - 15
9
TCP 在決定連線中斷之前所送出的 keepalive
探查數目。
net.ipv4.tcp_keepalive_intvl
10 - 90
75
送出探查的頻率。將其乘上 tcp_keepalive_probes
,即構成啟動探查之後終止未回應連線的時間。
net.ipv4.tcp_tw_reuse
0 或 1
0
在通訊協定觀點視為安全時,允許針對新的連線重複使用 TIME-WAIT
通訊端。
net.ipv4.ip_local_port_range
最先:1024 - 60999,最後:32768 - 65535]
最先:32768,最後:60999
TCP 和 UDP 流量用來選擇本機連接埠的本機連接埠範圍。 由兩個數字組成:第一個數字是代理程式節點上允許 TCP 和 UDP 流量的第一個本機連接埠,第二個則是最後一個本機連接埠號碼。
net.ipv4.neigh.default.gc_thresh1
128 - 80000
4096
可能在 ARP 快取中的項目數下限。 如果項目數低於此設定,則不會觸發記憶體回收。
net.ipv4.neigh.default.gc_thresh2
512 - 90000
8192
可能在 ARP 快取中的項目數非強制上限。 這可能是最重要的設定,因為 ARP 記憶體回收大約將會在達到此非強制上限之後的 5 秒觸發。
net.ipv4.neigh.default.gc_thresh3
1024 - 100000
16384
ARP 快取中項目數強制上限。
net.netfilter.nf_conntrack_max
131072 - 2097152
131072
nf_conntrack
是一個模組,可追蹤 Linux 內 NAT 的連線項目。 nf_conntrack
模組會使用雜湊表來記錄 TCP 通訊協定的「已建立連線」 記錄。 nf_conntrack_max
是雜湊表中的節點數目上限,即 nf_conntrack
模組所支援的連線數目上限或連線追蹤資料表的大小。
net.netfilter.nf_conntrack_buckets
65536 - 524288
65536
nf_conntrack
是一個模組,可追蹤 Linux 內 NAT 的連線項目。 nf_conntrack
模組會使用雜湊表來記錄 TCP 通訊協定的「已建立連線」 記錄。 nf_conntrack_buckets
是雜湊表的大小。
如同檔案描述項限制,程序可建立的背景工作角色或執行緒數目受到核心設定和使用者限制的限制。 AKS 上的使用者限制無限制。
展開資料表
設定
允許的值/間隔
預設
描述
kernel.threads-max
20 - 513785
55601
程序可以啟動背景工作執行緒。 可建立的所有執行緒數目上限是使用核心設定 kernel.threads-max
所設定。
下面的設定可以用來微調 Linux 核心的虛擬記憶體 (VM) 子系統的作業,以及將變更過的資料 writeout
至磁碟。
展開資料表
設定
允許的值/間隔
預設
描述
vm.max_map_count
65530 - 262144
65530
此檔案包含程序可能具有的記憶體對應區域數目上限。 記憶體對應區域用作由 mmap
、mprotect
和 madvise
直接呼叫 malloc
的副作用,同時也是載入共用程式庫時的副作用。
vm.vfs_cache_pressure
1 - 100
100
此百分比值可控制核心回收記憶體的傾向,而此記憶體用於快取目錄和 inode 物件。
vm.swappiness
0 - 100
60
此控制項用來定義核心將交換記憶體分頁的積極程度。 較高的值將會增加積極性,較低的值則減少交換量。 值 0 會指示核心不要在可用和檔案所支援分頁數量小於區域中的上限標記之前起始交換。
swapFileSizeMB
1 MB - 暫存磁碟 (/dev/sdb) 的大小
無
SwapFileSizeMB 指定將會在此節點集區的代理程式節點上建立交換檔案大小 (MB)。
transparentHugePageEnabled
always
、 、 madvise
never
always
透明 Hugepage 是 Linux 核心功能,旨在藉由更有效率地使用處理器的記憶體對應硬體來改善效能。 啟用時,核心會盡可能嘗試配置 hugepages
,如果 mmap
區域自然符合 2 MB,則任何 Linux 程序都會接收到 2 MB 分頁。 在某些情況下,全系統啟用 hugepages
時,應用程式最後可能會配置更多記憶體資源。 應用程式可能會 mmap
大型區域,但只觸控該區域的 1 個位元組,在此情況下,可能會配置 2 MB 分頁,而不是 4k 分頁。 此案例是為什麼可能全系統停用 hugepages
或只在 MADV_HUGEPAGE madvise
區域內擁有其的原因。
transparentHugePageDefrag
always
、、 defer
、 defer+madvise
、 madvise
、 never
madvise
此值可控制核心是否應該積極使用記憶體壓縮,以提供更多可用的 hugepages
。