ZStack Logo

ZStack AIOS

部署容器管理

从环境准备到管理节点、AI 模型平台、容器管理的部署流程。

ZStack AIOS上部署容器管理模块以使用容器功能,为AI模型平台提供容器引擎,使推理服务、精调任务等可以运行在容器实例上。
说明: 如不使用容器功能,可跳过本流程。

部署前,请确保已上传容器管理-CPU容器管理-vCPU模块许可证。

部署容器管理包括以下步骤:
  1. 安装容器管理模块
  2. 配置容器管理业务集群
  3. 创建容器管理外部网络
  4. 设置三层网络保留网络段
  5. 创建ai-model-registry仓库并上传AI推理镜像 (容器)
  6. 同步容器管理业务集群
  7. (可选) 修改镜像仓库容器镜像上传限速
  1. 安装容器管理功能模块
    1. 上传容器管理 (ZStack Zaku) 安装包。
      根据准备工作-软件工具,获取容器管理 (ZStack Zaku) 安装包。将该安装包重命名为image.qcow2,并分别存放在管理节点 (双管理节点环境下,请分别存放到两个管理节点) 和镜像仓库的以下路径 (如没有则新建) :/opt/zstack-marketplace-repo/zstack_io_zaku/${Architecture}/3.8.0/
      说明: 本路径中,${Architecture}表示安装包架构
      • 安装包架构为x86时,使用以下路径:/opt/zstack-marketplace-repo/zstack_io_zaku/x86_64/3.8.0/
      • 镜像架构为ARM时,使用以下路径:/opt/zstack-marketplace-repo/zstack_io_zaku/aarch64/3.8.0/
    2. 安装ZStack Zaku容器管理。
      登录ZStack AIOS UI界面,点击运营管理 > 应用市场 > 默认应用,选择ZStack Zaku容器管理,点击安装应用,弹出安装应用界面。

      该步骤将创建1台或3台云主机作为容器管理的管理集群节点。

      可参考以下示例输入相应内容:
      • 名称:设置应用名称
      • CPU架构:选择应用CPU架构
      • 版本:选择3.8.0
      • CPU:设置云主机CPU核数,生产环境建议设置16核
      • 内存:设置云主机内存,生产环境建议设置32GB
      • 镜像服务器:选择镜像服务器
      • 网络:为云主机加载业务网络
        说明:
        • 请确保已将规划的业务网络作为三层网络添加到ZStack AIOS
        • 请确保该网络能和ZStack AIOS管理节点通信。
      • 根云盘:设置云主机根云盘规格
      • 主存储:可选项。选择云主机根云盘所在的主存储,建议选择使用SSD硬盘的存储
      • Ceph存储池:如主存储为Ceph类型,需选择Ceph存储池
      • 数据云盘:设置云主机加载的第一块数据云盘的规格
      • 数据云盘:设置云主机加载的第二块数据云盘的规格
        说明:
        • 安装ZStack Zaku容器管理时,云主机至少加载一块数据云盘。此外,用户还可以单独配置第二块数据云盘,专用于存放容器镜像。
        • 如预计后续使用的容器镜像数量较多或容量较大,建议单独配置第二块数据云盘。
      • 数据云盘主存储:选择云主机数据云盘所在的主存储,建议选择使用SSD硬盘的存储
      • 集群高可用:选择是否开启容器集群高可用
        说明:
        • 如不开启,将创建1台云主机作为容器管理的管理集群节点。
        • 如开启,将创建3台云主机作为容器管理的管理集群节点,生产环境建议开启集群高可用。
      • Admin密码:填写ZStack AIOS Admin密码
      • 云平台URL:填写ZStack AIOS的UI界面URL
        说明: 请填写完整的URL地址,包括访问协议、平台管理节点IP/VIP/域名,和端口,例如:http://192.168.0.100:5000
      • 外部NTP服务器IP:填写ZStack AIOS管理节点IP。如使用双管理节点,则填写管理节点VIP
      图1所示:


      图1 安装ZStack Zaku容器管理
    3. 查看容器管理模块
      重新登录ZStack AIOS UI界面,即可在主菜单中查看容器管理模块。
  2. 配置容器管理业务集群。
    1. 配置计算节点。
      准备3台 (或以上) 物理服务器或云主机作为容器管理业务集群的计算节点。
      • 如用物理服务器作为计算节点,请使用ZStack AIOS ISO计算节点模式安装物理服务器操作系统。
      • 如用云主机作为计算节点,需使用容器管理 (ZStack Zaku) 安装包安装云主机。

        登录ZStack AIOS UI界面,点击资源中心 > 云资源池 > 虚拟资源 > 云主机,进入云主机界面。在云主机界面,点击创建云主机 > 标准创建,弹出创建云主机界面。

        可参考以下示例输入相应内容:
        • 基础配置
          • 数量:设置为3或以上
          • 计算规格:生产环境建议设置8核CPU+16GB内存的计算规格
          • 镜像:选择容器管理 (ZStack Zaku) 安装包
            说明: 请确保已将容器管理 (ZStack Zaku) 安装包作为镜像添加到ZStack AIOS
          • 根云盘规格:建议设置为500GB
            说明: 如该云主机将同时作为容器管理业务集群的GPU节点,建议设置为1TB。
          • 数据云盘:添加1块规格为500GB的数据云盘,并开启VirtioSCSI
          • 主存储:建议选择使用SSD盘的存储
        • 资源配置
          • 网络:为云主机加载业务网络和存储网络
            说明: 请确保已将规划的业务网络和存储网络作为三层网络添加到ZStack AIOS
        • 系统配置
          • 登录方式:可选项。选择云主机登录方式。如不配置,可使用默认用户名root和默认密码zstack@123@%登录
          • User Data:输入以下内容:
            #cloud-config
            runcmd:
              - |
                pv_list=$(pvs --noheadings -o pv_name)
                pv_count=$(echo "$pv_list" | wc -l)
                pv_name=$(echo "$pv_list" | tr -d ' ')
            
                vg_name=$(pvs --noheadings -o vg_name $pv_name | tr -d ' ')
            
                growpart $(echo $pv_name | sed 's/[0-9]*$//') $(echo $pv_name | grep -o '[0-9]*$')
                pvresize $pv_name
            
                lv_name=$(lvs --noheadings -o lv_name --sort -size | tail -1 | tr -d ' ')
            
                lvextend -l +100%FREE /dev/$vg_name/$lv_name
            
                lv_path="/dev/$vg_name/$lv_name"
                mapper_name=$(readlink -f $lv_path | awk -F '/' '{print $3}')
            
                lv_mapper_name=$(ls -l /dev/mapper/ | grep "$mapper_name" | awk '{print $9}')
            
                blkid | grep "/dev/mapper/$lv_mapper_name" | grep -q xfs
            
                if [ $? -eq 0 ]; then
                    xfs_growfs /dev/mapper/$lv_mapper_name
                else
                    resize2fs /dev/mapper/$lv_mapper_name
                fi
                partprobe

        除以上说明的参数外,其他参数请根据实际情况配置,配置完成后,点击确认,开始创建云主机。

        说明: 创建完成后,请分别登录这几台云主机,执行ip a,确认业务网卡和存储网卡是否均已分配IP地址,如未分配,请执行dhcp ${NicName}为网卡分配IP地址,以确保云主机业务网、存储网可用。
    2. 配置GPU节点。
      在已准备好的计算节点 (物理服务器/云主机) 基础上,选择一台或多台作为GPU节点。
      • 如使用物理服务器,请提前在物理服务器上插入GPU设备并安装GPU驱动
      • 如使用云主机,请按照以下步骤,为云主机加载GPU设备
        1. 为云主机所在的物理机插入GPU设备,确保物理机BIOS已开启Intel VT-d / AMD IOMMU,并在该物理机详情页打开IOMMU启用状态
        2. 为云主机加载GPU设备。
          云主机界面,找到需作为GPU节点的云主机,点击操作 > 系统配置 > 设置GPU策略,为云主机加载GPU设备。如图2所示:


          图2 设置GPU策略
        3. 设置云主机CPU模式为host-passthrough。

          云主机界面,点击需作为GPU节点的云主机,进入其详情页,确保CPU模式host-passthrough

        4. 安装GPU驱动。
          准备好GPU驱动,并登录需作为GPU节点的云主机安装。本文档以安装NVIDIA GPU驱动为例进行介绍,不同GPU驱动的安装方式可能不同,必要时,请联系GPU提供方获取帮助。
          禁用nouveau驱动
          [root@localhost~]#  echo "blacklist nouveau" >> /etc/modprobe.d/nvidia-installer-disable-nouveau.conf
          [root@localhost~]#  echo "options nouveau modeset=0" >> /etc/modprobe.d/nvidia-installer-disable-nouveau.conf
          
          安装Kernel相关包,并重启生效
          [root@localhost~]# yum install -y elfutils-libelf-devel
          [root@localhost~]# yum install -y kernel-devel-$(uname -r) kernel-headers-$(uname -r)
          [root@localhost~]# cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
          [root@localhost~]# dracut /boot/initramfs-$(uname -r).img $(uname -r) --force
          [root@localhost~]# systemctl set-default multi-user.target
          [root@localhost~]# init 3
          [root@localhost~]# reboot
          
          检查nouveau驱动是否已被禁用
          [root@localhost~]# lsmod | grep nouveau
          
          安装GPU驱动,全部使用默认项 
          [root@localhost~]# bash NVIDIA-Linux-x86_64-550.90.07.run
          
          检查GPU状态
          [root@localhost~]# nvidia-smi
    3. 创建业务集群并添加节点
      ZStack AIOS主菜单,点击容器管理 > 集群管理,进入集群管理界面。在集群管理界面,点击创建集群,弹出创建集群界面。
      可参考以下示例输入相应内容:
      • 节点配置
        • 管理网与业务网复用:按实际网络规划开启或关闭
        • 节点信息:填写准备好的计算节点信息
          • 节点角色:默认勾选管理节点,可手动勾选计算节点GPU节点
            说明:
            • 计算节点:勾选后,可使用该节点创建容器,该节点将占用容器管理-CPU容器管理-vCPU额度
            • GPU节点:勾选后,可将该节点上的GPU设备透传给容器使用,该节点将占用容器管理-CPU容器管理-vCPU额度
          • 业务网IPv4地址:填节点IP地址
          • 管理网IPv4地址:如管理网与业务网复用,将复用业务网IP地址;如管理网与业务网不复用,请填写单独的管理网IPv4地址
            说明: 请确保管理网IP地址可与ZStack AIOS管理节点通信。
        • 节点ROOT密码:填写节点root密码
        • 节点SSH端口:填写节点SSH端口,默认为22
      • 基础配置
        • 集群名称:设置集群名称
        • 业务网VIP:填写一个IP地址作为集群业务网VIP,可使用ZStack AIOS三层网络中的IP地址
          说明: 请确保ZStack AIOS管理节点可访问该业务网VIP
        • 管理网VIP:如管理网与业务网复用,将复用业务网VIP;如管理网与业务网不复用,请填写单独的管理网VIP地址
          说明: 请确保管理网VIP可与ZStack AIOS管理节点通信。
        • 监控日志数据盘:选择节点上的数据盘盘符,例如:/dev/sda
        • 容器组网段:设置容器组网段,可使用默认值
        • 服务网段:设置服务网段,可使用默认值
        • DNS服务器:设置DNS服务器地址,可使用默认值
        • 微服务治理:选择关闭
      • 确认信息:检查配置信息无误后,点击确认,即可创建集群。
      图3所示:




      图3 创建容器管理业务集群
  3. 创建容器管理外部网络。
    1. 创建服务外部网络。
      ZStack AIOS主菜单,点击容器管理 > 集群管理 > 网络管理 > 外部网络,进入外部网络界面。在外部网络界面,点击创建外部网络,弹出创建外部网络界面。
      可参考以下示例输入相应内容:
      • 名称:设置外部网络名称
      • 简介:可选项,备注外部网络相关信息
      • 网卡名称:选择所有管理节点上名称相同且已配置IP的网卡
      • IPv4 子网掩码:设置外部网络网络段的子网掩码,例如:255.255.255.0
      • IPv4 网关:设置外部网络网络段网关,例如:192.168.0.1
      说明:
      • 如需使用服务外部网络,请确保所有管理节点都存在相同名称的网卡,且网卡上均有配置IP。
      • 可使用如下命令配置IP:zs-network-setting -i ${网卡名} ${ip} ${netmask}
      图4所示:


      图4 创建服务外部网络
    2. 添加网络段。
      外部网络界面,点击外部网络名称,进入外部网络详情页。选择网络段,进入网络段标签页,点击添加网络段,添加服务外部网络的网络段。
      说明:
      • 在添加网络段时,需选择服务外部网络
      • 外部网络建议不要和ZStack AIOS三层网络网络段重叠。
      • 如外部网络与三层网络网络段重叠,需将该外部网络添加为对应三层网络的保留网段。
  4. 设置三层网络保留网段
    如容器管理业务集群VIP或外部网络使用ZStack AIOS三层网络中的IP地址,需为对应的三层网络设置保留网络段,避免容器管理业务集群VIP或外部网络IP地址被其他云资源占用。
    ZStack AIOS主菜单,点击资源中心 > 网络资源 > 三层网络资源,找到对应的三层网络,点击进入其详情页。在三层网络详情页,点击网络段 > 保留网络段 > +保留网络段,将容器管理业务集群VIP和外部网络占用的网络段添加进来。
    图5所示:


    图5 设置保留网络段
  5. 创建ai-model-registry仓库并上传AI推理镜像 (容器)
    1. 创建制品仓库
      ZStack AIOS主菜单,点击容器管理 > 制品仓库 > 本地仓库,进入本地仓库界面。在本地仓库界面,点击创建仓库,弹出创建仓库界面。
      可参考以下示例输入相应内容:
      • 名称:设置为ai-model-registry
      • 简介:可选项,可留空不填
      • 类型:选择公开
      图6所示:


      图6 创建本地仓库
    2. 自定义ai-model-registry密码
      进入ai-model-registry仓库详情页。在详情页,点击镜像 > 上传,弹出上传镜像界面。
      点击登录命令下方的重置密码,自定义设置密码。
      图7所示:


      图7 重置ai-model-registry密码
    3. 将AI推理镜像 (容器) 上传到ai-model-registry仓库
      根据准备工作-软件工具,按使用的GPU型号,获取对应的AI推理镜像 (容器) ,并上传到ai-model-registry仓库。
      支持在线上传、文件上传、命令上传三种上传方式
      • 如使用在线上传,请选择镜像架构,支持多选
      • 如使用命令上传,请在命令中标注镜像架构,例如:
        • nerdctl push --platform=linux/arm64
        • nerdctl push --platform=linux/amd64
        • nerdctl push --platform=linux/arm64 --platform=linux/amd64
      说明: 如使用昇腾910B GPU,请同时准备并上传image-910b.tarimage-vllm-ascend.tarimage-npu-llamafactory.tar镜像。
    4. 指定模型精调服务默认容器镜像
      如使用Hygon K100-AI进行模型精调,需额外指定精调默认容器镜像。登录ZStack AIOS管理节点,执行以下命令:
      [root@localhost~]# zstack-ctl aios_setup_system_services --type FineTune --architecture x86_64 --docker-image-name aiworker-dcu:vllm0.9.2
  6. 同步容器管理业务集群。
    1. 获取容器管理AccessKey。
      ZStack AIOS主菜单,点击容器管理 > 服务设置 > 个人设置 > AccessKey管理,进入AccessKey管理界面。在AccessKey管理界面,点击生成AccessKey,并记录生成的AccessKey ID和AccessKey Secret。
      图8所示:


      图8 获取容器管理AccessKey
    2. 同步容器管理业务集群。
      登录ZStack AIOS管理节点,执行以下命令:
      登录CLI命令行
      [root@localhost ~]# zstack-cli    //进入CLI命令行
      - >>>  LogInByAccount accountName=admin password=${Password}    //使用Admin账号密码登录
      
      创建业务集群管理节点,managementIP和name均使用容器管理VIP地址,AccessKeyId和AccessKeySecret分别使用已获取的容器管理AccessKey ID和Secret;执行完成后,记录返回的UUID,UUID是业务集群管理节点的UUID,即${ContainerManagementUuid}
      admin >>> AddContainerManagementEndpoint managementIp=${ZakuVip} managementPort=80 name=${ZakuVip} description=zaku containerAccessKeyId=${AccessKeyId} containerAccessKeySecret=${AccessKeySecret} vendor=zaku
      
      同步集群
      admin >>> QueryZone    //查询区域UUID
      admin >>> SyncContainerManagementEndpoint uuid="${ContainerManagementUuid}" zoneUuid=${ZoneUuid}
      说明:
      • 同步后,可在ZStack AIOS GPU设备界面,查看容器管理业务集群的GPU信息。
      • 如平台内存在多租户,在ZStack AIOS主菜单,点击资源中心 > 云资源池 > GPU规格,将容器管理业务集群GPU对应的GPU规格的共享模式设置为全局共享
  7. (可选) 修改镜像仓库容器镜像上传限速
    为加快容器镜像上传和下载速度,可登录容器管理任一节点,执行以下命令,适当调整镜像仓库限速:
    [root@localhost ~]# kubectl edit deployment -n zstack-middleware ingress-nginx-ingress-controller    //修改egress-bandwidth和ingress-bandwidth
    说明:
    • 使用千兆管理网络,建议最大带宽设置为500M。
    • 使用万兆管理网络,建议最大带宽设置为1500M。