基于昇腾310产品K8S+容器应用搭建
1 容器环境安装(CentOS为例)
1.1 离线安装:
1.1.1 安装前检查:
1. 查看以前安装的docker和container。
# 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. 查看以前安装的docker和container。
# 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
2 裸容器环境部署
2.1 查看容器
# docker ps –a
2.2 记录HwHiAiUser的gid
在宿主机使用id HwHiAiUser命令查看宿主机HwHiAiUser的gid,并记录该gid的取值,如下图,记录的gid为1001。
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包
注意:容器内安装软件包有如下限制:
•Firmware和AICPU软件包不支持docker内安装。
•ACLlib/ATC/toolkit/OPP软件包在容器内外安装无差异。
•Driver支持docker内安装,只安装驱动的.so,即安装驱动包的用户态部分。根据宿主机目录(默认路径为:/usr/local/Ascend/driver/lib64/ )是否挂载到容器,分为如下两种安装方式,两种方式二选一,用户根据实际情况进行选择。
如下是容器安装的场景:
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
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查看防火墙状态。
# ufw disable //关闭防火墙
2、 CentOS默认开启防火墙,使用如下命令关闭防火墙:
# setenforce 0
修改/etc/selinux/confi,配置SELINUX为disable
# 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
2、 执行sysctl –system让配置生效。
3、 关闭fstab swap配置,修改/etc/fstab,注释swap文件系统挂载配置。
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/目录下:
内容如下:
# 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
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
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
修改/etc/hosts,添加如下内容:
注意:10.71.232.109是本机Master主节点的ip,k8s-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
若执行kubeadm init报错,说明之前已经执行过,kubeadm reset清空记录,重新执行。
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状态:
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
在/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.11节kubeadm init生成的结果:
# kubeadm join 10.71.232.109:6443 --token flpmxq.3bs3z5klfln3l6gr \
--discovery-token-ca-cert-hash sha256:f57975c50dac3fcf3151efeaba12e8593e62b81f87e5ff1ad5d64d7082b0b96a
2、在maser节点上,一段时间后查询node节点是否加入集群成功:
# kubectl get nodes
若执行kubeadm join报错如下,kubeadm reset清空历史记录,重新执行。
若执行kubeadm join报错如下:
解决办法:
# 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/ &
上报显示4个芯片资源。
3.3.2 确认资源上报成功
在master节点上查看资源上报情况,如下:
# kubectl describe node k8s-node1
3.4.1 Pod配置
pod配置如下,保存如下内容到atlas300-pod-1.yml,该配置中分配1个Ascend310 到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
# kubectl get pod
若创建pod的状态一直非Running,如下:
定位方式:
# kubectl describe pod atlas300-pod-1
可以查看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
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.4、2.5、2.6节验证容器驱动环境是否正常。
- 点赞
- 收藏
- 关注作者
评论(0)