Kubernetes 高可用性入门:初学者指南

2024-04-06 20:44

本文主要是介绍Kubernetes 高可用性入门:初学者指南,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Kubernetes 高可用性解释

  • 引言
  • 一、需要 Kubernetes 高可用性
  • 二、Kubernetes 控制平面的高可用性
    • 2.1、etcd
    • 2.2、API 服务器
    • 2.3、Kube 调度器
    • 2.4、Kube 控制器管理器
    • 2.5、云控制器管理器
  • 三、工作节点的高可用性
  • 四、Kubernetes 集群可用性度量
  • 五、Kubernetes 可用性常见问题
  • 六、总结

引言

在本文中将研究 Kubernetes 的高可用性。以及研究每个 Kubernetes 组件的弹性和容错能力。

Kubernetes 高可用性对于确保应用程序始终可用至关重要。本文提供了 Kubernetes 高可用性的全面的初学者指南,涵盖了基本概念、组件和最佳实践。

文章首先介绍了高可用性的重要性,并概述了 Kubernetes 中实现高可用性的方法。然后,它深入探讨了 Kubernetes 的核心高可用性组件。

实现 Kubernetes 高可用性的最佳实践,例如:

  • 使用多主控制平面: 避免单点故障。
  • 部署高可用节点: 使用多个节点来运行工作负载。
  • 使用自动 Pod 重新调度: 在节点故障时重新启动 Pod。
  • 监控和告警: 主动监控集群并对问题发出警报。

一、需要 Kubernetes 高可用性

Kubernetes 是一个分布式系统,它容易受到多种故障的影响。对于公司来说,拥有高可用性的 Kubernetes 以提供良好的客户体验至关重要。在发生意外中断时,如果集群在一个或多个组件发生故障后仍无法继续运行,则停机可能会导致收入损失、声誉问题等。

通过在 Kubernetes 中实施 HA,可以降低停机风险,在集群上运行的应用程序和服务仍然可用且可供用户访问,并且系统可以在没有人为干预的情况下快速从故障中恢复。在较高级别上,这可以通过部署具有跨多个可用区或区域的网络拓扑的控制平面组件的多个副本来实现。

二、Kubernetes 控制平面的高可用性

Kubernetes 控制平面具有以下核心组件。

  1. API 服务器
  2. Kube 控制器管理器
  3. Kube 调度器
  4. 云控制器管理器(可选)

运行单节点控制平面可能会导致所有控制平面组件出现单点故障。要拥有高度可用的 Kubernetes 控制平面,应至少有三个仲裁控制平面节点,并在所有三个节点上复制控制平面组件。

在这里插入图片描述
现在,了解跨节点部署为多个副本时每个控制平面组件的性质非常重要。因为很少有组件在部署为多个副本时使用 leader-election。

一起看一下每个控制位置组件的高可用性。

2.1、etcd

说到etcd HA架构,有两种模式。

  • 堆叠式 etcd:与控制平面节点一起部署的 etcd。
  • 外部 etcd 集群:运行专用节点的 etcd 集群。此模型具有管理良好的备份和还原选项的优点。

要具有容错能力至少应该有三个节点 etcd 集群。etcd 集群的容错能力如下表所示。

集群大小大多数容错能力
110
220
321
431
532
642
743

在生产部署方面,定期备份 etcd 至关重要。

2.2、API 服务器

API 服务器是一个无状态应用程序,主要与 etcd 集互以存储和检索数据。即API 服务器的多个实例可以跨不同的控制平面节点运行。

为确保集群 API 始终可用,应将负载均衡器放置在 API 服务器副本的前面。工作线程节点、最终用户和外部系统使用此负载均衡器端点与集群进行交互。

2.3、Kube 调度器

当运行多个 kube 调度程序实例时,它遵循 leader-election 方法。这是因为,schedler 组件涉及 pod 调度活动,并且一次只能有一个实例做出决策。因此,当运行调度程序的多个副本时,一个实例将被选为领导者,其他实例将被标记为跟随者。

这确保了始终有一个活动的计划程序,用于制定计划决策,并避免冲突和不一致。如果是领导者,则追随者将被选为领导者并接管所有日程安排决定。这样就拥有了一个具有一致调度的高可用性调度程序。

2.4、Kube 控制器管理器

Kuber 控制器管理器也遵循相同的领导者选举方法。在许多副本中,选出一个控制器管理器,领导者和其他人被标记为追随者。领导控制器负责控制集群的状态。

2.5、云控制器管理器

云控制器管理器 (CCM) 是一个 Kubernetes 组件,它运行与特定于云提供商的 API 交互的控制器,以管理负载均衡器、持久卷和路由等资源。

就像调度程序和 kube-controller 一样,CCM 也使用领导者选举来确保一次只有一个活动副本做出决策并与云提供商 API 交互。

三、工作节点的高可用性

要使工作器节点高可用性,需要运行应用程序所需的多个工作器节点。当存在 Pod 扩展活动或节点故障时,其他工作节点上应有足够的容量来安排 Pod。

在云平台上可以使用自动缩放来缩放工作器节点。因此,当存在扩展活动或资源需求时,工作节点可以扩展到所需的容量。

四、Kubernetes 集群可用性度量

假设没有计划内停机时间,Google SRE 手册中的下表显示了根据不同可用性级别计算允许的停机时间:
在这里插入图片描述

每个组织都有用于群集可用性的 SLO。如果使用的是管理服务,则服务提供商的 SLA 将与 SLO 保持一致。

  1. AWS EKS SLA
  2. GKE SLA
  3. Azure AKS SLA\

五、Kubernetes 可用性常见问题

(1)控制平面故障期间会发生什么?
即使发生控制平面故障,工作器节点上的现有工作负载也会继续为请求提供服务器服务。但是,如果出现节点故障,则不会发生 Pod 调度活动或任何类型的更新活动

(2)如果 Kubernetes 集群中的 DNS 服务失败,会发生什么情况?
如果 DNS 服务(如核心 DNS)发生故障,可能会对群集中运行的应用程序的可用性和功能产生重大影响。它可能会中断服务发现、外部访问、负载均衡、监视和日志记录以及滚动更新,从而导致应用程序故障、错误和中断。

六、总结

Kubernetes 高可用性对于确保应用程序始终可用至关重要。通过了解 Kubernetes 的核心高可用性组件和最佳实践,初学者可以构建高可用且弹性的 Kubernetes 集群。本文提供了 Kubernetes 高可用性的全面概述,是初学者入门并开始使用 Kubernetes 的宝贵资源。

在这里插入图片描述

这篇关于Kubernetes 高可用性入门:初学者指南的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/880786

相关文章

C++必修:模版的入门到实践

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C++学习 贝蒂的主页:Betty’s blog 1. 泛型编程 首先让我们来思考一个问题,如何实现一个交换函数? void swap(int& x, int& y){int tmp = x;x = y;y = tmp;} 相信大家很快就能写出上面这段代码,但是如果要求这个交换函数支持字符型

零基础STM32单片机编程入门(一)初识STM32单片机

文章目录 一.概要二.单片机型号命名规则三.STM32F103系统架构四.STM32F103C8T6单片机启动流程五.STM32F103C8T6单片机主要外设资源六.编程过程中芯片数据手册的作用1.单片机外设资源情况2.STM32单片机内部框图3.STM32单片机管脚图4.STM32单片机每个管脚可配功能5.单片机功耗数据6.FALSH编程时间,擦写次数7.I/O高低电平电压表格8.外设接口

ps基础入门

1.基础      1.1新建文件      1.2创建指定形状      1.4移动工具          1.41移动画布中的任意元素          1.42移动画布          1.43修改画布大小          1.44修改图像大小      1.5框选工具      1.6矩形工具      1.7图层          1.71图层颜色修改          1

C++入门01

1、.h和.cpp 源文件 (.cpp)源文件是C++程序的实际实现代码文件,其中包含了具体的函数和类的定义、实现以及其他相关的代码。主要特点如下:实现代码: 源文件中包含了函数、类的具体实现代码,用于实现程序的功能。编译单元: 源文件通常是一个编译单元,即单独编译的基本单位。每个源文件都会经过编译器的处理,生成对应的目标文件。包含头文件: 源文件可以通过#include指令引入头文件,以使

SQL Server中,添加数据库到AlwaysOn高可用性组条件

1、将数据添加到AlwaysOn高可用性组,需要满足以下条件: 2、更多具体AlwaysOn设置,参考:https://msdn.microsoft.com/zh-cn/library/windows/apps/ff878487(v=sql.120).aspx 注:上述资源来自MSDN。

LVGL快速入门笔记

目录 一、基础知识 1. 基础对象(lv_obj) 2. 基础对象的大小(size) 3. 基础对象的位置(position) 3.1 直接设置方式 3.2 参照父对象对齐 3.3 获取位置 4. 基础对象的盒子模型(border-box) 5. 基础对象的样式(styles) 5.1 样式的状态和部分 5.1.1 对象可以处于以下状态States的组合: 5.1.2 对象

C语言入门系列:探秘二级指针与多级指针的奇妙世界

文章目录 一,指针的回忆杀1,指针的概念2,指针的声明和赋值3,指针的使用3.1 直接给指针变量赋值3.2 通过*运算符读写指针指向的内存3.2.1 读3.2.2 写 二,二级指针详解1,定义2,示例说明3,二级指针与一级指针、普通变量的关系3.1,与一级指针的关系3.2,与普通变量的关系,示例说明 4,二级指针的常见用途5,二级指针扩展到多级指针 小结 C语言的学习之旅中,二级

打造坚固的SSH防护网:端口敲门入门指南

欢迎来到我的博客,代码的世界里,每一行都是一个故事 🎏:你只管努力,剩下的交给时间 🏠 :小破站 打造坚固的SSH防护网:端口敲门入门指南 前言什么是端口敲门端口敲门的优点1. 增强安全性2. 动态防火墙规则3. 隐匿服务4. 改善日志管理5. 灵活性和兼容性6. 低资源消耗7. 防御暴力破解和扫描8. 便于合法用户访问9. 适用于不同类型的服务 端口敲

好书推荐《深度学习入门 基于Python的理论与实现》

如果你对Python有一定的了解,想对深度学习的基本概念和工作原理有一个透彻的理解,想利用Python编写出简单的深度学习程序,那么这本书绝对是最佳的入门教程,理由如下:     (1)撰写者是一名日本普通的AI工作者,主要记录了他在深度学习中的笔记,这本书站在学习者的角度考虑,秉承“解剖”深度学习的底层技术,不使用任何现有的深度学习框架、尽可能仅使用基本的数学知识和Python库。从零创建一个

手把手教你入门vue+springboot开发(五)--docker部署

文章目录 前言一、前端打包二、后端打包三、docker运行总结 前言 前面我们重点介绍了vue+springboot前后端分离开发的过程,本篇我们结合docker容器来研究一下打包部署过程。 一、前端打包 在VSCode的命令行中输入npm run build可以打包前端代码,出现下图提示表示打包完成。 打包成功后会在前端工程目录生成dist目录,如下图所示: 把