文档章节

Kubernetes加入新节点,经验总结

openthings
 openthings
发布于 2018/05/22 23:10
字数 1302
阅读 3567
收藏 0

Kubernetes节点加入,经验总结

Kubernetes主控节点建立后(方法参见上面的链接),就可以随时添加更多的工作节点进去构建更大的集群(minikube设计为单机开发使用,不能添加工作节点),容器实例可以在所有符合条件的node上调度运行,这是Kubernetes最为强大的功能。

  • 因为容器工作负载可以在任何节点上运行,所以存储和计算资源都应该设计为通过网络接口访问,资源、服务和计算任务都是浮动的。
  • kubeadm join 命令可以添加工作节点。最简单的方式是通过Token,主控节点上使用kubeadm token命令可以管理集群所产生的Token。

1、节点命名规则

K8S本身就是采用一套名称规则来标记和筛选容器的系统。节点的命名有一个统一规划,后面管理起来会更方便。局域网中直接会根据机器名列出节点,因此不要使用同名,最好加上数字编号,前面用英文字母顺序,便于排序。

2、节点加入命令

kubeadm init 结束时会自动产生节点加入的命令,最好记下来。

如果忘了,可以使用kubeadm token create --print-join-command 方法重新生成链接Token并打印输出加入命令。网上搜了好久,终于发现这个方法,不过要1.9以后的版本才支持的,如果不支持这个参数,整个集群的Kubeadm版本都需要升级到新版本。

3、确保Kubelet已启动

每一个node的kubelet都必须进去设置cgroup-drive和swap关闭的启动选项,跟主控节点一样(参见上民面安装Kubernetes的方法),然后需要重新启动,通过systemctl daemon-reload/systemctl restart kubelet来进行。

如果node上显示添加成功,但Master上显示不出来,在node机上使用systemctl status kubelet查看下服务的状态,检查里面的各项状态,单独处理。

4、确保网络flannel镜像可用

quay.io的flannel网络镜像下载很慢,最好单独下载。如下:

docker pull quay.io/coreos/flannel:v0.10.1-amd64

如果用其它网络驱动,也是一样,需要确保可用。

5、网络flannel依赖DNS镜像

目前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

6、Docker代理与Registry指向

 Docker的代理也是需要每个node独立设的,因为各个节点都是各自向Docker Registry请求下载镜像,因此一定不要在K8S中使用本地编译的Docker镜像,要推送到服务器上,因为其他节点还是需要从Registry服务器去下载的,建立本地集群的统一Registry 服务就很重要了,可以使用Harbor 来搭建。

7、docker版本必须一致

 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错误。

8、安装Nvidia-Docker2和k8s GPU插件

如果需要做机器学习,工作节点上也需要安装所有的Nvidia驱动、cuCuda、cuTensor、Nvidia-Docker2和Nvidia的K8S插件,不管是不是安装有Nvidia的显卡。

安装方法参考:

安装Kubernetes上的GPU支持软件:

9、显卡最好一样

GPU节点的显卡型号最好都一样,否则调度时可能会出问题,轻者出现异常,重者直接导致节点挂掉。现在Kubernetes无法对GPU内部资源进行识别和调度,基本管理单元是GPU块数,而且是独占。一旦请求GPU的容器获得资源,无论是否在使用,其它的容器将不能同时请求该GPU,除非原来的容器退出。

10、诊断节点状态

如果节点在kubectl get node可以看见但状态一直NotReady,可以使用kubectl describe node my-node的方式,查看详细的node运行情况。

© 著作权归作者所有

openthings
粉丝 324
博文 1140
码字总数 689435
作品 1
东城
架构师
私信 提问
Kubernetes上建立WordPress博客

在Kubernetes上运行WordPress的好处是显而易见的。首先是安装非常简单(在已有集群的情况下),其次是可靠性更高,第三是规模可以伸缩。当然,可以在多个云之间更为容易地迁移也是非常重要的...

openthings
2018/09/15
600
0
Dashboard - Kubernetes的全功能Web界面

编者按:这篇文章是关于Kubernetes 1.3新功能一系列深入文章的一部分,本文是第八篇。 Kubernetes Dashboard(仪表盘)是一个旨在将通用的基于Web的监控和操作界面加入 Kubernetes 的项目。 ...

时速云
2016/08/10
3.4K
0
kubernetes DaemonSet资源对象

What is a DaemonSet? DaemonSet能够让所有(或者一些特定)的Node节点运行同一个pod。当节点加入到kubernetes集群中,pod会被(DaemonSet)调度到该节点上运行,当节点从kubernetes集群中被...

yzy121403725
2018/04/13
0
0
基于Ubuntu16.04和kubeadm部署kuernetes

1.部署环境: 2台虚拟机,Ubuntu16.04系统。设定A虚拟机的IP 为A-IP,B虚拟机的IP为B-IP,并A虚拟机作为master。 2. A、B两台虚拟机都需要做的部署操作: 建议以root用户执行下列操作。 a. 跟...

豆子最棒
2018/11/25
0
0
Kubernetes学习之路(一)之Kubeadm部署K8S集群

一个星期会超过多少阅读量呢??发布一篇,看看是否重新在51上写学习博文,有老铁支持嘛?? 使用kubeadm部署集群 1、配置kubernetes源 将源拷贝到node01和node02节点 2、Master节点安装doc...

IT_外卖小哥
2018/11/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

python学习10.04:Python list列表使用技巧及注意事项

前面章节介绍了很多关于 list 列表的操作函数,细心的读者可能会发现,有很多操作函数的功能非常相似。例如,增加元素功能的函数有 append() 和 extend(),删除元素功能的有 clear()、 remo...

太空堡垒185
13分钟前
3
0
新手插画学习的方法?教你如何自学?

插画学习的方法?教你如何自学? 从小喜欢画一些漫画头像随笔画,但是其实没有基础。个人偏好小清新手绘风的插画(如下图),每每看到都希望自己能画出这样的作品。 我其实很想说画这种美术功...

huihuajiaocheng
19分钟前
4
0
面试题

1、实现clone();

gtandsn
30分钟前
4
0
CentOS 7 部署 tesseract-ocr

官方地址 github yum-config-manager --add-repo https://download.opensuse.org/repositories/home:/Alexander_Pozdnyakov/CentOS_7/ 若提示 yum-config-manager: command not found 执行以......

阿白
30分钟前
3
0
JAVA比较器中comparator的使用

一个专用的比较器Comparator Comparator是一个专用的比较器,当一个不支持自比较或者自比较函数不能满足要求时,可写一个比较器来完成两个对象之间大小的比较。Comparator体现了一种策略模式...

daxiongdi
31分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部