首页 > kubernetes(k8s) > k8s高可用部署方案
2020
03-24

k8s高可用部署方案

前言:

随着项目需求的不断增大,访问量不断增多,单主模式的集群方案在很多公司已经没有生存空间,高可用已经成为常态。k8s也不例外,今天说说k8s集群部署。k8s集群部署非常简单。因为k8s已经帮我们做了很多事情,我们需要做的只是实现他的apiserver高可用。

下面图是个人理解。有不同声音的朋友请留言

  • etcd 存储 ,一般是会放在集群内部托管,多主集群状态下会实现集群化扩展,自动满足高可用。
  • controller manager 与 scheduler 对于k8s集群来说只会运行一个,其他都是挂起状态
  • kubelet 与 proxy 都是集群内部应用 只在当前节点工作,所以不需要高可用。

k8s已经将集群这一部分的高可用功能帮我们解决掉了,如上图所示,我们需要做的就是为入口apiserver设置高可用。

我们在API server 之前加一个负载调度器,或者nginx ,或者haporxy。需要注意的是调度器直接访问的是节点,而非api server

国内有个apiserver 叫睿云 ,对于睿云来说有个叫breeze的k8s部署工具。他是基于kubeadm来实现的,并且他通过keepalived和HA-poryx来实现高可用,并且他用镜像将2个应用封装了起来。使用起来非常方便(部署结构如上图所示)

准备工作

我们打算,用三台机器做主节点,其余5台做工作节点,具体如下:

下面开始实操

这里很抱歉,我原以为我本机可以跑这么多虚拟机,结果只能跑三台虚拟机(太卡),所以我只能演示安装三台主,工作节点就不演示了,主节点创建完后工作节点加入即可。工作其实没什么难度。

1.初始化集群环境(所有节点)

系统初始化请看这篇文章,有详细介绍。 传送门

2.部署安装(所有节点)

(1). kube-proxy开启ipvs的前置条件

(2). 安装 Docker 软件

(3). 组件安装:

  • kubeadm 初始化工具
  • kubectl 命令行管理工具
  • kubelet 跟dokcer交互创建容器

#注意下下面这个脚本,可能行显示的时候么有对齐,自行调整 ,编辑器的原因

(3.)安装睿云的keepalive 和 Ha-proxy并且导入高可用所需其他镜像,为后续做准备

安装前我们先导入一下高可用所需镜像(kuberadm在初始化我们的云服务器之前会从google的云服务器pull镜像,这个镜像还是比较大的,而且速度比较慢,并且她还需要一个科学上网的东东存在,如果你有ssr这个科学上网东西,那没问题,要是你没有呢,所以我们事先已经打包好了这写要用到的镜像)

下载好后导入镜像(三个主节点都需要导入,三台主节点都需要如下操作并启动)

导入完成后查看镜像,共计10个

<1>.解压start.keep.tar.gz

修改完保存后

修改 start-haproxy.sh 文件(修改为你的三台主ip)

<2>.修改 start-keepalived.sh

你可以将改写好的这些文件,整包打包,传送到其他机器,直接执行启动

(4).初始化主节点(三台主节点任意选一台为master,这里我使用66.30这台)

<1>.配置 kuberadm-config.yaml 文件(这里与集群安装稍微有不一样)

<2>.编辑kubeadm-config.yaml文件

完整配置文件如下:

接下来通过指定yaml文件,进行初始化安装,以及自动颁发证书

初始化完成后,你会看到

上面的是,多主模式下其他主节点加入集群使用,下面是工作节点加入集群使用。

然后执行下安装后的提示信息(然后把这些该创建的创建 该拷贝的拷贝):

然后我们去看 /root/.kube/config文件 就会发现 server: https://192.168.66.100:6444

到此主节点配置初始化完成,我们使用命令查看一下节点

你会看到主节点已经就绪。

(5).其他2太主节点加入集群,

加入方式,复制初始化时生成的链接,在66.31 与 66.32 执行即可。

执行完成后,按提示,该创建的创建,该拷贝的拷贝(因为是管理节点,所以这些也是必要的)

其他2台加入完成后,查看节点状态

(6).接下来修改 haproxy 配置文件(三个主节点都要操作)

然后删除当前的ha-proxy容器 再重新启动容器 (三个master节点都要操作)

(7).flannel网络部署(初始化节点操作)

如上所示,可以看到节点都已经加入进来了,但是状态还是NotReady

我们在上面已经导入了flannel的镜像,并且已经有了flannel.yaml文件,这里直接执行即可(yaml文件内容这里不解释,自己看我其他文章有介绍)

稍等一会,然后查看节点

其他

集群状态查看

如果你运行 kubectl get node 第三次就卡住

你需要修改 .kube/config

原因:因为目前你执行命令,走的是ipvs,然后分发请求到其他节点,请求与返回需要时间,比较慢。这里你可以改回你自己的本机ip就不会有这种情况了。

最后编辑:
作者:shooter
这个作者貌似有点懒,什么都没有留下。