Skip to content

Latest commit

 

History

History
1010 lines (773 loc) · 31.1 KB

atlas_cluster_heterogeneous.md

File metadata and controls

1010 lines (773 loc) · 31.1 KB

依瞳人工智能开放平台部署指导

版本更新记录

版本号 更新时间 主要内容或重大修改 修改人
0.0.8 2020年05月27日 初稿 bifeng
0.1.0 2020年07月03日 终稿 haiyuan

商标和版权

"Apulis Platform",“依瞳人工智能开放平台”及图标是依瞳科技有限公司的商标或注册商标。

在本用户手册中描述的随机软件,是基于最终用户许可协议的条款和条件提供的,只能按照该最终用户许可协议的规定使用和复制。 本手册受到著作权法律法规保护,未经依瞳科技有限公司事先书面授权,任何人士不得以任何方式对本手册的全部或任何部分进行复制、抄录、删减或将其编译为机读格式,以任何形式在可检索系统中存储,在有线或无线网络中传输,或以任何形式翻译为任何文字。

文档说明

本文档支持用户半自动化完成网络配置,系统设置,平台的集群环境和基础应用的安装,以及平台版本更新和配置备份和恢复。其中涉及linux系统配置,GPU,NPU驱动安装,docker, k8s集群安装和平台集群部署。要求参与部署的运维人员熟悉linux,docker和k8s等。 详细操作步骤和结果可以参看安装部署指导视频:(https://pan.baidu.com/s/1wIhf8cRqkB0Ruel__xq-QQ 提取码: 65ic)。


安装环境说明

安装要求

  • 普通节点:ubuntu 18.04 server
  • NPU节点:ubuntu 18.04.1 server (小版本号必须为1)
  • 管理员账号:root或具备sudo权限的用户,所有节点允许root登录,保持密码一致
  • worker节点:需禁用SecureBoot(影响GPU驱动无法升级)
  • 所有节点:允许SSH连接
  • GPU节点:预装NVIDIA GPU驱动,请参考安装手册
  • NPU节点:预装华为NPU驱动,请参考 A910驱动安装手册
  • 编译节点:CPU架构需与master节点架构一致,譬如同为AMD64或同为ARM64
  • 支持的平台版本:Apulis Platfom release-0.1.0

其中:

  • worker节点配置需求

    • 若设备为NVIDIA GPU,则驱动版本不低于 430
    • 若设备为Huawei NPU,则驱动版本不低于 1.72.T2.100.B020
  • 集群所在网络建议简化配置,其中路由或网关必须支持DNS Local Maping,DHCP Server等。

  • Atlas NPU 集群需要 100G 交换机,每台的8个NPU都要接上交换机的百G口,配置交换机网关启用流控。

  • Atlas 多节点集群需要配置局域网络

节点组网规划示例

master和worker需在同一个局域网或VPC

主机名 公网IP mask gateway DNS iBMC公网IP 私网IP
atlas01 xxx.xxx.xxx.xxx 255.255.255.0 xxx.xxx.xxx.xxx 114.114.114.114 xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx
atlas02 xxx.xxx.xxx.xxx 255.255.255.0 xxx.xxx.xxx.xxx 114.114.114.114 xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx
atlas03 xxx.xxx.xxx.xxx 255.255.255.0 xxx.xxx.xxx.xxx 114.114.114.114 xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx

3 台 atlas 的 NPU 组网规划:

node npu_id address netmask
atlas01 NPU0 192.168.10.11 255.255.255.0
atlas01 NPU1 192.168.20.11 255.255.255.0
atlas01 NPU2 192.168.30.11 255.255.255.0
atlas01 NPU3 192.168.40.11 255.255.255.0
atlas01 NPU4 192.168.10.12 255.255.255.0
atlas01 NPU5 192.168.20.12 255.255.255.0
atlas01 NPU6 192.168.30.12 255.255.255.0
atlas01 NPU7 192.168.40.12 255.255.255.0
atlas02 NPU0 192.168.10.21 255.255.255.0
atlas02 NPU1 192.168.20.21 255.255.255.0
atlas02 NPU2 192.168.30.21 255.255.255.0
atlas02 NPU3 192.168.40.21 255.255.255.0
atlas02 NPU4 192.168.10.22 255.255.255.0
atlas02 NPU5 192.168.20.22 255.255.255.0
atlas02 NPU6 192.168.30.22 255.255.255.0
atlas02 NPU7 192.168.40.22 255.255.255.0
atlas03 NPU0 192.168.10.31 255.255.255.0
atlas03 NPU1 192.168.20.31 255.255.255.0
atlas03 NPU2 192.168.30.31 255.255.255.0
atlas03 NPU3 192.168.40.31 255.255.255.0
atlas03 NPU4 192.168.10.32 255.255.255.0
atlas03 NPU5 192.168.20.32 255.255.255.0
atlas03 NPU6 192.168.30.32 255.255.255.0
atlas03 NPU7 192.168.40.32 255.255.255.0

atlas集群网络拓扑示例

atlas集群网络拓扑示例

节点基础配置

  1. 配置节点Hostname

    • 按照部署规划配置各个节点的主机名
      vim /etc/hostname
      # 更新内容为atlas01
      # 设置hostname立即生效:
      sudo hostnamectl set-hostname atlas02
      
  2. 配置域名DNS(如不提供公网访问,请跳过此章节)

    需要在DNS提供商如阿里云控制台进行配置

    • 主域名:ascend.cn
    • 配置示例:
    主机记录 记录类型 记录值
    atlas.ascend.cn A xxx.xxx.xxx.xxx
  3. 配置Worker节点DNS

  • 配置短域名搜索(所有节点)

    • 安装resolvconf
      apt update
      apt install resolvconf
      
    • 增加短域名
      ​mkdir -p /etc/resolvconf/resolv.conf.d/
      ​echo "search ascend.cn" > /etc/resolvconf/resolv.conf.d/base
      sudo resolvconf -u
      ​​# 此处**ascend.cn**即为config.yaml中的domain
      
  • 同步代码库

      mkdir -p /home/apulis
      cd /home/apulis
      git clone https://gitee.com/apulis/apulis_platform.git
      cd apulis_platform/src/ClusterBootstrap/
    
  • 选项一:节点有独立公网IP

    通过DNS提供商为每个节点配置,配置示例:

    主机记录 记录类型 记录值
    atlas01.ascend.cn A xxx.xxx.xxx.xxx
    atlas02.ascend.cn A xxx.xxx.xxx.xxx
    atlas03.ascend.cn A xxx.xxx.xxx.xxx
  • 选项二:节点没有公网IP

    此种情况需为每个节点配置短域名解析:

    # mkdir -p deploy/etc
    
    # 配置hosts
    cat << EOF > deploy/etc/hosts
    127.0.0.1       localhost
    
    192.168.3.2    atlas01
    192.168.3.2    atlas01.ascend.cn
    192.168.3.2    atlas.ascend.cn
    
    192.168.3.4    atlas02
    192.168.3.4    atlas02.ascend.cn
    
    
    192.168.3.5    atlas03
    192.168.3.5    atlas03.ascend.cn
    
    EOF
    
    chmod 666 deploy/etc/hosts
    # 在HOST src/ClusterBootstrap/目录下执行
    cp ./deploy/etc/hosts  /etc/hosts
    

执行安装

  1. 安装脚本路径说明

    • ​执行目录 :src/ClusterBootstrap/
    • ​集群配置文件:src/ClusterBootstrap/config.yaml
    • ​安装脚本:src/ClusterBootstrap/deploy.py
  2. 设置集群配置文件

​ 以下字段做相应修改

cluster_name 集群名称,必须保证唯一
DLWSAdmins 程序部署集群所采用的用户
mysql_password 集群mysql存储的登录密码
machines 配置项:
machine_hostname:
role: infrastructure
private-ip: 192.168.3.6
archtype: arm64
type: npu
vendor: huawei
machine_hostname:
archtype: amd64
role: worker
type: gpu
vendor: nvidia
os: ubuntu
说明:
archType表示架构,arm64或amd64
type表示计算设备类型,gpu或npu
os当前支持ubuntu
dockerregistry 镜像仓库
onpremise_cluster 集群基础信息
worker_node_num表示总worker数
gpu_count_per_node表示每个节点的总GPU/NPU数
mountpoints 存储挂载点配置
字段说明:
server表示存储点的主机名
filesharename表示存储Server的数据存储路径
curphysicalmountpoint表示存储设备在集群各个节点的挂载路径
k8s-gitbranch k8s版本号
Authentications 登录方式:
1. 用户名密码(默认登录方式)
2. 微软登录
TenantId、ClientId、ClientSecret的获取请参考 微软官方说明
3. 微信登录:
TenantId、ClientId、ClientSecret的获取请参考 微信官方说明
域名说明:
假设cluster_name=atlas,domain=ascend.cn
那么域名即为:atlas.ascend.cn
微软登录与微信登录 必须基于此域名申请
  • 平台配置示例

    cp src/ClusterBootstrap/config.yaml.template src/ClusterBootstrap/config.yaml

    # Configuration Path: src/ClusterBootstrap/config.yaml
    cluster_name: atlas
    
    network:
      domain: ascend.cn
      container-network-iprange: "10.0.0.0/8"
    
    etcd_node_num: 1
    mounthomefolder : True
    
    # These may be needed for KubeGPU
    # kube_custom_cri : True
    # kube_custom_scheduler: True
    kubepresleep: 1
    
    UserGroups:
      DLWSAdmins:
        Allowed:
        - [email protected]
        - [email protected]
        - [email protected]
        gid: "20001"
        uid: "20000"
      DLWSRegister:
        Allowed:
        - '@gmail.com'
        - '@live.com'
        - '@outlook.com'
        - '@hotmail.com'
        - '@apulis.com'
        gid: "20001"
        uid: 20001-29999
    
    WebUIadminGroups:
    - DLWSAdmins
    
    WebUIauthorizedGroups:
    - DLWSAdmins
    
    WebUIregisterGroups:
    - DLWSRegister
    
    datasource: MySQL
    mysql_password: ********
    webuiport: 3081
    useclusterfile : true
    
    machines:
      atlas03:
        role: infrastructure
        private-ip: 192.168.3.5
        archtype: arm64
        type: npu
        vendor: huawei
    
    scale_up:
      atlas01:
        archtype: arm64
        role: worker
        type: npu 
        vendor: huawei
        os: ubuntu
    
      atlas02:
        archtype: arm64
        role: worker
        type: npu 
        vendor: huawei
        os: ubuntu
    
      atlas-gpu02:
        archtype: amd64
        role: worker
        type: gpu 
        vendor: nvidia
        os: ubuntu
    
    scale_down:
      atlas-gpu02:
        archtype: amd64
        role: worker
        type: gpu 
        vendor: nvidia
        os: ubuntu
    
    admin_username: dlwsadmin
    
    # settings for docker
    dockerregistry: apulistech/
    dockers:
      hub: apulistech/
      tag: "1.9"
    
    
    custom_mounts: []
    admin_username: dlwsadmin
    
    # settings for docker
    dockerregistry: apulistech/
    dockers:
      hub: apulistech/
      tag: "1.9"
    
    
    custom_mounts: []
    data-disk: /dev/[sh]d[^a]
    dataFolderAccessPoint: ''
    
    datasource: MySQL
    defalt_virtual_cluster_name: platform
    default-storage-folders:
    - jobfiles
    - storage
    - work
    - namenodeshare
    
    deploymounts: []
    
    discoverserver: 4.2.2.1
    dltsdata-atorage-mount-path: /dltsdata
    dns_server:
      azure_cluster: 8.8.8.8
      onpremise: 10.50.10.50
      
    Authentications:
      Microsoft:
        TenantId: ********
        ClientId: ********
        ClientSecret: ********  
    
      Wechat:
        AppId: ********
        AppSecret: ********
    
    supported_platform:  ["onpremise"]
    onpremise_cluster:
      worker_node_num:    1
      gpu_count_per_node: 1
      gpu_type:           nvidia
    
    mountpoints:
      nfsshare1:
        type: nfs
        server: atlas03
        filesharename: /mnt/local
        curphysicalmountpoint: /mntdlws
        mountpoints: ""
    
    jwt:
      secret_key: "Sign key for JWT"
      algorithm: HS256
      token_ttl: 86400
    
    k8sAPIport: 6443
    k8s-gitbranch: v1.18.0
    deploy_method: kubeadm
    
    repair-manager:
      cluster_name: "atlas"
      ecc_rule:
        cordon_dry_run: True
      alert:
        smtp_url: smtp.qq.com
        login: [email protected]
        password: *********
        sender: [email protected]
        receiver: ["[email protected]"]
    
    enable_custom_registry_secrets: True
  1. 设置配置环境
  • 在master host节点执行部署
    # 执行环境配置脚本
    ./scripts/prepare_ubuntu_dev.sh
    
  1. 创建集群ID

    ./deploy.py --verbose -y build

  2. 配置节点用户密码

    为集群每个节点配置一致的ROOT密码,执行指令:

    cd deploy/sshkey
    echo "root" > "rootuser"
    echo "<your_root_password>" > "rootpasswd"
  3. 安装SSH Key到所有节点

    # 初始化 sshkey
    ssh-keygen -t rsa -b 4096 -C "[email protected]"
    cp $HOME/.ssh/id* ./deploy/sshkey/
    ./deploy.py --verbose sshkey install
    
  4. 配置/检测内网DNS解析

  • 节点不存在公网IP

    ./deploy.py --verbose copytoall ./deploy/etc/hosts /etc/hosts

  • 检查所有机器DNS配置是否成功(atlas02为master节点主机名):

    ./deploy.py execonall ping atlas02 -c 2

  • 检查集群节点是否可正常访问

    ./deploy.py --verbose execonall sudo ls -al

  1. 设置集群节点的安装环境

    ./deploy.py --verbose runscriptonall ./scripts/prepare_ubuntu.sh
    
    # 上一个语句会重启安装有GPU的worker节点。需等待所有服务器启动完毕,再执行以下步骤!!
    ./deploy.py --verbose runscriptonall ./scripts/prepare_ubuntu.sh continue
    ./deploy.py --verbose execonall sudo usermod -aG docker dlwsadmin

    注意:

    • dlwsadmin为操作集群机器所采用的用户名,配置于config.yaml
    • 如果nvidia驱动安装不成功,可能与具体的设备配置有关,譬如secure boot问题等等,请联系开发人员定位和完善
  2. GPU Worker机器状态确认

    • 确认nvidia驱动与nvidia-docker均已正常安装
      nvidia-docker run --rm dlws/cuda nvidia-smi
      docker run --rm -ti dlws/cuda nvidia-smi
      
    • 注意问题:

    如docker指令执行正常,但nvidia-docker指令执行错误,则修改/etc/docker/daemon.json, 将"nvidia-docker"设置为default runtime

    vim /etc/docker/daemon.json
    # 增加
    "default-runtime": "nvidia",
    
    # 完整例子:
    {
        "default-runtime": "nvidia",
        "runtimes": {
            "nvidia": {
                "path": "nvidia-container-runtime",
                "runtimeArgs": []
            }
        }
    }
    
    # 然后重启docker:
    systemctl daemon-reload
    systemctl restart docker
    
  3. 安装kubeadm客户端

    ./deploy.py runscriptonroles infra worker ./scripts/install_kubeadm.sh

  4. 安装K8S集群平台

  • 关闭各节点swap

    ./deploy.py --verbose execonall sudo swapoff -a

  • master节点永久关闭swap

    sudo sed -i.bak '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

  • 安装集群基础软件

    • 初始化 k8s

      ./deploy.py --verbose kubeadm init
      
      # 如果 coredns 一直pending,请执行:
      curl -L https://cloud.weave.works/k8s/net?k8s-version=v1.18.0 -o weave.yaml
      kubectl apply -f  /home/apulis/weave.yaml
      

      如果出现 x509: certificate signed by unknown authority,在同步证书之前执行以下步骤:

      # mkdir -p $HOME/.kube
      cp  /etc/kubernetes/admin.conf ./deploy/sshkey/admin.conf
      chown $(id -u):$(id -g) ./deploy/sshkey/admin.conf
      # cp  /etc/kubernetes/admin.conf $HOME/.kube/config
      # chown $(id -u):$(id -g) $HOME/.kube/config
      
    • 同步证书

      ./deploy.py --verbose copytoall ./deploy/sshkey/admin.conf /root/.kube/config

  • 设置集群节点标签

    ./deploy.py --verbose kubeadm join
    ./deploy.py --verbose -y kubernetes labelservice
    ./deploy.py --verbose -y labelworker
    

    如果在 Join node过程提示 cannot execute 'docker info -f {{.CgroupDriver}}': executable file not found in $PATH

    # 在对应node中执行
    apt install docker.io -y
    systemctl enable docker.service
    
    

    如果在 Join 过程提示 [ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables does not exist

    # 在对应node中执行
    modprobe br_netfilter
    echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
    

    如果加入节点状态为 not ready,需查看weave net的pod状态,必要情况下需要在每个node重新apply weave-net

  1. 挂载存储节点
  • 安装NFS服务

    ./deploy.py runscriptonroles infra worker ./scripts/install_nfs.sh

  • 配置挂载目录(在存储节点操作)

    • 创建挂载目录:

      mkdir -p /mnt/local

      挂载目录需与config.yaml中所配置一致

      mountpoints:
        nfsshare1:
          type: nfs
          server: atlas03
          filesharename: /mnt/local
          curphysicalmountpoint: /mntdlws
          mountpoints: ""
      
    • 设置访问白名单

      编辑文件 vim /etc/exports,并增加挂载目录的IP白名单

      /mnt/local *(rw,fsid=0,insecure,no_subtree_check,async,no_root_squash)

  • 更新共享目录信息

    sudo exportfs -a

  • 执行挂载

    ./deploy.py --verbose mount

  • 挂载结果确认

    ./deploy.py --verbose execonall df -h

  1. 部署GPU/A910 NPU插件

    ./deploy.py --verbose kubernetes start nvidia-device-plugin
    ./deploy.py --verbose kubernetes start a910-device-plugin
    
  2. 重置APIServer NodePort端口段

    编辑文件vim /etc/kubernetes/manifests/kube-apiserver.yaml

    - --service-node-port-range=30000-49999

    保存文件后,大约1分钟后API-SERVER自动重启并生效

  3. 设置webui服务配置文件

    • 配置:../dashboard/config/local.yaml

    根据据集群实际的域名,修改domain、casUrl以及clusters

    sign: "Sign key for JWT"
    winbind: "Will call /domaininfo/GetUserId with userName query to get the user's id info"
    masterToken: "Access token of all users"
    
    activeDirectory:
    tenant: "********************"
    clientId: "********************"
    clientSecret: "********************"
    
    wechat:
    appId: "********************"
    appSecret: "********************"
    
    domain: "https://atlas.ascend.cn"
    administrators:
    - [email protected]
    - [email protected]
    - [email protected]
    - [email protected]
    
    clusters:
    atlas02:
        restfulapi: "http://altas02.ascend.cn/apis"
        title: Grafana-endpoint-of-the-cluster
        workStorage: work
        dataStorage: data
        grafana: "http://atlas02.ascend.cn/grafana/"
        prometheus: http://atlas02.ascend.cn:9091
        
    userGroup:
    type: custom
    domain: http://atlas02.ascend.cn
    backEndPath: /custom-user-dashboard-backend
    frontEndPath: /custom-user-dashboard
    
  4. 设置master充当worker

    ./deploy.py --verbose kubernetes uncordon

部署集群应用

  1. 本地登录docker hub (账号为 docker hub 注册账号) docker login

  2. 生成dashboard, jobmanager等服务的配置文件

    ./deploy.py --verbose webui

  3. 编译restfulapi和webui3服务

    • master为AMD64架构
      ./deploy.py --verbose docker push restfulapi2
      ./deploy.py --verbose docker push webui3
      ./deploy.py --nocache docker push custom-user-dashboard-frontend
      ./deploy.py --nocache docker push custom-user-dashboard-backend
      
    • master为ARM64架构
      ./deploy.py --verbose --archtype arm64 docker push restfulapi2
      ./deploy.py --verbose --archtype arm64 docker push webui3
      ./deploy.py --nocache --archtype arm64 docker push custom-user-dashboard-frontend
      ./deploy.py --nocache --archtype arm64 docker push custom-user-dashboard-backend
      
  4. 编译对请求加密组件openresty

    • master为AMD64架构
      ./deploy.py --verbose docker push openresty
    • master为ARM64架构
      ./deploy.py --verbose --archtype arm64 docker push openresty
  5. 编译依赖容器(请参考src/ClusterBootstrap/step_by_step.sh):

    • master为AMD64架构
      ./deploy.py --verbose docker push init-container
      
      注:如果集群有arm64架构的worker机器,在其中一台arm64的worker节点上编译并上传镜像
      ./deploy.py --verbose --archtype arm64 docker push init-container
      
    • master为ARM64架构
      ./deploy.py --verbose --archtype arm64 docker push init-container
      
      注:如果集群有amd64架构的worker机器,在其中一台amd64的worker节点上编译并上传镜像
      ./deploy.py --verbose docker push init-container
      
  6. 编译监控相关的镜像

    • master为AMD64架构
      ./deploy.py docker push watchdog
      ./deploy.py docker push gpu-reporter
      ./deploy.py docker push job-exporter
      ./deploy.py docker push repairmanager2
      注:如果集群有arm64架构的worker机器,在其中一台arm64节点上编译并上传镜像
      ./deploy.py --archtype arm64 docker push watchdog
      ./deploy.py --archtype arm64 docker push gpu-reporter
      ./deploy.py --archtype arm64 docker push job-exporter
    • master为ARM64架构
      ./deploy.py --archtype arm64 docker push watchdog
      ./deploy.py --archtype arm64 docker push gpu-reporter
      ./deploy.py --archtype arm64 docker push job-exporter
      ./deploy.py --archtype arm64 docker push repairmanager2
      注:如果集群有amd64架构的worker机器,在其中一台amd64节点上编译并上传镜像
      ./deploy.py docker push watchdog
      ./deploy.py docker push gpu-reporter
      ./deploy.py docker push job-exporter
  7. 配置Nginx

    ./deploy.py --verbose nginx fqdn
    ./deploy.py --verbose nginx config
    
  8. 启动mysql并设置

    ./deploy.py --verbose kubernetes start mysql

    • 安装Mysql客户端 apt install mysql-client-core-5.7 -y
    • 配置Mysql账号和权限
      kubectl get pods -n kube-system    # 查看mysql pod name
      kubectl exec -it <MYSQL_POD_NAME> -- /bin/bash   # 进入pod
      mysql -uroot -p  # 登录mysql,配置root账号和访问权限
      update user set host='%' where user='root';
      Grant all privileges on test.* to 'root'@'%';
      alter user root identified with mysql_native_password by 'apulis#2019#wednesday';
      alter user 'root'@'%' identified with mysql_native_password by 'apulis#2019#wednesday';
      flush privileges;
      exit;
  9. 启动集群应用

    注意npu的配置必须在启用monitor之前配置

    ./deploy.py --verbose kubernetes start jobmanager2 restfulapi2 nginx custommetrics repairmanager2 openresty
    ./deploy.py --background --sudo runscriptonall scripts/npu/npu_info_gen.py
    ./deploy.py --verbose kubernetes start monitor
    
  10. 启动dashboard

    • master为AMD64架构
      ./deploy.py --verbose nginx webui3
      ./deploy.py --verbose kubernetes start webui3
      ./deploy.py kubernetes start custom-user-dashboard
      
    • master为ARM64架构
      ./deploy.py --verbose --archtype arm64 nginx webui3
      ./deploy.py --verbose kubernetes start webui3
      ./deploy.py kubernetes start custom-user-dashboard
      

访问和检查平台状态

  • 检查集群pod状态

    kubectl get pods -n kube-system

  • 检查平台pod状态

    kubectl get pods

  • 检查npu状态

    # npu 连接状态
    for i in {0..7}; do hccn_tool -i ${i} -link -g; done
    # 使用状态
    npu-smi info
    # npu监控数据
    cat /var/log/npu/npu_smi/device0
    
  • 访问平台

    # 浏览器访问 http://xxx.xxx.xxx.xxx/home
    # 访问账号可查看前端配置文件 cat /etc/WebUI/local.yaml
      administrators:
    
        - [email protected]
    
        - [email protected]
    
        - [email protected]
    用户名为邮箱名,不带后缀,默认密码:123456
    例如:xytxuyetao : 123456
    

平台升级

  1. 同步版本或更新源码分支

  2. 更新dashboard, jobmanager等服务的配置文件

    ./deploy.py --verbose webui         
    
  3. 编译restfulapi和webui3服务

    • master为AMD64架构
      ./deploy.py --verbose docker push restfulapi2
      ./deploy.py --verbose docker push webui3
      ./deploy.py --nocache docker push custom-user-dashboard-frontend
      ./deploy.py --nocache docker push custom-user-dashboard-backend
      
    • master为ARM64架构
      ./deploy.py --verbose --archtype arm64 docker push restfulapi2
      ./deploy.py --verbose --archtype arm64 docker push webui3
      ./deploy.py --nocache --archtype arm64 docker push custom-user-dashboard-frontend
      ./deploy.py --nocache --archtype arm64 docker push custom-user-dashboard-backend
      
  4. 编译监控相关的镜像

    • master为AMD64架构
      ./deploy.py docker push watchdog
      ./deploy.py docker push gpu-reporter
      ./deploy.py docker push job-exporter
      ./deploy.py docker push repairmanager2
    • master为ARM64架构
      ./deploy.py --archtype arm64 docker push watchdog
      ./deploy.py --archtype arm64 docker push gpu-reporter
      ./deploy.py --archtype arm64 docker push job-exporter
      ./deploy.py --archtype arm64 docker push repairmanager2
  5. 更新Nginx配置

    ./deploy.py --verbose nginx fqdn
    ./deploy.py --verbose nginx config
    
  6. 重启应用后端

    ./deploy.py --verbose kubernetes stop/start jobmanager2 restfulapi2 nginx custommetrics repairmanager2 openresty
    ./deploy.py --background --sudo runscriptonall scripts/npu/npu_info_gen.py
    ./deploy.py --verbose kubernetes stop/start monitor
    # 需要注意等待相关组件grafana,openstry,jobmanager 的 pod已经terminal后再启用
    kubectl wait --for=delete pod/openstry** --timeout=60s
    
  7. 重启dashboard

    • master为AMD64架构
      ./deploy.py --verbose nginx webui3
      ./deploy.py --verbose kubernetes stop/start webui3
      ./deploy.py kubernetes stop/start custom-user-dashboard
      
    • master为ARM64架构
      ./deploy.py --verbose --archtype arm64 nginx webui3
      ./deploy.py --verbose kubernetes stop/start webui3
      ./deploy.py kubernetes stop/start custom-user-dashboard
      

备份和恢复配置

  • 备份配置

    cd src/ClusterBootstrap
    ./deploy.py backup [backup_file_prefix] [password]
    
  • 恢复配置

    ./deploy.py restore [backup_file] [password]

扩容和缩容

  • 在平台配置文件src/ClusterBootstrap/config.yaml中添加扩容配置scale_up或缩容配置scale_down

    scale_up:
      atlas-gpu02:
        archtype: amd64
        role: worker
        type: gpu
        vendor: nvidia
        os: ubuntu
    
    scale_down:
      atlas-gpu02:
        archtype: amd64
        role: worker
        type: gpu
        vendor: nvidia
        os: ubuntu
    

注意:在扩容或缩容节点前,应确保没有相关Job处于Queue,Schduling或Running状态

  • 如果缩容节点atlas-gpu02,则在终端下执行

    ./deploy.py --verbose scale down

  • 如果扩容节点atlas-gpu02,则在终端下执行

    ./deploy.py --verbose scale up

清除集群信息(高危操作)

  • 清除所有的worker信息

    ./deploy.py kubeadm reset

  • 清除master集群信息

    kubeadm reset
    rm -rf /etc/cni/net.d/&&rm -rf $HOME/.kube
    

FAQ

  1. deploy.py 4063 line:AttributeError: 'module' object has no attribute 'FullLoader'

    # 在部署环境中重新安装 PyYAML
    pip install --ignore-installed PyYAML
    
  2. 强制 Kill Job方法:

    Kubectl get pods                     # 查看僵死pod
    Kubectl delete po --force <pod id>   # 强制 kill pod 
    Docker ps |grep mind* <tf>           # 查看响应的容器
    Docker top <docker id>               # 查看容器内的进程
    Kill -9 <process id>                 # 逐个kill容器中所有进程
    
  3. 使用私有镜像库

    1. 在提交 job 的 Advanced ——> Custom Docker Registry 中配置私有镜像

    2. 在每个节点的host系统的 docker 配置文件 /etc/docker/daemon.json 中指定私有镜像库

    3. 在返回 job 提交页面的 docker image 配置项中指定私有镜像库的镜像,前缀必须加私有镜像库地址

  4. image pull backoff

    1. 当更新或安装平台时,出现该错误可以在(配置/私有)docker hub 查看镜像是否编译并 push 成功
    2. kubectl describe po -n <namespace> <podname> 查看错误详情,如果时相关依赖镜像拉取失败则会重试的
  5. 登录页返回未认证或空白,需要修正前端配置的链接, 注意https或端口配置

    # vim /etc/WebUI/local.yaml
    
    clusters:
      sandbox03-master:
          restfulapi: "http://altas02.ascend.cn/apis"
          title: Grafana-endpoint-of-the-cluster
          workStorage: work
          dataStorage: data
          grafana: "http://altas02.ascend.cn/endpoints/grafana/"
          prometheus: http://altas02.ascend.cn:9091
    userGroup:
      type: custom
      domain: "http://altas02.ascend.cn"
      backEndPath: /custom-user-dashboard-backend
      frontEndPath: /custom-user-dashboard
    
  6. NPU 节点重启之后,需要重新配置

    ./deploy.py --background --sudo runscriptonall scripts/npu/npu_info_gen.py
    ./deploy.py --verbose kubernetes <stop/start> monitor
    
  7. 重启平台或集群pod,服务仍旧没有回复

    # 首先要stop pod
    ./deploy.py --verbose kubernetes stop <要重启的pod或服务>
    
    # 查看pod状态已经terminal
    kubectl get pods -w -o wide
    
    # 再start pod
    ./deploy.py --verbose kubernetes start <要重启的pod或服务>