高可用的K8S集群部署方案
涉及到的内容
- LVS
- HAProxy
- Harbor
- etcd
- Kubernetes (Master Worker)
整体拓补图
以上是最小生产可用的整体拓补图(相关节点根据需要进行增加,但不能减少)
按功能组划分
- SLB
- LVS
- HAProxy
- etcd
- K8S Node (Master / Worker)
SLB
LVS 、HAProxy 被规划为基础层,主要提供了一个高可用的7层负载均衡器。
由LVS keepalived 提供一个高可用的VIP(虚拟IP)。
这个VIP DR模式转发到后端的HAProxy服务器。
HAProxy反代了K8S Master服务器,提供了K8S Master API的高可用和负载均衡能力。
可以使用Nginx代替HAProxy吗?
是可以的,这边使用HAproxy是因为k8s文档中出现了HAproxy,且后续可能会有4层反代的要求,从而使用了HAProxy。
可以直接从LVS转发到Master吗?
理论上可行,我没有试验。
如果不缺两台机器推荐还是架设一层具有7层代理能力的服务。
k8s apiserver、harbor、etcd都是以HTTP的方式提供的api,如果有7层代理能力的服务后续会更容易维护和扩展。
推荐配置
用途 | 数量 | CPU | 内存 |
---|---|---|---|
Keepalive | 2 | 4 | 4GB |
HAProxy | 2 | 4 | 4GB |
etcd
etcd是一个采用了raft算法的分布式键值存储系统。
这不是k8s专属的是一个独立的分布式系统,具体的介绍大家可以参考官网,这边不多做介绍。
我们采用了 static pod的方式部署了etcd集群。
失败容忍度
最小可用节点数:(n/2)+1,下面是一个参考表格,其中加粗的是推荐的节点数量:
| 总数 | 最少存活 | 失败容忍 |
| :--: | :--: | :--: |
| 1 | 1 | 0 |
| 2 | 2 | 0 |
| 3 | 2 | 1 |
| 4 | 3 | 1 |
| 5 | 3 | 2 |
| 6 | 4 | 2 |
| 7 | 4 | 3 |
| 8 | 5 | 3 |
| 9 | 5 | 4 |
推荐配置
括号内是官方推荐的配置
用途 | 数量 | CPU | 内存 |
---|---|---|---|
etcd | 3 | 4 (8~16) | 8GB (16GB~64GB) |
官网:
https://etcd.io/
官方硬件建议:
https://etcd.io/docs/v3.3.12/op-guide/hardware/
Static Pod部署文档:
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm/
Kubernetes集群
kubernetes集群主要有两种类型的节点:Master和Worker。
Master则是集群领导。
Worker是工作者节点。
可以看出这边主要的工作在Master节点,Worker节点根据具体需求随意增减就好了。
Master节点的高可用拓补官方给出了两种方案。
- Stacked etcd topology(堆叠etcd)
- External etcd topology(外部etcd)
可以看出最主要的区别在于etcd的部署方式。
第一种方案是所有k8s Master节点都运行一个etcd在本机组成一个etcd集群。
第二种方案则是使用外部的etcd集群(额外搭建etcd集群)。
我们采用的是第二种,外部etcd,拓补图如下:
如果采用堆叠的etcd拓补图则是:
这边大家可以根据具体的情况选择,推荐使用第二种,外部的etcd。
参考来源:
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/ha-topology/
Master节点的组件
- apiserver
- controller-manager
- scheduler
一个master节点主要含有上面3个组件 ( 像cloud-controller-manager这边就不多做说明了,正常不会用到 )
apiserver: 一个api服务器,所有外部与k8s集群的交互都需要经过它。(可水平扩展)
controller-manager: 执行控制器逻辑(循环通过apiserver监控集群状态做出相应的处理)(一个master集群中只会有一个节点处于激活状态)
scheduler: 将pod调度到具体的节点上(一个master集群中只会有一个节点处于激活状态)
可以看到除了apiserver外都只允许一个 实例处于激活状态(类HBase)运行于其它节点上的实例属于待命状态,只有当激活状态的实例不可用时才会尝试将自己设为激活状态。
这边牵扯到了领导选举(zookeeper、consul等分布式集群系统也是需要领导选举)
Master高可用需要几个节点?失败容忍度是多少?
k8s依赖etcd所以不存在数据一致性的问题(把数据一致性压到了etcd上),所以k8s master不需要采取投票的机制来进行选举,而只需节点健康就可以成为leader。
所以这边master并不要求奇数,偶数也是可以的。
那么master高可用至少需要2个节点,失败容忍度是(n/0)+1,也就是只要有一个是健康的k8s master集群就属于可用状态。(这边需要注意的是master依赖etcd,如果etcd不可用那么master也将不可用)
Master组件说明:
https://kubernetes.io/docs/concepts/overview/components/
部署文档:
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/
硬件配置
用途 | 数量 | CPU | 内存 |
---|---|---|---|
Master | 3 | 4 | 8GB |
高可用验证
至此生产可用的k8s集群已“搭建完成”。为什么打引号?因为还没有进行测试和验证,下面给出我列出的验证清单
还有涉及的BGP相关的验证不在此次文章内容中,后续会为大家说明。
写在最后
还有一点需要注意的是物理机的可用性,如果这些虚拟机全部在一台物理机上那么还是存在“单点问题”。这边建议至少3台物理机以上。
为什么需要3台物理机以上?
主要是考虑到了etcd的问题,如果只有两台物理机部署了5个etcd节点,那么部署了3个etcd的那台物理机故障了,则不满足etcd失败容忍度而导致etcd集群宕机,从而导致k8s集群宕机。
高可用的K8S集群部署方案的更多相关文章
- Kubernetes全栈架构师(二进制高可用安装k8s集群部署篇)--学习笔记
目录 二进制高可用基本配置 二进制系统和内核升级 二进制基本组件安装 二进制生成证书详解 二进制高可用及etcd配置 二进制K8s组件配置 二进制使用Bootstrapping自动颁发证书 二进制No ...
- [ Openstack ] Openstack-Mitaka 高可用之 Rabbitmq-server 集群部署
目录 Openstack-Mitaka 高可用之 概述 Openstack-Mitaka 高可用之 环境初始化 Openstack-Mitaka 高可用之 Mariadb-Galera集群 ...
- [ Openstack ] Openstack-Mitaka 高可用之 Mariadb-Galera集群部署
目录 Openstack-Mitaka 高可用之 概述 Openstack-Mitaka 高可用之 环境初始化 Openstack-Mitaka 高可用之 Mariadb-Galera集群 ...
- kubernetes教程第一章-kubeadm高可用安装k8s集群
目录 Kubeadm高可用安装k8s集群 kubeadm高可用安装1.18基本说明 k8s高可用架构解析 kubeadm基本环境配置 kubeadm基本组件安装 kubeadm集群初始化 高可用Mas ...
- K8S 使用Kubeadm搭建高可用Kubernetes(K8S)集群 - 证书有效期100年
1.概述 Kubenetes集群的控制平面节点(即Master节点)由数据库服务(Etcd)+其他组件服务(Apiserver.Controller-manager.Scheduler...)组成. ...
- 使用kubeadm进行单master(single master)和高可用(HA)kubernetes集群部署
kubeadm部署k8s 使用kubeadm进行k8s的部署主要分为以下几个步骤: 环境预装: 主要安装docker.kubeadm等相关工具. 集群部署: 集群部署分为single master(单 ...
- Kubernetes实战指南(三十四): 高可用安装K8s集群1.20.x
@ 目录 1. 安装说明 2. 节点规划 3. 基本配置 4. 内核配置 5. 基本组件安装 6. 高可用组件安装 7. 集群初始化 8. 高可用Master 9. 添加Node节点 10. Cali ...
- Kubernetes全栈架构师(Kubeadm高可用安装k8s集群)--学习笔记
目录 k8s高可用架构解析 Kubeadm基本环境配置 Kubeadm系统及内核升级 Kubeadm基本组件安装 Kubeadm高可用组件安装 Kubeadm集群初始化 高可用Master及Token ...
- Kubernetes全栈架构师(二进制高可用安装k8s集群扩展篇)--学习笔记
目录 二进制Metrics&Dashboard安装 二进制高可用集群可用性验证 生产环境k8s集群关键性配置 Bootstrapping: Kubelet启动过程 Bootstrapping: ...
随机推荐
- 【Java例题】1.3给朋友的贺卡
3.对“Hello World”程序进行改造, 能够显示一张发给朋友的贺卡.格式如下: ****************************** 张三,你好! 祝你学习愉快! 你的好朋友:李四 2 ...
- Web前端开发工程师课程大纲
PHP程序员雷雪松整理出来的一套独一无二的Web前端开发课程.本套Web前端开发课程专门为想励志成为优秀web前端工程师的学习者而总结归纳的,本套Web前端课程舍弃了一些不常用的即将废弃的HTML标签 ...
- 单机版ZooKeeper的安装教程
之前一直没有时间去整理,现在抽出几分钟时间整理以下,有问题的在评论区留言即可. 前期准备JDK环境(ZK需要jdk进行编译,本文以jdk1.8.0_211为例).Linux系统(本文以Centos7为 ...
- 关于修改主机名和ssh免密登录
修改主机名的常规方法: 1.hostname name2.echo name > /proc/sys/kernel/hostname3.sysctl kernel.hostname=name4 ...
- 二.Google黑客语法
搜索也是一门艺术! 说起Google,可谓是无人不知无人不晓,其强大的搜索功能,可以让你在瞬间找到你想要的一切.对于黑客而言,Google可是 一款绝佳的黑客工具.正因Google强大的检索能力,黑客 ...
- 前端面试题集锦(二)之CSS部分
1.CSS中的选择器都有哪些?权限情况如何? 解答: (1)类选择器 .className (2) ID选择器 #id (3) 元素选择器 div 可以多个,以逗号隔开 (4)父子选择器 以空格隔 ...
- 关于在taro使用wx.parse那些事
好久不见,好久没更新博客,最近工作也比较忙,今天在使用解决富文本的时候遇到两个bug,由于第一次使用wx.parse经验不足,走了很多弯路,今天特地把自己修复bug的感想分享一下,希望能帮助更多的小伙 ...
- ggplot2 |legend参数设置,图形精雕细琢
本文首发于微信公众号“生信补给站”,https://mp.weixin.qq.com/s/A5nqo6qnlt_5kF3_GIrjIA 学习了ggplot2|详解八大基本绘图要素后,就可以根据自己的需 ...
- 贪心算法-过河问题 pojo1700
过桥问题: 黑夜,只有一只手电筒 A过桥需要1s B过桥需要3s C过桥需要5s D过桥需要8s E过桥需要12s 求最小过桥时间 贪心算法: 从最大的开始过去,最小的两个做为辅助. 假如左岸人数为2 ...
- python模块之junos-eznc
一.简介 本文将使用python模块中的junos-eznc来控制juniper的 Junos OS系统,此模块可以在windows平台和UNIX平台上使用 二.实验环境 1.操作系统:win10 2 ...