第四章 云原生架构之Kubernetes基础知识

1、K8S整体架构

1.1、概述

​ Kubernetes是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,简称 K8S。K8S的本质是一组服务器集群,可以在对应服务器集群的每个节点上运行程序,来对节点中的容器进行管理。类似Master-Work方式,每个服务器上安装特定的k8s组件,就可以形成集群,然后部署对应的应用即可。

(1)K8S常见功能

服务发现和负载均衡

  • Kubernetes 可以使用 DNS 名称或自己的 IP 地址来暴露容器。
  • 如果进入容器的流量很大, Kubernetes 能够自动实现请求的负载均衡分配网络流量,从而使部署稳定

存储编排

  • Kubernetes 允许自动挂载选择的存储系统,例如本地存储、云提供商存储等。

自动部署和回滚

  • 可以用k8s自动化部署创建新容器, 删除现有容器并将它们的所有资源用于新容器。
  • 当版本发布错误,可以立刻回退到之前的版本

自我修复

  • 如果某个容器宕机了,K8S 可以快速重新启动新的的容器,替换旧的容器

密钥与配置管理

  • K8S允许存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥

(2)K8S整体架构

​ K8S整体架构为Client-Server模型:

在这里插入图片描述

(1)控制节点【Master-Node】:负责集群管管理

(2)工作节点【Worker-Node】:负责为集群提供运行环境
在这里插入图片描述

1.2、K8S控制节点

​ 控制节点Master-Node,负责集群的管理,控制节点包含如下组件
在这里插入图片描述
(1)apiserver【资源入口】

​ 提供操作【k8s集群资源】的唯一入口,RESTful方式请求,并提供认证、授权、访问控制、API注册和发现等

(2)scheduler【计算】

​ 负责资源的调度,按照预定的调度策略,【计算】将Pod调度到相应的Node节点进行应用部署

(3)controller-manager【管理】

​ 控制器管理中心负责维护集群的状态,比如故障检测、滚动更新等,根据调度器的安排通知对应的节点创建pod。

(4)etcd【存储】

​ 存储中心,是兼具一致性和高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库

1.3、K8S工作节点

工作节点Worker-Node,负责为集群提供运行环境。Node是Pod真正运行的主机,可以是物理机也可以是虚拟机, Node本质上不是K8S来创建的, K8S只是管理Node上的资源,为了管理Pod,每个Node节点上至少需要运行container runtime(Docker)、kubelet和kube-proxy服务,具体如下:

在这里插入图片描述

(1)kubelet

​ 相当于主节点派到工作节点的一个代表,用于管理本机容器(相当于master节点的化身),负责维护容器的生命周期也负责Volume(CVI)和网络(CNI)的管理

  • 主要职责

①控制Pod生命周期

②控制CSI生命周期

③负责CNI创建和访问规则

(2)kube-proxy

​ 负责为Service提供cluster内部的服务发现/网络代理/负载均衡等操作,为部署的应用程序提供访问入口,和apiserver是不一样的,后者用于操作k8s集群内部。

  • 核心职责:节点运行的负责创建Pod网络访问规则工具

(3)kude-dns

​ 作为服务发现机制的基本功能,在集群内需要能够通过服务名对服务进行访问,因此需要一个集群范围内的DNS服务来完成从服务名到ClusterIP的解析。

在这里插入图片描述

(4)Ingress Controller

①Ingress概述

在这里插入图片描述

​ Ingress 简单的理解就是你原来需要改 Nginx 配置,然后配置各种域名对应哪个 Service,现在把这个动作抽象出来,变成一个 Ingress 对象,你可以用 yaml 创建,每次不要去改 Nginx 了,直接改 yaml 然后创建/更新就行了。

②Ingress Controller

​ Ingress Controoler 通过与 Kubernetes API 交互,动态的去感知集群中 Ingress 规则变化,然后读取他,按照他自己模板生成一段 Nginx 配置,再写到 Nginx Pod 里,最后 reload 一下,工作流程如下图:

在这里插入图片描述

2、K8S基本概念

2.1、Master

​ Master指的是集群控制节点(相当于整个集群的指挥中心),在每个Kubernetes集群里都需要有一个Master来负责整个集群的管理和控制。

2.2、Node

​ 除了master,k8s集群中的其他机器被称为Node节点,Node节点才是kubernetes集群中的工作负载节点。每个Node节点都会被master分配一些工作负载(docker容器),node节点上的docker负责容器的运行。

2.3、Pod

​ Pod是一组容器, 在K8S中,最小的单位是Pod, 一个Pod可以包含多个容器,但通常情况下我们在每个Pod中仅使用一个容器。


  • 形象化:可以把Pod理解成豌豆荚, Pod内的每个容器是一颗颗豌豆。
    在这里插入图片描述

在这里插入图片描述

  • 分类如下:
    • 自主创建:直接创建出来的Pod,这种pod删除后就没有了,也不会自动重建
    • 控制器创建:通过控制器创建的pod,这类Pod删除了之后还会自动重建

2.4、Pod Controller

​ Pod Controller控制器是管理pod的中间层,只需要告诉Pod控制器,想要创建多少个什么样的Pod,它会创建出满足条件的Pod并确保每一个Pod资源处于用户期望的目标状态。如果Pod在运行中出现故障,它会基于指定策略重新编排Pod

  • 作用:通过它来实现对pod的管理,比如启动pod、停止pod、扩展pod的数量等等

  • 类型:ReplicaSet、Deployment、Horizontal Pod Autoscaler、DaemonSet等

2.5、Service

​ 在k8s里面,每个Pod都会被分配一个单独的IP地址,但这个IP地址会随着Pod的销毁而消失,Service (服务)就是用来解决这个问题的,提供对外服务的统一入口,用于为一组提供服务的Pod 抽象一个稳定的网络访问地址

  • 注意事项:一个Service可以看作一组提供相同服务的Pod的对外访问接口,作用于哪些Pod是通过标签选择器来定义的

2.6、Label

​ K8S提供了Label【标签】机制来为Pod进行分类,同一类pod会拥有相同的标签,Label的具体形式是key-value的标记对,可以在创建资源的时候设置,也可以在后期添加和修改。

  • 注意事项:给某个资源对象定义一个Label,就相当于给它打了一个标签,可以通过Label Selector(标签选择器)查询和筛选拥有某些Label的资源对象,K8S通过这种方式实现了类似SQL的对象查询机制

2.7、LabelSelector

​ 对应的资源打上标签后,可以使用标签选择器过滤指定的标签。

  • 标签选择器目前有两个
    • 基于等值关系(等于、不等于)
    • 基于集合关系(属于、不属于、存在)
  • 范例:通过添加这两个标签,基本上已经将Pod组织成两个维度(按应用程序横向组织,按Release纵向组织)

在这里插入图片描述

2.8、NameSpace

命名空间是在多个用户之间划分集群资源的一种方法(通过资源配额),**通过命名空间可以在一个物理集群上运行多个虚拟集群,用来隔离pod的运行环境,**同一个名字空间中的资源名称必须唯一,而不同名字空间之间则没有这个要求,NameSpace是不能嵌套的,每一个 Kubernetes 的资源都只能在一个NameSpace内。
在这里插入图片描述

  • Kubernetes 会创建四个初始NameSpace名称空间:
    • default 没有指明使用其它名字空间的对象所使用的默认名字空间
    • kube-system Kubernetes 系统创建对象所使用的名字空间
    • kube-public
    • kube-node-lease

.3、设计理念

​ Kubernetes 设计理念和功能其实就是一个类似 Linux 的分层架构,具体如下图所示:
在这里插入图片描述
(1)核心层:Kubernetes 最核心的功能,对外提供 API 构建高层的应用,对内提供插件式应用执行环境

(2)应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS 解析等)

(3)管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动态 Provision 等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy 等)

(4)接口层:kubectl 命令行工具、客户端 SDK 以及集群联邦

(5)生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴

  • Kubernetes 外部:日志、监控、配置管理、CI、CD、Workflow、FaaS、OTS 应用、ChatOps 等
  • Kubernetes 内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理等

4、组件选型

组件作用组件选型备注
一致性和服务发现CoreDNS
远程调用服务gRPC
南北流量OpenRety七层反向代理
服务网格Istio
API网关trafik
存储Ceph
云原生网络flannel
容器运行时docker
容器注册dockerhub【公网】、HARBOR【私网】
权限管理RBAC
监控prometheus + Grafana
日志beats

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mac怎么把mov转换成mp4?

mac怎么把mov转换成mp4?在我们准备转换之前,让我们先了解一下为什么要将MOV格式转换为MP4格式。MOV格式是美国苹果公司独立开发发布的视频文件格式,在Mac电脑以及苹果其它智能设备上播放效果非常出色。然而,如果您想与他人分享视频…

[JVM] 3. 类加载子系统(2)-- 类加载器、双亲委派机制(JDK1.8及之前)及其他

前言 JDK1.8及之前和JDK9及之后的双亲委派模型是不一样的&#xff0c;这里学习了1.8及以前的双亲委派模型&#xff0c;记录笔记 一、类加载器 1.8之前主要是这几种类加载器&#xff1a; 1. 启动类加载器(Bootstrap ClassLoader)&#xff1a; 负责将存放在<JAVA_HOME>…

浅谈设计模式之单例模式

0 单例模式简介 单例模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。单例模式指的是单一的一个类&#xff0c;该类负责创建自己的对象&#xff0c;并且保证该对象唯一。该类提供了一种访问其唯一对象的方法&#xff0c;外部需要调用该类的对象可以通过方法获…

HTPP入门教程||HTTP 状态码||HTTP content-type

HTTP 状态码 当浏览者访问一个网页时&#xff0c;浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前&#xff0c;此网页所在的服务器会返回一个包含 HTTP 状态码的信息头&#xff08;server header&#xff09;用以响应浏览器的请求。 HTTP 状态码的英文为…

基于.net6的WPF程序使用SignalR进行通信

之前写的SignalR通信&#xff0c;是基于.net6api&#xff0c;BS和CS进行通信的。 .net6API使用SignalRvue3聊天WPF聊天_signalr wpf_故里2130的博客-CSDN博客 今天写一篇关于CS客户端的SignalR通信&#xff0c;后台服务使用.net6api 。其实和之前写的差不多&#xff0c;主要在…

基于html2canvas和jspdf将document DOM节点转换为图片生成PDF文件,并下载到本地

这里要用到html2canvas将document DOM节点转换为图片&#xff0c;并下载到本地_你挚爱的强哥的博客-CSDN博客前端用原生js编辑文件内容→创建生成文件(格式可以自定义)→下载文件_你挚爱的强哥的博客-CSDN博客。会自动创建一个html文件。https://blog.csdn.net/qq_37860634/art…

stb_image简单使用

简介stb_image stb_image 是一个非常轻量级的、单文件的图像加载库&#xff0c;用于加载和解码多种图像格式&#xff08;如BMP、JPEG、PNG、GIF等&#xff09;的图像数据。它由Sean T. Barrett开发&#xff0c;并以公共领域&#xff08;Public Domain&#xff09;许可发布&…

字符函数和字符串函数上篇(详解)

❤️ 作者简介 &#xff1a;RO-BERRY 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识&#xff0c;对纯音乐有独特的喜爱 &#x1f4d7; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;如果你也感兴趣的话欢迎关注博主&#xff0c;期待更新 字符函数和字符串函数 &a…

详解GPT技术发展脉络

文章目录 前言关于本篇的分享内容大语言模型大模型语言模型 百花齐放TransformerAuto-RegressiveResnetLayer-NormMaskScaled Dot-Product AttentionMulti-Head AttenionSelf-AttentionPositional Encoding关于并行计算关于长程依赖Transformer演化 GPT SeriesGPT-1GPT-2GPT-3 …

unity 2019 内置渲染管线 光照与Lighting面板 参数详解

文章目录 前言一 Unity的光照 与 烘焙光照1 unity完整的光照组成2 光的亮度与颜色3 全局光照直接光间接光5 间接光≠光照贴图 二 色彩空间与自动烘焙1 unity的色彩空间2 自动烘焙光照 三 烘焙1 什么是烘焙&#xff0c;烘焙的是什么2 如何进行烘焙3 烘焙的优点和缺点4 查看光照贴…

相交链表——力扣160

题目描述 法一&#xff09;哈希表 class Solution{ public:ListNode* getIntersectionNode (ListNode* headA, ListNode* headB){unordered_set<ListNode*> st;ListNode* temp headA;while(temp){st.insert(temp);temp temp->next;}temp headB;while(temp){if(st.c…

python+allure+jenkins

目录 前言 在 python 中使用 allure 1. 安装 pytest 2. 安装 pytest-allure-adaptor 3. 使用 pytest 执行测试用例并生成 allure 中间报告&#xff08;此步骤可以省略&#xff0c;因为在 jenkins job 中会配置执行类似的命令&#xff09; 4. Jenkins 中安装Allure Jenkin…

《生活教育》期刊简介及投稿邮箱

《生活教育》期刊简介及投稿邮箱 《生活教育》杂志创办于1934&#xff0c;是中华人民共和国教育部主管的国家重点学术期刊&#xff0c;国家级期刊&#xff0c;中国知网全文收录G4期刊&#xff0c;它的理论是陶行知教育思想的主线和重要基石&#xff0c;陶行知的教育理论&#…

【C#】并行编程实战:使用延迟初始化提高性能

在前面的章节中讨论了 C# 中线程安全并发集合&#xff0c;有助于提高代码性能、降低同步开销。本章将讨论更多有助于提高性能的概念&#xff0c;包括使用自定义实现的内置构造。 毕竟&#xff0c;对于多线程编程来讲&#xff0c;最核心的需求就是为了性能。 延迟初始化 - .NET…

C#安装.Net平台科学计算库Math.Net Numerics

工作的时候需要使用到C#的Math.Net库来进行计算。 Math.Net库涵盖的主题包括特殊函数&#xff0c;线性代数&#xff0c;概率模型&#xff0c;随机数&#xff0c;插值&#xff0c;积分&#xff0c;回归&#xff0c;优化问题等。 这里记录一下&#xff0c;安装Math.Net库的过程…

el-date-picker组件的picker-options常规属性设置

查询已发生的配置项 // 日期选择器快捷键配置&#xff08;一般过去时&#xff09; pickerOptions: {shortcuts: [{text: 今天,onClick(picker) {let start new Date();let end new Date();picker.$emit(pick, [start, end]);}},{text: 昨天,onClick(picker) {let start new…

uniapp微信小程序使用axios(vue3+axios+ts版)

版本号 "vue": "^3.2.45", "axios": "^1.4.0", "axios-miniprogram-adapter": "^0.3.5", 安装axios及axios适配器&#xff0c;适配小程序 yarn add axios axios-miniprogram-adapter 使用axios 在utils创建utils/…

Flask SQLAlchemy_Serializer ORM模型序列化

在前后端分离项目中&#xff0c;经常需要把ORM模型转化为字典&#xff0c;再将字典转化为JSON格式的字符串。在遇到sqlalchemy_serializer之前&#xff0c;我都是通过类似Java中的反射原理&#xff0c;获取当前ORM模型的所有字段&#xff0c;然后写一个to_dict方法来将字段以及…

计算机vcruntime140.dll丢失的解决方法,重新安装教程

vcruntime140.dll是Microsoft Visual C Redistributable文件中的一个动态链接库&#xff08;DLL&#xff09;。这个文件是由Microsoft开发的&#xff0c;用于支持C编程语言的运行环境。vcruntime140.dll是Windows系统非常重要的文件&#xff0c;通常会被一些应用程序或游戏所需…

Jenkins | 获取凭证密码

目录 方法一&#xff1a;查看所有账号及密码 方法二&#xff1a;查看指定账号密码 方法一&#xff1a;查看所有账号及密码 Jenkins > 系统管理 > 脚本命令行 com.cloudbees.plugins.credentials.SystemCredentialsProvider.getInstance().getCredentials().forEach{i…