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:
如果您不记得上述信息了也没关系,在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
再试一次,在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:
此时如果执行上述命令,有可能会提示下面这个错误(我用这个命令的时候,结果node1加入成功,但是node2加入失败了,报错信息就是下面的):
[root@node1 ~]# kubeadm join –token 4fccd2.b0e0f8918bd95d3e 192.168.119.132:
[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.-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:: 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:
检查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.-jre7 --replicas= --port=
这样就创建了有两个副本的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=
执行了上述命令,就把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集群的时候提供有用的参考;
kubeadm搭建kubernetes集群之三:加入node节点的更多相关文章
- kubeadm搭建kubernetes集群之二:创建master节点
在上一章kubeadm搭建kubernetes集群之一:构建标准化镜像中我们用VMware安装了一个CentOS7虚拟机,并且打算用这个虚拟机的镜像文件作为后续整个kubernetes的标准化镜像,现 ...
- kubeadm 搭建kubernetes集群环境
需求 kubeadm 搭建kubernetes集群环境 准备条件 三台VPS(本文使用阿里云香港 - centos7.7) 一台能SSH连接到VPS的本地电脑 (推荐连接工具xshell) 安装步骤 ...
- Kubernetes集群部署之五node节点部署
Node节点是Kubernetes集群中的工作负载节点.每个node都会被master分配一些工作负载,每个node节点都运行以下关键服务进程.Kubelet :负责pod对应的容器的创建.启停等任务 ...
- kubeadm搭建kubernetes集群之一:构建标准化镜像
使用docker可以批量管理多个容器,但都是在同一台电脑内进行的,这在实际生产环境中是不够用的,如何突破单机的限制?让多个电脑上的容器可以像单机上的docker-compose.yml管理的那样方便呢 ...
- 通过Kubeadm搭建Kubernetes集群
历经断断续续学习的两天,终于完成了一个简单k8s集群. 参考 https://www.cnblogs.com/edisonchou/p/aspnet_core_on_k8s_deepstudy_par ...
- centos7使用kubeadm搭建kubernetes集群
一.本地实验环境准备 服务器虚拟机准备 IP CPU 内存 hostname 192.168.222.129 >=2c >=2G master 192.168.222.130 >=2 ...
- [转帖] kubeadm搭建kubernetes集群
http://www.bladewan.com/2018/01/02/kubernetes_install/ 学习中 kubernetes V1.9安装(附离线安装包和离线镜像) 2018-01-0 ...
- 使用kubeadm搭建Kubernetes集群
记录在石墨日记中,经常更新,懒得再复制了,直接点击下面链接查看吧 移步到此: https://shimo.im/docs/22WbxxQa1WUV9wsN/
- Kubernetes容器集群管理环境 - Node节点的移除与加入
一.如何从Kubernetes集群中移除Node比如从集群中移除k8s-node03这个Node节点,做法如下: 1)先在master节点查看Node情况 [root@k8s-master01 ~]# ...
随机推荐
- Stm32F103面向对象编程之GPIO
STM32F103 GPIO面向对象变成实例 创建一个GPIO对象 GpioClass gStateLed = NEW_GPIO(C, 0, GPIO_Mode_Out_PP); 初始化对象 Gpio ...
- 数据结构实习 - problem K 用前序中序建立二叉树并以层序遍历和后序遍历输出
用前序中序建立二叉树并以层序遍历和后序遍历输出 writer:pprp 实现过程主要是通过递归,进行分解得到结果 代码如下: #include <iostream> #include &l ...
- Struts2的select使用
struts2的select标签中,常用的有以下几个属性:(1)struts2中的select 标签中,必须设置的属性只有一个,即是list.(2)select标签的list中必须有值,不然会报错.如 ...
- QtCreator的中如何使用第三方依赖库
> https://blog.csdn.net/e5Max/article/details/9840331 ```LIBS += -L/usr/local/lib -lmath ``` ``` ...
- HDU 5687 字典树入门
Problem C Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total ...
- Valgrind查找内存泄露利器
Valgrind是一个GPL的软件,用于Linux(For x86, amd64 and ppc32)程序的内存调试和代码剖析.你可以在它的环境中运行你的程序来监视内存的使用情况,比如C 语言中的ma ...
- hack games
记下,有时间玩玩~ wargame http://www.wechall.net/lang_ranking/en --------------- Monyer系列(黑客游戏) 1. http://mo ...
- 005-对象——对象的 final const
<?php /** * */ /*class shouji { public $pinpai; final function chongdian() { //final 最终的 return $ ...
- MySQL数据中分级分组显示数据
前面已经有了SqlServer数据分级分组显示数据了.今天又来做一个MySQL数据库中的分级分组显示,SqlServer中用到了递归,这里为了简单就直接把根的数据显示为0 ,而不用递归了. 在MySQ ...
- Access control allow origin 简单请求和复杂请求
原文地址:http://blog.csdn.net/wangjun5159/article/details/49096445 错误信息: XMLHttpRequest cannot load http ...