k8s的高可用
一、高可用原理
管理平面
apiserver:
apiserver
是k8s集群的入口,为了使用方便,kubectl
作为其客户端供用户使用。为了实现高可用,在3个机器上分别以静态Pod的方式部署了apiserver
并挂载在同一个loadbalancer上,如此,其与其他组件的联系都经由这个负载均衡器来做转发(图中黑色连线),这样也保证了每一个用户命令都有且仅有一个apiserver
来响应,并且理论上只要还有一个Pod是可用的,该组件的服务就没有问题,再加上k8s的Pod有自愈能力,apiserver
高可用可以说是能够保证的。controller managers: k8s自愈能力的关键所在,
controller managers
提供一种reconciliation的功能,简单来说就是该组件会无限循环地去通过apiserver
来查看api资源的状态,并将其实际状态转变为api资源声明中的状态。比如,一个deployment设置了replicas为3,而由于某些原因集群中运行了5个这样的Pod时,controller managers
就会触发工作并且调用api来删除2个Pod。同样,在k8s的master节点上,每个节点以静态Pod部署一个组件以达到高可用的目的。scheduler: 该组件负责集群内部Pod的调度,主要根据集群node资源情况来平衡每个node的任务量,此外,还支持用户对Pod调度的自定义限制规则,比如NodeSelector、affinity规则等。该组件的高可用部署方案也是在每一个master节点上部署一个静态Pod。
组件
controller managers
和scheduler
的选主是通过etcd
来实现的:当一个副本不能工作时,其余副本会更新endpoint至etcd,而etcd只会接受其中一个更新请求,从而实现leader election。
执行平面
执行平面针对的就是node/slave节点,这里实际上就没有高可用一说了,即便如此,还是简单介绍一下图中出现的几个组件吧。
- container runtime: 每个节点都需要一个容器运行时来执行容器,比如Docker。非pod启动。
- kubelet: 用于执行apiserver下达的命令,也可以重启启动失败的pod。
- kube-proxy: 通过修改
iptables
来达到网络代理、负载均衡的效果,在k8s中以Service
作为代表。比如在使用NodePort进行对外提供服务时,所有node/slave节点都会生成特定的iptables
,当该服务被删除或者节点断网时,iptables
也会被清除。
数据平面
etcd
- 对于高可用集群来说,集群的数据至关重要,Kubernetes将
etcd
作为数据存储中心,其存储了所有集群相关的信息,比如:pod、node、cm… 鉴于底层系统的高可靠性,数据决不能丢。 - 如图所示,
etcd
在每个master节点上部署了一个实例,以保证其高可用性,实践证明,etcd挂载本地ssd的方式会大幅提高超大规模(节点大于2000)集群性能(参考资料6)。 etcd
官方给的部署模式是奇数个(大于等于3)就好了,推荐部署5个节点,这就不得不提etcd
的选主协议/逻辑/算法Raft,这里有个非常生动的动画值得一看。此外,还需要注意的是所谓“脑裂”问题,这里的“脑裂”是指etcd
集群出现两个甚至多个leader,如果你也是这样理解脑裂的,那就大可放心使用,因为there is no “split-brain” in etcd。- 默认的etcd参数不太适合disk io比较低的场景
k8s的高可用的更多相关文章
- 通过 Kubeadm 安装 K8S 与高可用,版本1.13.4
环境介绍: CentOS: 7.6 Docker: 18.06.1-ce Kubernetes: 1.13.4 Kuberadm: 1.13.4 Kuberlet: 1.13.4 Kuberctl: ...
- k8s部署高可用Ingress
部署高可用Ingress 官网地址https://kubernetes.github.io/ingress-nginx/deploy/ 获取ingress的编排文件 wget https://raw. ...
- 安装k8s,高可用3 master安装脚本
每个在新集群里,记得更改三个节点的IP即可. 第一步还是要执行那个root脚本,准备好系统环境,安装好软件. 先安装在每个节点上使用docker安装好etcd.(sh script domain et ...
- 二进制搭建kubernetes多master集群【三、配置k8s master及高可用】
前面两篇文章已经配置好了etcd和flannel的网络,现在开始配置k8s master集群. etcd集群配置参考:二进制搭建kubernetes多master集群[一.使用TLS证书搭建etcd集 ...
- 一键安装基于dns的高可用k8s集群(3节点,etcd https)
在公司,使用dns切换,可能会比keepalived+haproxy,更精简的易维护. 毕竟,高可用只是偶尔切换,不是时时切换. 且dns解析在自己可控时,更不会影响k8s线上使用了. (部分代码,由 ...
- Kubernetes实战(一):k8s v1.11.x v1.12.x 高可用安装
说明:部署的过程中请保证每个命令都有在相应的节点执行,并且执行成功,此文档已经帮助几十人(仅包含和我取得联系的)快速部署k8s高可用集群,文档不足之处也已更改,在部署过程中遇到问题请先检查是否遗忘某个 ...
- K8S学习笔记之二进制部署Kubernetes v1.13.4 高可用集群
0x00 概述 本次采用二进制文件方式部署,本文过程写成了更详细更多可选方案的ansible部署方案 https://github.com/zhangguanzhang/Kubernetes-ansi ...
- centos7使用kubeadm配置高可用k8s集群
CountingStars_ 关注 2018.08.12 09:06* 字数 464 阅读 88评论 0喜欢 0 简介 使用kubeadm配置多master节点,实现高可用. 安装 实验环境说明 实验 ...
- kubernetes实战(二十五):kubeadm 安装 高可用 k8s v1.13.x
1.系统环境 使用kubeadm安装高可用k8s v.13.x较为简单,相比以往的版本省去了很多步骤. kubeadm安装高可用k8s v.11 和 v1.12 点我 主机信息 主机名 IP地址 说明 ...
随机推荐
- vue-cli3.0和element-ui及axios的安装使用
一.利用vue-cli3快速搭建vue项目 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.有三个组件: CLI:@vue/cli 全局安装的 npm 包,提供了终端里的vue命令( ...
- javaFX 整合 maven
pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...
- 生命不息,奔跑不止,持之以恒,勇攀高峰——JasonCeng的跑步打卡
生命不息,奔跑不止,持之以恒,勇攀高峰!JasonCeng的跑步打卡博文,持续更新,培养好习惯,一起变成更优秀的自己! 2019-12-20-5.05km Avg-speed(均速): 5'56'' ...
- git取消追踪本地某个文件
git rm --cached readme1.txt 删除readme1.txt的跟踪,并保留在本地. git rm --f readme1.txt 删除readme1.txt的跟踪,并 ...
- MongoDB的Shell操作
前言 本文从介绍了MongoShell 的配置.脚本.数据类型和其他指令. MongoShell - 简介 MongoShell是一个互动的JavaScript接口的MongoDB,可以使用Mongo ...
- Oracle部分
做了很多年Oracle,转行到MySQL了,算是借鉴 Oracle日常维护管理指标 一. 基本硬件环境 1. 主机硬件环境 品牌 型号 数量 物理CPU核数及逻辑CPU数 内存大小 本地硬盘大小 光驱 ...
- docker xfs卡死
原因 docker在xfs文件系统中,过于频繁create/destory container.pull/push image,当thin pool满时,DeviceMapper后端默认文件系统xfs ...
- Spring Boot配置文件的加载顺序
配置文件的加载顺序, 后加载的会覆盖先加载的:也就是properties配置文件的内容会替换掉.yml及.yaml文件的内容
- string类型的解释与方法
基本概念 string(严格来说应该是System.String) 类型是我们日常coding中用的最多的类型之一.那什么是String呢?^ ~ ^ String是一个不可变的连续16位的Unico ...
- .Dot NET Cored简介
一.诞生原因 1..Net平台封闭. 2.不支持跨平台. 3.受限于Windows平台性能,无法解决高性能场景. 二.优势 1.支持跨平台.开源.系统建设成本低. 2.效率和性能较好. 三.缺点 1. ...