首页 > 其他分享 >k8s 集群原理

k8s 集群原理

时间:2023-06-16 17:32:28浏览次数:64  
标签:服务 Kubernetes leader 集群 Etcd 原理 k8s 节点

1. 背景

Kubernetes作为容器应用的管理中心,对集群内部所有容器的生命周期进行管理,结合自身的健康检查及错误恢复机制,实现了集群内部应用层的高可用性。

Kubernetes服务本身的稳定运行对集群管理至关重要,影响服务稳定的因素一般来说分为两种,一种是服务本身异常或者服务所在机器宕机,另一种是因为网络问题导致的服务不可用。本文将从存储层、管理层、接入层三个方面介绍高可用Kubernetes集群的原理。

2. Etcd高可用方案

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

Etcd使用raft算法将一组主机组成集群,raft 集群中的每个节点都可以根据集群运行的情况在三种状态间切换:follower, candidate 与 leader。leader 和 follower 之间保持心跳。如果follower在一段时间内没有收到来自leader的心跳,就会转为candidate,发出新的选主请求。

集群初始化的时候内部的节点都是follower节点,之后会有一个节点因为没有收到leader的心跳转为candidate节点,发起选主请求。当这个节点获得了大于一半节点的投票后会转为leader节点,如下图所示:

当leader节点服务异常后,其中的某个follower节点因为没有收到leader的心跳转为candidate节点,发起选主请求。只要集群中剩余的正常节点数目大于集群内主机数目的一半,Etcd集群就可以正常对外提供服务。具体的恢复过程如下图所示:

k8s 集群原理_网络故障

k8s 集群原理_高可用_02

当集群内部的网络出现故障集群可能会出现“脑裂”问题,这个时候集群会分为一大一小两个集群(奇数节点的集群),较小的集群会处于异常状态,较大的集群可以正常对外提供服务,出现网络故障时的恢复过程如下图所示:

k8s 集群原理_高可用_03

Etcd集群的部署有三种方式,具体的安装步骤可以查看官方手册,此处不再详细介绍。

3. Kubernetes master服务高可用方案

Kubernetes的管理层服务包括kube-scheduler和kube-controller-manager。kube-scheduer和kube-controller-manager使用一主多从的高可用方案,在同一时刻只允许一个服务处以具体的任务。Kubernetes中实现了一套简单的选主逻辑,依赖Etcd实现scheduler和controller-manager的选主功能。

如果scheduler和controller-manager在启动的时候设置了leader-elect参数,它们在启动后会先尝试获取leader节点身份,只有在获取leader节点身份后才可以执行具体的业务逻辑。它们分别会在Etcd中创建kube-scheduler和kube-controller-manager的endpoint,endpoint的信息中记录了当前的leader节点信息,以及记录的上次更新时间。leader节点会定期更新endpoint的信息,维护自己的leader身份。每个从节点的服务都会定期检查endpoint的信息,如果endpoint的信息在时间范围内没有更新,它们会尝试更新自己为leader节点。scheduler服务以及controller-manager服务之间不会进行通信,利用Etcd的强一致性,能够保证在分布式高并发情况下leader节点的全局唯一性。

整体方案如下图所示:

k8s 集群原理_网络故障_04

当集群中的leader节点服务异常后,其它节点的服务会尝试更新自身为leader节点,当有多个节点同时更新endpoint时,由Etcd保证只有一个服务的更新请求能够成功。通过这种机制sheduler和controller-manager可以保证在leader节点宕机后其它的节点可以顺利选主,保证服务故障后快速恢复。

当集群中的网络出现故障时对服务的选主影响不是很大,因为scheduler和controller-manager是依赖Etcd进行选主的,在网络故障后,可以和Etcd通信的主机依然可以按照之前的逻辑进行选主,就算集群被切分,Etcd也可以保证同一时刻只有一个节点的服务处于leader状态。

4. Kubernetes apiserver服务高可用方案

Kubernetes的接入层服务主要是kube-apiserver。apiserver本身是无状态的服务,它的主要任务职责是把资源数据存储到Etcd中,后续具体的业务逻辑是由scheduler和controller-manager执行的。

可以同时起多个apiserver服务,使用nginx把客户端的流量转发到不同的后端apiserver上实现接入层的高可用。具体的实现如下图所示:

k8s 集群原理_业务逻辑_05

接入层的高可用分为两个部分,一个部分是多活的apiserver服务,另一个部分是一主一备的nginx服务。

5. 总结

本文主要从存储层,管理层和接入层三个部分介绍了Kubernetes高可用方案的原理,整体的方案架构如下图所示:

k8s 集群原理_高可用_06

原文出处

标签:服务,Kubernetes,leader,集群,Etcd,原理,k8s,节点
From: https://blog.51cto.com/zhaochengsheng/6501490

相关文章

  • k8s 梳理及使用总结
    ---1.Kubernetes概述1.最初Google开发了1个叫Borg的系统(现在命名为Omega),来调度近20多亿个容器从2014年第1个版本发布以来,迅速得到了开源社区的追捧,?前,k8s已经成为了发展最快、市场占有率最高的容器编排引擎产品。---2.特点轻量级,资源消耗小开源弹性伸缩负载均衡IPVS---3......
  • K8S资源限制实战:优化性能与资源管理
    Part1写在开篇K8S已成为容器编排和管理的事实标准,为开发者和运维人员提供了强大的工具和功能。在K8S集群中,对资源的合理限制和管理是确保应用性能和可靠性的关键因素。本文将介绍如何在K8S集群中使用资源限制来优化应用的性能和实现资源管理。Part2实验环境本次实战使用的K8S集......
  • cenos 搭建k8s集群
    1、准备环境#开放防火墙端口或关闭防火墙systemctlstopfirewalld#关闭selinux setenforce0或者 永久修改sed-i's/enforcing/disabled/'/etc/selinux/config#关闭swaswapoff-a#三台服务器都修改/etc/hoststest1作为mastertest2作为节点1test3作为节点2# ......
  • Kubernetes 1.27.2集群安装
    基础环境系统Ubuntu22.04.2|主机名称|IP||-----|--------||k8s-master|192.168.198.141||k8s-node01|192.168.198.142||k8s-node02|192.168.198.143|设置k8s环境准备条件(所有机器)#禁用交换分区(在旧版的k8s中kubelet都要求关闭swapoff,但最......
  • 修改ASM实例参数,导致GI集群无法启动
    0、有一套预生产环境,准备在上线之前先进行数据库参数修改。结果在修改ASM内存参数时,忘记resetmemory_max_target参数,导致GI集群无法启动。将整个故障记录下来。 1、修改ASM实例参数altersystemsetprocesses=1000scope=spfilesid='*';altersystemsetsga_max_size......
  • 代理ip匿名原理及那些行业需要代理ip
      互联网的高速发展,连带了代理ip也受到了更多人的使用,不同的行业都存在使用代理ip的情况,同时代理ip也以为匿名程度分成了高匿、普匿、透明代理,那么代理ip匿名的原理是什么呢?又有哪些行业需要代理ip呢?下面我们一起来分析一下。  一、代理ip匿名原理 代理IP匿名的原理基......
  • rocketmq集群配置简介
    RocketMQ天生对集群的支持非常好,它有以下一些模式:(1)单Master优点:除了配置简单没什么优点缺点:不可靠,该机器重启或者宕机,将要导致整个服务不可用(2)多Master优点:配置简单,性能最高缺点:可能会有少量消息丢失(配置相关),单台机器重启或宕机期间,该机器下未被消费的消息在机器恢复前不可......
  • K8S的OOM和cpu节流
    介绍使用Kubernetes时,内存不足(OOM)错误和CPU节流是云应用程序中资源处理的主要难题。这是为什么?云应用程序中的CPU和内存要求变得越来越重要,因为它们与您的云成本直接相关。通过limits和requests,您可以配置pod应如何分配内存和CPU资源,以防止资源匮乏并调整云成本......
  • K8S中pod状态详解
    Pod有以下几个状态:Pending等待中Running运行中Succeeded正常终止Failed异常停止Unkonwn未知状态Pod状态详解PendingPod已经被创建,但还没有完成调度,可能处在:写数据到etcd,调度,pull镜像,启动容器这四个阶段中的任何一个阶段,pending伴随的事件通常会有:ADDED,Modified这两个事件的......
  • Spring----AOP入门介绍、原理与使用
    AOP介绍AOP:面向切面编程,无入侵式编程一种编程范式,指导开发者如何组织程序结构OOP:面向对象作用:在不惊动原始设计的基础上为其做功能增强概念定义Aspect(切面):描述通知与切入点的对应关系(执行位置和共性之间的关系)Aspect声明类似于Java中的类声明,在Aspect中会包含......