Kubernetes分享

news2024/11/27 22:19:37

幂等性(Idempotency)
介绍
简单来说,幂等性幂等性(Idempotency)是计算机科学中的一个重要概念,特别是在分布式系统和网络应用中。指的是某个操作可以重复执行多次,但其结果是相同的,不会因为多次执行而改变系统的状态。

https://zh.wikipedia.org/zh-cn/%E5%86%AA%E7%AD%89
幂等性的定义
在计算机科学中,幂等性通常用来描述某个操作或请求可以重复执行而不会改变系统的状态。具体来说:·幂等操作:一个操作无论执行多少次,结果都是相同的。例如:
。 HTTP PUT 请求:无论执行多少次,资源的状态保持一致。
文件删除操作:无论执行多少次,最终结果都是文件被删除。

幂等性的定义​
在计算机科学中,幂等性通常用来描述某个操作或请求可以重复执行而不会改变系统的状态。具体来说:​
•幂等操作:一个操作无论执行多少次,结果都是相同的。例如:​
◦HTTP PUT 请求:无论执行多少次,资源的状态保持一致。​
◦文件删除操作:无论执行多少次,最终结果都是文件被删除。

幂等性的示例
HTTP 请求的幂等性在 HTTP 协议中,不同的请求方法具有不同的幂等性特性:

GET:读取资源数据,,不改变服务器状态,是幂等的。

·PUT:更新资源,无论执行多少次,资源状态一致,是幂等的。

DELETE:删除资源,无论执行多少次,结果都是资源被删除,是幂等的。

.POST:创建资源,每次请求会创建一个新资源,不是幂等的。.
数据库操作的幂等性
在数据库操作中,某些操作也是幂等的:
。INSERT IGNORE:插入数据,如果数据已存在则忽略,不会重复插入。
.UPDATE:更新数据,设置相同的值不会改变数据状态。

幂等性的意义
容错性
幂等性允许系统在面对网络抖动、请求重试、部分失败等情况下仍能保持一致性和稳定性。例如,如果一个网络请求由于超时而重试,幂等操作确保系统状态不会因此而出现不一致。
简化操作
幂等性使得开发和维护变得更简单,用户和系统可以放心地重试操作而不必担心导致不一致或重复状态。这在分布式系统中尤为重要。
一致性
幂等性是保证系统一致性的重要手段,特别是在需要确保最终一致性的场景中,例如分布式事务和微服务架构。
可预测性
幂等操作使得系统行为更加可预测,有助于调试和维护。用户可以确定多次执行相同操作的结果是相同的,从而简化了系统的设计和测试。

介绍
·什么是 Kubernetes
。 Kubernetes 是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。培训目标
了解 k8s 的基本概念和架构
。掌握常用的 k8s 基本操作
。了解车联网集群架构及相应的网络模型
学会在 ACK中使用开发者权限对应用进行操作

Kubernetes 基本概念
Docker vs 单进程
优点
1.1 隔离性
Docker 容器为每个应用提供了隔离的运行环境,避免了应用之间的相互影响。
容器拥有独立的文件系统、网络和进程空间。。
2。可移植性
Docker 镜像可以在任何支持 Docker 的环境中运行,实现了“写一次,运行在任何地方”的目标。。
通过 Docker Hub 等镜像仓库,镜像的分发和部署变得非常方便。。
3.一致性和可重复性
使用 Dockerfile 定义构建流程,可以确保每次构建出的镜像环境一致。
开发、测试和生产环境可以使用相同的镜像,减少环境差异带来的问题。

4.高效的资源利用
。 Docker 容器相比虚拟机更加轻量级,启动速度快,占用资源少。
。支持在同一主机上运行多个容器,提高资源利用率。
5.快速部署和扩展
Docker 容器可以快速启动和停止,有助于实现敏捷开发和持续交付,
容器的编排工具(如 Kubernetes)可以自动化管理容器的扩展和负载均衡。
6.版本控制和回滚
Docker 镜像支持版本控制,可以轻松地回滚到之前的版本。

缺点
1.学习曲线
。 对于没有容器化经验的开发者和运维人员来说,Docker 的概念和工具可能需要一定的学习时间。
1.性能开销
尽管 Docker 相比虚拟机性能开销更小,但仍然存在一定的开销,尤其在 I/0 密集型应用中可能表现出性能。瓶颈。
2.持久化存储
容器的存储默认是临时的,持久化存储需要额外配置和管理(如使用 Volume 或外部存储)。
3.监控和调试
容器化环境的监控和调试相对复杂,需要使用专门的工具(如 Prometheus、Grafana、ELK 等)。

Kubernetes vs Docker
优点
1.自动化管理
调度:Kubernetes 自动调度容器到最合适的节点,优化资源使用。。
自愈:Kubernetes 可以自动重启失败的容器,替换被终止的容器,并在节点故障时重新调度容器自动扩展:Kubernetes 支持根据资源使用情况或自定义的指标自动扩展应用的实例数量。
2.服务发现和负载均衡
Kubernetes 内置服务发现和负载均衡功能,自动为每个 Pod 分配 IP 地址,并提供 DNS 名称解析。
3.滚动更新和回滚
。Kubernetes 支持无停机时间的滚动更新,可以逐步更新应用,并在更新失败时自动回滚到之前的版本
4.存储编排
Kubernetes 提供了对多种存储系统的支持,允许容器化应用挂载本地存储、网络存储或云存储。

5.配置管理和密钥管理
。 Kubernetes 使用 ConfigMap 和 Secret 管理配置和敏感信息,简化了配置管理和密钥管理。
6.命名空间
。Kubernetes 支持命名空间,允许你在同一个集群中隔离不同的环境或项目,提高资源利用率和管理效率
7.监控和日志
Kubernetes 提供了内置的监控和日志功能,支持与 Prometheus、Grafana 等工具集成,方便监控和管理应用。
8.社区和生态系统
 Kubernetes 有一个活跃的社区和丰富的生态系统,提供了大量的第三方工具和插件,增强了其功能和可扩展性。

缺点
1.学习曲线
Kubernetes 的概念和组件较多,学习和掌握需要一定的时间和精力,尤其对于初学者来说,可能会感到复。
杂和困难。
2.配置复杂
Kubernetes 的配置文件(YAML 文件)较为复杂,管理和维护大量配置文件需要一定的经验和技巧
3.资源消耗
需要更多的节点和资源来运行控制平Kubernetes 本身消耗一定的资源,尤其是在高可用性(HA)部署时,面组件。
4.调试复杂
由于 Kubernetes 的分布式架构,调试和排査问题可能比单一容器环境更复杂,需要熟悉 Kubernetes 的日志和监控工具。

5.网络配置
Kubernetes 的网络配置较为复杂,尤其在涉及多集群或跨数据中心部署时,需要仔细规划和配置网络策略。
6.版本兼容性
Kubernetes 的版本更新较快,不同版本之间可能存在兼容性问题,需要仔细测试和验证。。
7.依赖第三方工具
虽然 Kubernetes 提供了许多内置功能,但在实际生产环境中,常常需要借助第三方工具(如 Helm、Istio。等)来增强其功能,这增加了管理和维护的复杂性。

Kubernetes 的起源和发展
Google 的 Borg 系统演变而来
https://kubernetes.io/zh-cn/blog/2024/06/06/10-years-of-kubernetes/

Kubernetes 架构
Kubernetes 组件
1.控制平面(Control Plane)
负责集群的管理和控制,通过 API服务器与集群中的各个节点进行通信。
2.工作节点(Worker Nodes)
运行实际的应用容器,并由控制平面进行管理和调度。
控制平面组件
1.API 服务器(kube-apiserver)
·作用:提供 Kubernetes API 的 REST 接口,是所有资源的入口,处理集群的所有请求。
功能:认证、授权、API调度、集群状态管理.

2.调度器(kube-scheduler)
作用:负责将未分配的 Pod 分配到合适的工作节点上:
·功能:根据资源需求、策略、约束条件等因素进行 Pod 调度。
3.控制器管理器(kube-controller-manager)
作用:运行各种控制器以维持集群的所需状态。
主要控制器:
节点控制器(Node Controler):监控节点状态。
复制控制器(Replication Controler):确保指定数量的 Pod 副本运行。
端点控制器(Endpoint Controller):连接 Service 和 Pod.
命名空间控制器(Namespace Controler):管理命名空间生命周期。
4.etcd
作用:分布式键值存储,用于存储集群的所有数据功能:高可用的存储和分布,用于保存集群状态和配置信息。

5.云控制器管理器(cloud-controller-manager)
。作用:与云提供商交互并管理云资源(可选组件,主要用于在云环境中运行的 Kubernetes)·功能:节点控制器、负载均衡控制器、路由控制器等。
6.控制平台流转

 通过kubectl命令执行创建 kubectl apply -f rs.yaml 创建pod时,经历的流程如上图,大概流程为
1.apiserver接收kubectl的创建资源的请求
2.apiserver将创建请求写入ECTD
3.apiserver接收到etcd的回调事件
4. apiserver将回调事件发送给ControllerManager
5.controllerManager中的ReplicationController处理本次请求,创建RS,然后它会调控RS中的Pod的副本数量处于期望值,比期望值小就新创建Pod,于是它告诉ApiServer要创建Pod
6.apiserver将创建pod的请求写入etcd集群
7.apiserver接收etcd的创建pod的回调事件
8.apiserver将创建pod的回调事件发送给scheduler,由它为pod挑选一个合适的宿主node9.scheduler告诉apiserver,这个pod可以调度到哪个node上
10.apiserver将scheduler告诉他的事件写入etcd
11.apiserver接收到etcd的回调,将更新pod的事件发送给对应node上的kubelet进程

12.kubelet通过CRI接口同容器运行时(Docker)交互,维护更新对应的容器。

工作节点组件
1. kubelet
作用:是每个工作节点上的主要“代理”,负责管理节点上的 Pod 和容器。
·功能:接收控制平面的指令,管理容器的生命周期,监控容器状态并报告给 API服务器。
2.容器运行时(Container Runtime)
·作用:实际运行和管理容器的底层软件。
常见运行时:Docker、containerd、CRI-0.
3. kube-proxy
作用:维护网络规则,确保 Pod 能够在节点间进行通信,功能:实现 Kubernetes Service 的负载均衡和网络代理。

4.网络插件
·作用:提供 Pod 之间的网络连接和策略管理。
常见插件:Flannel、Calico、Weave、Cilium。
附加组件
1.仪表盘(Kubernetes Dashboard)
·作用:基于 Web 的用户界面,用于管理和监控集群
功能:资源管理、日志查看、状态监控等
2.集群自动扩展器(Cluster Autoscaler)
作用:根据实际需求自动调整集群中的节点数量。
功能:自动扩展和缩减节点,以优化资源使用。

3.日志和监控系统
常见工具:Prometheus(监控)
。Grafana(可视化)、EFK(Elasticsearch、Fluentd、Kibana,日志管理)

Kubernetes 架构 | Kubernetes 

Kubernetes 核心概念​
1. Pod​
•定义:Kubernetes 中最小的可部署单元,由一个或多个容器组成,容器共享网络和存储。​
•作用:运行应用程序的基本单位。​
2. 节点(Node)​
•定义:集群中的一台工作机器,可以是虚拟机或物理机,每个节点上运行着 kubelet 和 kube-proxy。​
•作用:提供运行 Pod 的环境。​
3. 集群(Cluster)​
•定义:由一组节点组成,具有一个控制平面来管理这些节点。​
•作用:提供容器化应用的运行和管理环境。

4. 命名空间(Namespace)​
•定义:逻辑上的分区,用于将集群内的资源分组和隔离。​
•作用:支持多租户和环境隔离(如开发、测试、生产环境)。​
5. 控制器(Controller)​
•定义:维护集群的期望状态,确保实际状态与期望状态一致。​
•作用:常见控制器包括 ReplicaSet、Deployment、StatefulSet、DaemonSet 等。​
6. 标签(Label)和选择器(Selector)​
•标签(Label):键值对,用于标识 Kubernetes 对象。​
•选择器(Selector):用于选择一组对象,通常用于服务发现和操作。​
7. 注解(Annotation)​
•定义:键值对,与标签类似,但用于存储非标识性元数据。​
•作用:为 Kubernetes 对象提供额外的信息。

8. ReplicaSet​
•定义:确保指定数量的 Pod 副本在任何时候都在运行。​
•作用:提供高可用性和扩展性。​
9. Deployment​
•定义:声明应用程序的期望状态,并负责管理 ReplicaSet。​
•作用:提供声明式的应用更新和回滚。​
10. StatefulSet​
•定义:管理有状态应用,每个 Pod 都有一个唯一标识。​
•作用:保证有状态应用的部署和扩展顺序。​
11. DaemonSet​
•定义:确保所有(或一些)节点上运行一个 Pod 的副本。​
•作用:常用于节点守护进程,如日志收集、监控代理等。

12. Job 和 CronJob​
•Job:一次性任务,确保指定数量的 Pod 成功完成。​
•CronJob:定时任务,按照预定的时间表周期性地创建 Job。​
13. Service​
•定义:定义了一组 Pod 的逻辑集合,并且定义了访问这些 Pod 的策略。​
•作用:提供负载均衡和服务发现。​
14. Ingress​
•定义:管理集群外部访问到服务的 HTTP 和 HTTPS 路由。​
•作用:提供基于域名的路由、SSL 终止和负载均衡。​
15. ConfigMap 和 Secret​
•ConfigMap:存储非机密的配置信息。​
•Secret:存储敏感信息(如密码、密钥),以安全的方式使用。

16. PersistentVolume(PV)和 PersistentVolumeClaim(PVC)​
•PersistentVolume(PV):集群中由管理员提供的存储资源。​
•PersistentVolumeClaim(PVC):用户对存储资源的请求。​
•作用:提供持久化存储,确保数据在 Pod 重启或重新调度时不会丢失。​
17. Volume​
•定义:Pod 内部的存储抽象,支持多种存储后端。​
•作用:为容器提供持久化或临时存储。​
18. 网络策略(Network Policy)​
•定义:定义 Pod 之间如何进行网络通信的规则。​
•作用:增强安全性,通过白名单或黑名单控制流量。​
19. 资源配额(Resource Quota)​
•定义:限制命名空间中资源的使用量。​
•作用:防止某个命名

Kubernetes 基本操作​
•使用 kubectl 命令行工具​
◦安装和配置 kubectl​
◦常用命令​
▪kubectl get:查看资源​
▪kubectl describe:详细信息​
▪kubectl create 和 kubectl apply:创建和更新资源​
▪kubectl delete:删除资源​
•创建和管理 Pod​
◦手动创建 Pod​
◦使用 Deployment 管理 Pod​
•服务发现和负载均衡

创建 Service​
◦Service 类型(ClusterIP, NodePort, LoadBalancer)

在 Kubernetes 上部署应用​
•编写 Deployment YAML 文件​
•部署示例应用​
◦创建 Deployment 和 Service​
◦更新应用​
◦回滚 Deployment​
•配置管理​
◦使用 ConfigMap 和 Secret​
•示例​
◦https://kubernetes.io/zh-cn/docs/tutorials/hello-minikube/​
Kubernetes 进阶操作​
•资源配额和限制​
◦Resource Quota​
◦LimitRange​
•持久化存储​
◦PersistentVolume (PV)​
◦PersistentVolumeClaim (PVC)​
•网络策略​
◦NetworkPolicy​
•监控和日志​
◦使用 Prometheus 和 Grafana 监控​
◦日志收集和查看​
开发者常见问题与解答​

如何调试 Pod​
◦使用 kubectl logs​
◦使用 kubectl exec​
•如何处理 Pod 崩溃​
◦查看 Pod 状态和事件​
◦分析日志​
•如何扩展应用​
◦修改 Deployment 副本数​
◦使用 Horizontal Pod Autoscaler​
最佳实践​
•配置管理​
•安全性​
•持续集成和持续部署(CI/CD)​
Q&A​
•问答环节​

参考​
https://kubernetes.io/zh-cn/docs/home/​
https://zh.wikipedia.org/zh-cn/%E5%86%AA%E7%AD%89​
https://www.redhat.com/zh/topics/containers/kubernetes-architecture?pfe-ji5gta7j5=%E4%BA%A7%E5%93%81

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

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

相关文章

解决后端限制导致前端配置跨域仍请求失败报504的问题

文章目录 问题一、通过配置跨域方式二、直接真实接口请求三、解决方式四、后端这样做的原因 总结 问题 前端项目设置跨域proxy处理,接口请求不会报跨域,但是接口请求报了504,这种情况如何处理呢,后端又为何要这么做,下…

2007-2022年中国各企业数字化转型与供应链效率

企业数字化转型与供应链效率是现代企业管理和发展的两个关键方面。以下是对中国各企业数字化转型与供应链效率数据的介绍: 数据简介 企业数字化转型:指企业通过采用数字技术与创新方法,改造业务流程、组织结构和产品服务,以提升…

U盘非安全拔出后的格式化危机与数据拯救策略

在数字化时代,U盘作为便捷的数据携带工具,其重要性不言而喻。然而,许多用户在日常使用中往往忽视了安全退出的重要性,直接拔出U盘后再插入时可能会遭遇“需要格式化”的提示,这一状况不仅令人措手不及,更可…

STM32+ESP8266(ESP32)+MQTT+阿里云物联网平台

1、阿里云物联网平台 - 阿里云物联网平台配置 产品-设备-编辑物模型-设备端开发-查看上报数据 在产品上添加物模型,然后设备是继承自产品的,因此也具有物模型 添加产品、添加设备、产品上添加物模型 - 使用IOT Studio 绘制界面显示温度、湿度、灯开…

pdf怎么转换成图片格式文件,pdf文档怎么转换成图片格式

在数字化时代,pdf文件转换成图片格式是一种常见的操作,无论是在工作还是日常生活中,我们总会遇到需要将pdf文件转换为图片的需求。这可能是因为图片格式更易于分享、展示或编辑。那么,如何高效地将pdf转换成图片呢?本文…

CSRF靶场通关合集

目录 前言 CSRF漏洞总结 1.PiKachu靶场 1.1CSRF(get) 1.2 CSRF(post)请求 1.3 CSRF Token 2.DVWA靶场 难度低 难度中 难度高 前言 最近系统的将从web渗透到内网渗透的知识点做一个回顾,同时结合一些实战的案例来演示,下面是对刚开始学习时对靶场的一个总结. CSRF漏洞…

快速搭建发卡独立站(完全免费)

本文介绍如何使用开源项目,零成本,无需服务器的方式搭建一套自己的数字商品/发卡独立站,不需要任何开发能力,即便是小白用户也能搭建。 感兴趣可直接查看开源项目地址👉 https://github.com/iDataRiver/theme-basic …

sqlite 数据库 介绍

文章目录 前言一、什么是 SQLite ?二、语法三、SQLite 场景四、磁盘文件 前言 下载 目前已经出到了, Version 3.46.0 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是…

Node 中基于 Koa 框架的 Web 服务搭建实战

前言 在《Node之Web服务 - 掘金 (juejin.cn)》一文中,我们使用 HTTP 模块构建了后端接口,从而实现了后端服务的开发。可以对此进行进一步优化 http模块代码回顾 const http require("http");const server http.createServer((req, res) > {if (reqUrl.pathna…

Simulated Annealing

模拟退火最大值算法: 初始化起始解 x 0 x_0 x0​ 、温度 t 0 t_0 t0​ 以及迭代次数 steps,计算初始值 y 0 y_0 y0​扰动产生新解 x 1 x_1 x1​, 计算对应函数值 y 1 y_1 y1​依据 Δ y y 1 − y 0 \Delta y y_1 - y_0 Δyy1​−y0​ 决策是否接…

element-ui输入框如何实现回显的多选样式?

废话不多说直接上效果&#x1f9d0; 效果图 <template><div><el-form:model"params"ref"queryForm"size"small":inline"true"label-width"68px"><el-form-item label"标签" prop"tag&q…

CurrentHashMap巧妙利用位运算获取数组指定下标元素

先来了解一下数组对象在堆中的存储形式【数组长度&#xff0c;数组元素类型信息等】 【存放元素对象的空间】 Ma 基础信息实例数据内存填充Mark Word,ClassPointer,数组长度第一个元素第二个元素固定的填充内容 所以我们想要获取某个下标的元素首先要获取这个元素的起始位置…

UEC++ 虚幻5第三人称射击游戏(二)

UEC++ 虚幻5第三人称射击游戏(二) 派生榴弹类武器 新建一个继承自Weapon的子类作为派生榴弹类武器 将Weapon类中的Fire函数添加virtual关键字变为虚函数让榴弹类继承重写 在ProjectileWeapon中重写Fire函数,新建生成投射物的模版变量 Fire函数重写逻辑 代码//生成的投射物U…

使用Spring Boot和自定义缓存注解优化应用性能

在现代应用开发中&#xff0c;缓存是提高系统性能和响应速度的关键技术之一。Spring Boot提供了强大的缓存支持&#xff0c;但有时我们需要更灵活的缓存控制。本文将介绍如何使用Spring Boot和自定义缓存注解来优化应用性能。 1. 为什么需要自定义缓存注解&#xff1f; Sprin…

CH12_函数和事件

第12章&#xff1a;Javascript的函数和事件 本章目标 函数的概念掌握常用的系统函数掌握类型转换掌握Javascript的常用事件 课程回顾 Javascript中的循环有那些&#xff1f;Javascript中的各个循环特点是什么&#xff1f;Javascript中的各个循环语法分别是什么&#xff1f;…

Android仿今日头条新闻(一)

新建一个侧边栏的文件&#xff0c;创建成功后直接运行。可以看到带滑动的侧边栏功能如图所示&#xff1a; 主体UI&#xff1a; 新闻UI的实现: 侧边栏&#xff1a; 更换一下颜色&#xff1a; 学习参考-浩宇开发

科研绘图系列:R语言两组数据散点分布图(scatter plot)

介绍 展示两组数据的散点分布图是一种图形化表示方法,用于显示两个变量之间的关系。在散点图中,每个点代表一个数据点,其x坐标对应于第一组数据的值,y坐标对应于第二组数据的值。以下是散点图可以展示的一些结果: 线性关系:如果两组数据之间存在线性关系,散点图将显示出…

【JVM系列】Full GC(完全垃圾回收)的原因及分析

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

IDA*——AcWing 180. 排书

IDA* 定义 IDA*&#xff08;Iterative Deepening A*&#xff09;是一种结合了深度优先搜索&#xff08;DFS&#xff09;的递归深度限制特性和A搜索的启发式估价函数的搜索算法。它主要用于解决启发式搜索问题&#xff0c;尤其是当搜索空间很大或者搜索成本不确定时。 IDA* 是…

分享大厂对于缓存操作的封装

hello&#xff0c;伙伴们好久不见&#xff0c;我是shigen。发现有两周没有更新我的文章了。也是因为最近比较忙&#xff0c;基本是993了。 缓存大家再熟悉不过了&#xff0c;几乎是现在任何系统的标配&#xff0c;并引申出来很多的问题&#xff1a;缓存穿透、缓存击穿、缓存雪崩…