容器集群管理系统Kubernetes(K8S)

news2024/12/26 0:19:25

目录

一、前言

1.1什么是云原生?

1.2云要素的四要素?

1.2.1微服务

1.2.2容器化

1.2.3DevOps

1.2.4持续交付

1.3云平台有哪些?

1.4SRE

二、Kubernetes 概述

2.1K8S 是什么

2.2K8S作用

2.3K8S版本

2.4为什么要用 K8S

2.5K8S 的特性

2.5.1弹性伸缩

2.5.2自我修复

2.5.3服务发现和负载均衡

2.5.4自动发布(默认滚动发布模式)和回滚

2.5.5集中化配置管理和密钥管理

2.5.6存储编排,支持外挂存储并对外挂存储资源进行编排

2.5.7任务批处理运行

三、Kubernetes 集群架构与组件⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

 3.1核心组件 

3.1.1Master 组件 

3.1.1.1Kube-apiserver

3.1.1.2Kube-controller-manager

3.1.1.3Kube-scheduler

3.2 配置存储中心 

3.3 Node 组件 

3.3.1Kubelet

3.3.2Kube-Proxy

3.3.3docker 或 rocket


一、前言

k8s 概述(包含容器编排、docker、messos+marathon 、k8s容器编排)  云原生 SRE

docker compose单机编排工具  有企业在使用

docker swarm 能够在多台主机中构建一个docker集群、 docker swarm可以集群化的管理、 处理容器,也算是一个工具   基本上已经淘汰

在企业一般把微服务, 封装成dockerfile 编写成镜像,然后进行发布,使用dockerfile 可以写成shell脚本做版本迭代,完成半自动化,早期我们使用messos,他是apache基金会的,2019年不用mesos,使用K8S,K8S在2014年就出来了,2019年开始大量使用K8S

K8S是云原生计算基金会的(CNCF),2015年12月成立云原生计算基金会(CNCF)

1.1什么是云原生?

1.2云要素的四要素?

1.2.1微服务

几乎每个云原生的定义都包含微服务,跟微服务相对的是单体应用,微服务有理论基础,那就是康威定律,指导服务怎么切分,很玄乎,凡是能称为理论定律的都简单明白不了,大概意思是组织架构决定产品形态

微服务架构的好处就是按function切了之后,服务解耦,内聚更强,变更更易

1.2.2容器化

Docker是应用最为广泛的容器引擎,在思科谷歌等公司的基础设施中大量使用,是基于LXC技术搞的,容器化为微服务提供实施保障,起到应用隔离作用,K8S是容器编排系统,用于容器管理,容器间的负载均衡

1.2.3DevOps

这是个组合词,Dev+Ops,就是开发和运维合体,不像开发和产品,经常刀刃相见实际上DevOps应该还包括测试,DevOps是一个敏捷思维,是一个沟通文化,也是组织形式,为云原生提供持续交付能力。

1.2.4持续交付

持续交付是不误时开发,不停机更新,小步快跑,反传统瀑布式开发模型,这要求开发版本和稳定版本并存,其实需要很多流程和工具支撑。

kubernetes 已经成为容器编排领域的王者,它是基于容器的集群编排引擎,具备扩展集群、滚动升级回滚、弹性伸缩、自动治愈、服务发现等多种特性能力。

1.3云平台有哪些?

公有云、私有云、混合云

目前使用最多的是阿里云

1.4SRE

①SRE运维自动化(自动化发布、自动化部署、日志管理、监控自动化)

②K8S编排集群

③日志系统

④微服务

⑤消息队列

⑥多云管理

⑦云开(二开) python、golong

内容管理系统 (CMS)

二、Kubernetes 概述

2.1K8S 是什么

K8S 的全称为 Kubernetes (K12345678S),PS:“嘛,写全称也太累了吧,写”。不如整个缩写

K8s 作为缩写的结果来自计算“K”和“s”之间的八个字母,简称为K8S

k8s就是一种跨主机的容器集群编排工具

k8s他的全称Kubernetes 简称k8s,它是一种开源容器编排平台,用于自动化部署,扩展和管理化应用程序。它提供了种容器编排和管理的方式,还可以帮助开发人员更轻松的管理我们的应用程序。

2.2K8S作用

K8S用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。
可以理解成 K8S 是负责自动化运维管理多个容器化程序(比如 Docker)的集群,是一个生态极其丰富的容器编排框架工具。

由来:
K8S由google的Borg系统(博格系统,google内部使用的大规模容器编排工具)作为原型,后经GO语言延用Borg的思路重写并捐献给CNCF基金会开源。

含义:
词根源于希腊语的 舵手、飞行员

官网:https://kubernetes.io 

GitHub:https://github.com/kubernetes/kubernetes

2.3K8S版本

目前一般是1.18~1.20,1.24版本后丢弃了docker(如需要使用需要第三方插件配合),目前最新版本是1.30,版本一年更新四次,1.24版本之后支持ivp6、还有集群化、添加了令牌重载授权服务

2.4为什么要用 K8S

试想下传统的后端部署办法:把程序包(包括可执行二进制文件、配置文件等)放到服务器上,接着运行启动脚本把程序跑起来,同时启动守护脚本定期检查程序运行状态、必要的话重新拉起程序。

设想一下,如果服务的请求量上来,已部署的服务响应不过来怎么办?传统的做法往往是,如果请求量、内存、CPU超过阈值做了告警,运维人员马上再加几台服务器,部署好服务之后,接入负载均衡来分担已有服务的压力。
这样问题就出现了:从监控告警到部署服务,中间需要人力介入!那么,有没有办法自动完成服务的部署、更新、卸载和扩容、缩容呢?
而这就是 K8S 要做的事情:自动化运维管理容器化(Docker)程序。

K8S 的目标是让部署容器化应用简单高效。
K8S 解决了裸跑Docker 的若干痛点:

  • 单机使用,无法有效集群
  • 随着容器数量的上升,管理成本攀升
  • 没有有效的容灾、自愈机制
  • 没有预设编排模板,无法实现快速、大规模容器调度
  • 没有统一的配置管理中心工具
  • 没有容器生命周期的管理工具
  • 没有图形化运维管理工具

K8S是Google开源的容器集群管理系统,在Docker等容器技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。 其主要功能如下:

  • 使用 Docker 等容器技术对应用程序包装(package)、实例化(instantiate)、运行(run)。
  • 以集群的方式运行、管理跨机器的容器。
  • 解决 Docker 跨机器容器之间的通讯问题。
  • K8S 的自我修复机制使得容器集群总是运行在用户期望的状态。

k8s的主要功能

●跨主机编排容器。
●更充分地利用硬件资源来最大化地满足企业应用的需求。
●控制与自动化应用的部署与升级。
●为有状态的应用程序挂载和添加存储器。
●线上扩展或缩减容器化应用程序与它们的资源。
●声明式的容器管理,保证所部署的应用按照我们部署的方式运作。
●通过自动布局、自动重启、自动复制、自动伸缩实现应用的状态检查与自我修复。
●为多个容器提供服务发现和负载均衡,使得用户无需考虑容器IP问题。(通过service)

2.5K8S 的特性

2.5.1弹性伸缩

使用命令、UI或者基于CPU使用情况自动快速扩容和缩容应用程序实例,保证应用业务高峰并发时的高可用性;业务低峰时回收资源,以最小成本运行服务。

假设2 台机器, 提供 web 服务网站高并发, 根据系统资源占比来自动扩展机器 、高并发一旦过去了,他就会自动收机器

2.5.2自我修复

在节点故障时重新启动失败的容器,替换和重新部署,保证预期的副本数量;杀死健康检査失败的容器,并且在未准备好之前不会处理客户端请求,确保线上服务不中断。

业务机器一旦坏掉 ,如果用户期望值是1台,他会自动重拉起一个1台机器

2.5.3服务发现和负载均衡

K8S为多个容器提供一个统一访问入口(内部IP地址和一个DNS名称),并且负载均衡关联的所有容器,使得用户无需考虑容器IP问题。

如果有一台服务器坏了,它会通过标签+ip地址绑定新的服务器

2.5.4自动发布(默认滚动发布模式)和回滚

K8S采用滚动更新策略更新应用,一次更新一个或者部分Pod,而不是同时删除所有Pod,如果更新过程中出现问题,将回滚更改,确保升级不影响业务。

K8S可以在线更新,假设我有3台nginx版本需要升级,他会先自动更新1台,对外发布两台,

如果更新好了,没问题了,再更新下一台

2.5.5集中化配置管理和密钥管理

管理机密数据和应用程序配置,而不需要把敏感数据暴露在镜像里,提高敏感数据安全性。并可以将一些常用的配置存储在K8S中,方便应用程序使用。

2.5.6存储编排,支持外挂存储并对外挂存储资源进行编排

挂载外部存储系统,无论是来自本地存储,公有云(如AWS),还是网络存储(如NFS、Glusterfs、Ceph)都作为集群资源的一部分使用,极大提高存储使用灵活性。

2.5.7任务批处理运行

提供一次性任务,定时任务;满足批量数据处理和分析的场景。

三、Kubernetes 集群架构与组件⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

K8S 是属于主从设备模型(Master-Slave 架构),即有 Master 节点负责集群的调度、管理和运维,Slave 节点是集群中的运算工作负载节点。

在 K8S 中,主节点一般被称为 Master 节点,而从节点则被称为 Worker Node 节点,每个 Node 都会被 Master 分配一些工作负载。

Master 组件可以在群集中的任何计算机上运行,但建议 Master 节点占据一个独立的服务器。因为 Master 是整个集群的大脑,如果 Master 所在节点宕机或不可用,那么所有的控制命令都将失效。除了 Master,在 K8S 集群中的其他机器被称为 Worker Node 节点,当某个 Node 宕机时,其上的工作负载会被 Master 自动转移到其他节点上去。

 3.1核心组件 

3.1.1Master 组件 

3.1.1.1Kube-apiserver

用于暴露 Kubernetes API,任何资源请求或调用操作都是通过 kube-apiserver 提供的接口进行。以 HTTP Restful API 提供接口服务,所有对象资源的增删改查和监听操作都交给 API Server 处理后再提交给 Etcd 存储。

可以理解成 API Server 是 K8S 的请求入口服务。API Server 负责接收 K8S 所有请求(来自 UI 界面或者 CLI 命令行工具), 然后根据用户的具体请求,去通知其他组件干活。可以说 API Server 是 K8S 集群架构的大脑。

①kube-apiserver:作为所有服务请求的统一访问入口


3.1.1.2Kube-controller-manager

运行管理控制器,是 K8S 集群中处理常规任务的后台线程,是 K8S 集群里所有资源对象的自动化控制中心。

在 K8S 集群中,一个资源对应一个控制器,而 Controller manager 就是负责管理这些控制器的。

由一系列控制器组成,通过 API Server 监控整个集群的状态,并确保集群处于预期的工作状态,比如当某个 Node 意外宕机时,Controller Manager 会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。

这些控制器主要包括:

  • Node Controller(节点控制器):负责在节点出现故障时发现和响应。
  • Replication Controller(副本控制器):负责保证集群中一个 RC(资源对象 Replication Controller)所关联的 Pod 副本数始终保持预设值。可以理解成确保集群中有且仅有 N 个 Pod 实例,N 是 RC 中定义的 Pod 副本数量。
  • Endpoints Controller(端点控制器):填充端点对象(即连接 Services 和 Pods),负责监听 Service 和对应的 Pod 副本的变化。 可以理解端点是一个服务暴露出来的访问点,如果需要访问一个服务,则必须知道它的 endpoint。(通过标记去绑定IP地址,只要访问标记,就能访问IP地址(目的:当node挂了,重起一个新node,那么它的IP会变哦)
  • Service Account & Token Controllers(服务帐户和令牌控制器):为新的命名空间创建默认帐户和 API 访问令牌。
  • ResourceQuota Controller(资源配额控制器):确保指定的资源对象在任何时候都不会超量占用系统物理资源。
  • Namespace Controller(命名空间控制器):管理 namespace 的生命周期。
  • Service Controller(服务控制器):属于 K8S 集群与外部的云平台之间的一个接口控制器。

Linux Namespace提供了一种内核级别隔离系统资源的方法,通过将系统的全局资源放在不同的Namespace中,来实现资源隔离的目的。不同Namespace的程序,可以享有一份独立的系统资源。

②kube-controller-manager:控制器管理器,可以通过apiserver监控整个集群的状态,确保集群处于预期状态


3.1.1.3Kube-scheduler

是负责资源调度的进程,根据调度算法为新创建的 Pod 选择一个合适的 Node 节点。  62种

可以理解成 K8S 所有 Node 节点的调度器。当用户要部署服务时,Scheduler 会根据调度算法选择最合适的 Node 节点来部署 Pod。

  • 预选策略(predicate)
  • 优选策略(priorities)

API Server 接收到请求创建一批 Pod ,API Server 会让 Controller-manager 按照所预设的模板去创建 Pod,Controller-manager 会通过 API Server 去找 Scheduler 为新创建的 Pod 选择最适合的 Node 节点。比如运行这个 Pod 需要 2C4G 的资源,Scheduler 会通过预选策略过滤掉不满足策略的 Node 节点。Node 节点中还剩多少资源是通过汇报给 API Server 存储在 etcd 里,API Server 会调用一个方法找到 etcd 里所有 Node 节点的剩余资源,再对比 Pod 所需要的资源,如果某个 Node 节点的资源不足或者不满足 预选策略的条件则无法通过预选。预选阶段筛选出的节点,在优选阶段会根据优先策略为通过预选的 Node 节点进行打分排名, 选择得分最高的 Node。例如,资源越富裕、负载越小的 Node 可能具有越高的排名。

③kube-scheduler:资源调度器,负责pod资源调度,可以根据调度算法(预选和优选策略),筛选出最适合的node节点


3.2 配置存储中心 

  • etcd

K8S 的存储服务。etcd 是分布式键值存储系统,存储了 K8S 的关键配置和用户配置,K8S 中仅 API Server 才具备读写权限,其他组件必须通过 API Server 的接口才能读写数据。

etcd:K8S集群的数据库,是一种键值对存储结构的分布式数据库,负责存储K8S集群所有的重要信息,仅apiserver拥有访问和读写权限

3.3 Node 组件 

3.3.1Kubelet

Node 节点的监视器以及与 Master 节点的通讯器。Kubelet 是 Master 节点安插在 Node 节点上的“眼线”,它会定时向 API Server 汇报自己 Node 节点上运行的服务的状态,并接受来自 Master 节点的指示采取调整措施。

从 Master 节点获取自己节点上 Pod 的期望状态(比如运行什么容器、运行的副本数量、网络或者存储如何配置等), 直接跟容器引擎交互实现容器的生命周期管理,如果自己节点上 Pod 的状态与期望状态不一致,则调用对应的容器平台接口(即 docker 的接口)达到这个状态。

管理镜像和容器的清理工作,保证节点上镜像不会占满磁盘空间,退出的容器不会占用太多资源

①kubelet:首先kubelet可以接收apiserver的请求,创建和管理pod和容器,与容器引擎交互实现对pod和容器的生命周期进行管理;同时kubelet还可以通过cadvisor收集node节点的资源信息和pod的运行状态,发送给apiserver

总结:
在 Kubernetes 集群中,在每个 Node(又称 Worker Node)上都会启动一个 kubelet 服务进程。该进程用于处理 Master 下发到本节点的任务,管理 Pod 及 Pod 中的容器。每个 kubelet 进程都会在 API Server 上注册节点自身的信息,定期向 Master 汇报节点资源的使用情况,并通过 cAdvisor 监控容器和节点资源。

3.3.2Kube-Proxy

在每个 Node 节点上实现 Pod 网络代理,是 Kubernetes Service 资源的载体,负责维护网络规则和四层负载均衡工作。 负责写入规则至iptables、ipvs实现服务映射访问的。

Kube-Proxy 本身不是直接给 Pod 提供网络,Pod 的网络是由 Kubelet 提供的,Kube-Proxy 实际上维护的是虚拟的 Pod 集群网络。

Kube-apiserver 通过监控 Kube-Proxy 进行对 Kubernetes Service 的更新和端点的维护。

在 K8S 集群中微服务的负载均衡是由 Kube-proxy 实现的。Kube-proxy 是 K8S 集群内部的负载均衡器。它是一个分布式代理服务器,在 K8S 的每个节点上都会运行一个 Kube-proxy 组件。

②kube-proxy:作为service资源的载体,实现对Pod的网络代理,负责维护Pod集群网络规则和四层代理工作

3.3.3docker 或 rocket

容器引擎,运行容器,负责本机的容器创建和管理工作。

③容器引擎(docker, container, rocket):运行管理容器

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

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

相关文章

从零开始打造个性化生鲜微信商城小程序

随着移动互联网的普及,小程序商城已经成为越来越多商家的选择。本文将通过实战案例分享,教您如何在五分钟内快速搭建个性化生鲜小程序商城。 步骤一:登录乔拓云网后台,进入商城管理页面 打开乔拓云官网,点击右上角的“…

unaipp推荐算法的汽车租赁系统zaxzu 微信小程序hbuiderx

随着现代汽车租赁管理的快速发展,可以说汽车租赁管理已经逐渐成为现代汽车租赁管理过程中最为重要的部分之一。但是一直以来我国传统的汽车租赁管理并没有建立一套完善的行之有效的汽车租赁管理系统,传统的汽车租赁管理已经无法适应高速发展,…

自动驾驶中常见坐标系极其转换

各个传感器坐标系 相机坐标系统 摄像头的作用是把三维世界中的形状、颜色信息,压缩到一张二维图像上。基于摄像头的感知算法则是从二维图像中提取并还原三维世界中的元素和信息,如车道线,车辆、行人等,并计算他们与自己的相对位置。 感知算法和相机相关的坐标系有图像坐…

GaussianBody:基于3D高斯散射的服装人体重建

GaussianBody: Clothed Human Reconstruction via 3d Gaussian Splatting GaussianBody:基于3D高斯散射的服装人体重建 Mengtian Li1,2,3, Shengxiang Yao1, Zhifeng Xie1,3,2, Keyu Chen4,2, Yu-Gang Jiang2 李梦田 1,2,3 、姚胜祥 1 、谢志峰 1,3, 2 、陈科宇 4, …

一文了解CloudXR优势及应用原理

CloudXR是一种新颖而先进的技术,旨在将虚拟现实和增强现实体验从本地设备转移到云端,主要功能也包括了远程渲染、流媒体传输、低延迟、高带宽和高质量的音视频传输。CloudXR(云化XR)可以将高保真度的虚拟现实或增强现实场景实时传…

2024年软件测试最全jmeter做接口压力测试_jmeter接口性能测试_jmeter压测接口(3),【大牛疯狂教学

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化! 由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、…

2024年大学生三下乡社会实践活动投稿注意事项

随着2024年夏季的热浪一同涌来的,是我校一年一度的“大学生三下乡”社会实践活动。作为一名积极参与其中的大学生,我满怀激情地投身于这项旨在促进农村发展的公益行动中。然而,当活动圆满落幕,轮到我承担起向各大媒体投稿、传播实践成果的重任时,却遭遇了一系列意想不到的挑战,…

今天又发现一个有意思的问题:SQL Server安装过程中下载报错,证明GPT是可以解决问题的

我们在安装数据库的时候,都会有报错问题,无论是Oracle、SQL Server、还是MySQL,都会遇到各种各样的报错,这归根到底还是因为电脑环境的不同,和用户安装的时候,操作习惯的不一样导致的问题。今天的问题是&am…

Python_AI库 Pandas DataFrame的索引方式

Pandas DataFrame的索引方式主要有以下几种: 位置索引(Position-based indexing) 使用行和列的整数位置进行索引。例如,df.iloc[0, 1] 会选择第一行第二列的值(注意Python是0索引的)。 标签索引&#xff…

【Python深度学习(第二版)(2)】深度学习之前:机器学习简史

文章目录 一. 深度学习的起源1. 概率建模--机器学习分类器2. 早期神经网络--反向传播算法的转折3. 核方法 -- 忽略神经网络4. 决策树、随机森林和梯度提升机5. 神经网络替代svm与决策树 二. 深度学习与机器学习有何不同 可以这样说,当前工业界所使用的大部分机器学习…

LVS DR模式部署

一、LVS 简介 LVS的三种工作模式 NAT 地址转换 调度器会作为所有节点服务器的默认网关,也是客户端的访问入口和节点服务器返回响应消息的出口,所以调度器会承载双向流量的负载压力,可能会为整个群集的性能瓶颈。由于节点服务器都会处于内网…

数据存储-SQLite

一般使用到数据库存储,涉及到的数据量都较大,采用文件存储也能完成,但是文件操作复杂,效率低,大量结构化数据通常采用关系型数据库存储较为合适。Android中已经嵌入了轻量级的关系型数据库SQLite,直接按照数…

ICode国际青少年编程竞赛- Python-2级训练场-坐标与列表练习

ICode国际青少年编程竞赛- Python-2级训练场-坐标与列表练习 1、 for i in range(6):Spaceship.step(Item[i].x - Spaceship.x)Dev.step(Item[i].y - Dev.y)Dev.step(Spaceship.y - Dev.y)2、 for i in range(5):Spaceship.step(Item[i].x - Spaceship.x)Flyer[i].step(Item[…

【Linux网络】HTTPS【上】{运营商劫持/加密方式/数据摘要/https的诞生}

文章目录 1.引入1.1http与https1.2SSL/TLS1.3VPN1.4认识1.5密码学1.6为什么要加密?运营商 1.7常见的加密方式对称加密非对称加密 2.加密与解密3.数据摘要 && 数据指纹MD5 数字 签名理解三者数据摘要(Digital Digest):数字…

微型显示器可以实时监测大脑活动

美国团队开发基于LED的设备,以可视化大脑活动,在脑外科手术中指导神经外科医生 来自加州大学圣地亚哥分校和马萨诸塞州总医院的工程师和医生开发了一种薄膜显示设备,该设备结合了电极网格和特殊的GaN LED,可以在手术过程中实时跟…

vivado 低级别 SVF JTAG 命令、多链 SVF 操作

多链 SVF 操作 以下示例显示了如何在 SVF 链上处理操作。 每个链中连接有 2 个器件 : xcku11 和 xcku9 。配置存储器连接到链中的第 2 个器件 (xcku9) 。为访问此配置存储器 , SVF 会使用 HIR 、 HDR 、 TIR 和 TDR 命令来生成命令。为刷写此…

[MQTT]Mosquitto的內網連接(intranet)和使用者/密碼權限設置

[MQTT | Raspberry Pi]Publish and Subscribe with RSSI Data of Esp32 on Intranet 延續[MQTT]Mosquitto的簡介、安裝與連接測試文章,接著將繼續測試在內網的兩台機器是否也可以完成發佈和訂閱作業。 同一網段的兩台電腦測試: 假設兩台電腦的配置如下: A電腦為發…

阿里面试:写一个倒计时功能刷掉了80% 的人

>>>>OD部门捞人,前后端均可 纯标题党!!!,但确实是阿里的大佬自己群里说的在面试时候必问的一个题目,其实这个问题不仅是在面试中,也在我们的业务里也会经常用到,所以才会…

Android 的 Timer 和 TimerTask

Timer 简介(来自Gemini) Timer 是 Java 中用于创建定时任务的类。它位于 java.util 包中。可以使用 Timer 来安排一次性或定期执行的任务。 每个 Timer 对象都对应一个后台线程。此线程负责从任务队列中检索任务并按计划执行它们。 使用 Timer 要使用 Timer,首先…

“找不到mfcm80u.dll”错误怎么办?一文了解原因和解决办法!

在使用Windows操作系统时,许多用户可能会遇到各种DLL文件缺失或损坏的问题。其中,“找不到mfc80u.dll”错误就是比较常见的一种。 下面小编就给大家分享出现“找不到mfc80u.dll”错误的原因和解决办法,帮助您快速解决此问题。 一、mfc80u.dl…