在上一章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. hadoop 3.1.1 安装

    以下是本次搭建说使用的服务器 服务器IP分配 IP 节点名称 说明 192.168.172.130 master 主服务器 192.168.172.131 slave1 从服务器1 192.168.1 ...

  2. Pandas 高级应用 数据分析

    深入pandas 数据处理 三个阶段 数据准备 数据转化 数据聚合 数据准备 加载 组装 合并 - pandas.merge() 拼接 - pandas.concat() 组合 - pandas.Da ...

  3. Ignatius and the Princess III - 拆分数-动态规划(dp)

    ---恢复内容开始--- 2017-08-10 20:00:45 writer:pprp 拆分数: 把正整数n拆分成k个正整数之和的方案数: 问题转换:将1转化为2 1.把n表示成m个正整数之和的方案 ...

  4. 【Python】模块学习之使用paramiko连接Linux,远程执行命令,上传下载、文件

    本文主要介绍paramiko远程执行linux命令,及在服务器上进行文件的上传.下载 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. ...

  5. WPF 回车转Tab实现跳转

    1.重写窗体的KeyDown事件 protected override void OnKeyDown(KeyEventArgs e) { if (e.Key == Key.Enter) { // Mo ...

  6. IOS-APP前需要考虑的几件事

    做一个 App 前需要考虑的几件事 来源:Limboy's HQ 链接:http://t.cn/R5sEDMJ 随着工具链的完善,语言的升级以及各种优质教程的涌现,做一个 App 的成本也越来越低了. ...

  7. IOS UI-控制器的创建和控制器的View的创建

    一.控制器的创建和控制器的View的创建 说明:控制器有三种创建方式,下面一一进行说明. 一.第一种创建方式(使用代码直接创建) 1.创建一个空的IOS项目. 2.为项目添加一个控制器类. 3.直接在 ...

  8. watch和computed的用法区别是什么?

    在模板中绑定表达式是非常便利的,但是它们实际上只用于简单的操作.模板是为了描述视图的结构.在模板中放入太多的逻辑会让模板过重且难以维护.这就是为什么 Vue.js 将绑定表达式限制为一个表达式.如果需 ...

  9. laravel中的validator()类验证的使用

  10. 快速切题 poj 1003 hangover 数学观察 难度:0

    Hangover Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 103896   Accepted: 50542 Descr ...