基于昇腾310产品K8S+容器应用搭建

举报
Liuuuu 发表于 2020/06/23 16:27:46 2020/06/23
【摘要】 基于ACL架构的Atlas 300产品分别在容器、K8S+容器场景分配昇腾310资源部署指导

1        容器环境安装(CentOS为例)

1.1   离线安装:

1.1.1   安装前检查:

      1.     查看以前安装的dockercontainer

       # yum list installed | grep docker

       # yum list installed | grep contain

      2.     删除包。

      # yum remove containerd.io.x86_64

      # yum remove docker-ce-selinux.noarch

1.1.2   下载离线包

1.  进入该网站 https://download.docker.com/linux/centos/7/x86_64/stable/Packages/,查找如下最新版本包,下载到本地:

docker-ce-19.03.9-3.el7.x86_64.rpm

docker-ce-cli-19.03.9-3.el7.x86_64.rpm

containerd.io-1.2.6-3.3.e17.x86_64.rpm

2.   将上面三个下载的包放到服务器的同一个目录下

1.1.3   安装离线包

 # yum install ./docker-ce-19.03.9-3.el7.x86_64.rpm

 # yum install ./docker-ce-cli-19.03.9-3.el7.x86_64.rpm

 # yum install ./containerd.io-1.2.6-3.3.e17.x86_64.rpm

1.1.4   启动docker

 # sudo systemctl start docker

查看运行状态

 # sudo systemctl status docker

1.1.5   验证docker

 # docker version

1.2   在线安装

1.2.1   安装前检查

     1.     查看以前安装的dockercontainer

     # yum list installed | grep docker

     # yum list installed | grep contain

     2.     删除包。

     # yum remove containerd.io.x86_64

     # yum remove docker-ce-selinux.noarch

1.2.2   设置yum源

  安装所需的软件,设置稳定存储库

       # sudo yum install -y yum-utils \

            device-mapper-persistent-data \

            lvm2

       # sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

1.2.3   安装docker

# sudo yum install docker-ce docker-ce-cli containerd.io

1.2.4   启动docker

# sudo systemctl start docker

查看运行状态

# sudo systemctl status docker

1.2.5   验证docker

# docker version

1.3   创建镜像

1.3.1   加载离线镜像

# docker load -i <image_name>.tar

1.3.2   在线下载镜像

# docker pull centos:centos7.6.1810

1.3.3   查看镜像

# docker images

image.png                                             

2        裸容器环境部署

2.1   查看容器

 # docker ps –a

2.2   记录HwHiAiUser的gid

在宿主机使用id HwHiAiUser命令查看宿主机HwHiAiUsergid,并记录该gid的取值,如下图,记录的gid1001

 image.png

2.3   创建容器

2.3.1   宿主机安装run包

若宿主机上已经安装完所有驱动包,即将宿主机上的/usr/local/Ascend/目录全部挂载到容器中。

# docker run -it --net=host --pid=host --cap-add LINUX_IMMUTABLE \

--device=/dev/davinci0 \

--device=/dev/davinci_manager \

--device=/dev/devmm_svm \

--device=/dev/hisi_hdc \

-v /var/log/npu/conf/slog/slog.conf:/var/log/npu/conf/slog/slog.conf \

-v /var/log/npu/slog/slogd/slogdlog:/var/log/npu/slog/slogd/slogdlog \

-v /usr/local/Ascend/:/usr/local/Ascend/ \

ubuntu:16.04 \

/bin/bash

 参数解释如下表所示:

参数

参数说明

--net

表示网络映射。可选

--cap-add LINUX_IMMUTABLE

表示可以修改容器内的文件属性。可选。

--device

表示映射的设备,davinci0需要根据实际设备名称修改。其他保持不变。

-v   /var/log/npu/conf/slog/slog.conf:/var/log/npu/conf/slog/slog.conf

将宿主机日志配置文件“/var/log/npu/conf/slog/slog.conf”挂载到容器中。请根据实际情况修改。

-v /var/log/npu/slog/slogd/slogdlog:/var/log/npu/slog/slogd/slogdlog

将宿主机目录“/var/log/npu/slog/slogd/slogdlog   ”挂载到容器。

-v /usr/local/Ascend/:/usr/local/Ascend/

将宿主机目录“/usr/local/Ascend/ ”挂载到容器,请根据安装所在路径修改。

ubuntu:16.04

镜像名

2.3.2   容器内安装run包

注意:容器内安装软件包有如下限制:

FirmwareAICPU软件包不支持docker内安装。

ACLlib/ATC/toolkit/OPP软件包在容器内外安装无差异。

Driver支持docker内安装,只安装驱动的.so,即安装驱动包的用户态部分。根据宿主机目录(默认路径为:/usr/local/Ascend/driver/lib64/ )是否挂载到容器,分为如下两种安装方式,两种方式二选一,用户根据实际情况进行选择。

     如下是容器安装的场景:

image.png

2.3.2.1                   宿主机目录挂载容器

         在宿主机执行如下命令启动docker

# docker run -it --net=host --pid=host --cap-add LINUX_IMMUTABLE \

--device=/dev/davinci0 \

--device=/dev/davinci_manager \

--device=/dev/devmm_svm \

--device=/dev/hisi_hdc \

-v /var/log/npu/conf/slog/slog.conf:/var/log/npu/conf/slog/slog.conf \

-v /var/log/npu/slog/slogd/slogdlog:/var/log/npu/slog/slogd/slogdlog \

-v /usr/local/Ascend/driver/lib64/ :/usr/local/Ascend/driver/lib64/ \

-v /usr/local/Ascend/driver/tools/:/usr/local/Ascend/driver/tools/

ubuntu:16.04 \

/bin/bash

2.3.2.2                   宿主机目录不挂载容器

在宿主机执行如下命令启动docker

# docker run -it --net=host --pid=host --cap-add LINUX_IMMUTABLE \

--device=/dev/davinci0 \

--device=/dev/davinci_manager \

--device=/dev/devmm_svm \

--device=/dev/hisi_hdc \

-v /var/log/npu/conf/slog/slog.conf:/var/log/npu/conf/slog/slog.conf \

-v /var/log/npu/slog/slogd/slogdlog:/var/log/npu/slog/slogd/slogdlog \

ubuntu:16.04 \

/bin/bash

2.4   创建HwHiAiUser用户

 在容器内创建HwHiAiUser用户(用户也可以创建其他非root用户),用于安装其他软件包以及启动slogd守护进程。

    # groupadd -g 1001 HwHiAiUser && useradd -g HwHiAiUser -d /home/HwHiAiUser -m HwHiAiUser && echo ok

 若返回“ok”,则说明创建成功。

2.5   启动slogd守护进程

    1、 执行如下命令创建日志相关文件,并启动slogd进程:

    # export LD_LIBRARY_PATH=/usr/local/Ascend/driver/lib64:/usr/local/Ascend/add-ons

    2、 执行如下命令创建日志相关文件,并启动slogd进程:

    # mkdir -p /usr/slog

    # mkdir -p /var/log/npu/slog/slogd

    # chown -Rf HwHiAiUser:HwHiAiUser  /usr/slog

    # chown -Rf HwHiAiUser:HwHiAiUser  /var/log/npu/slog

    # su HwHiAiUser --command "/usr/local/Ascend/driver/tools/slogd &"

    3、 执行如下命令查看slogd进程,确认驱动包是否安装成功:

    # ps -ef | grep -v grep | grep "tools/slogd"

2.6   验证容器驱动环境

    # /usr/local/Ascend/driver/tools/upgrade-tool --device_index -1 --system_version    

   image.png                                                                                                                      

2.7   容器内安装驱动(仅适用2.3.2)

 1、 使用exit命令退出容器,在宿主机ACLlib/ATC/toolkit/OPP/Driver软件包所在路径,执行如下命令将软件包复制到容器内部。

    # docker cp /xxx/Ascend-*.run container_id:/home/HwHiAiUser/software

        其中xxx为宿主机上软件包的存放路径,container_id为容器ID,可以使用docker ps -a命令查看所使用容器的ID/home/HwHiAiUser/software为容器内软件包的存放路径,如果没有该路径,请先手动创建;所有路径请用户根据实际情况进行修改。

  2、 使用如下命令重新进入容器,切换到HwHiAiUser用户,进行安装

   # docker start xxx

   # docker attach xxx

3        K8S容器管理平台环境部署

3.1   Master环境配置

3.1.1   关闭防火墙

1、 Ubuntu默认没有开启防火墙,如果已经开启防火墙,需要关闭。使用ufw status查看防火墙状态。

image.png

   # ufw disable   //关闭防火墙

2、 CentOS默认开启防火墙,使用如下命令关闭防火墙:

   # setenforce 0

 修改/etc/selinux/confi,配置SELINUXdisable

  image.png

    # systemctl stop firewalld.service  //停止防火墙

    # systemctl disable firewalld.service  //禁用防火墙

3.1.2   修改系统配置

1、 创建并修改文件/etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

vm.swappiness = 0

image.png

2、 执行sysctl –system让配置生效。

3、 关闭fstab swap配置,修改/etc/fstab,注释swap文件系统挂载配置。

image.png

4、 重启操作系统使配置生效。

3.1.3   设置代理

3.1.4   安装docker环境

1、 Ubuntu在线安装docker环境如下:

# sudo apt-get install docker docker.io

2、 CentOS在线安装docker环境如下:

  具体请参考1.1节和1.2节。

3.1.5   安装kubernetes组件

3.1.5.1                   Ubuntu环境

1、 Ubuntu环境添加镜像源,将如下附件替换到/etc/apt/目录下:

  image.png                                                                                

内容如下:

        # deb-src https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main

        deb http://mirrors.aliyun.com/ubuntu/ xenial main

        deb-src http://mirrors.aliyun.com/ubuntu/ xenial main


        deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main

        deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main


        deb http://mirrors.aliyun.com/ubuntu/ xenial universe

        deb-src http://mirrors.aliyun.com/ubuntu/ xenial universe

        deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe

        deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates universe


        deb http://mirrors.aliyun.com/ubuntu/ xenial-security main

        deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main

        deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe

        deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security universe


        # kubernetes mirror

        deb http://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main

        #deb-src https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main

2、 执行如下命令:

    # curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add –

    # add-apt-repository "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main"

    # apt update

3、 查询软件仓库是否有kubernetes组件:

    # apt search kubeadm

    # apt search kubectl

    # apt search kubelet

image.png

4、 下载kubernetes组件:

      # apt install kubelet kubeadm kubectl

3.1.5.2                   CentOS环境

1、 添加kubernets.repo文件:

       # vi /etc/yum.repos.d/kubernetes.repo

       [kubernetes]

       name=Kubernetes

       baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/

       enabled=1

       gpgcheck=1

       repo_gpgcheck=1

       gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

2、 下载kubernetes组件:

       # yum install kubelet kubeadm kubectl

3.1.6   设置kubelet开机启动

     # systemctl enable kubelet

3.1.7   设置master节点主机名

 由于K8S的节点名称显示的主机名,所以建议对集群中的节点主机名做规划。使用将如下命令将Master节点主机名修改为k8s-master

    # hostnamectl set-hostname k8s-master

 注意:重启生效。

3.1.8   安装kubernets依赖组件

1、 执行kubeadm令查看依赖的镜像列表:

     # kubeadm config images list

image.png

2、 依次执行拉取所需要的镜像,如果拉取镜像存在问题,很可能是网络无法访问k8s.gcr.io,请对docker设置正确的代理。

     # docker pull k8s.gcr.io/kube-apiserver:v1.18.2

     # docker pull k8s.gcr.io/kube-controller-manager:v1.18.2

     # docker pull k8s.gcr.io/kube-scheduler:v1.18.2

     # docker pull k8s.gcr.io/kube-proxy:v1.18.2

     # docker pull k8s.gcr.io/pause:3.2

     # docker pull k8s.gcr.io/etcd:3.4.3-0

     # docker pull k8s.gcr.io/coredns:1.6.7

3、 确认拉取镜像是否成功:

     # docker images

    image.png

3.1.9   设置master节点hosts

修改/etc/hosts,添加如下内容:

image.png

注意:10.71.232.109是本机Master主节点的ipk8s-master是设置的主机名

3.1.10          设置no_proxy

/etc/profile文件添加no_proxy,对于主机所在的局域网和其他pod网络可以正常访问,网络范围根据对应环境的网络自定义修改:

export no_proxy=10.71.0.0/16,10.244.0.0/16

# source /etc/profile   //添加配置生效

3.1.11          执行kubernets初始化

本例中设置pod网络为10.244.0.0/16。执行kubeadm init命令获取到kubeadm join的命令,记录下结果,后续在node节点上使用kubeadm join命令加入到集群中。

# kubeadm init --pod-network-cidr=10.244.0.0/16

image.png

若执行kubeadm init报错,说明之前已经执行过,kubeadm reset清空记录,重新执行。

image.png

3.1.12          配置并执行kubectl

1、 创建~/.kube目录

   # mkdir ~/.kube

2、 /etc/kubernetes/admin.conf拷贝为~/.kube/config

   # cp /etc/kubernetes/admin.conf  ~/.kube/config

3、 执行kubectl get nodes确认配置是否成功

   # kubectl get nodes

4、 安装flannel组件

  flannel组件是pod的网络配置,配置flannel后,master 节点的status才会Ready,下载配置模板:

   # wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml --no-check-certificate

5、 安装flannel

       # kubectl apply -f kube-flannel.yml

  过一段时间查看node状态:

     image.png

3.2   Node环境配置

3.2.1   关闭防火墙

  请参考3.1.1节。

3.2.2   修改系统配置

  请参考3.1.2节。

3.2.3   设置代理(仅适用华为内部网络)

  请参考3.1.3节。

3.2.4   安装docker环境

  请参考3.1.4节。

3.2.5   安装kubernetes组件

  请参考3.1.5节。

3.2.6   设置kubelet开机启动

  请参考3.1.6节。

3.2.7   设置node节点主机名

  使用将如下命令将Node节点主机名修改为k8s-node1

      # hostnamectl set-hostname k8s-node1

  注意:重启生效。

3.2.8 设置node节点hosts

添加maser节点和node节点的host信息:

      # vi /etc/hosts

     image.png

3.2.9   设置no_proxy

/etc/profile文件添加no_proxy,对于主机所在的局域网和其他pod网络可以正常访问,网络范围根据对应环境的网络自定义修改:

export no_proxy=10.71.0.0/16,10.244.0.0/16

# source /etc/profile   //添加配置生效

3.2.10          node节点加入master集群

1、在node节点上执行3.1.11kubeadm init生成的结果:

# kubeadm join 10.71.232.109:6443 --token flpmxq.3bs3z5klfln3l6gr \

    --discovery-token-ca-cert-hash sha256:f57975c50dac3fcf3151efeaba12e8593e62b81f87e5ff1ad5d64d7082b0b96a

image.png

2、在maser节点上,一段时间后查询node节点是否加入集群成功:

# kubectl get nodes

image.png

若执行kubeadm join报错如下,kubeadm reset清空历史记录,重新执行。

image.png

若执行kubeadm join报错如下:

image.png

解决办法:

# swapoff -a

# kubeadm reset

# systemctl daemon-reload

# systemctl restart kubelet

# iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

3.3   运行 ascend-docker-plugin上报资源

3.3.1   运行ascend-docker-plugin

Master节点或者node节点有芯片资源的情况下,运行如下命令:

# /usr/local/Ascend/driver/tools/ascend-docker-plugin -plugin-directory /var/lib/kubelet/device-plugins/ &

   image.png

 上报显示4个芯片资源。

3.3.2   确认资源上报成功

 在master节点上查看资源上报情况,如下:

    # kubectl describe node k8s-node1

   image.png

3.4   启动pod申请资源

3.4.1   Pod配置

   pod配置如下,保存如下内容到atlas300-pod-1.yml,该配置中分配1Ascend310 pod.注意其中的缩进为空格,不是TAB

   apiVersion: v1

   kind: Pod

   metadata:

     name: atlas300-pod-1

   spec:

     restartPolicy: Never

     containers:

     - image: centos:centos7.6.1810

       name: atlas300-pod

       resources:

         limits:

           huawei.com/davinci-mini: 1

       command:

       - sh

       - -c

       - |

         sleep 10000000

3.4.2   启动pod

 在master节点执行kubectl命令生成pod

    # kubctl apply -t atlas300-pod-1.yml

   image.png

3.4.3   查看pod信息

    # kubectl get pod

 若创建pod的状态一直非Running,如下:

 image.png

 定位方式:

    # kubectl describe pod atlas300-pod-1

    image.png

 可以查看pod的生成日志信息,如上报错的解决方法:

    # kubectl taint nodes

3.4.4   使用pod

   1、拷贝文件到pod

# kubectl cp xxx atlas300-pod-1:/home/

   2、 进入pod

# kubetl exec –it atlas300-pod-1 -- bash

   image.png

   3、 验证环境

 进入pod,先创建slogdlog需要存放的目录:

    # mkdir /var/log/npu/slog/slogd/

 然后拷贝slogdlog文件到pod中:

    # kubectl cp /var/log/npu/slog/slogd/slogdlog atlas300-pod-1:/var/log/npu/slog/slogd/slogdlog

 接下来参考2.42.52.6节验证容器驱动环境是否正常。

 image.png

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。