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

news2024/11/28 16:50:49

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

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

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

相关文章

Pytest+Jenkins+Allure的接口自动化测试

目录 生成Allure 两种形式 一 项目内直接生成不依赖Jenkins 1.先安装好allure 将allure\bin配置到环境变量中 cmd 命令行输入:allure 校验是否安装成功 2. 将json文件生成html文件 执行 allure generate report/ -o report/html其中的report/ 为生成的json路径&a…

OCPM和CPM有什么区别?

CPM和OCPM这两种收费模式的对比 Cpm:表示千次展示费用,是数据指标,也是一种出价方式。代表展现一千次的消费,也就是你展现1000次要给媒体多少钱 例如某企业广告曝光量是50万,总广告价格为10000元,那么千人…

matplotlib 笔记:marker 款式

1 ec 边缘颜色 marker 边缘的颜色 import numpy as np import matplotlib.pyplot as pltxnp.linspace(0,10) ynp.sin(x)1.5 plt.figure(figsize(10,10)) plt.scatter(x,y,ecC9) plt.show() 2 fc 填充颜色 face color 填充颜色 3 lw 边缘宽度 4 s 点的大小 5 marker 点款式 i…

设计模式 ~ 工厂模式

工厂模式 工厂模式是一种设计模式,指在通过使用工厂函数或构造函数来创建对象; 它提供了一种灵活的方式来创建对象实例,而无需直接调用构造函数或使用new关键字; 可以分类,解耦; 可以扩展多个类&#xff0…

Baidu——基于大模型的优质Prompt开发课-写代码

软件开发产业趋势与技术革新 大模型驱动的软件开发 代码辅助开发模型 实际操作 你是一名非常专业的产品经理,请问如果我要做一个图片字符画的工具的调研,需要哪些步骤 你是一名编程大牛,目前我想做一个图像字符画的工具,这个工具要…

前缀、中缀、后缀表达式及简易运算实现总结

title: 前缀、中缀、后缀表达式及简易运算实现总结 date: 2023-06-30 10:25:50 tags: 表达式 categories:开发知识及其他 cover: https://cover.png feature: false 1. 概念 1.1 什么是前缀、中缀、后缀表达式? 前缀表达式:又称波兰式(Pol…

代码随想录day5 | 242.有效的字母异位词 349. 两个数组的交集 202.快乐数

文章目录 一、有效的字母异位词二、两个数组的交集三、快乐数 一、有效的字母异位词 242.有效的字母异位词 代码随想录知识点 哈西法可以选取的三种数据结构: 数组setmap class Solution { public:bool isAnagram(string s, string t){int hash[26] {0};// 1f…

CMS系统访问权限限制

创建一些全局的通用方法 const USER_KEY "USER_KEY" const TOKEN_KEY "JWT_TOKEN_KEY"class Auth {constructor() {this.token nullthis.user nullthis.token localStorage.getItem(TOKEN_KEY)const userJson localStorage.getItem(USER_KEY)if (use…

Redis连接报错:ERR Client sent AUTH, but no password is set

如果在redis.windows.conf或者redis.conf(我的是这个配置文件) 文件夹中设置了密码,但是会报错 ERR Client sent AUTH, but no password is set 用记事本打开redis.windows.conf或者redis.conf (我的是这个配置文件)…

一次性讲清楚常考面试题:进程和线程的区别

进程是程序的一次动态执行,它对应着从代码加载,执行至执行完毕的一个完整的过程,是一个动态的实体,它有自己的生命周期。它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成…

今天实习第三天,vue(vue-cli部分,webpack部分,vue-router部分,elementUI部分)

01.创建第一个vue-cli。这里用的是node.js。早上的时候,就需要把node.js安装上去 02.node.js安装 第一步.去官网下载node.js https://nodejs.org/en 第二步.运行官网下载的node.js的msi文件(记住所有的node.js文件的安装包都是msi文件的形式&#xff0…

(学习笔记-TCP连接建立)IP层会分片,为什么TCP层还需要MSS呢?

前提知识: 网络层最常用的是IP协议,IP协议会将传输层的报文作为数据部分,再加上IP包头组装成IP报文,如果IP报文大小超过了MTU(1500字节)就会再次分片,得到一个即将发送到网络的IP报文 MTU和MSS: MTU:一个网…

如何在 Excel 中快速生成随机密码?

有时,我们可能想创建随机密码来保护某些重要内容。 但是,您有什么技巧可以在Excel中快速生成随机密码? 在这里,我有一些可以在Excel工作表中处理的方法。 用公式生成随机密码 使用插入随机数据生成随机密码​编辑 用公式生成随机…

普通人的姓名可以注册为商标吗?

商标是商品的生产者、经营者在其生产、制造、加工或者经销的商品上或者服务使用的标志,用于区别商品或服务来源。商标由文字、图形、字母、数字、三维标志、颜色组合和声音等组合而成,以姓名注册商标属于文字商标,因此,个人的名字…

第十二章:MULTI-SCALE CONTEXT AGGREGATION BY DILATED CONVOLUTIONS——通过膨胀卷积的多尺度上下文聚合

0.摘要 目前用于语义分割的先进模型是基于最初设计用于图像分类的卷积网络的改进。然而,像语义分割这样的密集预测问题在结构上与图像分类不同。在这项工作中,我们开发了一个专门为密集预测设计的新的卷积网络模块。所提出的模块使用膨胀卷积来系统地聚合…

QQ号码3个月未登陆真的要回收?

7月17日消息,微信号长期未使用会被回收的消息引起热议。 腾讯微信团队微博发文称:为保障用户的微信账号安全,注册后不活跃,长期未登录,并且没有零钱的微信账号,会被系统注销,无法使用。 不过也有…

B. The BOSS Can Count Pairs

Problem - 1830B - Codeforces 思路&#xff1a;因为ai*ajbibj&#xff0c;bibj<2*n&#xff0c;那么会有ai*aj<2*n&#xff0c;那么会有min(ai,aj)<sqrt(2*n)&#xff0c;我们能够发现我们只要枚举ai&#xff08;假设ai<aj&#xff09;那么只要在这种情况下求得所…

Kubernetes(K8s)常用命令大全:熟练编排更完美

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

提升效率,打通万里牛ERP与下游用友U8财务软件的无缝对接

一、对接流程 1.1 销售/售后流程 在万里牛订单出库后&#xff0c;通过轻易云数据集成平台将数据推送至用友U8销售订单和销售出库单&#xff0c;这些单据可以进行关联操作。 当万里牛售后单完成退货入库后&#xff0c;通过数据集成平台将数据推送至用友U8销售退货单和红字销售…

基于SpringBoot+vue的点餐平台网站设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…