Kubernetes: 从零开始理解K8s架构

目录

一、简介    

二、Kubernetes 架构原理

        2.1 控制平面 

         2.2 Node 组件

        2.3 Container Image

         2.4 kubelet

        2.5 Cluster

三、服务调用

四、总结


一、简介    

        Kubernetes 是一个开源的容器编排系统,用于自动化应用容器的部署、扩展和管理。它是Google基于Borg系统(Google的内部运行系统)的经验并贡献给 Cloud Native Computing Foundation(CNCF)的项目。Kubernetes 中间有8个字母,所以也被称为 K8s。

        K8s 有如下的特性

  1. 服务发现和负载均衡:K8s 可以使用 DNS 名称或自己的 IP 地址暴露容器,如果到一个容器的流量过大,K8s 能够负载均衡并分配网络流量,以保证服务稳定。
  2. 自动部署和回滚:你可以描述已部署的容器应有的状态,它可以改变实际状态到期望状态。
  3. 自我修复:当容器失败时,K8s 会重启它;当节点失败时,K8s 会重新调度在该节点上的应用到其他节点上;当容器没有响应健康检查时,K8s 会杀掉它并且把它标记为失败的。

        K8s 介于应用服务和服务器之间,能够通过策略,协调和管理多个应用服务,只需要一个 yaml 文件位置,定义应用的部署顺序等信息,就能自动部署应用到各个服务器上,还能让它们挂了自动重启,自动扩缩容。

二、Kubernetes 架构原理

        K8s 会将我们的服务器划分成两部分,一部分为控制平面,另一部分为工作节点,也就是 Node。控制平面控制和管理各个 Node,而 Node 则负责实际运行各个应用服务。

        2.1 控制平面 

        控制平面内部组件

  • 以前操作服务器时需要登录每台服务器,然后手动执行各种命令,现在有了 K8s 一切都变得简单了,K8s 提供了 API 接口,然后通过 API server 接口组件就能操作这些服务资源。
  • 以前部署服务时,需要查看哪台服务器的资源充足,然后才能将应用部署到相应的服务器上,现在 K8s 提供了调度器(Scheduler)来完成这些操作。在选择最合适节点时,Scheduler 会考虑多种因素,例如节点的资源剩余情况(CPU、内存等)、Pod的资源需求、数据亲和性、节点的标签等。选择完节点后,Scheduler 会将决定通知给 API server,然后 API server 会将 Pod 信息和节点信息记录下来。
  • 找到服务器后,以前我们会手动创建、关闭服务,K8s 提供了 Controller Manager 控制器来负责做这些事情。
  • K8s 在运行过程中会产生一些数据,这些数据需要存储起来,目前数据被存放到了 etcd 中。

        下图为控制平面组件组成图

         2.2 Node 组件

        Node 是实际的工作节点,他可以是一台物理机,也可以是虚拟机。Node 会实际去运行应用服务,多个应用服务可以共享一台 Node 上的 CPU、内存等资源。如果是非核心业务,部署到一起是没问题的,如果是核心服务最后进行隔离,分开部署。每个应用服务都会占用一定的 CPU 、内存、存储和网络资源,如果部署在一起会发生资源争抢,核心服务应该进行隔离步数。

        另一方面也会影响可用性,如果一个 Node 上部署很多重用的应用服务,那么这个节点如果出现故障,可能会影响很多服务。而且这种方式不利于管理,增加了复杂性。

        2.3 Container Image

        以前我们部署服务时,需要上传代码到服务器上,而用了 K8s 之后,只需要将服务代码打包成容器镜像(Container Image),就能将它部署。

        容器镜像是由文件系统和参数组成的轻量级、独立的、可执行的软件包,包含了运行某个软件所需的所有内容,包括代码、运行时环境、库、环境变量和配置文件等。容器镜像可以再不同的环境中重复的创建相同的容器,这使得打包、分发、部署和运行变得异常简单和快速。

        每个应用服务都可以被看做是一个容器,并且大多情况下,还会为应用服务添加一个日志收集器,多个容器组成一个个的 Pod,它们运行在 Node 上。

        K8s 可以将 pod 从某个 Node 调度到另外一个 Node,还能以 Pod 为单位去做重启和动态扩缩容操作,所以 Pod 是 k8s 中最小的调度单位。

         2.4 kubelet

        另外,前面提到控制平面会用 Controller Manager (通过 API Server)控制 Node 创建和关闭服务,那 Node 也得有个组件能接收到这个命令才能去做这些动作,这个组件叫 kubelet,它主要负责管理和监控 Pod。 最后,Node 中还有个 Kube Proxy ,它负责 Node 的网络通信功能,有了它,外部请求就能被转发到 Pod 内。        

        2.5 Cluster

        控制平面和 Node 共同组成一个 Cluster,也就是集群。同时,为了将集群内部的服务暴露给外部用户使用,我们一般还会部署一个入口控制器,比如 Ingress 控制器(比如 Nginx) ,它可以提供一个入口让外部用户访问集群内部服务。

三、服务调用

        外部请求会先进入 K8s 集群的 Ingress 控制器,然后请求会被转发到 K8s 内部的某个 Node 的 Kube Proxy 上,再找到对应的 Pod,然后才是转发到内部容器服务中,处理结果原路返回。

四、总结

         这篇文章只是简单的减少了 K8s 的工作原理,作为业务程序员,公司内部有封装好的服务管理平台,平时可能也没接触过这些东西,但是还是需要了解一下,这有助于大家了解整个服务的运作。

        由于是初学者,欢迎指教更正。

往期经典推荐

分布式事务-CSDN博客

Kafka VS RabbitMQ,架构师教你如何选择_消息中间件选型分析-CSDN博客

TiDB高手进阶:揭秘自增ID热点现象与高级调优技巧_tidb 分布式自增id-CSDN博客

如何熟悉一个陌生的业务系统-CSDN博客

揭开Spring Bean生命周期的神秘面纱-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python中的数据可视化:二维直方图 hist2d()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 python中的数据可视化: 二维直方图 hist2d() 选择题 关于以下代码输出结果的说法中正确的是? import matplotlib.pyplot as plt import numpy as np x np.random.normal(0, 1, …

IQOO Neo7/7SE/PAD2解BL+完美root权限+LSPosed框架-可虚拟定位

QOO Neo7/Neo7SE/Pad/Pad2搭配的是天玑8200系列芯片,继810/920以后再次支持解锁BL,这给我们的玩机带来了很多可能。解锁BL有什么用途呢?最常见的就是获取root权限,刷入各种各种的magisk模块,使用自己喜欢的插件等&…

QT--5

1> 将网络聊天室重新实现一遍 服务器端 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);ser new QTcpServer(this); }Widget::~Widget() {delete ui; }vo…

第七届精武杯部分wp

第一部分:计算机和手机取证 1.请综合分析计算机和手机检材,计算机最近一次登录的账户名是 答案:admin 创建虚拟机时直接给出了用户名 2. 请综合分析计算机和手机检材,计算机最近一次插入的USB存储设备串号是 答案&#xff1a…

【赠书活动第4期】《Rust编程与项目实战》

赠书活动 《Rust编程与项目实战》免费赠书 3 本, 收到赠书之后,写一篇 本书某一节内容 的学习博客文章。 可在本帖评论中表示参加,即可获得赠书,先到先得。学习心得博客链接,后面有空发上来。 赠书截止日期为送出3…

探寻高品质狗粮的性价比之选,福派斯鲜肉狗粮无疑是值得推荐的一款!

引言:在狗狗的健康成长道路上,狗粮作为其日常营养来源,其重要性不言而喻。然而,市面上狗粮品牌繁多,价格与质量各异,让养狗人士们在选择时颇为头疼。今天,我们将为大家深入剖析一款备受赞誉的狗…

ALV Color-颜色

目录 前言 实战 列颜色 行颜色 单元格颜色 前言 在ABAP ALV中,Color颜色设置是一种增强列表显示效果的重要手段,可以用来突出显示特定行、列或单元格,以吸引用户注意或传达数据的特定状态。 颜色设置中有优先级顺序,他们是单元格…

##13 如何在Python中优雅地使用异常处理

文章目录 引言1. 异常处理基础2. 处理多种异常3. 捕捉所有异常4. finally 语句5. 自定义异常结语参考链接 引言 在编程中,错误是在所难免的。Python提供了异常处理机制,允许程序在遇到错误时优雅地恢复。本文将介绍Python中异常处理的基本概念&#xff…

探索Baidu Comate智能编码助手的AI编程之旅

本文目录 目录 本文目录 前言 1.1 Baidu Comate智能编码助手概览 1.2 Baidu Comate适用场景 1.3 Baidu Comate安装步骤 1.4 代码编写与智能提示 1.5 试用感受分享 1.6 对Comate未来发展的期望 1.7 总结体验与收获 1.8 对AI编程未来的展望 前言 1.1Baidu Comate智…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑低碳需求响应的碳捕集燃煤电厂配置-运行协同优化》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

上网卡免费领取,无成本,免费领,超暴力蓝海项目

随着短视频和直播的流行,对大流量电话卡的需求日益增加。我们提供100G-300G大流量电话卡,包含100多分钟语音通话,月费仅19-29元。这些都是三大运营商的靠谱已有号卡,全国免费领取并包邮到家。客户收到卡片后,可在线充值…

dragonbones 5.6.3不能导出的解决办法

问题描述 使用dragonbones 5.6.3导出资源时无反应。 解决方法 第一步安装node.js,我这里使用的是V18.16.0第二步进入到DragonBonesPro\egretlauncher\server\win目录,然后把里面的node.exe替换为刚刚下载的node文件夹即可,如下图&#xff…