linux企业运维——k8s高可用集群架构搭建详解(代码片段)

是大姚呀 是大姚呀     2022-12-28     731

关键词:

K8s高可用集群

一、K8s高可用集群架构原理

Kubernetes的存储层使用的是Etcd。Etcd是CoreOS开源的一个高可用强一致性的分布式存储服务,Kubernetes使用Etcd作为数据存储后端,把需要记录的pod、rc、service等资源信息存储在Etcd中。

Kubernetes的管理层服务包括kube-scheduler和kube-controller-manager。kube-scheduer和kube-controller-manager使用一主多从的高可用方案,在同一时刻只允许一个服务处以具体的任务。Kubernetes中实现了一套简单的选主逻辑,依赖Etcd实现scheduler和controller-manager的选主功能。利用Etcd的强一致性,能够保证在分布式高并发情况下保证leader节点的全局唯一性。

利用Etcd对K8s进行高可用HA部署的方式主要有以下两种:

  • 将etcd与Master节点组件部署在一起
  • 单独部署一个etcd集群

二、实验环境

这里需要用到五台虚拟机:
server1(172.25.19.1): 私有仓库,便于后续部署时拉取镜像
server5(172.25.19.5): k8s高可用集群master node + 负载均衡
server6(172.25.19.6): k8s高可用集群master node
server7(172.25.19.7): k8s高可用集群master node
server8(172.25.19.8): k8s高可用集群worker node
注意: 部署k8s集群时,三个master node各需要2G内存,2个Cpu

实验步骤:
1、准备三个新的虚拟机server5、server6、server7:创建硬盘、创建新虚拟机导入硬盘、修改主机名及IP

2、这里一共开启了4台虚拟机,还有一台是server1私有仓库

3、确认server1上的habbor仓库开启

4、为真实主机和所有开启的虚拟机配置域名解析

三、K8s高可用集群架构搭建

在之前的k8s集群配置中,整个k8s集群中只有一台master节点,当这唯一的master节点down掉后,整个集群将无法工作调度,因此我们需要建立多个master节点,并为多个master节点配置负载均衡,这样当某一台master节点down掉后,其他正常运行的master节点能够负责集群的调度控制,从而实现k8s集群的高可用。

1、负载均衡Loadbalancer部署—haproxy

在真正的生产环境中,负载均衡服务器应单独部署,这里我们是在一台电脑上开启多台虚拟机搭建K8s高可用集群,由于内存限制,所以我们可以将实现负载均衡的haproxy部署在k8s集群master node之一的server5上。

实验步骤:
1、在server5上添加一个进行负载均衡时对外的虚拟访问IP:172.25.19.100,也可以直接使用原有的IP,但最好独立出来

2、由于server5是封装好母盘的快照,所以其软件仓库中有yum源,使用yum源安装haproxy


3、编辑haproxy的主配置文件

设置其监听8443端口的tcp请求并负载均衡到k8s集群的三个master节点进行处理,为监控开启一个80端口
注意: k8s集群的master节点进行处理调度时使用的API模块的端口为6443,所以在监听时应使用6443端口,但由于我们的server5节点同时也是一台master,所以端口不能冲突,这里设置为8443

4、启动haproxy,查看80和8443端口处于监听状态

5、此时访问(主机IP/虚拟IP)/status可以看到监控页面,三个master后端都是标红的,这是因为三个master后端都还未部署k8s

2、Docker部署

在进一步搭建k8s集群前,我们需要在每个master上部署Docker。Docker是开源的应用容器引擎,k8s是在其基础上的容器集群管理系统。

实验步骤:
1、将server1上的docker源指向文件复制给server5、server6、server7

2、server5、server6、server7上安装docker-ce,安装完成后启动docker



3、在server5上docker的配置目录中编辑json配置文件:指定拉取镜像的仓库地址(指向私有仓库)、设置docker的cgroup驱动程序为systemd

4、配置内核参数解决docker网桥问题,sysctl --system应用内核参数配置

5、将配置好的json文件和内核参数配置文件复制给server6、server7


6、由于我们的私有仓库做了加密认证,这里还需要把sever1上私有仓库的证书复制给server5、server6、server7

7、重启server5、server6、server7的docker,注意server6和server7还要sysctl --system应用内核参数配置


8、此时在server5、server6、server7上docker info查看docker属性信息,可以看到所有配置设定成功且无网桥警告信息


9、这里还要注意,在设置了镜像拉取仓库为私有仓库后,还要在server5、server6、server7上为仓库配置域名解析

10、拉取镜像测试成功,docker部署完成

3、K8s集群部署

实验步骤:
1、在server5、server6、server7上部署k8s前,由于kube_proxy使用IPVS模式,需要先modprobe ip_vs加载对应的内核模块(这里可以安装ipvsadmin便于后续管理查看策略)



2、关闭server5、server6、server7的swap分区(否则后续集群部署会报错),编辑设备挂载策略文件注释掉相应的开机挂载策略




3、从服务器上下载k8s的管理软件压缩包并解压缩(也可以从网上下载)

将解压缩得到的管理软件目录发送给server5、server6、server7

4、切换到server5、server6、server7上的k8s管理软件目录中,安装所有管理软件



5、安装完成后在server5、server6、server7上启动kubelet服务,设置其为开机自启动



6、在server5上输出kubeadm初始化模板为初始化配置文件,编辑该文件

文件中主要修改如下:1)修改API终端地址为server5的IP;2)设置节点名称为主机名;3)设置对server5进行负载均衡控制的终端为之前在server5上建立的虚拟IP,并指定监听端口为8443;4)修改镜像仓库为私有仓库的地址(默认为谷歌官方仓库,拉取速度慢),修改k8s集群版本;5)指定worker node上部署pod的网络段;6)定义k8s使用IPVS模式


注意: 在修改k8s版本时,需要与私有仓库中已有的kube-apiserver镜像版本一致

7、根据我们在server5编辑的kubeadm初始化配置文件,预先拉取安装k8s需要的镜像

8、接着根据该初始化配置文件,初始化集群,添加--upload-certs参数可以在后续执行加入节点时自动分发同步证书文件

9、集群初始化成功后,由于当前我们是超级用户身份,可以直接执行下图命令使用集群
注意: 这种方式在机器重启后会失效,如果需要再次使用集群,需要再次执行这条命令

另外,在集群初始化成功的提示信息中,给出了当我们要在集群中添加master node或worker node时,需要分别执行的命令

10、执行提示命令使用集群,此时查看集群中的节点看到server5节点没有就绪,查看集群中的pod可以看到是因为coredns解析服务起不来,这是由于集群中缺少网络插件,为了解决这一问题,我们需要部署flannel网络插件

11、复制flannel网络插件的配置文件(可以从网络下载)给server5

编辑该配置文件:修改网络类型为host-gw主机直连;确认flannel网络插件的镜像版本与私有仓库中的镜像版本一致



12、编辑完成后应用这一配置文件(为了使用集群管理命令kubectl时操作方便,这里我们将相应的设置语句写入~/.bashrc文件中,读取该文件使设定生效,此时kubectl命令可以补齐)

13、此时查看集群中的pod可以看到所有pod成功运行就绪,再次查看集群中的节点看到server5节点已就绪

14、在server6、server7上执行初始化集群成功时添加master节点的提示命令,将server6、server7作为master节点添加到集群中


15、此时查看集群中的节点可以看到,集群中添加的三个master节点已就绪

16、三个master后端部署k8s完成,此时在浏览器中访问(主机IP/虚拟IP)/status可以看到监控页面中haproxy的三个master后端变绿

4、K8s集群添加worker节点

实验步骤:
1、创建运行一台新的虚拟机server8作为worker node部署到集群中


2、server8上的部署与之前类似,这里我们可以直接将server5节点上配置好的docker源指向文件、k8s管理软件目录复制发送给server8

3、在server8上安装docker-ce,安装完成后启动docker

切换到server8上的k8s管理软件目录中,安装所有管理软件

4、将server5上docker配置目录中的json配置文件、私有仓库的证书、内核参数配置文件复制给server8

5、在server8上sysctl --system应用内核参数配置

6、重启docker服务,由于设置了镜像拉取仓库为私有仓库,我们还要在server8上为仓库配置域名解析

7、docker info查看docker属性信息,可以看到docker的cgroup驱动程序为systemd的配置设定成功且无网桥警告信息


8、关闭server8的swap分区(否则后续集群部署会报错),编辑设备挂载策略文件注释掉相应的开机挂载策略

9、在server8上执行初始化集群成功时添加worker节点的提示命令,将server8作为worker节点添加到集群中

10、查看集群中的节点看到server8节点已就绪,使用v1版本的myapp镜像运行一个pod,查看pod信息可以看到pod成功运行,进一步查看pod的额外信息可以看到pod运行在新加入的worker节点server8上并得到其在集群中的IP,访问这一IP可以看到pod的发布页面

四、集群高可用性能测试

实验步骤:
1、在集群中的其余两个master节点server6、server7执行提示命令使用集群,同样可以查看集群中运行的资源

关闭任意一个master节点,这里关闭server7(由于我们同时在server5上部署了haproxy,因此不能关闭server5)

2、此时在浏览器中访问(主机IP/虚拟IP)/status可以看到监控页面中haproxy的master后端server7变红

3、在剩下的master节点查看pod信息可以看到pod仍能够成功运行,访问pod在集群内部的IP可以看到pod的发布页面

再次关闭一个master节点server6

4、此时在浏览器中访问(主机IP/虚拟IP)/status可以看到监控页面中haproxy的master后端server6也变红,即集群中只有一个master后端server5正常运行

5、在剩下的server5节点查看pod信息,系统提示请求超时,集群无法正常运行,这是因为k8s高可用集群中要保证至少有两个正常运行的master节点

6、重新开启master节点server6、server7

7、在server5节点查看pod信息可以看到pod再次成功运行

在重新开启的两个master节点server6、server7执行提示命令使用集群,可以再次查看到集群中运行的pod资源

linux企业运维——k8s高可用集群架构搭建详解(代码片段)

K8s高可用集群文章目录K8s高可用集群一、K8s高可用集群架构原理二、实验环境三、K8s高可用集群架构搭建3.1、负载均衡Loadbalancer部署—haproxy3.2、Docker部署3.3、K8s集群部署3.4、K8s集群添加worker节点四、集群高可用性能测试一、K8s... 查看详情

运维工程师需要掌握啥技能

...、资源、任务、文件、软件包、磁盘等管理方法。3、Linux企业级常用服务,如DNS、FTP、Http、mail。4、Linux企业级安全原理和防范技巧以及网络和安全Linux安全架构、安全威胁模型、以及加密、解密等原理,常见攻击和防范手段。5... 查看详情

linux运维工程师必须掌握哪些技能

...程、资源、任务、文件、软件包、磁盘等管理方法3、Linux企业级常用服务如DNS、FTP、Http、mail4、Linux企业级安全原理和防范技巧以及网络和安全-Linux安全架构、安全威胁模型、以及加密、解密等原理,常见攻击和防范手段5、Shell... 查看详情

lvs&keepalived—集群负载均衡企业高可用详解

LVS负载均衡集群及配置负载均衡概述1、集群通过集群(cluster)技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对高的收益,其任务调度则是集群系统中的核心技术。集群搭建完成后,可以利用多台计... 查看详情

linux企业运维——hadoop大数据平台(下)hdfs高可用yarn高可用hbase高可用(代码片段)

Linux企业运维——Hadoop大数据平台(下)hdfs高可用、Yarn高可用、hbase高可用文章目录Linux企业运维——Hadoop大数据平台(下)hdfs高可用、Yarn高可用、hbase高可用一、Hadoop高可用1.1、zoomkeeper集群部署1.2、hdfs高可用1.... 查看详情

linux企业运维——hadoop大数据平台(下)hdfs高可用yarn高可用hbase高可用(代码片段)

Linux企业运维——Hadoop大数据平台(下)hdfs高可用、Yarn高可用、hbase高可用文章目录Linux企业运维——Hadoop大数据平台(下)hdfs高可用、Yarn高可用、hbase高可用一、Hadoop高可用1.1、zoomkeeper集群部署1.2、hdfs高可用1.... 查看详情

linux企业运维——kubernetesk8s集群安装部署(代码片段)

Linux企业运维——Kubernetes(一)k8s集群安装部署文章目录Linux企业运维——Kubernetes(一)k8s集群安装部署1、Kubernetes简介1.1、什么是Kubernetes1.2、Kubernetes设计架构2、k8s安装部署2.1、环境准备2.2、安装部署1、Kubernetes... 查看详情

一文学会k8s多master集群+keepalived高可用实战

...至关重要,一旦宕机,整个K8S平台将无法使用,所以保障企业高可用是运维必备的工作之一。1.安装keepalived2.修改配置3.重启keepalived 查看详情

linux云计算-mysql-高可用集群架构-mha架构(代码片段)

文章目录部署MHA高可用集群mysql-MHA群环境说明配置所有节点的ssh免密码登录安装mha-node安装MHAManager安装mysql5.7配置mysql主从环境配置MHA管理用户配置MHAMHA配置检查实战-故障转移以及故障恢复实战-故障转移故障恢复后重新加入mysql... 查看详情

高可用集群篇--k8s快速入门及集群部署(代码片段)

高可用集群篇(一)--K8S快速入门及集群部署一、K8s快速入门1.1简介1.1.1Kubernetes是什么1.1.2为什么要使用Kubernetes1.1.3Kubernetes不是什么1.1.4Kubernetes工作示例1.2架构原理&核心概念1.2.1整体主从方式1.2.2Master节点架构1.2.3Node节... 查看详情

aws云计算平台工作使用中的心得

笔者简介余洪春(抚琴煮酒)运维架构师、高级运维开发工程师,《构建高可用可Linux服务器》、《Linux集群和自动化运维》作者,ChinaUnix论坛“集群和高可用”及“监控及自动化运维”版版主。从事云计算和电子商务网站运维... 查看详情

高可用kubernetes集群搭建

参考技术A架构说明Kubernetes集群组件:k8s集群高可用,一般是etcd,kube-apiserver,kube-controller-manager,kube-scheduler服务组件的高可用。规划:3个master节点,2个worker节点,使用keepalived+haproxy做高可用一、前期环境准备Kubernetes1.8开始要... 查看详情

k8s高可用方案系列---集群多master搭建

...拟机的网络或者存储出现了问题,将会导致整个集群的不可用。因此,多master集群的搭建成了迫在眉睫的方案搭建多master集群坑点:新master当前有大网网段:10.86,小网网段:8.46,如果不加--apiserver-advertise-address,那么默认和源m... 查看详情

使用kubeadm搭建k8s高可用集群(代码片段)

环境准备系统使用的Ubuntu18.04主机IP主机名docker版本172.31.1.10k8s-master119.03.15172.31.1.11k8s-master219.03.15172.31.1.12k8s-master319.03.15172.31.1.13harbor19.03.15172.31.1.14haproxy1172.31.1.15haproxy2172.31.1.16k 查看详情

使用kuboard快速搭建k8s高可用集群

一、准备六台虚拟机1.1、六台虚拟机规划如下序号系统ip地址用途/名称备注1CentOS7.9192.168.142.10k8s-spray2CentOS7.9192.168.142.11k8s-master01master节点13CentOS7.9192.168.142.12k8s-master02master节点24CentOS7.9192.168.142.13k8s-master03mast 查看详情

linux高可用集群(ha)原理详解

高可用集群一、什么是高可用集群        高可用集群就是当某一个节点或服务器发生故障时,另一个节点能够自动且立即向外提供服务,即将有故障节点上的资源转移到另一个节点上去,这样另一个... 查看详情

kubernetes如何构建高可用集群

...主机的网络是怎么样的,底层的网络是怎么样的。集群在企业做生产运维的话,要和企业的认证授权平台去做集成,通常是和认证平台去做集成。网络是使用overlay还是underlay,overlay是适配性强,涉及到性能问题比如封包和解包... 查看详情

基于devops微服务以及k8s的高可用架构探索与实现

现代的企业面临着一个VUCA的时代,高可用系统架构面对着诸多不确定性带来的影响和挑战,如何才能能够突破困境,使得复杂的系统仍然能保持业务的连续性。业务的弹性扩容也同时会对高可用性的架构造成影响,在实践中,... 查看详情