聚集网(jujiwang.com) - 收录免费分类目录信息软文发布网址提交
免费加入

深入探究 Kubernetes 集群的强大功能和最佳实践 (深入探究科学问题)

文章编号:11339时间:2024-09-30人气:


深入探究

Kubernetes 是一个开源容器编排平台,用于管理和部署容器化应用程序。

Kubernetes 的强大功能包括:

  • 容器编排:Kubernetes 允许您以高效的方式管理和部署容器化应用程序。
  • 可扩展性:Kubernetes 可以扩展到管理成千上万个容器,使其成为大规模应用程序的理想选择。
  • 自动化:Kubernetes 可以自动化容器的部署、管理和扩展,从而减少手动工作。
  • 可移植性:Kubernetes 可以部署在各种基础设施上,包括本地、云和混合云。
  • 社区支持:Kubernetes 有一个巨大的社区,提供支持和资源。

Kubernetes 的ConfigMap功能和用法

在Kubernetes中,ConfigMap用于存储非机密配置信息,如环境变量、配置文件内容,实现配置与容器镜像分离,提升管理和灵活性。 ConfigMap创建可通过多种方式实现,包括使用kubectl命令行工具、YAML配置文件或现有文件/目录内容。 通过kubectl创建简单ConfigMap,使用kubectl get命令查看,并使用kubectl describe查看详细信息。 使用YAML文件创建ConfigMap,将内容存储在文件中,然后应用配置。 ConfigMap可注入到Pod中,作为环境变量或卷挂载。 查看日志,验证配置是否正确注入。 更新ConfigMap,无需重建Pod,通过kubectl编辑或修改YAML文件后使用apply命令。 最佳实践:利用ConfigMap管理配置信息,支持多种注入方式,实现应用配置动态调整和环境无关性,提高应用可移植性和管理效率。

如何发现Kubernetes中服务和工作负载的异常

大家好,我是来自阿里云的李煌东,今天由我为大家分享Kubernetes监控公开课的第二节内容:如何发现Kubernetes中服务和工作负载的异常。

本次分享由三个部分组成:

一、Kubernetes异常定位存在痛点;

二、针对这些痛点,Kubernetes监控如何更快、更准、更全的发现异常;

三、网络性能监控、中间件监控等典型案例解析。

Kubernetes异常定位存在痛点

当下的互联网架构中,越来越多的公司采用微服务+Kubernetes这样的架构,这样的架构有如下特点:

首先应用层基于微服务,微服务由解耦开的几个服务相互调用构成,服务一般职责分明、边界明确,造成的结果是一个简单的产品也有几十、甚至上百个微服务,相互之间的依赖、调用是非常复杂的,这给定位问题带来比较大的成本。 同时,每个服务的owner可能来自不同团队,不同的开发,可能使用不同的语言,对我们监控的影响是对每一种语言都需要进行监控工具的接入,投资回报率低。 还有一个特点是多协议,几乎每种中间件(Redis、MySQL、Kafka)都有他们独特的协议,怎么要做到快速对这些协议进行观测,是不小的挑战。

虽然Kubernetes和容器对上层应用屏蔽了底层的复杂度,但是带来的两个结果是:基础设施层越来越高;另一个是上层应用和基础设施之间信息变得越来越复杂了。 举个例子,用户反馈网站访问很慢,管理员查看访问日志、服务状态、资源水位发现都没问题,这时候不知道问题出现在哪里,虽然怀疑基础设施有问题,但无法定界的情况下只能一个一个排查效率低,问题的根源就是上层应用和基础设施之间缺少上下问题关联,无法做到端到端串联。

最后一个痛点是数据散、工具多、信息没打通。 举个例子,假设我们收到一个告警,用grafana去查看指标,指标只能描述的比较粗略,我们得去看下日志,这时候我们要去SLS日志服务看下有没有对应的日志,日志也没问题,这时候我们需要登录到机器上去看,然而登录到容器里面可能又因为重启导致日志没有了。 查了一波之后,可能我们会觉得可能问题不是出现在这个应用,于是我们又去看链路追踪是不是下游有问题。 总而言之,工具用了一大堆,浏览器开了十几个窗口,效率低、体验差。

这三个痛点分别归纳为成本、效率、体验三个方面。 针对这些痛点,接下来我们一起看下Kubernetes监控的数据体系,看下怎么来更好的解决成本、效率、体验三大问题。

Kubernetes监控如何发现异常

下图金子塔自顶向下表示信息的密度或者详细程度,越往下面信息越详细。 我们从底部开始讲,Trace是我们通过eBPF技术以无入侵、多协议、多语言的方式采集应用层协议数据,如HTTP、MySQL、Redis,协议数据会进一步解析成容易理解的请求详情、响应详情、各个阶段的耗时信息。

再上一层是指标,指标主要由黄金指标、网络、Kubernetes体系中的指标。 其中黄金指标和网络指标是基于eBPF采集的,所以同样他们是没有入侵的,支持各种协议的,有了黄金指标,我们就能知道服务整体上是否有异常、是否有慢、是否影响用户;网络指标主要是对socket的支持,如丢包率、重传率、RTT等,主要用来监控网络是否正常的指标。 Kubernetes体系中的指标是指原来Kubernetes监控体系中的cAdvisor/MetricServer/NodeExporter/NPD这些指标。

再上一层是事件,事件直接明确地告诉我们发生了什么,可能我们遇到最多的是Pod重启、拉镜像失败等。 我们对Kubernetes事件进行了持久化存储,并保存一段时间,这样方便定位问题。 然后,我们的巡检和健康检查也是支持以事件的形式报出来。

最顶层是告警,告警是监控系统的最后一环,当我们发现某些特定异常可能对业务有损后,我们就需要对指标、事件进行告警配置。 告警目前支持PromQL,智能告警支持对历史数据进行智能算法检测,从而发现潜在的异常事件。 告警的配置支持动态阈值,通过调节灵敏度的方式来配置告警,从而避免写死阈值。 有了Trace、指标、事件、告警之后,我们用拓扑图将这些数据和Kubernetes实体都关联起来,每个节点对应Kubernetes实体中的服务和工作负载,服务之间调用用线表示。 有了拓扑图,我们就像拿到一张地图,能快速识别拓扑图中的异常,并对异常进行进一步的分析,对上下游、依赖、影响面进行分析,从而对系统有了更全面的掌控。

最佳实践&场景分析

接下来我们讲下发现Kubernetes中服务和工作负载的异常的最佳实践。

首先还是先有指标,指标能反应服务的监控状态,我们应尽可能地收集各种指标,并且越全越好,不限于黄金指标、USE指标、Kubernetes原生指标等;然后,指标是宏观数据,需要做根因分析我们得有Trace数据,多语言、多协议的情况下要考虑采集这些Trace的成本,同样尽可能地支持多一点协议、多一点语言;最后,用一张拓扑将指标、Trace、事件汇总起来、串联起来,形成一张拓扑图,用来做架构感知分析、上下游分析。

通过这三种方法的分析,服务和工作负载的异常通常暴露无遗了,但我们不应该就此停止前进的脚步,加入这个异常下次再来,那么我们这些工作得重来一遍,最好的办法是针对这类异常配置对应的告警,自动化地管理起来。

我们用几个具体的场景来详细介绍:

(一)网络性能监控

网络性能监控以重传为例,重传的意思是说发送方认为发生了丢包现象,就重发这些数据包。以图中的传输过程为例:

发送方发送编号为1的包,接收方接受了,返回ACK2

发送方发送编号为2的包,接收方返回ACK2

发送方发送编号为3、4、5的包,接收方都返回ACK2

直到发送方收到3次同样的ACK,就会触发重传机制,重传会导致延迟升高

代码和日志是观察不出来的,这种情形下最终很难找到根因。 为了能快速定位这个问题,我们需要一组网络性能指标来提供定位依据,包含以下指标,P50、P95、P99指标来表示延时,然后我们需要流量、重传、RTT、丢包这些指标来表征网络情况。

以某个服务RT高为例:首先我们看到拓扑的边是红的,红的判断逻辑是根据延时、错误来判断的,当发现这个红边的时候,点击上面的边,就可以看对应的黄金指标了。

点击底部最左边这个按钮,可以查看当前服务的网络数据列表,我们可以按平均响应时间、重传、RTT排下序,可以看到第一个服务调用延时比较高,快到一秒的返回时间,同时也看到重传比较高,相比于其他服务高很多。 这里其实是通过工具去注入了重传高这么一个故障,看起来更明显一些。 这样分析下来我们就知道可能是网络的问题,就可以进一步排查了。 有经验的开发一般会拿着网络指标、服务名、ip、域名这些信息去找网络的同事排查,而不是只是告诉对方说我服务很慢,这样对方知道的信息太少,就不会积极去排查,因为别人也不知道从哪里开始,当我们提供了相关数据,对方就有了参考,会顺藤摸瓜进一步推进。

(二)DNS解析异常

第二个场景是DNS解析异常。 DNS通常是协议通信的第一步,比如HTTP请求,第一步就是先拿到IP,也就是我们平常说的服务发现过程,第一步出现问题,整个调用就直接失败了,这就是所谓关键路径不能掉链子。 在Kubernetes集群中所有的DNS都走CoreDNS的解析,所以CoreDNS上容易出现瓶颈,一旦出现问题,影响面也是非常大的,可能整个集群都不可用了。 举个两个月前发生的鲜活的例子,著名的CDN公司Akamai就发生了一个DNS故障,导致众多网站像Airbnb网站无法访问,事故持续了长达一个小时。

在Kubernetes集群中DNS解析比较核心的几个场景有三个:

调用外部API网关

调用云服务,云服务一般是公网的

调用外部中间件

这里对CoreDNS常见的问题进行了归纳,大家可以参考下,排查下自己的集群上有没有类似问题:

配置问题(ndots问题),ndots是个数字,表示域名中点的个数要是小于ndots,那么搜索就优先走search列表中的域去查找,这样的话会产生多次查询,对性能的影响还是挺大的。

由于Kubernetes所有的域名解析都走CoreDNS,非常容易成为性能瓶颈,有人统计过大概qps在5000~8000的时候就要关注性能问题了。 尤其是依赖外部Redis、MySQL这种访问量比较大的。

Kubernetes

低版本的CoreDNS有稳定性问题,这个也是需要关注的点。

有些语言,想PHP对连接池支持的不是很好,导致每次都要去解析DNS,创建连接,这个现象也是比较常见的。

接下来,我们看下KubernetesCoreDNS中可能会发生问题的地方,首先应用和CoreDNS之间的网络可能有问题;第二是CoreDNS本身问题,比如CoreDNS返回SERVFAIL、REFUSE这些错误码,甚至因为Corefile配置错了,导致返回值是错的;第三点是跟外部DNS通信的时候,发生网络中断、性能问题;最后一个是外部DNS不可用。

针对这些问题点总结出以下步骤来盘查:

第一、从客户端侧,先看下请求内容和返回码,如果是返回是错误码说明是服务端有问题。 如果是慢解析,可以看下时间瀑布流看下时间耗费在哪个阶段。

第二、看网络是否正常,看流量、重传、丢包、RTT这几个指标就够了。

第三、查看服务端,看下流量、错误、延时、饱和度这几个指标,再看下CPU、内存、磁盘等这几个资源指标,也能定位出是否有问题。

第四、看下外部DNS,同理我们可以通过请求Trace、返回码、网路流量、重传等指标来定位。

接下来我们看下拓扑。 首先看到红色的线表示有异常的DNS解析调用,点击这个我们能看到调用的黄金指标;点击查看列表,弹出详情页面,可查看请求的详情,是请求这个域名,请求过程中经历发送、等待、下载三个过程,看起来指标正常,接下来我们点击看响应,发现响应是域名不存在。 那么这时候我们可以进一步看下外部DNS是否有问题,步骤也是一样的,后面我会在demo中展示,所以这里就不展开先了。

(三)全链路压测

第三个典型场景是全链路压测,对于大促这种场景峰值是平常的数倍,怎么保障大促的稳定,需要通过一系列的压测来验证系统能力、系统稳定性评估、做容量规划、识别系统瓶颈。 一般会有这么几个步骤:先预热下,这时候验证下链路是否正常的,逐步加流量直到峰值,然后开始摸高,也就是看下能支持的最大TPS是多少,接着再加流量,这时候主要就是看服务是否能正常限流了,因为已经找过最大TPS了,再加大力量就是破坏性流量了。 那么在这个过程中,我们需要关注哪些点呢?

首先针对我们多语言、多协议的微服务架构,比如这里的Java、Golang、Python应用,这里有RPC、MySQL、Redis、Kafka应用层协议,我们得有各种语言、各种协议的黄金指标,用来验证系统能力;针对系统的瓶颈、容量规划这块,我们需要use指标,去看各种流量级别情况下资源的饱和度,来确定是不是要扩容,每增加一次流量,对应看下use指标,对应调整容量,逐步优化;对于复杂架构,需要有一张全局的大图来帮助梳理上下游依赖、全链路架构,确定爆炸报警,比如这里的CheckoutService就是个关键的服务,这个点如果出现问题,影响面会很大。

第一、各种语言、协议通信的黄金指标,通过查看列表进一步看调用的详情

第二、点击节点详情下钻查看cpu、memory等use资源指标

第三、整个拓扑图是能反映整个架构的形态的,有了全局的架构视角,就能识别哪个服务容易成为瓶颈、爆炸半径有多大,是否需要做高可用保障。

(四)访问外部MySQL

第四个场景是访问外部MySQL,先看下访问外部MySQL有哪些常见的问题:

首先是慢查询,慢查询提现为延时指标高,这时候去看trace里面详情请求是啥,查询的是哪张表,哪些字段,进而看下是不是查询量太大了、表太大了、还是说没有建索引等。

查询语句过大,我们知道查询语句太大会导致传输耗时高,网络稍一抖动就造成失败重试,还会引发带宽占用的问题。 一般都是一些批量的更新、插入导致的,出现这种问题延时指标会飙高,这时候我们可以选择RT较高的一些Trace来看,看下语句怎么写的、看下查询语句的长度是不是太大了。

错误码返回,比如表不存在这种,那么解析出其中的错误码就很有帮助了,再进一步看里面的详情,去看语句,就比较容易定位出根因了。

网络问题,这个点也讲过比较多了,一般配合着延时指标加上RTT、重传、丢包来确定网络是否有问题。

接下来看下拓扑图,中间框住的应用依赖了外部的MySQL服务,点击拓扑线可以进一步看黄金指标,点击查看列表可以进一步看请求的详情、响应等。 同时我们也可以看下网络性能指标,这个table是将当前拓扑中的网络数据根据来源和目标进行归类,可以分别查看请求数、错误数、平均响应时间、socket重传、socketrtt,点击上面箭头可以对应地排序。

(五)多租户架构

第五个典型案例是多租户架构。 多租户指的是不同的租户、工作负载、不同团队,公用一个集群,通常一个租户对应一个命名空间,同时保证资源的逻辑隔离或者物理隔离,互不影响、互不干扰。 常见的场景有:企业内部用户,一个团队对应一个租户,同一个命名空间内网络不受限制,用网络策略去控制不同命名空间之间的网络流量。 第二种是SaaS提供商多租户架构,每个用户对应一个命名空间,同时租户和平台分别处于不同的命名空间。 虽然Kubernetes的命名空间特性给多租户架构带来了便利,但也给可观测带来两个挑战:第一命名空间非常多,查找信息变得很繁琐,增加了管理成本、理解成本。 第二是租户之间有流量隔离的要求,在命名空间比较多的情况下往往无法做到准确、全面的发现异常流量。 第三是对多协议、多语言的Trace支持。 曾经遇到过一个客户,一个集群里面有400多个命名空间,管理起来非常痛苦,而且应用是多协议、多语言的,要支持Trace,得一个个改造。

这是我们产品的集群首页,Kubernetes的实体以命名空间的方式划分,支持查询来定位到我想看的集群。 气泡图上展示对应命名空间上的实体数,以及有异常的实体数,比如框子里3个命名空间里存在有异常的pod,点进去可以进一步看异常。 首页下面是按黄金指标排序的性能概览,也就是场景的Top功能,这样能快速查看哪几个命名空间是有异常的。

在拓扑图中,如果命名空间比较多,可以通过过滤功能查看想看的命名空间,或者通过搜索方式快速定位到想看的命名空间。 由于节点是以命名空间分组的,能通过命名空间之间的线来查看命名空间的流量,这样就能方便地查看有来自哪些命名空间的流量、是否有异常流量等等。

我们将上述场景介绍总结如下:

网络监控:如何能分析网络导致的服务的错慢、中断,如何分析网络问题带来的影响

服务监控:如何通过黄金指标确定服务是否健康?如何通过支持多协议的Trace查看详情?

中间件、基础设施监控:如何用黄金指标、trace分析中间件、基础设施的异常,如何快速定界是网络问题,还是自身问题,还是下游服务问题

架构感知:如何通过拓扑感知整个架构,梳理上下游、内部外部依赖,进而能掌控全局?如何通过拓扑保障架构有足够的观测性、稳定性保障,如何通过拓扑分析、发现系统中的瓶颈、爆炸半径。

从这几个场景中又进一步列举常见的case:网络、服务的可用性检测,健康检查;中间件架构升级可观测性保障;新业务上线验证;服务性能优化;中间件性能监控;方案选型;全链路压测等。

产品价值

经过以上内容介绍,我们将Kubernetes的产品价值总结如下:

通过多协议、多语言、无入侵的方式采集服务的指标和Trace数据,最大限度地减少接入的成本,同时提供覆盖度全面的指标和Trace;

有了这些指标和Trace之后我们就能,对服务和工作负载进行科学的分析、下钻;

将这些指标、Trace关联起来串成一张拓扑图,能在一张大图上进行架构感知、上下游分析、上下文关联等,充分得理解架构,评估潜在的性能瓶颈等,方便做进一步的架构优化;

提供配置简单的告警配置方法,将经验知识沉淀到告警中,做到主动发现。

技术分享|AWS EKS 与 APISIX 实现微服务架构的实践指南

本文深入探讨了如何利用AWS Elastic Kubernetes Service(EKS)与APISIX实现高效稳定的微服务架构实践。 微服务架构凭借其灵活性和可扩展性,为企业IT架构提供了更高效的服务管理和部署方式。 Amazon Elastic Kubernetes Service(EKS)作为亚马逊云科技提供的托管Kubernetes服务,简化了集群管理和维护流程,使用户无需处理控制层面或节点的安装、操作和维护。 借助EKS的特性,结合APISIX的高性能API网关功能,构建出一个高效、稳定且易于管理的微服务架构。 APISIX作为一个云原生、动态、实时、高性能的API网关,提供了丰富的功能,如流量管理、监控、安全等,有助于微服务架构的实现。 通过定义路由规则,APISIX能够将客户端请求精准转发至相应服务。 同时,其丰富的插件支持,如身份验证、限速、灰度发布等,进一步强化了APISIX在微服务架构中的作用。 全面了解APISIX的特性,包括API Gateway、APISIX Dashboard和插件等核心功能。 API Gateway负责实时管理所有流量,提供路由、负载均衡、认证授权、限流熔断、数据转换、日志记录监控、缓存等服务。 APISIX Dashboard提供可视化配置界面,简化管理流程,而插件系统则允许用户扩展和定制功能,以满足特定需求。 ETCD作为配置存储和分布式协调系统,确保了APISIX的高可用性和一致性。 在实践中,部署前需选择合适EC2实例部署ETCD集群,避免直接部署于EKS上以确保数据持久性与稳定性。 使用Helm工具简化APISIX在EKS上的部署,并配置其连接ETCD集群。 同时,APISIX Dashboard的部署与使用也需遵循相应步骤,通过配置文件指定ETCD地址,实现可视化管理。 在微服务的路由与管理中,通过Ingress暴露服务,用户可通过APISIX Gateway和Dashboard的Web界面进行路由添加、插件配置等操作。 观测性方面,APISIX提供丰富的插件,如prometheus、kafka-logger等,配合第三方工具实现对服务和路由性能的监控、日志记录等。 安全考虑是实践中的重要环节,涉及TLS设置、秘钥管理等,遵循最佳实践如自动缩放、资源配额和健康检查,确保系统稳定运行和数据安全。 总结,AWS EKS与APISIX结合为微服务架构提供了强大、灵活且易于管理的解决方案。 通过本文提供的实践指南,开发者和运维人员能够实施这一组合方案,实现系统稳定运行、数据安全以及高可用性的保障,为企业技术创新提供坚实基础。

了解Kubernetes资源类型

在深入研究Kubernetes资源之前,让我们先澄清一下“资源”一词在这里指的是什么。 我们在Kubernetes集群中创建的任何东西都被视为一种资源:部署、pod、服务等。 在本文中,我们将重点介绍CPU和内存等主要资源,以及暂态存储和扩展资源等其他资源类型。

集群管理的一个方面是将这些资源自动分配给在pod中运行的容器,这样,理想情况下,每个容器都有它所需的资源(但没有更多)。

在本文中,我们将重点介绍集群上运行的容器的逻辑资源。 我们将分析开发人员每天使用的四种常见Kubernetes资源:CPU、内存、暂态存储和扩展资源。 对于每种资源,我们将 探索 如何在Kubernetes中衡量它,回顾如何监控每种特定资源,并强调优化资源使用的一些最佳实践。

Kubernetes集群通常运行在多台机器上,每台机器都有多个CPU核。 它们加起来就是可用内核的总数。

我们不需要使用所有的内核。 我们可以以1/1000的增量指定CPU核心的任何部分(例如,半个核心或500百万CPU)。

Kubernetes容器在Linux内核上运行,这允许指定cGroup来限制资源。 Linux调度器将使用的CPU时间(由内部时间片定义)与定义的限制进行比较,以决定是否在下一个时间片中运行容器。 我们可以使用kubectl top命令查询CPU资源,为pod或节点调用它。

我们可以通过改进算法和编码,或者通过编译器优化,使程序在容器中运行更加高效,从而优化处理器时间的使用。 集群用户对预编译容器的速度或效率没有太大影响。

内存

Kubernetes集群中的每台机器也都有内存,加起来就是集群的总数。 内核级控制主内存,类似于使用cGroup的CPU时间。 如果容器中的例程请求的内存分配超出了硬限制,则表示内存不足错误。

优化资源使用在很大程度上取决于应用程序的开发工作。 一个步骤是提高垃圾收集频率,以防止基于堆的镜像分配的内存超过硬限制。 同样,kubectl top命令可以提供有关内存使用的信息。

探索 CPU和内存

作为我们的第一个深入示例,让我们将流行web服务器NGINX的三个复制容器部署到本地Kubernetes安装中。 我们在笔记本电脑上运行一个单节点“集群”,它只有两个内核和2 GiB的内存。

下面的代码定义了这种pod部署,并将十分之一的核心(100 milli-CPU)和100 MiB的主内存授予三个NGINX容器中的每一个。 下面的代码还将它们的使用限制为请求值的两倍。

apiVersion: apps/v1

kind: Deployment

name: nginx-deployment

replicas: 3

matchLabels:

containers:

- name: nginx

image: nginx

resources:

memory: 100Mi

memory: 200Mi

- containerPort: 80

我们可以这样部署到默认命名空间:

kubectl apply -f

本地集群只有一个节点。使用此命令可返回有关它的详细信息:

kubectl describe nodes docker-desktop

深入探究科学问题

在剪切大部分输出后,我们可以检查一些有关资源使用的信息:

Namespace Name CPU. Requests CPU Limits Memory Requests Memory Limits Age

default nginx-deployment-585bd9cc5f-djql8 100m (5%) 200m (10%)100Mi (5%) 200Mi (10%) 66s

default nginx-deployment-585bd9cc5f-gz98r 100m (5%) 200m (10%)100Mi (5%) 200Mi (10%) 66s

default nginx-deployment-585bd9cc5f-vmdnc 100m (5%) 200m (10%)100Mi (5%) 200Mi (10%) 66s

Resource Requests Limits

cpu 1150m (57%) 600m (30%)

memory 540Mi (28%) 940Mi (49%)

ephemeral-storage 0 (0%) 0 (0%)

hugepages-1Gi 0 (0%) 0 (0%)

hugepages-2Mi 0 (0%) 0 (0%)

此信息显示CPU和内存使用请求和限制,就像我们的部署对象指定的那样。 它还将值显示为最大可能分配的百分比。

接下来是该节点的当前总数,再次以绝对值和百分比列出。 这些数字包括在kube系统命名空间中运行的一些其他容器,我们在这里没有显示这些容器,因此上面的输出中没有包含差异。

上面代码段的最后三行表示CPU和内存之外的其他类型的资源,在本例中,这些资源没有设置请求或限制。

暂态存储

另外一种Kubernetes资源类型是暂态存储。 这是在pod生命周期内无法存活的挂载式存储。 Kubernetes经常使用暂态存储来缓存或日志,但从不将其用于重要数据,如用户记录。 我们可以请求或限制暂态存储,比如主内存,但它通常不是一种有限的资源。

那么,在上面的代码片段中,hugepages-1Gi和hugepages-2Mi是什么意思呢?巨页面是Linux内核的一种现代内存功能,用于为进程分配可配置大小的大型主内存页面。 为了提高效率,我们可以这样做。

Kubernetes支持将如此大的页面分配给容器。 这些构成了我们可以单独请求的每个页面大小的资源类型。

在指定请求或限制时,我们设置的是内存总量,而不是页数。

hugepages-2Mi: 100Mi

hugepages-1Gi: 2GiHere, we limit the number of 2 MiB pages to 50 and the number of 1 GiB pages to 2.

扩展资源

集群用户还可以使用扩展资源类型定义自己的资源类型(每个集群或节点)。 一旦定义了类型并指定了可用单元,我们就可以使用请求和限制,就像我们目前使用的内置资源一样。

例如:

/handles: 100

此设置将容器限制为核心的20%和项目句柄的100%。

资源请求和限制

请注意,资源请求和限制是我们讨论暂态存储和扩展资源的关键。 这是因为最终用户可以在应用程序的部署清单中指定资源请求和限制,这对Kubernetes应该如何处理容器或pod施加了一些规则。

请求指示容器应该拥有多少资源。 它们帮助调度器根据请求的资源量和节点上的可用资源量将pod分配给节点。

限制用于指示容器可以使用多少资源的硬上限,在操作系统级别强制执行。 请求和限制是可选的,但如果我们不指定限制,容器可以使用节点的大部分资源,这可能会带来负面的成本或性能影响。 因此,我们必须谨慎行事。

请记住,虽然一个pod可以包含多个容器,但通常每个pod只有一个容器。 我们将资源分配给容器,但pod的所有容器都来自节点级别的公共资源池。

考虑服务质量

到目前为止,我们描述的资源系统是管理计算资源的一种相当简单的方法。 Kubernetes提供了一个简单的服务质量(QoS)系统。

QoS描述了一个技术系统在硬件有限的情况下,在保持最佳总体质量的同时提供不同服务级别的方法。 Kubernetes QoS系统为pod分配三个级别中的一个:Guaranteed、Burstable和BestEffort。

在pod的生命周期内,Guaranteed级别提供了所需且有限的资源,适合在恒定负载下运行的监控系统等应用。

Burstable服务级别适用于具有基本使用模式的pod,由于需求增加,这些pod的使用模式有时会超过基线。 这个级别非常适合数据库或web服务器,它们的负载取决于传入请求的数量。

BestEffort不保证资源可用性。 因此,它最适合于批处理作业之类的应用程序,它们可以在需要时重复,或者适合于非任务关键型的暂存环境。

结论

Kubernetes集群维护CPU时间、内存、暂态存储和扩展资源等硬件资源,并将它们分配给正在运行的容器。 通过一个请求和限制系统,运维人员可以根据单个容器定制资源分配,然后让Kubernetes系统将它们适当地分配给节点。

扩展资源使我们能够定义自己的资源类型,并以类似的方式使用它们。 Kubernetes还根据请求和限制将服务质量指定给pod。 然后,它使用这些名称来制定计划和终止决策。

Kubernetes资源优化对于平衡成本和最终用户体验至关重要。 然而,使用本文的方法手动分配参数可能会非常耗时、昂贵,而且难以扩展。

原文链接:

为什么K8S升级会导致故障?滴滴事故解析

在IT圈,近期发生了几个导致业务连续性中断的重大事件,涉及阿里云和滴滴这样的行业领军企业,尤其是滴滴打车的故障,对众多用户出行产生了严重影响。 网传原因是集群升级所致。 滴滴官方技术公众号也提到了K8s升级方案与这一事故的关联。 然而,技术团队在处理重大服务中断时,往往是由多个错误累积而成的结果。 滴滴作为一个业界顶尖的SRE团队,即便如此,也未能避免这次事件,这表明了问题可能不单纯是技术上的单一原因。 从公开的技术分析来看,滴滴的技术团队至少犯了几个明显错误:1. 将K8S从1.12升级至1.20版本。 根据K8S官方版本偏差文档,升级过程中允许的不同版本差异应在3个以内,但滴滴升级的版本差异为8个,严重违反了官方建议。 2. 集群节点规模超过K8S版本的5000个节点限制。 一般而言,运维团队会谨慎对待超过此限制的节点规模,以防潜在风险。 3. 原地升级方案的回退机制考虑不周,且未经严格测试。 这种升级方式在多版本共存时存在较高的风险。 4. 技术团队可能存在基于非技术因素的决策压力,导致选择了风险更高的升级策略。 针对以上问题,具体分析如下:1. 考虑到版本差异过大的风险,滴滴在选择升级策略时应避免跨8个版本的升级。 原地升级方案应谨慎对待,确保有全面的备份和回退机制,以降低风险。 2. 节点规模的考量。 在规模超过5000个节点时,应考虑构建多个集群,以分散风险。 即使在较小规模下,过大的节点数量也可能导致升级复杂性增加。 3. 技术团队的决策独立性。 在面对管理层压力时,应坚持风险最低的决策,保持技术中立性,避免因非技术因素影响升级策略。 针对这些问题,云托管服务提供了一种有效的解决方案,比如DigitalOcean的Kubernet托管集群DOKS,它遵循社区支持时间,仅维护最近的Kubernets版本,确保与相关生态兼容性更高。 托管服务解决的问题:1. 跨版本兼容性问题:托管服务避免了超过3个版本的跨版本升级,严格遵循社区推荐的最佳实践,确保技术的中立性。 2. 规模限制:托管服务不会擅自超过K8s的5000个节点限制,对于大规模集群的需求,可采用多集群策略。 3. 升级流程自动化:托管服务提供自动化的升级方案和策略,避免人为错误,确保升级过程稳定可靠。 4. 升级触发方式:托管服务提供手动和自动升级选项,由管理员控制,减少人为决策风险。 通过采用云托管服务,企业能够避免类似事故,确保Kubernetes集群的稳定性和安全性。 此外,托管服务还提供了高可用控制平面、弹性扩展、一键安装、安全加固、性能监控等额外功能,提高了整体系统性能和可用性。



相关标签: 集群的强大功能和最佳实践深入探究深入探究科学问题Kubernetes

上一篇:揭秘大型集群的高可用性策略故障转移容错性

下一篇:Contactsprovider的终极指南简化您的联系人

内容声明:

1、本站收录的内容来源于大数据收集,版权归原网站所有!
2、本站收录的内容若侵害到您的利益,请联系我们进行删除处理!
3、本站不接受违法信息,如您发现违法内容,请联系我们进行举报处理!
4、本文地址:http://www.jujiwang.com/article/1ae1eb878f343bad2a9c.html,复制请保留版权链接!


温馨小提示:在您的网站做上本站友情链接,访问一次即可自动收录并自动排在本站第一位!
随机文章
grid 设置的最佳实践:提高布局效率和可维护性的技巧 (grid设置教程)

grid 设置的最佳实践:提高布局效率和可维护性的技巧 (grid设置教程)

CSSGridLayout模块是一个强大而灵活的工具,可以帮助我们创建复杂而响应式布局,要有效地使用Grid,了解最佳实践非常重要,1.使用具有意义的名称为您的grid容器和项使用有意义的名称,这将使您的代码更易于阅读和理解,同时还可以帮助您调试问题,.grid,container,display,grid,grid,template...。

技术教程 2024-09-29 02:34:30

NumPy with Pandas: An Introduction to Data Manipulation and Analysis in Python (numpy无法导入)

NumPy with Pandas: An Introduction to Data Manipulation and Analysis in Python (numpy无法导入)

简介NumPy和Pandas是用于Python数据操作和分析的两个强大的库,NumPy擅长处理多维数组,而Pandas则擅长处理表格数据,数据框,结合使用,您可以高效地操纵和分析大型数据集,NumPyNumPy是一个用于科学计算的Python库,它提供了高效的多维数组操作,线性代数和随机数生成等功能,导入NumPy```python...。

技术教程 2024-09-24 21:59:37

HTML 表格布局黑科技:使用 COLSPAN 属性创建自适应表格 (html表格代码大全)

HTML 表格布局黑科技:使用 COLSPAN 属性创建自适应表格 (html表格代码大全)

在HTML表格布局中,COLSPAN属性可谓是一个强大的黑科技,它可以横向合并单元格,从而创建出更加灵活和自适应的表格,通过巧妙地使用COLSPAN属性,你可以轻松实现以下布局效果,创建可自动调整宽度的列,使表格自适应不同屏幕尺寸合并多列,形成具有视觉冲击力的标题或副标题创建嵌套表格,实现更加复杂的数据展示如何使用COLSPAN属性C...。

最新资讯 2024-09-24 18:35:03

汇编优化:提升代码性能的实用技巧 (汇编语言优化)

汇编优化:提升代码性能的实用技巧 (汇编语言优化)

汇编语言作为计算机编程语言中最底层的语言,直接操作计算机的硬件,具有其他高级编程语言无法比拟的效率和灵活性,但是,要想编写出高效的汇编代码,需要掌握一些优化技巧,对代码进行精细的优化,优化原则在进行汇编优化之前,需要遵循以下原则,性能至上,以提高代码性能为首要目标,牺牲可读性或可维护性也是可以接受的,局部优化,一次只优化一小部分代码,...。

本站公告 2024-09-23 09:49:11

应对气候变化的紧迫挑战:科学、政策和公民行动的共同作用 (应对气候变化,协同推进)

应对气候变化的紧迫挑战:科学、政策和公民行动的共同作用 (应对气候变化,协同推进)

引言气候变化是当今世界面临的最严峻挑战之一,要求科学、政策和公民行动共同协作,本文探讨了气候变化的科学基础、政府应对措施以及公民在应对这一迫切问题中的作用,气候变化的科学基础气候变化是由人类活动造成的,主要是燃烧化石燃料释放温室气体,这些气体在大气中积聚,导致地球大气层温度升高,这种温度升高产生了广泛的影响,包括,海平面上升,极端天...。

本站公告 2024-09-16 07:12:50

掌握JavaScript:打造专业人士级别的焦点图 (掌握javascript基础 初入宗门)

掌握JavaScript:打造专业人士级别的焦点图 (掌握javascript基础 初入宗门)

欢迎来到JavaScript入门系列教程,本教程将带你踏上JavaScript开发之旅,从基础到高级概念,逐步提升你的JavaScript技能,焦点图是什么,焦点图,又称为轮播图或幻灯片,是一种动态图像展示组件,通常在网站和应用程序中展示多个图像或内容块,它通过自动或手动切换显示不同的内容,使用JavaScript构建焦点图构建一个基...。

技术教程 2024-09-15 08:04:42

Java 串口故障排除:识别和解决串口通信中遇到的问题 (Java串口通信)

Java 串口故障排除:识别和解决串口通信中遇到的问题 (Java串口通信)

串口通信是一种在两台设备之间传输数据的简单而可靠的方式,在使用Java进行串口通信时,有时可能会遇到问题,本文档将介绍如何识别和解决串口通信中遇到的一些常见问题,识别问题串口通信问题可能表现为各种症状,包括,无法打开串口无法读取或写入串口数据损坏通信速度慢异常要确定问题的根源,请考虑以下因素,串口设置,确保串口设置,如波特率、数据位、...。

本站公告 2024-09-12 14:26:47

用C语言实现快速高效的二分法:性能优化技巧 (用C语言实现顺序表的创建)

用C语言实现快速高效的二分法:性能优化技巧 (用C语言实现顺序表的创建)

二分法是一种快速高效的搜索算法,它在有序数组中查找元素时,平均时间复杂度为O,logn,这使得它在处理大规模数据时非常有效,用C语言实现二分法以下是用C语言实现二分法的代码,```cintbinary,search,intarr,intn,inttarget,intleft=0,intright=n,1,while,left<...。

技术教程 2024-09-11 08:55:40

沟通不畅(沟通不畅的原因和解决方法)

沟通不畅(沟通不畅的原因和解决方法)

概述沟通不畅是指个人或团体在信息交流和理解方面遇到的困难,它可能会对人际关系、团队合作和整体组织绩效产生重大影响,原因沟通不畅的原因有很多,包括,语言障碍语言差异,说不同语言的人在沟通时可能会遇到困难,技术术语,使用技术或专业术语可能会让不懂的人感到困惑,口音和方言,不同的口音或方言可能会影响信息的理解,非言语障碍肢体语言和表情,非言...。

互联网资讯 2024-09-08 06:59:25

一步步指导:使用代码创建动态且响应式的弹窗 (一步步指导的成语)

一步步指导:使用代码创建动态且响应式的弹窗 (一步步指导的成语)

1.创建HTML结构弹窗内容```2.编写CSS样式```css,弹窗样式,.popup,position,fixed,top,0,left,0,width,100%,height,100%,background,color,rgba,0,0,0,0.5,display,flex,justify,content,center,ali...。

互联网资讯 2024-09-07 01:12:56

掌握多线程编程的艺术:高效管理并发任务 (掌握多线程编程和多进程编程实验心得)

掌握多线程编程的艺术:高效管理并发任务 (掌握多线程编程和多进程编程实验心得)

前言在现代计算中,多线程编程已成为开发人员必备的一项技能,通过创建和管理多个同时执行的任务,称为线程,,开发者可以充分利用多核处理器,从而提升应用程序的性能和响应能力,本文将深入探讨多线程编程的概念和实践,帮助您掌握这门艺术,高效管理并发任务,多线程编程简介多线程编程是一种并发编程技术,它允许在单个进程中同时执行多个任务,通过将一个任...。

技术教程 2024-09-06 09:36:36

阅读 PHP 文档:PHP 官方文档提供了对 PHP 语言的全面参考。(阅读php源码)

阅读 PHP 文档:PHP 官方文档提供了对 PHP 语言的全面参考。(阅读php源码)

PHP官方文档是学习和理解PHP语言的宝贵资源,本文将指导您如何高效地使用此文档来提升您的编程技能,文档结构PHP官方文档分为以下几部分,语言参考,详细介绍PHP语言的语法、函数和结构,扩展参考,描述PHP可用的扩展模块及其函数,配置选项,列出PHP配置选项及其说明,常见问题解答,FAQ,回答常见问题并提供解决方案,教程和指南,提供...。

互联网资讯 2024-09-06 00:53:16