安装常见问题解答和故障排查
安装常见问题
如何添加纯CPU Worker结点?
目前,安装脚本中只支持GPU worker,不支持CPU worker。如果您同时拥有GPU worker和CPU worker,请先使用GPU worker安装PAI。成功安装后,您可以将CPU Worker附加到一个纯CPU的虚拟集群。详细步骤请参阅如何添加和移除结点。如果您只有CPU worker,我们还没有正式的安装支持。请在Github上提交功能请求issue。
我应该安装什么版本的NVIDIA显卡驱动?
首先,请参阅英伟达官网上的文档来确认适合您显卡的驱动版本。接着,您可以参考这个表格来确认不同版本CUDA对显卡驱动的要求。
请注意,在老显卡驱动的环境下,有些包含新CUDA版本的Docker镜像将无法被使用。目前,我们推荐您安装418版本的显卡驱动。418显卡驱动支持CUDA 9.0到10.1(目前大多数深度学习框架使用的是这几个版本的CUDA)。
如何加快在大集群上的部署速度?
默认情况下,Ansible使用5个进程在所有机器并行执行命令。如果您的集群比较大,那么5个进程可能会比较慢。
如果您想要加速,可以在源码的ansible和ansible-playbook命令中加入参数-f <并发数>。关于细节,请参考ansible的相关文档。
如何移除K8S的网络插件?
在安装后,如果您使用的是weave插件,并且在使用过程中碰到了一些网络相关的问题,例如:一些pod无法连接互联网。此时,您可以移除网络插件来解决这个问题。
请先运行kubectl get delete ds weave-net -n kube-system来移除weave-net DaemonSet。
接着,您可以参考下面的ansible-playbook来移除网络插件:
---
- hosts: all
tasks:
- name: remove cni
shell: |
sed -i '/KUBELET_NETWORK_PLUGIN/d' /etc/kubernetes/kubelet.env
echo KUBELET_NETWORK_PLUGIN=\"\" >> /etc/kubernetes/kubelet.env
args:
executable: /bin/bash
- name: remove weave
shell: ip link delete weave
args:
executable: /bin/bash
- name: restart network
shell: systemctl restart networking
args:
executable: /bin/bash
- name: clean ip table
shell: |
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -F
iptables -t mangle -F
iptables -F
iptables -X
- name: config-docker
shell: |
sed -i 's/--iptables=False/--iptables=True --ip-masq=True/g' /etc/systemd/system/docker.service.d/docker-options.conf
systemctl daemon-reload
args:
executable: /bin/bash
- name: restart kubelet
shell: systemctl restart kubelet
args:
executable: /bin/bash
- name: restart docker
shell: systemctl restart docker
args:
executable: /bin/bash
在这些步骤后,您需要修改coredns来解决DNS问题:
请使用命令kubectl edit cm coredns -n kube-system -o yaml,修改.:53为.:9053。
请使用命令kubectl edit service coredns -n kube-system,修改targetPort: 53为 targetPort: 9053。
请使用命令kubectl edit deployment coredns -n kube-system,修改containerPort: 53为containerPort: 9053,在pod定义中添加hostNetwork: true。
如何检查GPU驱动被正确安装了?
对于Nvidia GPU, 您可以使用命令nvidia-smi来检查。
如何安装GPU驱动?
对于Nvidia GPU,请先确认您想安装哪个版本的GPU(您可以参考这个问题)。然后参考下面的步骤:
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt install nvidia-418
sudo reboot
在上述命令中,我们使用NVIDIA Driver 418作为示例。您可以修改nvidia-418为您需要的版本。如果遇到任何问题,请在Nvidia社区需求解决方案。
如何安装nvidia-container-runtime?
请参阅官方文档。 另外,不要忘记在docker-config-file中将nvidia-container-runtime设置为docker的默认runtime。 下面是docker-config-file /etc/docker/daemon.json的一个示例:
{
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
}
}
故障排查
在脚本中,命令apt install <some package>失败
请先检查机器是否有网络相关的问题。除了网络之外,还有一个可能的原因:ansible有时会在安装apt包前先运行一次apt update。如果apt update返回的代码是非0的,那整个命令都会失败。
您可以在对应机器上运行sudo apt update; echo $? 来进行检查。如果退出代码是非0的,请修复一下。退出代码非0的可能原因如下:
如果您在sudo apt update的返回中发现类似于the following signatures couldn’t be verified because the public key is not available这样的信息,您可以使用下面的命令来进行修复。请将<key-number>换成您的。
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <key-number>
sudo apt update
如果您发现sudo apt update报告有一些repo list是过期的(expired repo lists),您可以使用下面的命令来进行修复。 请将<repo-list-file>换成您的。
sudo rm -rf /etc/apt/sources.list.d/<repo-list-file>
sudo apt update
Ansible playbook因为超时退出
有些时候,如果您给某个机器分配了一个和原有hostname不同的新hostname,很多包含sudo的命令会在这台机器上变得很慢。这是因为系统的DNS会去尝试去找新的hostname,但是会因为超时而失败。
解决方法:您可以在对应机器上运行下面的命令,给/etc/hosts加入新的hostname:
sudo chmod 666 /etc/hosts
sudo echo 127.0.0.1 `hostname` >> /etc/hosts
sudo chmod 644 /etc/hosts
含有sudo的命令变得非常缓慢
和“Ansible playbook因为超时退出”的解决方案相同。
网络相关的问题
如果您是中国用户,请先参考这个文档.
无法下载kubeadm或hyperkube二进制文件
在安装时,安装脚本会从storage.googleapis.com下载kubeadm和hyperkube的二进制文件。 具体来说,我们会使用kubespray的2.11 release,对应使用的kubeadm和hyperkube文件为:
kubeadm:https://storage.googleapis.com/kubernetes-release/release/v1.15.11/bin/linux/amd64/kubeadmhyperkube:https://storage.googleapis.com/kubernetes-release/release/v1.15.11/bin/linux/amd64/hyperkube
请寻找这两个文件合适的下载链接,并在config文件中修改kubeadm_download_url和hyperkube_download_url。
无法下载一些Docker镜像
请先检查安装过程中的日志,看看是哪些镜像无法下载。如果确认是网络问题的话,请在config文件中修改gcr_image_repo、kube_image_repo、quay_image_repo或docker_image_repo。
另外,如果您发现无法从gcr.io上下载镜像,您需要首先寻找一个合适的镜像registry(如果您在中国,您可以尝试gcr.azk8s.cn是否可行)。然后,修改gcr_image_repo和kube_image_repo。
特别地,对于gcr.io来说, 我们发现kubespray 2.11版本源码中有些链接并没有采取gcr_image_repo和kube_image_repo的值,而是直接使用gcr.io。您得在文件~/pai-deploy/kubespray中手工修改它们。命令grep -r --color gcr.io ~/pai-deploy/kubespray 可能会对您有帮助。