我是靠谱客的博主 谨慎咖啡豆,这篇文章主要介绍kubernetes二进制集群部署--------多master集群(步骤非常详细,适合初学者),现在分享给大家,希望可以做个参考。

文章目录

    • 一、多master节点集群搭建示意图
    • 二、部署环境---单 master 节点的 k8s集群
    • 三、添加 master2 多节点K8s集群
      • 3.1、在master1上拷贝重要文件给master2
      • 3.2、master2修改复制的配置文件
      • 3.3、制作master2 的ETCD证书
      • 3.4、启动 master2 的三个组件
      • 3.5、验证master2是否加入K8s集群
    • 四、搭建nginx负载均衡
    • 五、搭建 keepalived 高可用服务
      • 5.1、搭建 nginx 的高可用
      • 5.2、验证高可用功能
    • 六、node节点指向 LB 高可用群集
    • 七、k8s多节点集群测试

一、多master节点集群搭建示意图

在这里插入图片描述
我的虚拟机 IP地址规划:

Master节点

master01:192.168.100.128

master02:192.168.100.132

VIP 地址:192.168.100.100

Node节点

node01:192.168.100.131

node02:192.168.100.136

负载均衡

Nginx01:192.168.100.133 master

Nginx02:192.168.100.129 backup

Harbor私有仓库
192.168.100.134

  • 本篇博客将在单master节点的K8s集群上搭建 多master节点集群 和 LB负载均衡服务器。

二、部署环境—单 master 节点的 k8s集群

部署步骤在之前的博客中已经介绍了。

  • 博客链接:
    k8s 单master节点集群部署之ETCD数据库部署、flannel网络组件安装
    kubernetes二进制集群部署--------单master集群

三、添加 master2 多节点K8s集群

3.1、在master1上拷贝重要文件给master2

1、复制/opt/kubernetes/目录下的所有文件到master02节点上

复制代码
1
2
[root@localhost kubeconfig]# scp -r /opt/kubernetes/ root@192.168.100.132:/opt

2、复制master1中三个组件的启动脚本:kube-apiserver.service、kube-controller-manager.service、kube-scheduler.service

复制代码
1
2
[root@localhost kubeconfig]# scp /usr/lib/systemd/system/{kube-apiserver,kube-controller-manager,kube-scheduler}.service root@192.168.100.132:/usr/lib/systemd/system/

3.2、master2修改复制的配置文件

只有kube-apiserver文件里有IP地址,所以只需要修改这个文件即可。

复制代码
1
2
3
4
5
6
[root@master2 ~]# cd /opt/kubernetes/cfg/ [root@master2 cfg]# ls kube-apiserver kube-controller-manager kube-scheduler token.csv [root@master2 cfg]# vi kube-apiserver #修改两处:

在这里插入图片描述

3.3、制作master2 的ETCD证书

  • master2节点与node节点之间的操作信息需要保存在ETCD集群中,所以 master 节点都必须有etcd证书,实现通信。

拷贝master1上已有的 etcd 证书给 master2 使用

复制代码
1
2
3
4
5
6
7
8
9
10
[root@master1 ~]# scp -r /opt/etcd/ root@192.168.100.132:/opt/ root@192.168.100.132's password: etcd 100% 523 326.2KB/s 00:00 etcd 100% 18MB 45.1MB/s 00:00 etcdctl 100% 15MB 33.0MB/s 00:00 ca-key.pem 100% 1679 160.2KB/s 00:00 ca.pem 100% 1265 592.6KB/s 00:00 server-key.pem 100% 1679 884.2KB/s 00:00 server.pem 100% 1338 768.5KB/s 00:00

3.4、启动 master2 的三个组件

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//开启 apiserver 组件 [root@master2 cfg]# systemctl start kube-apiserver.service [root@master2 cfg]# systemctl enable kube-apiserver.service Created symlink from /etc/systemd/system/multi-user.target.wants/kube-apiserver.service to /usr/lib/systemd/system/kube-apiserver.service. 开启 controller-manager 组件 [root@master2 cfg]# systemctl start kube-controller-manager.service [root@master2 cfg]# systemctl enable kube-controller-manager.service Created symlink from /etc/systemd/system/multi-user.target.wants/kube-controller-manager.service to /usr/lib/systemd/system/kube-controller-manager.service. //开启 scheduler 组件 [root@master2 cfg]# systemctl start kube-scheduler.service [root@master2 cfg]# systemctl enable kube-scheduler.service Created symlink from /etc/systemd/system/multi-user.target.wants/kube-scheduler.service to /usr/lib/systemd/system/kube-scheduler.service.

增加环境变量,优化kubectl命令

复制代码
1
2
3
4
5
6
[root@master2 cfg]# vi /etc/profile 在末尾添加: export PATH=$PATH:/opt/kubernetes/bin/ [root@master2 cfg]# source /etc/profile 使之生效

3.5、验证master2是否加入K8s集群

在master2 上查看node节点情况(和 master01一样即可)

复制代码
1
2
[root@localhost cfg]# kubectl get node

在这里插入图片描述

四、搭建nginx负载均衡

准备两台虚拟机 搭建 nginx的高可用群集。

  • 节点地址如下

Nginx01:192.168.100.133 master

Nginx02:192.168.100.129 backup

1、首先关闭防火墙

复制代码
1
2
3
4
[root@localhost ~]# systemctl stop firewalld.service [root@localhost ~]# setenforce 0

2、建立本地yum官方nginx源

复制代码
1
2
3
4
5
6
7
8
9
10
//编写repo文件 [root@localhost ~]# vim /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 [root@localhost ~]# yum list [root@localhost ~]# yum install nginx -y //下载nginx

3、接下来在配置文件设置 nginx的四层负载均衡

复制代码
1
2
3
[root@localhost ~]# vim /etc/nginx/nginx.conf 在events模块下添加以下内容:日志格式、日志存放位置、upstream模块

在这里插入图片描述

复制代码
1
2
3
4
5
6
7
//检查配置文件是否有语法错误 [root@localhost ~]# nginx -t [root@localhost ~]# systemctl start nginx //开启服务 //注意:查看端口6443必须在监听中,如下图。 [root@localhost ~]# netstat -natp | grep nginx

在这里插入图片描述
在这里插入图片描述

五、搭建 keepalived 高可用服务

5.1、搭建 nginx 的高可用

1、yum安装keepalived软件

复制代码
1
2
[root@localhost ~]# yum install keepalived -y

2、修改 nginx1 和 nginx2 的配置文件

  • nginx1节点作为master。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
[root@nginx1 ~]# vi /etc/keepalived/keepalived.conf //删除配置文件全部内容,添加以下内容: ! Configuration File for keepalived global_defs { # 接收邮件地址 notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } # 邮件发送地址 notification_email_from Alexandre.Cassen@firewall.loc smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id NGINX_MASTER } vrrp_script check_nginx { script "/etc/nginx/check_nginx.sh" ##检测nginx脚本的路径,稍后会创建 } vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 51 priority 100 ##优先级 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.100.100/24 ##虚拟IP地址 } track_script { check_nginx } }
  • nginx2 节点作为backup。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[root@nginx2 ~]# vi /etc/keepalived/keepalived.conf //删除配置文件全部内容,添加以下内容: ! Configuration File for keepalived global_defs { # 接收邮件地址 notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } # 邮件发送地址 notification_email_from Alexandre.Cassen@firewall.loc smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id NGINX_MASTER } vrrp_script check_nginx { script "/etc/nginx/check_nginx.sh" ##检测脚本的路径,稍后会创建 } vrrp_instance VI_1 { state BACKUP interface ens33 virtual_router_id 51 priority 90 ##优先级低于master advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.100.100/24 ##虚拟IP地址 } track_script { check_nginx } }

在这里插入图片描述
3、创建检测脚本

复制代码
1
2
3
4
5
6
7
8
9
[root@localhost ~]# vim /etc/nginx/check_nginx.sh count=$(ps -ef |grep nginx |egrep -cv "grep|$$") if [ "$count" -eq 0 ];then systemctl stop keepalived fi [root@localhost ~]# chmod +x /etc/nginx/check_nginx.sh //授权

4、开启keepalived 服务

复制代码
1
2
[root@localhost ~]# systemctl start keepalived.service

5、查看ip地址,可以看到高可用群集中的master节点上有漂移地址,backup节点上没有。

复制代码
1
2
[root@localhost ~]# ip a

在这里插入图片描述

5.2、验证高可用功能

1、此时 虚拟ip在 nginx1 上,验证地址漂移,可以在 lb01 中使用 pkill nginx 停止nginx服务,再在 lb02 上使用 ip a 命令查看地址是否进行了漂移。
在这里插入图片描述
在这里插入图片描述

2、恢复操作:此时在 nginx02上,我们先启动 nginx服务,再启动 keepalived服务,再用 ip a命令查看,地址又漂移回来了,而 nginx02上没有虚拟ip。
在这里插入图片描述

六、node节点指向 LB 高可用群集

1、修改 两个node节点的配置文件,server ip 地址为统一的VIP地址(三个文件)

复制代码
1
2
3
4
5
6
7
8
//修改内容:server: https://192.168.100.100:6443(都改成vip地址) [root@localhost cfg]# vim /opt/kubernetes/cfg/bootstrap.kubeconfig [root@localhost cfg]# vim /opt/kubernetes/cfg/kubelet.kubeconfig [root@localhost cfg]# vim /opt/kubernetes/cfg/kube-proxy.kubeconfig

在这里插入图片描述
重启服务

复制代码
1
2
3
4
[root@localhost cfg]# systemctl restart kubelet.service [root@localhost cfg]# systemctl restart kube-proxy.service

2、检查修改内容

复制代码
1
2
3
4
//确保必须在此路径下 grep 检查 [root@localhost ~]# cd /opt/kubernetes/cfg/ [root@localhost cfg]# grep 100 *

在这里插入图片描述

3、接下来在 nginx1 上查看 nginx 的 k8s日志:

复制代码
1
2
[root@localhost ~]# tail /var/log/nginx/k8s-access.log

在这里插入图片描述

七、k8s多节点集群测试

//在 master1上操作,创建 Pod进行测试

复制代码
1
2
[root@localhost kubeconfig]# kubectl run nginx --image=nginx

//查看 Pod 状态

复制代码
1
2
3
4
5
6
[root@master1 ~]# kubectl get pods NAME READY STATUS RESTARTS AGE nginx-dbddb74b8-vj4wk 1/1 Running 0 16s 此时已经创建完成,正在运行中。

//查看刚刚创建的nginx日志

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
[root@master1 ~]# kubectl logs nginx-dbddb74b8-vj4wk Error from server (Forbidden): Forbidden (user=system:anonymous, verb=get, resource=nodes, subresource=proxy) ( pods/log nginx-dbddb74b8-vj4wk) #出现 error 是由于权限不足,下面来授权解决一下这个问题。 解决办法(添加匿名用户授予权限): [root@master1 ~]# kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous clusterrolebinding.rbac.authorization.k8s.io/cluster-system-anonymous created 此时,再次查看日志,就不会出现报错,但是没有信息产生,因为没有访问容器。

在这里插入图片描述
//查看 Pod 网络

复制代码
1
2
[root@localhost kubeconfig]# kubectl get pods -o wide

可以看出,这个在master1上创建的 pod 被分配到了node01上了。
在这里插入图片描述
我们可以在对应网络的node节点上操作就可以直接访问。

故在node01上操作:

复制代码
1
2
[root@localhost cfg]# curl 172.17.14.3

在这里插入图片描述
我们在node节点之间部署了 flannel网络组件,实现node节点互通。所以在node1和node2的浏览器上访问这个地址:172.17.14.3
在这里插入图片描述

因为flannel组件挂了,没有及时发现,我解决完这个问题后,flannel分配的IP地址发生变化,导致Pod的IP网段变了,但是node2节点是可以访问换这个Pod的,所以node2的效果图这里就不展示了。

在这里插入图片描述
建议大家的虚拟机用挂起状态,并且开机的时候,检查一下之前配置的服务状态是否正常。

最后

以上就是谨慎咖啡豆最近收集整理的关于kubernetes二进制集群部署--------多master集群(步骤非常详细,适合初学者)的全部内容,更多相关kubernetes二进制集群部署--------多master集群(步骤非常详细内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(84)

评论列表共有 0 条评论

立即
投稿
返回
顶部