中文
注册

配置K8s Topology Manager

配置K8s的Topology Manager,并通过查看应用是否被限制在一个NUMA上运行来验证是否配置成功。

  1. 安装Docker。
    yum install docker
  2. 部署K8s集群。详细信息请参见部署K8s集群
  3. 修改配置文件。
    1. 打开配置文件。
      vim /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
      原配置文件默认内容如下。
      # Note: This dropin only works with kubeadm and kubelet v1.11+ 
      [Service] 
      Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf" 
      Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml" 
      # This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically 
      EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env 
      # This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use 
      # the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file. 
      EnvironmentFile=-/etc/sysconfig/kubelet 
      ExecStart= 
      ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS
    2. 按“i”进入编辑模式,将配置文件修改为如下内容。
      # Note: This dropin only works with kubeadm and kubelet v1.11+ 
      [Service] 
      Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf" 
      Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml" 
      # This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically 
      EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env 
      # This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use 
      # the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file. 
      EnvironmentFile=-/etc/sysconfig/kubelet 
      # 修改1 增加两行ExecStartPre配置 
      ExecStartPre=/usr/bin/mkdir -p /sys/fs/cgroup/cpuset/system.slice/kubelet.service 
      ExecStartPre=/usr/bin/mkdir -p /sys/fs/cgroup/hugetlb/system.slice/kubelet.service 
      ExecStart= 
      # 修改2 在ExecStart配置末尾增加--kube-reserved、--cpu-manager-policy、--feature-gates、--topology-manager-policy等参数 
      ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS --kube-reserved=cpu=2,memory=250Mi --cpu-manager-policy=static --feature-gates=CPUManager=true --topology-manager-policy=single-numa-node
    3. 按“Esc”键退出编辑模式,输入:wq!,按“Enter”键保存并退出文件。
  4. 删除CPU管理状态文件cpu_manager_state。
    rm -f /var/lib/kubelet/cpu_manager_state
  5. 重启kubelet服务。
    systemctl daemon-reload && systemctl restart kubelet

    查看kubelet服务状态。

    systemctl status kubelet

    当出现如下内容表示成功启动服务。

  6. 修改创建应用的yaml文件。例如example.yaml文件。
    1. 打开文件。
      vi example.yaml
    2. 按“i”进入编辑模式,增加如下配置信息。请根据规划部署的Node节点的CPU、内存实际情况选择合适的CPU、内存配置值。
      resources:
        limits:
              cpu: 16
              memory: 64Gi
        requests:
              cpu: 16
              memory: 64Gi

      为了使Pod能够生效single-numa-node模式的功能,必须配置Pod的resources字段中limits下的cpumemory值,且resources字段中limits下的cpumemory值需要和requests下的cpumemory值一样。如果不指定requests的配置值,则默认requests的配置值和limits的配置值一样。

    3. 按“Esc”键退出编辑模式,输入:wq!,按“Enter”键保存并退出文件。
  7. 在管理节点上重新部署应用。
    kubectl apply -f *.ymal
  8. 查看Pod以及NUMA的使用情况。
    1. 查看应用的容器。
      docker ps | grep tp

      tp表示查找出用户应用容器的关键词。

      预期结果示例如下,678044fcecaf为应用的容器的ID。

    2. 查看Pod使用的CpusetCpus,观察应用是否被限制在一个NUMA上运行。
      docker inspect xxx | grep Cpuset

      xxx表示8.a中应用的容器的ID。

      可以看到Pod被限制在核2-11上。

      查看物理机NUMA上核的分布情况。

      lscpu

      物理机NUMA上核的分布范围包含了Pod所在NUMA的范围,可以确认应用确实被限制在一个NUMA上,K8s Topology Manager已经配置成功。

搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词