云原生之深入解析Kubernetes的架构及特性

news2024/11/23 14:54:20

一、kubernetes 架构

  • 从宏观上来看 kubernetes 的整体架构,包括 Master、Node 以及 Etcd。
  • Master 即主节点,负责控制整个 kubernetes 集群,它包括 Api Server、Scheduler、Controller 等组成部分。它们都需要和 Etcd 进行交互以存储数据:
    • Api Server:主要提供资源操作的统一入口,这样就屏蔽了与 Etcd 的直接交互,功能包括安全、注册与发现等。
    • Scheduler:负责按照一定的调度规则将 Pod 调度到 Node 上。
    • Controller:资源控制中心,确保资源处于预期的工作状态。
  • Node 即工作节点,为整个集群提供计算力,是容器真正运行的地方,包括运行容器、kubelet、kube-proxy:
    • kubelet :主要工作包括管理容器的生命周期、结合 cAdvisor 进行监控、健康检查以及定期上报节点状态。
    • kube-proxy : 主要利用 service 提供集群内部的服务发现和负载均衡,同时监听 service/endpoints 变化并刷新负载均衡。

在这里插入图片描述

二、deployment

  • deployment 是用于编排 pod 的一种控制器资源,以 deployment 为例,来看看架构中的各组件在创建 deployment 资源的过程中都干了什么?
    • 首先是 kubectl 发起一个创建 deployment 的请求;
    • apiserver 接收到创建 deployment 请求,将相关资源写入 etcd;之后所有组件与 apiserver/etcd 的交互都是类似的;
    • deployment controller list/watch 资源变化并发起创建 replicaSet 请求;
    • replicaSet controller list/watch 资源变化并发起创建 pod 请求;
    • scheduler 检测到未绑定的 pod 资源,通过一系列匹配以及过滤选择合适的 node 进行绑定;
    • kubelet 发现自己 node 上需创建新 pod,负责 pod 的创建及后续生命周期管理;
    • kube-proxy 负责初始化 service 相关的资源,包括服务发现、负载均衡等网络规则;
  • 至此,经过 kubenetes 各组件的分工协调,完成了从创建一个 deployment 请求开始到具体各 pod 正常运行的全过程。

在这里插入图片描述

三、Pod

  • 在 kubernetes 众多的 api 资源中,pod 是最重要和基础的,是最小的部署单元。首先要考虑的问题是,为什么需要 pod?pod 可以说是一种容器设计模式,它为那些”超亲密”关系的容器而设计,可以想象 servelet 容器部署 war 包、日志收集等场景,这些容器之间往往需要共享网络、共享存储、共享配置,因此有了 pod 这个概念。

在这里插入图片描述

  • 对于 pod 来说,不同 container 之间通过 infra container 的方式统一识别外部网络空间,而通过挂载同一份 volume 就自然可以共享存储了,比如它对应宿主机上的一个目录。

四、容器编排

  • 容器编排是 kubernetes 的看家本领,因此有必要了解一下。kubernetes 中有诸多编排相关的控制资源,例如编排无状态应用的 deployment,编排有状态应用的 statefulset,编排守护进程 daemonset 以及编排离线业务的 job/cronjob 等。
  • 以应用最广泛的 deployment 为例,deployment、replicatset、pod 之间的关系是一种层层控制的关系。简单来说,replicaset 控制 pod 的数量,而 deployment 控制 replicaset 的版本属性。这种设计模式也为两种最基本的编排动作实现了基础,即数量控制的水平扩缩容、版本属性控制的更新/回滚。

五、水平扩缩容

在这里插入图片描述

  • 水平扩缩容非常好理解,我们只需修改 replicaset 控制的 pod 副本数量即可,比如从 2 改到 3,那么就完成了水平扩容这个动作,反之即水平收缩。

六、更新/回滚

  • 更新/回滚则体现了 replicaset 这个对象的存在必要性,例如需要应用 3 个实例的版本从 v1 改到 v2,那么 v1 版本 replicaset 控制的 pod 副本数会逐渐从 3 变到 0,而 v2 版本 replicaset 控制的 pod 数会注解从 0 变到 3,当 deployment 下只存在 v2 版本的 replicaset 时变完成了更新。回滚的动作与之相反。

在这里插入图片描述

七、滚动更新

  • 可以发现,在上述例子中,更新应用,pod 总是一个一个升级,并且最小有 2 个 pod 处于可用状态,最多有 4 个 pod 提供服务。这种”滚动更新”的好处是显而易见的,一旦新的版本有了 bug,那么剩下的 2 个 pod 仍然能够提供服务,同时方便快速回滚。
  • 在实际应用中,可以通过配置 RollingUpdateStrategy 来控制滚动更新策略,maxSurge 表示 deployment 控制器还可以创建多少个新 Pod;而 maxUnavailable 指的是,deployment 控制器可以删除多少个旧 Pod。

八、kubernetes 中的网络

  • 了解了容器编排是怎么完成的,那么容器间的又是怎么通信的呢?讲到网络通信,kubernetes 首先得有”三通”基础:
    • node 到 pod 之间可以通;
    • node 的 pod 之间可以通;
    • 不同 node 之间的 pod 可以通。

在这里插入图片描述

  • 简单来说,不同 pod 之间通过 cni0/docker0 网桥实现了通信,node 访问 pod 也是通过 cni0/docker0 网桥通信即可。
  • 而不同 node 之间的 pod 通信有很多种实现方案,包括现在比较普遍的 flannel 的 vxlan/hostgw 模式等。flannel 通过 etcd 获知其他 node 的网络信息,并会为本 node 创建路由表,最终使得不同 node 间可以实现跨主机通信。

九、微服务 service

  • 在了解接下来的内容之前,得先了解一个很重要的资源对象:service,为什么需要 service 呢?在微服务中,pod 可以对应实例,那么 service 对应的就是一个微服务。而在服务调用过程中,service 的出现解决了两个问题:
    • pod 的 ip 不是固定的,利用非固定 ip 进行网络调用不现实;
    • 服务调用需要对不同 pod 进行负载均衡。
  • service 通过 label 选择器选取合适的 pod,构建出一个 endpoints,即 pod 负载均衡列表。实际运用中,一般会为同一个微服务的 pod 实例都打上类似 app=xxx 的标签,同时为该微服务创建一个标签选择器为 app=xxx 的 service。

十、kubernetes 中的服务发现与网络调用

  • 在有了上述”三通”的网络基础后,就可以开始微服务架构中的网络调用在 kubernetes 中是怎么实现的。

① 服务间调用

  • 首先是东西向的流量调用,即服务间调用。这部分主要包括两种调用方式,即 clusterIp 模式以及 dns 模式。
  • clusterIp 是 service 的一种类型,在这种类型模式下,kube-proxy 通过 iptables/ipvs 为 service 实现了一种 VIP(虚拟 ip)的形式。只需要访问该 VIP,即可负载均衡地访问到 service 背后的 pod。
  • 如下是 clusterIp 的一种实现方式,此外还包括 userSpace 代理模式(基本不用),以及 ipvs 模式(性能更好):

在这里插入图片描述

  • dns 模式很好理解,对 clusterIp 模式的 service 来说,它有一个 A 记录是 service-name.namespace-name.svc.cluster.local,指向 clusterIp 地址。所以一般使用过程中,直接调用 service-name 即可。

② 服务外访问

在这里插入图片描述

  • 南北向的流量,即外部请求访问 kubernetes 集群,主要包括三种方式:nodePort、loadbalancer、ingress。
  • nodePort 同样是 service 的一种类型,通过 iptables 赋予了调用宿主机上的特定 port 就能访问到背后 service 的能力。
  • loadbalancer 则是另一种 service 类型,通过公有云提供的负载均衡器实现。
  • 访问 100 个服务可能需要创建 100 个 nodePort/loadbalancer,因此希望通过一个统一的外部接入层访问内部 kubernetes 集群,这就是 ingress 的功能。ingress 提供了统一接入层,通过路由规则的不同匹配到后端不同的 service 上。ingress 可以看做是”service 的 service”。ingress 在实现上往往结合 nodePort 以及 loadbalancer 完成功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1307072.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vs2022番茄助手安装

资源获取: 链接:https://pan.baidu.com/s/1FphMGL692I_JfLW_vqGPYw 提取码:zkw4 安装步骤 1.确保旧版番茄助手插件完全卸载。 2.下载附件“VA_X_Setup2440_0.exe”安装文件,双击安装,Win10以上系统需要【右键-属性】…

推荐一款好用的包含表格识别的OCR网站

在当今数字化的时代,文字和表格识别已经成为了许多行业的关键技术。无论是处理大量的纸质文档,还是从网络上收集数据,OCR(光学字符识别)技术都扮演着重要的角色。然而,对于许多用户来说,OCR软件…

SpringCloud微服务 【实用篇】| Docker启示录

目录 一:Docker启示录 1. Docker启示录 2. Docker和虚拟机的区别 3. Docker架构 4. Centos7安装Docker 4.1. 卸载 4.2. 安装docker 4.3. 启动docker 4.4. 配置镜像加速 前些天突然发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽…

HarmonyOS4.0从零开始的开发教程11Video组件的使用

HarmonyOS(九)Video组件的使用 概述 在手机、平板或是智慧屏这些终端设备上,媒体功能可以算作是我们最常用的场景之一。无论是实现音频的播放、录制、采集,还是视频的播放、切换、循环,亦或是相机的预览、拍照等功能…

06_W5500_DHCP

1.DHCP协议介绍: DHCP(Dynamic Host Configuration Protocol)是一种用于自动分配IP地址和其他网络配置信息的协议。它允许网络中的设备(如计算机、手机、打印机等)在连接到网络时自动获取IP地址、子网掩码、默认网关、…

数据入表 | 详解数据资产会计核算与企业应对

从2015年《促进大数据发展行动纲要》到2022年《数据20条》到2023年8月份出台了《企业数据资源相关会计处理暂行规定》,可见国家层面对数据的重视和探索如何进一步挖掘数据价值,发挥数据的应用潜力。一石激起千层浪,面对如此重要的规定&#x…

C++1114新标准——统一初始化(Uniform Initialization)、Initializer_list(初始化列表)、explicit

系列文章目录 C11&14新标准——Variadic templates(数量不定的模板参数) C11&14新标准——Uniform Initialization(统一初始化)、Initializer_list(初始化列表)、explicit 文章目录 系列文章目录1…

python+pytest接口自动化(12)-自动化用例编写思路 (使用pytest编写一个测试脚本)

经过之前的学习铺垫,我们尝试着利用pytest框架编写一条接口自动化测试用例,来厘清接口自动化用例编写的思路。 我们在百度搜索天气查询,会出现如下图所示结果: 接下来,我们以该天气查询接口为例,编写接口测…

【Java 基础】32 定时调度

文章目录 Timer 类创建 Timer注意事项 ScheduledExecutorService 接口创建 ScheduledExecutorService注意事项 选择合适的定时调度方式Timer 的适用场景ScheduledExecutorService 的适用场景 总结 在软件开发中,定时任务是一种常见的需求,用于周期性地执…

了解振弦采集仪:工程质量控制的得力助手

了解振弦采集仪:工程质量控制的得力助手 振弦采集仪是一种专门用于工程质量控制的仪器设备,它可以帮助工程师监测和评估结构物的振动性能。它的工作原理是通过将传感器固定在结构物上的振弦上,然后测量振弦的振动频率、振动幅度等参数&#…

GPTs prompts灵感库:创意无限,专业级创作指南,打造吸睛之作的秘诀

GPTs prompts灵感库:创意无限,专业级创作指南,打造吸睛之作的秘诀 优质prompt展示 1.1 极简翻译 中英文转换 你是一个极简翻译工具,请在对话中遵循以下规则: - Prohibit repeating or paraphrasing any user instru…

mysql更新某个字段=这个字段+字符串

当我们像c#中用拼接执行sql语句时,如下: UPDATE abpusers set UserNameqyUserName where UserNameqy-wh 会出现以下错误: 在mysql中通过concat函数来实现 UPDATE abpusers set UserNameCONCAT(qy_,UserName) where UserNameqy-wh

Unity中实现ShaderToy卡通火(总结篇)

文章目录 前言一、把卡通火修改为后处理效果1、在Shader属性面板定义属性接收帧缓存纹理2、在片元着色器对其纹理采样后,与卡通火相加输出请添加图片描述 二、我们自定义卡通火1、修改 _CUTOFF 使卡通火显示在屏幕两侧2、使火附近屏幕偏红色 前言 在之前的文章中&a…

PP材料粘接ABS材料使用UV胶的好处?

跟随着现阶段材料的不断发展更迭,PP材料应用越来越广,生产效率要求越来越高,为了加快生产,提高效率,PP材料的粘接上使用UV胶粘接PP(聚丙烯)和ABS(丙烯腈-丁二烯-苯乙烯共聚物&#x…

AI日报:人工智能与新材料的发现

文章目录 总览人工智能正在革命性地发现新的或更强的材料,这将改变制造业。更坚韧的合金问题研究解决方案 新材料人工智能存在的挑战方法探索 日本的研究人员正在使用人工智能制造更强的金属合金或发现新材料,并彻底改变制造过程 总览 日本的研究人员开…

解决使用pnpm安装时Sharp模块报错的方法

在使用pnpm进行项目依赖安装的过程中,有时候会遇到Sharp模块报错的情况。Sharp是一个用于处理图像的Node.js模块,但它的安装可能会因为各种原因而失败,导致项目无法正常启动。本文将介绍这个问题的方法。 问题描述 解决方法 在命令行分别输…

【Zerotier】自建PLANET服务器内网地址连接

之前已经完成了【Zerotier】通过docker自建PLANET服务器,但是遇到一个问题,因为各种原因,内网里面的ZeroTier Client无法通过PLANET服务器的公网地址连接,愁怀了这下。在经过多方测试验证后,可以采取重新生成一个PLANE…

MYSQL练题笔记-子查询-电影评分

一、题目相关内容 1)相关的表 2)题目 3)帮助理解题目的示例,提供返回结果的格式 二、自己初步的理解 1.字典序是指从前到后比较两个字符串大小的方法。 首先比较第1个字符,如果不同则第1个字符较小的字符串更小&…

Linux install manual 1Panel

前言 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。1Panel 的功能和优势包括: 快速建站:深度集成 Wordpress 和 Halo,域名绑定、SSL 证书配置等一键搞定;高效管理:通过 Web 端轻松管理 Linux 服务器,包括主机监控、文件管理、数据库管理、容器管理等;安全可…

CentOS 7.x操作系统的ECS云服务器上搭建WordPress网站

WordPress是使用PHP语言开发的博客平台,在支持PHP和MySQL数据库的服务器上,您可以用WordPress架设自己的网站,也可以用作内容管理系统(CMS)。本教程介绍如何在CentOS 7.x操作系统的ECS实例上搭建WordPress网站。 背景…