购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.5 为Kubernetes增加Node节点

上节已经完成了Control Plane的构建,本节为Kubernetes增加一个Node节点,具体步骤说明如下。

1.准备node01

本节准备新的虚拟机节点node01,以此作为Kubernetes的一个Node,具体操作步骤说明如下。

(1)准备虚拟机

1)关闭master虚拟机,命令如下。

2)复制“E:\vm\02\master”到“E:\vm\02\node01”,打开node01目录下的虚拟机,将虚拟机名字修改为node01,如图2-9所示。

图2-9 node01虚拟机

复制master虚拟机时,一定要确保master虚拟机是关闭的。

3)虚拟机上电,在弹出的对话框中选择“我已复制该虚拟机”,如图2-10所示。

图2-10 node01虚拟机复制对话框

(2)修改操作系统配置

1)登录node01,修改主机名,命令如下。

2)编辑ifcfg-ens160文件,命令如下。

3)修改IP地址如下。

4)运行下面的命令,使得网络配置生效。

(3)重启操作系统

在master上重启操作系统的命令如下。

如果系统显示节点hostname为node01,则说明上述修改成功。

2.启动master

由于master节点前面用于复制虚拟机,是断电关闭的,现在给虚拟机master上电,来运行Kubernetes集群的Control plane。master启动后,Kubelet服务会自动启动,并启动相应的Pod和容器,之前的Pod网络也会自动初始化,如图2-11所示。因此,master重启是不需要再次运行“kubeadm init”初始化的。

获取Pod信息,命令如下。

直到上述命令输出图2-11所示信息,才进入下一步操作。

图2-11 master节点Pod信息图

3.将node01加入到Kubernetes集群

要将node01加入Kubernetes,必须获得该Kubernetes的token(令牌),该token在kubeadminit时会打印在屏幕上,而且该token的默认有效期是24h,如果当时没有记下来,或者已经超时,可以使用下面的命令来获取token。

上面命令运行后,会输出token信息以及node加入Kubernetes的命令如下。

接下来将node01加入到Kubernetes,步骤如下。

(1)reset node01

运行上面的加入命令之前,先要对node01进行reset,这是因为node01是从master复制过来的,已经有Kubernetes的相关配置,但那些配置是用作Control Plane的,而现在node01的角色是Node,因此,要先重置这些设置,命令如下。注意,运行此命令时,master必须已经启动,Kubernetes已经运行。

reset命令必须在root用户下执行,根据提示选择y即可。

(2)将node01加入到Kubernetes

1)根据token时的提示信息,运行下面的命令。

2)如果系统输出以下信息,则说明node01已经加入到Kubernetes了。

3)也可以在master上运行下面的命令,查看Kubernetes中Node情况。

4)如果系统输出如下node01的相关信息,如图2-12所示,则说明node01已经成功加入Kubernetes集群。

图2-12 Kubernetes node信息图

至此已经成功构建了1个Node的Kubernetes集群。

4.查看node01上运行的Pod和Service

node01运行后,查看在该Node上运行的Pod,命令如下。

在node01上运行Pod如图2-13所示,即两个Calico网络相关的Pod,和一个kube-proxy的Pod。

图2-13 node01 Pod信息图

此外,在node01上还运行着kubelet服务,如下所示。

5.修改kube-proxy的proxy mode

Kubernetes的kube-proxy支持iptables和ipvs两种模式,来实现Pod同集群内外的应用进行网络通信。其中ipvs mode的通信效率更高,又由于特定版本的Kubernetes(如v 1.17)中iptables mode所设置的iptables规则造成Pod无法同Kubernetes Service(10.96.0.1:443)进行网络通信,从而导致calico的calico-kube-controllers不能在Node上运行,其容器日志报错如下。

基于上述原因,本书此处将kube-proxy默认的proxy mode修改成ipvs proxy mode,具体步骤如下。

(1)编辑kube-proxy的配置

编辑kube-proxy的配置的命令如下,其中“kubectl edit”是编辑命令;cm是configmaps的缩写,它表示Kubernetes中的配置Resource,“cm kube-proxy”则表示kube-proxy的配置Resource;“-n kube-system”指定操作“kube-system namespace”中的Resource。

上述命令执行后,系统会打印kube-proxy的配置,在配置中搜索mode,如下所示。

然后修改mode的值为ipvs,如下所示,保存退出。

(2)删除Kubernetes中已有的kube-proxy Pod,命令如下。

(3)查看新启动的kube-proxy Pod信息

master和node01上的kubelet发现kube-proxy被删除后,会启动新的kube-proxy Pod,并加载新的配置。以master节点为例,可以使用下面的命令来查看kube-proxy Pod信息,其中,kube-proxy-47dzt是新启动的kube-proxy的Pod名字。

上述命令执行后,如果系统输出如下信息,则说明ipvs mode设置成功。

6.创建Pod

接下来创建一个简单的Pod来测试Kubernetes的基本功能。该Pod包含一个nginx容器,具体创建命令如下,其中“kubectl create deployment”表示创建一个Deployment,通过Deployment来创建Pod;nginx是Deploy的名字;--image=nginx指定Pod中容器镜像的名字为nginx。

上述命令会创建一个名字为nginx的Deployment,如下所示。

上述命令还会创建以nginx开头的Pod,如图2-14所示,该Pod位于node01之上,其Pod IP为192.168.2.129。

图2-14 nginx Pod信息图

在master上用curl命令来模拟访问Pod,命令如下。

如果系统输出“Welcome to nginx!”,如下所示,则说明Pod nginx运行成功。

7.总结

至此Kubernetes集群构建完成,它由一个Control Plane节点(master)和一个Node节点(node01)组成。在构建顺序上,先在master节点上安装kubeadm;然后由kubeadm来初始化Kubernetes集群;然后再复制master节点为node01节点,对node01节点配置后,使用kubeadm将node01加入到Kubernetes集群;最后创建一个包含nginx服务器的Deployment来验证Kubernetes是否正常工作。上述构建步骤涉及诸多Linux操作,容易出错,其中即时验证是降低出错概率的好方法。 lox4sKXVf0BDq74FN9Dt0PbLgvRy6NDfXbkMhpYO2AAJjMR0wgd4+W6k+WAEpB6k

点击中间区域
呼出菜单
上一章
目录
下一章
×