kubeadm搭建kubernetes集群之三:加入node节点

在上一章《kubeadm搭建kubernetes集群之二:创建master节点》的实战中,我们把kubernetes的master节点搭建好了,本章我们将加入node节点,使得整个环境可以部署应用;

前提条件

由于要用到谷歌的服务,所以要求您的网络环境可以科学上网,具体的方案就不在这里说了;

复制文件

如下图所示,cent7是我们上一章操作完成后对应的CentOS7的VMware文件夹,node1、node2都是直接复制cent7文件夹再粘贴生成的;

启动

请参照《kubeadm搭建kubernetes集群之二:创建master节点》中的操作,用VMware将node1文件夹中的虚拟机文件打开,再改名为node1,然后启动虚拟机;

修改hostname再重启node1

等node1启动完毕,进入系统,修改/etc/hostname文件,这里面只有一行内容“localhost.localdomain”,改成”node1”,保存后重启node1;

设置kubelet服务自启动

执行以下命令设置kubelet自启动:

systemctl enable kubelet

以node身份加入kubernetes集群

在上一章《kubeadm搭建kubernetes集群之二:创建master节点》的实战中,我们初始化master完成后控制台输出了以下信息:

kubeadm join –token 4fccd2.b0e0f8918bd95d3e 192.168.119.132:6443

如果您不记得上述信息了也没关系,在master上执行命令kubeadm token list,就能看到token参数了,如下图所示:

现在我们要将当前的node1加入到master所在的kubernetes集群中,在node1的控制台输入kubeadm join –token=4fccd2.b0e0f8918bd95d3e 192.168.119.132:6443,(注意,这里的参数是–token=,不是控制台提示的-token )控制台显示信息如下:

如上图所示,提示连接失败了,在master和node1上依次执行以下命令,把防火墙全部关闭调:

systemctl stop firewalld;systemctl disable firewalld;setenforce 0

再试一次,在node1的控制台输入kubeadm join –token=4fccd2.b0e0f8918bd95d3e 192.168.119.132:6443,控制台显示信息如下:

如上图所示,控制台的输出信息提示当前node已经加入到集群中了;

注意kubeadm join命令的格式

在上一章《kubeadm搭建kubernetes集群之二:创建master节点》中,执行完master的init操作后,控制台输出的node加入的提示信息如下:

kubeadm join –token 4fccd2.b0e0f8918bd95d3e 192.168.119.132:6443

此时如果执行上述命令,有可能会提示下面这个错误(我用这个命令的时候,结果node1加入成功,但是node2加入失败了,报错信息就是下面的):

[root@node1 ~]# kubeadm join –token 4fccd2.b0e0f8918bd95d3e 192.168.119.132:6443
[kubeadm] WARNING: kubeadm is in beta, please do not use it for production clusters.
[preflight] Running pre-flight checks
[preflight] WARNING: docker version is greater than the most recently validated version. Docker version: 17.05.0-ce. Max validated version: 1.12
[preflight] WARNING: hostname "node1" could not be reached
[preflight] WARNING: hostname "node1" lookup node1 on 192.168.119.2:53: no such host
[validation] WARNING: kubeadm doesn't fully support multiple API Servers yet
[discovery: Invalid value: "": DiscoveryToken or DiscoveryFile must be set, discovery: Invalid value: "": token [""] was not of form ["^([a-z0-9]{6})\\.([a-z0-9]{16})$"], discovery: Invalid value: "": token must be of form '[a-z0-9]{6}.[a-z0-9]{16}', discovery: Invalid value: "–token": address –token: missing port in address, discovery: Invalid value: "4fccd2.b0e0f8918bd95d3e": address 4fccd2.b0e0f8918bd95d3e: missing port in address]

发生这个问题的时候,执行下面的命令就可以成功了:

kubeadm join --token=4fccd2.b0e0f8918bd95d3e 192.168.119.132:6443

检查node1状态

在master的控制台上,执行以下命令查看所有节点的状态:

kubectl get node

得到的列表信息如下图所示,node1节点的状态是”NotReady”:

这是因为node1节点的docker正在拉取镜像导致的,等待大约十分钟,再次执行kubectl get node看到的状态如下图,node1的状态已经正常了:

在node1的控制台上执行命令docker images,可以看到已经pull了一些镜像到本地,如下图:

加入node2,node3

重复上面的步骤,将node2和node3也加入进来,加入后状态如下图:

部署服务

在master节点上执行以下命令,可以创建了一个名字为tomcat的deploy:

kubectl run tomcat001 --image=tomcat:7.0.82-jre7 --replicas=2 --port=8080

这样就创建了有两个副本的tomcat容器,执行kubectl get pod -o wide,看到下图所示:

如上图,两个pod分别被分配到了node2和node3上面,此时的状态是ContainerCreating,下载tomcat镜像是要时间的,所以耐心等待几分钟,再一次执行kubectl get pod -o wide,看到下图所示:

如上图所示,状态已经变成了Running,并且每个pod都有了内部ip;

我们能看到tomcat001-1395295392-fg1qd这个pod在kubernetes内部环境中的ip是192.168.104.1; 在node2上执行ip addr,我们看到的所有网卡和ip如下所示:

如上图红框所示,node2机器的ip也在pod的所在的192.168.104.xxx网段,所以node2是可以直接访问pod上的tomcat服务的,我们在node2系统中打开CentOS自带的firefox浏览器,输入192.168.104.1:8080,是可以成功访问到tomcat的;

在外网访问

在node2上通过pod的地址访问,能证明pod已经正常运行了,但是来自kubernetes环境之外的请求如何才能到达pod上呢?这就需要通过service的方式将deploy的端口暴露出去,执行以下命令创建基于现有deploy的service:

kubectl expose deploy tomcat001 --type=NodePort --target-port=8080

执行了上述命令,就把tocamt001的8080端口和node2、node3的端口做了绑定,绑定关系可以通过如下命令查看:

kubectl get svc tomcat001 

得到信息如下图:

上图红框中的8080:32425表示将tomcat001服务的8080端口和node2、node3的32425端口建立了映射关系;

node2的ip是192.168.119.143,因此在windows上打开浏览器,输入 http://192.168.119.143:32425,即可访问到kubernetes集群中的tomcat服务,如下图所示:

至此,整个kubeadm搭建kubernetes集群的实战就结束了,希望能对您在部署和体验kubernetes集群的时候提供有用的参考;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨龙飞前端

scrollto 到指定位置

2934
来自专栏java 成神之路

使用 NIO 实现 echo 服务器

5567
来自专栏落花落雨不落叶

canvas画简单电路图

84011
来自专栏张善友的专栏

LINQ via C# 系列文章

LINQ via C# Recently I am giving a series of talk on LINQ. the name “LINQ via C...

3005
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

8618
来自专栏C#

DotNet加密方式解析--非对称加密

    新年新气象,也希望新年可以挣大钱。不管今年年底会不会跟去年一样,满怀抱负却又壮志未酬。(不过没事,我已为各位卜上一卦,卦象显示各位都能挣钱...)...

5908
来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2926
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2997
来自专栏转载gongluck的CSDN博客

cocos2dx 打灰机

#include "GamePlane.h" #include "PlaneSprite.h" #include "BulletNode.h" #include...

7096
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.4K7

扫码关注云+社区