无法在 AKS 节点上激活 HugePage
Impossible to activate HugePage on AKS nodes
亲爱的 Whosebug 社区,您好,
我在 AKS 群集上激活 HugePage 时遇到困难。
- 我注意到我首先必须配置一个支持 HugePage 的节点池。
- 唯一官方的 Azure Hugepage 文档是关于 transparentHugePage (https://docs.microsoft.com/en-us/azure/aks/custom-node-configuration),但我不知道它是否足够...
- 然后我知道我还必须配置 pod
- 我想依赖这个 (https://kubernetes.io/docs/tasks/manage-hugepages/scheduling-hugepages/),但是 2) 不工作...
但是尽管我做了很多事情,我还是没能做到。
如果我遵循 Microsoft 文档,我的节点池会像这样生成:
"kubeletConfig": {
"allowedUnsafeSysctls": null,
"cpuCfsQuota": null,
"cpuCfsQuotaPeriod": null,
"cpuManagerPolicy": null,
"failSwapOn": false,
"imageGcHighThreshold": null,
"imageGcLowThreshold": null,
"topologyManagerPolicy": null
},
"linuxOsConfig": {
"swapFileSizeMb": null,
"sysctls": {
"fsAioMaxNr": null,
"fsFileMax": null,
"fsInotifyMaxUserWatches": null,
"fsNrOpen": null,
"kernelThreadsMax": null,
"netCoreNetdevMaxBacklog": null,
"netCoreOptmemMax": null,
"netCoreRmemMax": null,
"netCoreSomaxconn": null,
"netCoreWmemMax": null,
"netIpv4IpLocalPortRange": "32000 60000",
"netIpv4NeighDefaultGcThresh1": null,
"netIpv4NeighDefaultGcThresh2": null,
"netIpv4NeighDefaultGcThresh3": null,
"netIpv4TcpFinTimeout": null,
"netIpv4TcpKeepaliveProbes": null,
"netIpv4TcpKeepaliveTime": null,
"netIpv4TcpMaxSynBacklog": null,
"netIpv4TcpMaxTwBuckets": null,
"netIpv4TcpRmem": null,
"netIpv4TcpTwReuse": null,
"netIpv4TcpWmem": null,
"netIpv4TcpkeepaliveIntvl": null,
"netNetfilterNfConntrackBuckets": null,
"netNetfilterNfConntrackMax": null,
"vmMaxMapCount": null,
"vmSwappiness": null,
"vmVfsCachePressure": null
},
"transparentHugePageDefrag": "defer+madvise",
"transparentHugePageEnabled": "madvise"
但是我的节点还是那样:
# kubectl describe nodes aks-deadpoolhp-31863567-vmss000000|grep hugepage
Capacity:
attachable-volumes-azure-disk: 16
cpu: 8
ephemeral-storage: 129901008Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 32940620Ki
pods: 110
Allocatable:
attachable-volumes-azure-disk: 16
cpu: 7820m
ephemeral-storage: 119716768775
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 28440140Ki
pods: 110
我的 kube 版本是 1.16.15
我还看到我应该像这样启用 featuregate --feature-gates=HugePages=true
(https://dev.to/dannypsnl/hugepages-on-kubernetes-5e7p) 但我不知道如何在 AKS 中启用它...无论如何因为我的节点没有显示任何HugePage 可用性,我不确定它现在是否有用。
我什至尝试重新使用--kubeconfig
创建aks集群,但一切都保持不变:我不能使用 HugePage...
我再次需要你的帮助,我完全迷失在这个 AKS 服务中...
- 在笔记本电脑上安装 kubectl-node-shell
curl -LO https://github.com/kvaps/kubectl-node-shell/raw/master/kubectl-node_shell
chmod +x ./kubectl-node_shell
sudo mv ./kubectl-node_shell /usr/local/bin/kubectl-node_shell
- 获取你想进入的节点:
kubectl get pod <YOUR_POD> -o custom-columns=CONTAINER:.spec.nodeName -n <YOUR_NAMESPACE>
- 如果节点是 NONE,这意味着您的 pod 处于挂起状态。随机选取一个节点:
kubectl get pod -n <YOUR_NAMESPACE>
- 进入你的节点:
kubectl node-shell <NODE>
- 配置大页面:
mkdir -p /mnt/huge
mount -t hugetlbfs nodev /mnt/huge
echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
cat /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
- 重启kubelet(还在节点中,是的):
systemctl restart kubelet
- 通过 C-d (Ctrl + d) 从节点退出-shell
- 检查 HugePage ON(即值不能为 0)
kubectl describe node <NODE>|grep -i -e "capacity" -e "allocatable" -e "huge"
- 要么检查你的 pod 不再处于 pending 状态,要么启动你的 helm install/kubectl 立即申请!
亲爱的 Whosebug 社区,您好,
我在 AKS 群集上激活 HugePage 时遇到困难。
- 我注意到我首先必须配置一个支持 HugePage 的节点池。
- 唯一官方的 Azure Hugepage 文档是关于 transparentHugePage (https://docs.microsoft.com/en-us/azure/aks/custom-node-configuration),但我不知道它是否足够...
- 然后我知道我还必须配置 pod
- 我想依赖这个 (https://kubernetes.io/docs/tasks/manage-hugepages/scheduling-hugepages/),但是 2) 不工作...
但是尽管我做了很多事情,我还是没能做到。
如果我遵循 Microsoft 文档,我的节点池会像这样生成:
"kubeletConfig": {
"allowedUnsafeSysctls": null,
"cpuCfsQuota": null,
"cpuCfsQuotaPeriod": null,
"cpuManagerPolicy": null,
"failSwapOn": false,
"imageGcHighThreshold": null,
"imageGcLowThreshold": null,
"topologyManagerPolicy": null
},
"linuxOsConfig": {
"swapFileSizeMb": null,
"sysctls": {
"fsAioMaxNr": null,
"fsFileMax": null,
"fsInotifyMaxUserWatches": null,
"fsNrOpen": null,
"kernelThreadsMax": null,
"netCoreNetdevMaxBacklog": null,
"netCoreOptmemMax": null,
"netCoreRmemMax": null,
"netCoreSomaxconn": null,
"netCoreWmemMax": null,
"netIpv4IpLocalPortRange": "32000 60000",
"netIpv4NeighDefaultGcThresh1": null,
"netIpv4NeighDefaultGcThresh2": null,
"netIpv4NeighDefaultGcThresh3": null,
"netIpv4TcpFinTimeout": null,
"netIpv4TcpKeepaliveProbes": null,
"netIpv4TcpKeepaliveTime": null,
"netIpv4TcpMaxSynBacklog": null,
"netIpv4TcpMaxTwBuckets": null,
"netIpv4TcpRmem": null,
"netIpv4TcpTwReuse": null,
"netIpv4TcpWmem": null,
"netIpv4TcpkeepaliveIntvl": null,
"netNetfilterNfConntrackBuckets": null,
"netNetfilterNfConntrackMax": null,
"vmMaxMapCount": null,
"vmSwappiness": null,
"vmVfsCachePressure": null
},
"transparentHugePageDefrag": "defer+madvise",
"transparentHugePageEnabled": "madvise"
但是我的节点还是那样:
# kubectl describe nodes aks-deadpoolhp-31863567-vmss000000|grep hugepage
Capacity:
attachable-volumes-azure-disk: 16
cpu: 8
ephemeral-storage: 129901008Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 32940620Ki
pods: 110
Allocatable:
attachable-volumes-azure-disk: 16
cpu: 7820m
ephemeral-storage: 119716768775
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 28440140Ki
pods: 110
我的 kube 版本是 1.16.15
我还看到我应该像这样启用 featuregate --feature-gates=HugePages=true
(https://dev.to/dannypsnl/hugepages-on-kubernetes-5e7p) 但我不知道如何在 AKS 中启用它...无论如何因为我的节点没有显示任何HugePage 可用性,我不确定它现在是否有用。
我什至尝试重新使用--kubeconfig
创建aks集群,但一切都保持不变:我不能使用 HugePage...
我再次需要你的帮助,我完全迷失在这个 AKS 服务中...
- 在笔记本电脑上安装 kubectl-node-shell
curl -LO https://github.com/kvaps/kubectl-node-shell/raw/master/kubectl-node_shell
chmod +x ./kubectl-node_shell
sudo mv ./kubectl-node_shell /usr/local/bin/kubectl-node_shell
- 获取你想进入的节点:
kubectl get pod <YOUR_POD> -o custom-columns=CONTAINER:.spec.nodeName -n <YOUR_NAMESPACE>
- 如果节点是 NONE,这意味着您的 pod 处于挂起状态。随机选取一个节点:
kubectl get pod -n <YOUR_NAMESPACE>
- 进入你的节点:
kubectl node-shell <NODE>
- 配置大页面:
mkdir -p /mnt/huge
mount -t hugetlbfs nodev /mnt/huge
echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
cat /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
- 重启kubelet(还在节点中,是的):
systemctl restart kubelet
- 通过 C-d (Ctrl + d) 从节点退出-shell
- 检查 HugePage ON(即值不能为 0)
kubectl describe node <NODE>|grep -i -e "capacity" -e "allocatable" -e "huge"
- 要么检查你的 pod 不再处于 pending 状态,要么启动你的 helm install/kubectl 立即申请!