在上一章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节点的更多相关文章

  1. kubeadm搭建kubernetes集群之二:创建master节点

    在上一章kubeadm搭建kubernetes集群之一:构建标准化镜像中我们用VMware安装了一个CentOS7虚拟机,并且打算用这个虚拟机的镜像文件作为后续整个kubernetes的标准化镜像,现 ...

  2. kubeadm 搭建kubernetes集群环境

    需求 kubeadm 搭建kubernetes集群环境 准备条件 三台VPS(本文使用阿里云香港 - centos7.7) 一台能SSH连接到VPS的本地电脑 (推荐连接工具xshell) 安装步骤 ...

  3. Kubernetes集群部署之五node节点部署

    Node节点是Kubernetes集群中的工作负载节点.每个node都会被master分配一些工作负载,每个node节点都运行以下关键服务进程.Kubelet :负责pod对应的容器的创建.启停等任务 ...

  4. kubeadm搭建kubernetes集群之一:构建标准化镜像

    使用docker可以批量管理多个容器,但都是在同一台电脑内进行的,这在实际生产环境中是不够用的,如何突破单机的限制?让多个电脑上的容器可以像单机上的docker-compose.yml管理的那样方便呢 ...

  5. 通过Kubeadm搭建Kubernetes集群

    历经断断续续学习的两天,终于完成了一个简单k8s集群. 参考 https://www.cnblogs.com/edisonchou/p/aspnet_core_on_k8s_deepstudy_par ...

  6. centos7使用kubeadm搭建kubernetes集群

    一.本地实验环境准备 服务器虚拟机准备 IP CPU 内存 hostname 192.168.222.129 >=2c >=2G master 192.168.222.130 >=2 ...

  7. [转帖] kubeadm搭建kubernetes集群

    http://www.bladewan.com/2018/01/02/kubernetes_install/ 学习中 kubernetes V1.9安装(附离线安装包和离线镜像)  2018-01-0 ...

  8. 使用kubeadm搭建Kubernetes集群

    记录在石墨日记中,经常更新,懒得再复制了,直接点击下面链接查看吧 移步到此: https://shimo.im/docs/22WbxxQa1WUV9wsN/

  9. Kubernetes容器集群管理环境 - Node节点的移除与加入

    一.如何从Kubernetes集群中移除Node比如从集群中移除k8s-node03这个Node节点,做法如下: 1)先在master节点查看Node情况 [root@k8s-master01 ~]# ...

随机推荐

  1. CentOS安装wkhtmltopdf及解决中文支持问题

    安装wkhtmltopdf,先下载  wkhtmltox-0.12.2.1_linux-centos6-amd64.rpm yum install -y wkhtmltox-0.12.2.1_linu ...

  2. js去除前后空格

    <script language="javascript"> String.prototype.trim=function(){     return this.rep ...

  3. html-常用块级及行级标签

    1.常见块级标签   <h1></h1>......<h6></h6>:标题标签 h标签:标题标签,自动加粗,h1最大,h6最小 例:(前后隔一行)   ...

  4. 解题报告:hdu1008 Elvator

    2017-09-07 19:30:22 writer:pprp 比较顺利,最近生活出现了各种问题, 发生了很多矛盾,我要耐下心来,最重要的不是努力不努力,而是选择 希望我能处理好人际关系还有学业上的压 ...

  5. Vim练级攻略(转)

    转自平凡的世界:http://www.ccvita.com/ 前言今天看到这篇文章,共鸣点非常多.它把Vim使用分为4个级别,目前我自己是熟练运用前面三级的命令,在培养习惯使用第四级.完全就是我这一年 ...

  6. 正确的使用pod install 和 pod update

    pod install 在项目中第一次使用CocoaPods, 进行安装的时候使用这个命令. 在Podfile中增加或删除某个pod后, 也是使用这个命令. 而不是pod update. 每次运行po ...

  7. 【转】Java运行时数据区简介及堆与栈的区别

    理解JVM运行时的数据区是Java编程中的进阶部分.我们在开发中都遇到过一个很头疼的问题就是OutOfMemoryError(内存溢出错误),但是如果我们了解JVM的内部实现和其运行时的数据区的工作机 ...

  8. js事件在不同浏览器之间的差异

    目录: 1. 介绍 2. 不同浏览器之间的差异 2.1 添加事件的方法 2.2 事件对象event 2.3 event中的属性/方法 3. 总结 1. 介绍 javascript与HTML之间的交互是 ...

  9. Selenium入门练习(二)

    自动登录博客园并且退出登录 package TestNG; import org.testng.annotations.Test;import org.testng.annotations.Befor ...

  10. vs 2017 保存文件 utf8

    vs 2017 保存文件 utf8 转自:https://blog.csdn.net/jiegemena/article/details/79369650