3.使用kubeadm方式搭建K8S集群
kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。
这个工具能通过两条指令完成一个kubernetes集群的部署:
# 创建一个 Master 节点
kubeadm init
# 将一个 Node 节点加入到当前集群中
kubeadm join <Master节点的IP和端口 >Kubeadm方式搭建K8S集群
使用kubeadm方式搭建K8s集群主要分为以下几步
准备三台虚拟机,同时安装操作系统CentOS 7.x
对三个安装之后的操作系统进行初始化操作
在三个节点安装 docker kubelet kubeadm kubectl
在master节点执行kubeadm init命令初始化
在node节点上执行 kubeadm join命令,把node节点添加到当前集群
配置CNI网络插件,用于节点之间的连通【失败了可以多试几次】
通过拉取一个nginx进行测试,能否进行外网测试
安装要求
在开始之前,部署Kubernetes集群机器需要满足以下几个条件:
一台或多台机器,操作系统 CentOS7.x-86_x64
硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多【注意master需要两核】
可以访问外网,需要拉取镜像,如果服务器不能上网,需要提前下载镜像并导入节点
禁止swap分区
准备环境
master
192.168.177.130
node1
192.168.177.131
node2
192.168.177.132
然后开始在每台机器上执行下面的命令
安装Docker/kubeadm/kubelet
所有节点安装Docker/kubeadm/kubelet ,Kubernetes默认CRI(容器运行时)为Docker,因此先安装Docker
安装Docker
首先配置一下Docker的阿里yum源
然后yum方式安装docker
配置docker的镜像源
然后重启docker
添加kubernetes软件源
然后我们还需要配置一下yum的k8s软件源
安装kubeadm,kubelet和kubectl
由于版本更新频繁,这里指定版本号部署:
部署Kubernetes Master【master节点】
在 192.168.177.130 执行,也就是master节点
由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址,【执行上述命令会比较慢,因为后台其实已经在拉取镜像了】,我们 docker images 命令即可查看已经拉取的镜像
当我们出现下面的情况时,表示kubernetes的镜像已经安装成功
使用kubectl工具 【master节点操作】
执行完成后,我们使用下面命令,查看我们正在运行的节点
能够看到,目前有一个master节点已经运行了,但是还处于未准备状态
下面我们还需要在Node节点执行其它的命令,将node1和node2加入到我们的master节点上
加入Kubernetes Node【Slave节点】
下面我们需要到 node1 和 node2服务器,执行下面的代码向集群添加新节点
执行在kubeadm init输出的kubeadm join命令:
注意,以下的命令是在master初始化完成后,每个人的都不一样!!!需要复制自己生成的
默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,操作如下:
当我们把两个节点都加入进来后,我们就可以去Master节点 执行下面命令查看情况
部署CNI网络插件
上面的状态还是NotReady,下面我们需要网络插件,来进行联网访问
默认镜像地址无法访问,sed命令修改为docker hub镜像仓库。
运行后的结果
运行完成后,我们查看状态可以发现,已经变成了Ready状态了
如果上述操作完成后,还存在某个节点处于NotReady状态,可以在Master将该节点删除
测试kubernetes集群
我们都知道K8S是容器化技术,它可以联网去下载镜像,用容器的方式进行启动
在Kubernetes集群中创建一个pod,验证是否正常运行:
如果我们出现Running状态的时候,表示已经成功运行了
下面我们就需要将端口暴露出去,让其它外界能够访问
能够看到,我们已经成功暴露了 80端口 到 30529上
我们到我们的宿主机浏览器上,访问如下地址
发现我们的nginx已经成功启动了
到这里为止,我们就搭建了一个单master的k8s集群
错误汇总
错误一
在执行Kubernetes init方法的时候,出现这个问题
是因为VMware设置的核数为1,而K8S需要的最低核数应该是2,调整核数重启系统即可
错误二
我们在给node1节点使用 kubernetes join命令的时候,出现以下错误
错误原因是我们需要关闭swap
错误三
在给node1节点使用 kubernetes join命令的时候,出现以下错误
解决方法,首先需要到 master 节点,创建一个文件
然后删除刚刚创建的配置目录
然后 在master重新初始化
初始完成后,我们再到 node1节点,执行 kubeadm join命令,加入到master
添加完成后,我们使用下面命令,查看节点是否成功添加
错误四
我们再执行查看节点的时候, kubectl get nodes 会出现问题
这是因为我们之前创建的配置文件还存在,也就是这些配置
我们需要做的就是把配置文件删除,然后重新执行一下
然后再次创建一下即可
这个问题主要是因为我们在执行 kubeadm reset 的时候,没有把 $HOME/.kube 给移除掉,再次创建时就会出现问题了
错误五
安装的时候,出现以下错误
是因为yum上锁占用,解决方法
错误六
在使用下面命令,添加node节点到集群上的时候
然后出现了这个错误
出于安全考虑,Linux系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将包发往本机另一网卡,该网卡根据路由表继续发送数据包。这通常就是路由器所要实现的功能。也就是说 /proc/sys/net/ipv4/ip_forward 文件的值不支持转发
0:禁止
1:转发
所以我们需要将值修改成1即可
修改完成后,重新执行命令即可
最后更新于