Kubernetes主控节点创建后(方法参见上面的连接),就能够随时添加更多的工做节点进去构建更大的集群(minikube设计为单机开发使用,不能添加工做节点),容器实例能够在全部符合条件的node上调度运行,这是Kubernetes最为强大的功能。node
K8S自己就是采用一套名称规则来标记和筛选容器的系统。节点的命名有一个统一规划,后面管理起来会更方便。局域网中直接会根据机器名列出节点,所以不要使用同名,最好加上数字编号,前面用英文字母顺序,便于排序。git
kubeadm init 结束时会自动产生节点加入的命令,最好记下来。github
若是忘了,可使用kubeadm token create --print-join-command 方法从新生成连接Token并打印输出加入命令。网上搜了很久,终于发现这个方法,不过要1.9之后的版本才支持的,若是不支持这个参数,整个集群的Kubeadm版本都须要升级到新版本。docker
每个node的kubelet都必须进去设置cgroup-drive和swap关闭的启动选项,跟主控节点同样(参见上民面安装Kubernetes的方法),而后须要从新启动,经过systemctl daemon-reload/systemctl restart kubelet来进行。ubuntu
若是node上显示添加成功,但Master上显示不出来,在node机上使用systemctl status kubelet查看下服务的状态,检查里面的各项状态,单独处理。服务器
quay.io的flannel网络镜像下载很慢,最好单独下载。以下:网络
docker pull quay.io/coreos/flannel:v0.10.1-amd64
若是用其它网络驱动,也是同样,须要确保可用。机器学习
目前flannel网络0.10.1的DNS须要依赖kube-dns1.14.8版本,不是Kubernetes1.10.2版本安装时的1.14.10,须要单独把容器镜像下载下来。不然,速度太慢,还觉得死机了。以下:学习
docker pull k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.8
Docker的代理也是须要每一个node独立设的,由于各个节点都是各自向Docker Registry请求下载镜像,所以必定不要在K8S中使用本地编译的Docker镜像,要推送到服务器上,由于其余节点仍是须要从Registry服务器去下载的,创建本地集群的统一Registry 服务就很重要了,可使用Harbor 来搭建。spa
docker版本必须一致,不然老是NotReady,而后报CNI错误,Network NotReady等。
强制安装为18.03.1后变为Ready。以下方法:
sudo apt install docker-ce=18.03.1~ce-0~ubuntu
可使用 apt-cache madison docker-ce 查看可用的docker版本。
目前最新的18.05有一些问题,而Nvidia-Docker2只支持到18.03.1,本身编译的18.05的lib-container-runtime运行时出现CNI错误。
若是须要作机器学习,工做节点上也须要安装全部的Nvidia驱动、cuCuda、cuTensor、Nvidia-Docker2和Nvidia的K8S插件,不论是不是安装有Nvidia的显卡。
安装方法参考:
安装Kubernetes上的GPU支持软件:
GPU节点的显卡型号最好都同样,不然调度时可能会出问题,轻者出现异常,重者直接致使节点挂掉。如今Kubernetes没法对GPU内部资源进行识别和调度,基本管理单元是GPU块数,并且是独占。一旦请求GPU的容器得到资源,不管是否在使用,其它的容器将不能同时请求该GPU,除非原来的容器退出。
若是节点在kubectl get node能够看见但状态一直NotReady,可使用kubectl describe node my-node的方式,查看详细的node运行状况。