详情页标题前

阿里云容器服务ACK节点与节点池FAQ-云淘科技

详情页1

本文主要为您介绍节点与节点池常见问题。

  • 如何在已有集群的GPU节点上手动升级Kernel?

  • 修复GPU节点容器启动问题

  • 添加Kubernetes集群节点的常见问题

  • 移除节点时提示”drain-node job execute timeout”错误

  • 如何更改ACK集群中Worker节点的主机名称?

  • 如何更换节点池OS镜像?

  • 开启期望节点数与未开启期望节点数的节点池有什么不同?

  • 如何将已有的节点添加到集群?

  • 如何在节点池中选用抢占性实例?

  • 如何更改节点Pod数量?

如何在已有集群的GPU节点上手动升级Kernel?

下面为您介绍如何在已有集群的GPU节点上手动升级Kernel。

说明

当前kernel版本低于3.10.0-957.21.3

请确认需要升级的目标kernel版本,并谨慎操作。

本文提供方案并不涉及kernel升级,仅针对在kernel升级的前提下对应的Nvidia驱动升级。

  1. 获取集群KubeConfig并通过kubectl工具连接集群。

  2. 将GPU节点设置为不可调度(本例以节点 cn-beijing.i-2ze19qyi8votgjz12345为例)。

    kubectl cordon cn-beijing.i-2ze19qyi8votgjz12345
    
    node/cn-beijing.i-2ze19qyi8votgjz12345 already cordoned
  3. 将要升级驱动的GPU节点进行排水。

    kubectl drain cn-beijing.i-2ze19qyi8votgjz12345 --grace-period=120 --ignore-daemonsets=true
    
    node/cn-beijing.i-2ze19qyi8votgjz12345 cordoned
    WARNING: Ignoring DaemonSet-managed pods: flexvolume-9scb4, kube-flannel-ds-r2qmh, kube-proxy-worker-l62sf, logtail-ds-f9vbg
    pod/nginx-ingress-controller-78d847fb96-5fkkw evicted
  4. 卸载当前的nvidia-driver。

    说明

    本步骤中卸载的是版本为384.111的驱动包,如果您的驱动版本不是384.111,则需要在Nvidia官网下载对应的驱动安装包,并将本步骤中的384.111替换成您实际的版本。

    1. 登录到该GPU节点,通过nvidia-smi查看驱动版本。

      sudo nvidia-smi -a | grep 'Driver Version'
      Driver Version                      : 384.111
    2. 下载Nvidia驱动安装包。

      sudo cd /tmp/
      sudo curl -O https://cn.download.nvidia.cn/tesla/384.111/NVIDIA-Linux-x86_64-384.111.run

      说明

      需要在安装包中卸载Nvidia。

    3. 卸载当前Nvidia驱动。

      sudo chmod u+x NVIDIA-Linux-x86_64-384.111.run
      sudo sh ./NVIDIA-Linux-x86_64-384.111.run --uninstall -a -s -q
  5. 升级Kernel。

    您可以根据需要升级Kernel。

  6. 重启GPU机器。

    sudo reboot
  7. 重新登录GPU节点,安装对应的kernel devel。

    sudo yum install -y kernel-devel-$(uname -r)
  8. 请到Nvidia官网下载和安装您需要的Nvidia驱动, 本文以410.79为例。

    sudo cd /tmp/
    sudo curl -O https://cn.download.nvidia.cn/tesla/410.79/NVIDIA-Linux-x86_64-410.79.run
    sudo chmod u+x NVIDIA-Linux-x86_64-410.79.run
    sudo sh ./NVIDIA-Linux-x86_64-410.79.run -a -s -q
    
    warm up GPU
    sudo nvidia-smi -pm 1 || true
    sudo nvidia-smi -acp 0 || true
    sudo nvidia-smi --auto-boost-default=0 || true
    sudo nvidia-smi --auto-boost-permission=0 || true
    sudo nvidia-modprobe -u -c=0 -m || true
  9. 查看 /etc/rc.d/rc.local,确认其中是否包含以下配置,如果没有请手动添加。

    sudo nvidia-smi -pm 1 || true
    sudo nvidia-smi -acp 0 || true
    sudo nvidia-smi --auto-boost-default=0 || true
    sudo nvidia-smi --auto-boost-permission=0 || true
    sudo nvidia-modprobe -u -c=0 -m || true
  10. 重启kubelet和docker。

    sudo service kubelet stop
    sudo service docker restart
    sudo service kubelet start
  11. 将这个GPU节点重新设置为可调度。

    kubectl uncordon cn-beijing.i-2ze19qyi8votgjz12345
    
    node/cn-beijing.i-2ze19qyi8votgjz12345 already uncordoned
  12. 在GPU节点上的device plugin pod验证版本。

    kubectl exec -n kube-system -t nvidia-device-plugin-cn-beijing.i-2ze19qyi8votgjz12345 nvidia-smi
    Thu Jan 17 00:33:27 2019
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 410.79       Driver Version: 410.79       CUDA Version: N/A      |
    |-------------------------------+----------------------+----------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    |===============================+======================+======================|
    |   0  Tesla P100-PCIE...  On   | 00000000:00:09.0 Off |                    0 |
    | N/A   27C    P0    28W / 250W |      0MiB / 16280MiB |      0%      Default |
    +-------------------------------+----------------------+----------------------+
    
    +-----------------------------------------------------------------------------+
    | Processes:                                                       GPU Memory |
    |  GPU       PID   Type   Process name                             Usage      |
    |=============================================================================|
    |  No running processes found                                                 |
    +-----------------------------------------------------------------------------+

    说明

    如果通过docker ps命令,发现GPU节点没有容器被启动,请参见修复GPU节点容器启动问题。

修复GPU节点容器启动问题

在某些特定Kubernetes版本中的GPU节点上,重启Kubelet和Docker时,发现没有容器被启动。

sudo service kubelet stop
Redirecting to /bin/systemctl stop kubelet.service
sudo service docker stop
Redirecting to /bin/systemctl stop docker.service
sudo service docker start
Redirecting to /bin/systemctl start docker.service
sudo service kubelet start
Redirecting to /bin/systemctl start kubelet.service

sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

执行以下命令,查看Docker的Cgroup Driver。

sudo docker info | grep -i cgroup
Cgroup Driver: cgroupfs

此时发现的Cgroup Driver类型是cgroupfs。

您可以按照以下操作,修复该问题。

  1. 备份/etc/docker/daemon.json,完成后,执行以下命令更新/etc/docker/daemon.json。

    sudo cat >/etc/docker/daemon.json <<-EOF
    {
        "default-runtime": "nvidia",
        "runtimes": {
            "nvidia": {
                "path": "/usr/bin/nvidia-container-runtime",
                "runtimeArgs": []
            }
        },
        "exec-opts": ["native.cgroupdriver=systemd"],
        "log-driver": "json-file",
        "log-opts": {
            "max-size": "100m",
            "max-file": "10"
        },
        "oom-score-adjust": -1000,
        "storage-driver": "overlay2",
        "storage-opts":["overlay2.override_kernel_check=true"],
        "live-restore": true
    }
    EOF
  2. 执行以下命令,重启Docker和Kubelet。

    sudo service kubelet stop
    Redirecting to /bin/systemctl stop kubelet.service
    sudo service docker restart
    Redirecting to /bin/systemctl restart docker.service
    sudo service kubelet start
    Redirecting to /bin/systemctl start kubelet.service
  3. 执行以下命令,确认Docker的Cgroup Driver的类型为systemd。

    sudo docker info | grep -i cgroup
    Cgroup Driver: systemd

如何更改ACK集群中Worker节点的主机名称?

集群创建完成后,不支持自定义Worker节点的主机名称,但是您可以通过节点池的节点命名规则来修改Worker节点的主机名称。

说明

创建集群时,您可以在自定义节点名称参数中定义Worker节点的主机名称。具体操作,请参见创建Kubernetes托管版集群。

  1. 移除节点。

    1. 登录容器服务管理控制台。

    2. 在控制台左侧导航栏,单击集群

    3. 在集群管理页左侧导航栏,选择节点管理 > 节点

    4. 节点页面单击目标节点右侧操作列下的更多 > 移除

    5. 在弹出的对话框中选中我已了解上述说明,确认移除节点,然后单击确定

  2. 将移除的节点再添加到节点池。具体操作,请参见手动添加节点。

    添加的节点将根据节点池的节点命名规则进行命名。

如何更换节点池OS镜像?

更换节点池OS镜像的方法与升级节点池的方法一致,以下为详细操作步骤。

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择节点管理 > 节点池

  3. 在目标节点池所在行,单击操作列的更多 > 升级

  4. 选中更换操作系统,选择要替换的镜像,然后单击开始升级

    说明

    更换操作系统时,默认选中Kubelet升级通过替换节点系统盘的方式升级节点池。请根据实际情况,确认是否选中升级前为节点建立快照

开启期望节点数与未开启期望节点数的节点池有什么不同?

期望节点数是指节点池应该维持的节点数量。您可以通过调整期望节点数,达到扩容或缩容节点池的目的。但部分老节点池没有设置过期望节点数,从而未开启期望节点数功能。

开启或未开启期望节点数的节点池对于移除节点、释放ECS等不同的操作方式,会有不同感知,具体如下表。

操作

开启期望节点数节点池

未开启期望节点数节点池

建议

通过ACK的OpenAPI或者控制台移除指定节点。

移除指定节点,期望节点数减少移除节点的数目。例如节点池移除指定节点前,期望节点数为10。移除3个节点后,期望节点数更新为7。

移除指定节点。

推荐使用此方式进行缩容。

通过kubectl delete node方式移除节点。

期望节点数不会感知,没有变化。

无变化。

不推荐。

手动通过ECS控制台或者OpenAPI释放ECS。

生成新ECS实例,补充到设置的期望节点数。

节点池不感知。不会有新ECS实例生成。节点池节点列表被删除的节点会显示状态为“未知”一段时间。

不推荐,会导致ACK、ESS数据与实际情况不一致,请使用推荐方式移除节点。具体操作,请参见移除节点。

包年包月ECS实例到期。

生成新ECS实例,补充到设置的期望节点数。

节点池不感知。不会有新ECS实例生成。节点池节点列表被删除的节点会显示状态为“未知”一段时间。

不推荐,会导致ACK、ESS数据与实际情况不一致,请使用推荐方式移除节点。具体操作,请参见移除节点。

ESS伸缩组手动开启“实例的健康检查”,并且ECS实例无法通过ESS健康检查(如停机)。

生成新ECS实例,补充到设置的期望节点数。

生成新ECS实例,替换停机实例。

不推荐,请不要直接操作节点池相关的伸缩组。

通过ESS将ECS实例从伸缩组中移除,并且不修改期望实例数。

生成新ECS实例,补充到设置的期望节点数。

不会生成新的ECS实例。

不推荐,请不要直接操作节点池相关的伸缩组。

如何将已有的节点添加到集群?

当您希望将已有节点加入到集群中却没有节点池时,您可以创建一个0节点的节点池,然后手动添加已有ECS为节点。创建0节点的节点池时,选择和您已有的ECS相同的虚拟交换机,并将期望节点数设置为0。手动添加已有ECS为节点,请参见添加已有节点。

说明

每个节点池对应一个弹性伸缩组实例,节点池本身不额外收费,但节点池使用的ECS实例等云资源由对应的云产品计费。

如何在节点池中选用抢占性实例?

可以通过新建节点池或者spot-instance-advisor命令行的方式使用抢占性实例。详细信息请参见抢占式实例节点池最佳实践。

说明

不支持在创建集群时,进行节点池配置中选择抢占性实例。

如何更改节点Pod数量?

  • 不同集群单节点支持的最大Pod数是有限制的,部分集群支持申请例外,提升配额。详细信息,请参见配额限制。

  • 不同网络插件类型对节点Pod数量也是有限制的。集群的网络插件类型可通过集群的基本信息页签查看。

    • Flannel网络插件,创建好集群后,每个节点可分配的Pod数量是不支持修改的。 如果Pod数量不够,可以扩容节点池增加节点,或者重建集群并重新规划Pod网段。关于扩容节点池,请参见扩缩容节点池。关于创建集群,请参见创建Kubernetes托管版集群。

    • Terway网络插件,可以通过变更实例规格来扩容单节点Pod数量 。关于变更方式,请参见升降配方式概述。

      说明

      • 变更实例规格后,需要设置节点为不可调度,并对节点进行排水,然后重启节点,重启节点后再恢复调度。详细信息,请参见设置节点调度。

      • 查询ECS规格支持的弹性网卡以及单个ENI支持的私有IP数,请参见实例规格族。

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:https://www.yunxiaoer.com/159050.html

(0)
上一篇 2023年12月10日
下一篇 2023年12月10日
详情页2

相关推荐

  • 阿里云容器服务ACK服务网格概述-云淘科技

    您可以将部署在容器服务Kubernetes版(ACK)中的应用接入阿里云服务网格ASM,简化服务的网格化治理,实现服务的可观测性,减轻开发与运维的工作负担。 背景信息 阿里云服务网格(Service Mesh,简称ASM)提供一个全托管式的服务网格平台,兼容社区Istio开源服务网格,用于简化服务的治理,包括服务调用之间的流量路由与拆分管理、服务间通信的认证…

    2023年12月10日
  • 阿里云容器服务ACK为已有集群开启公网访问能力-云淘科技

    SNAT可以为VPC内无公网IP的ECS实例或集群提供访问互联网的代理服务。如果您在创建集群时未开启SNAT功能,可以通过ACK控制台为已有集群开启SNAT功能。本文介绍如何在ACK控制台为未开启公网访问的集群开启SNAT,以实现集群的公网访问能力。 背景信息 ACK暂不支持通过API方式为已有集群开启SNAT功能。关于SNAT相关的说明,请参见什么是NAT…

    2023年12月10日
  • 阿里云容器服务ACK使用Terraform管理已创建的集群-云淘科技

    Terraform支持导入和管理ACK的存量资源,例如集群、节点池等。本文介绍如何通过Terraform管理存量ACK托管版集群。 前提条件 已创建ACK托管版集群,其中包含一个有两个节点的节点池。具体操作,请参见使用Terraform创建ACK托管版集群。 已安装Terraform。 说明 请确认Terraform版本不低于v0.12.28,可通过terr…

    阿里云容器服务 2023年12月10日
  • 阿里云容器服务ACK最小化集群访问规则-云淘科技

    创建集群或节点池指定已有安全组时,系统默认不会为安全组配置额外的访问规则,请自行管理安全组规则。本文介绍如何配置普通安全组和企业安全组的集群访问规则。 您可以通过添加安全组规则,允许或禁止安全组内的ECS实例对公网或私网的访问。更多信息,请参见添加安全组规则。 普通安全组 入方向 集群访问规则 协议 端口 授权对象 推荐范围 ICMP -1/-1(不限制端口…

    阿里云容器服务 2023年12月10日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云容器服务ACKDNS最佳实践-云淘科技

    DNS是Kubernetes集群中至关重要的基础服务之一,在客户端设置不合理、集群规模较大等情况下DNS容易出现解析超时、解析失败等现象。本文介绍Kubernetes集群中DNS的最佳实践,帮助您避免此类问题。 前提条件 创建Kubernetes托管版集群 获取集群KubeConfig并通过kubectl工具连接集群 本文目录 DNS最佳实践包含客户端和服务…

    阿里云容器服务 2023年12月10日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。