无法在 AKS 节点上激活 HugePage

Impossible to activate HugePage on AKS nodes

亲爱的 Whosebug 社区,您好,

我在 AKS 群集上激活 HugePage 时遇到困难。

  1. 我注意到我首先必须配置一个支持 HugePage 的节点池。
  2. 然后我知道我还必须配置 pod

但是尽管我做了很多事情,我还是没能做到。

如果我遵循 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 立即申请!