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地址 说明 ...
随机推荐
- js18位身份证验证(非原创)
原文链接 function check_id(value) { var arrExp = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];/ ...
- NMF包的安装
win10 操作系统,R3.4版本 NMF包的下载 source("https://bioconductor.org/biocLite.R") biocLite("Bio ...
- Linux如何查看进程、杀死进程、启动进程
1.查看进程:ps命令 下面的命令还没实践,仅仅供你参考:可以用man ps查看格式,只不过是一个小工具而已! ps a 显示现行终端机下的所有程序,包括其他用户的程序. ps -A 显示所有程 ...
- kafka那些事儿
1 为什么用消息队列 1)解耦.服务之间没有强依赖,不需要关心调用服务时出现的各种异常,服务挂掉后接口超时等问题 2)异步.解决接口调用多服务时延时高的问题 3)高峰期服务间缓冲.解决工作节奏不一致问 ...
- .NET Core 配置文件
老一代配置系统 1,XML格式 格式单一. 2,配置信息Kye,只能一维化配置 3,框架信息和应用程序信息混合到一起 应用程序中是 App.config web项目中 web.co ...
- Scratch编程:游来游去的鱼(二)
“ Scratch编程学习环境搭建好了吗?让我们一起来进行游戏吧!” 01 — 游戏介绍 这是一款简单的小游戏,实现了一条小鱼在池塘里游来游去. 02 — 设计思路 1,这个游戏主要由一个池塘背景和一 ...
- Thread interrupted() 线程的中断
问题: 1.线程的中断方式. 2.为什么中断阻塞中的线程,会抛出异常. 代码示例: package com.hdwl.netty; public class ThreadInterrupted { p ...
- linux学习之路(二)--centos7安装Redis(单点)
一.安装redis 1.进入/usr/local/,新建services目录,进入该目录,下载redis wget http://download.redis.io/releases/redis-4. ...
- Luogu5285 [十二省联考2019] 骗分过样例
题目分析: 观察前3个点,$361=19*19$,所以可以发现实际上就是快速幂,然后模数猜测是$998244353$,因为功能编号里面有这个数字,用费马小定理处理一下. $pts:12$ 观察第4个点 ...
- CentOS7 安装 Git
环境: 系统版本:CentOS 7.5 Git 版本:2.20.1 一.安装 Git 1.下载编译工具 $ yum -y groupinstall "Development Tools&qu ...