1、安装要求
在开始之前,部署Kubernetes集群机器需要满足以下几个条件:
- 五台机器,操作系统 CentOS7.5+(mini)
- 硬件配置:2GBRAM,2vCPU+,硬盘30GB+
- 集群中所有机器之间网络互通,且可访问外网。
2、安装步骤
角色 | IP |
---|---|
k8s-lb |
192.168.50.100 |
master1 |
192.168.50.128 |
master2 |
192.168.50.129 |
master3 |
192.168.50.130 |
node1 |
192.168.50.131 |
node2 |
192.168.50.132 |
2.1、安装前预处理操作
(1)配置主机名
master1
节点设置:
master2
节点设置:
master3
节点设置:
node1
从节点设置:
node2
从节点设置:
执行bash
命令以加载新设置的主机名
(2)添加hosts
所有的节点都要添加hosts
解析记录
2.4、Haproxy+Keepalived
配置高可用VIP
高可用我们采用官方推荐的HAproxy+Keepalived
,HAproxy
和Keepalived
以守护进程的方式在所有Master
节点部署。
(1)安装keepalived
和haproxy
注意:只需要在三个master
节点安装即可
(2)配置Haproxy
服务
所有master
节点的haproxy
配置相同,haproxy的配置文件是/etc/haproxy/haproxy.cfg
。master1
节点配置完成之后再分发给master2、master3
两个节点。
注意这里的三个master节点的ip地址要根据你自己的情况配置好。
(3)配置Keepalived
服务
keepalived
中使用track_script
机制来配置脚本进行探测kubernetes
的master
节点是否宕机,并以此切换节点实现高可用。
master1
节点的keepalived
配置文件如下所示,配置文件所在的位置/etc/keepalived/keepalived.cfg
。
需要注意几点(前两点记得修改):
mcast_src_ip
:配置多播源地址,此地址是当前主机的ip地址。priority
:keepalived
根据此项参数的大小仲裁master
节点。我们这里让master节点为kubernetes
提供服务,其他两个节点暂时为备用节点。因此master1
节点设置为100
,master2
节点设置为99
,master3
节点设置为98
。state
:我们将master1
节点的state
字段设置为MASTER
,其他两个节点字段修改为BACKUP
。- 上面的集群检查功能是关闭的,等到集群建立完成后再开启。
(4)配置健康检测脚本
我这里将健康检测脚本放置在/etc/keepalived
目录下,check_kubernetes.sh
检测脚本如下:
根据上面的注意事项配置master2
、master3
节点的keepalived
服务。
(5)启动Keeplived
和Haproxy
服务
确保万一,查看一下服务状态
2.5、部署Master
节点
(1)生成预处理文件
在master
节点执行如下指令:
这个文件kubeadm-init.yaml
,是我们初始化使用的文件,里面大概修改这几项参数。
注意:上面的advertiseAddress
字段的值,这个值并非当前主机的网卡地址,而是高可用集群的VIP
的地址。
注意:上面的controlPlaneEndpoint
这里填写的是VIP
的地址,而端口则是haproxy
服务的8443
端口,也就是我们在haproxy
里面配置的这段信息。
这一段里面的8443
端,如果你自定义了其他端口,这里请记得修改controlPlaneEndpoint
里面的端口。
(2)提前拉取镜像
如果直接采用kubeadm init
来初始化,中间会有系统自动拉取镜像的这一步骤,这是比较慢的,我建议分开来做,所以这里就先提前拉取镜像。
如果大家看到开头的两行warning
信息(我这里没有打印),不必担心,这只是警告,不影响我们完成实验。
其他master
节点提前拉取镜像
其他两个master
节点在初始化之前也尽量先把镜像拉取下来,这样子减少初始化时间
master2
节点
master3
节点
(3)初始化kubenetes
的master1
节点
执行如下命令
这个过程大概30s
的时间就做完了,之所以初始化的这么快就是因为我们提前拉取了镜像。像我上面这样的没有报错信息,并且显示上面的最后10行类似的信息这些,说明我们的master1
节点是初始化成功的。
在使用集群之前还需要做些收尾工作,在master1
节点执行:
再配置一下环境变量
当看到倒数第四行内容This node has joined the cluster
,这一行信息表示node1
节点加入集群成功。
(2)node2
节点加入集群
(3)查看集群节点信息
此时我们可以在任意一个master
节点执行如下命令查看此集群的节点信息。
可以看到集群的五个节点都已经存在,但是现在还不能用,也就是说现在集群节点是不可用的,原因在于上面的第2个字段,我们看到五个节点都是“NotReady`状态,这是因为我们还没有安装网络插件。
网络插件有calico
,flannel
等插件,这里我们选择使用flannel
插件。
2.8、安装网络插件
(1)默认方法
默认大家从网上看的教程都会使用这个命令来初始化。
事实上很多用户都不能成功,因为国内网络受限,所以可以这样子来做。
(2)更换flannel
镜像源
master1
节点上修改本地的hosts
文件添加如下内容以便解析
然后下载flannel
文件
编辑镜像源,默认的镜像地址我们修改一下。把yaml
文件中所有的quay.io
修改为 quay-mirror.qiniu.com
此时保存保存退出。在master
节点执行此命令。
这样子就可以成功拉取flannel
镜像了。当然你也可以使用我提供给大家的kube-flannel.yml
文件
查看flannel
是否正常
如果你想查看flannel
这些pod
运行是否正常,使用如下命令
如果第三字段STATUS
不是处于Running
状态的话,说明flannel
是异常的,需要排查问题所在。
查看节点是否为Ready
稍等片刻,执行如下指令查看节点是否可用
目前节点状态是Ready
,表示集群节点现在是可用的。
3、测试kubernetes
集群
3.1、kubernetes
集群测试
(1)创建一个nginx
的pod
现在我们在kubernetes
集群中创建一个nginx
的pod
,验证是否能正常运行。
在master
节点执行一下步骤:
现在我们查看pod
和service
打印的结果中,前半部分是pod
相关信息,后半部分是service
相关信息。我们看service/nginx
这一行可以看出service
暴漏给集群的端口是30249
。记住这个端口。
然后从pod
的详细信息可以看出此时pod
在node2
节点之上。node2
节点的IP地址是192.168.50.132
(2)访问nginx
验证集群
那现在我们访问一下。打开浏览器(建议火狐浏览器),访问地址就是:http://192.168.50.132:30249
3.2、安装dashboard
(1)创建dashboard
先把dashboard
的配置文件下载下来。由于我们之前已经添加了hosts
解析,因此可以下载。
默认Dashboard
只能集群内部访问,修改Service
为NodePort
类型,暴露到外部:
大概在此文件的32-44
行之间,修改为如下:
运行此yaml
文件
查看dashboard
运行是否正常
主要是看status
这一列的值,如果是Running
,并且RESTARTS
字段的值为0
(只要这个值不是一直在渐渐变大),就是正常的,目前来看是没有问题的。我们可以继续下一步。
查看此dashboard
的pod
运行所在的节点
从上面可以看出,kubernetes-dashboard-9774cc786-ccvcf
运行所在的节点是node2
上面,并且暴漏出来的端口是30001
,所以访问地址是:https://192.168.50.132:30001
用火狐浏览器访问,访问的时候会让输入token
,从此处可以查看到token
的值。
把上面的token
值输入进去即可进去dashboard
界面。
不过现在我们虽然可以登陆上去,但是我们权限不够还查看不了集群信息,因为我们还没有绑定集群角色,同学们可以先按照上面的尝试一下,再来做下面的步骤
(2)cluster-admin管理员角色绑定
再使用输出的token
登陆dashboard
即可。
报错
(1)其他master节点无法加入集群
查看集群的高可用配置是否有问题,比如keepalived的配置中,主备,优先级是否都配置好了。
本文链接:http://www.yunweipai.com/38951.html