【K8S系列】K8s 领域深度剖析:年度技术、工具与实战总结

在这里插入图片描述

引言

Kubernetes作为容器编排领域的行业标准,在过去一年里持续进化,深刻推动着云原生应用开发与部署模式的革新。本文我将深入总结在使用K8s特定技术领域的进展,分享在过去一年中相关技术工具及平台的使用体会,并展示基于K8s的技术项目实战经验与成果。

一、K8s年度技术深度总结

(一)资源管理与调度的优化

  1. CPU与内存资源分配精细化
    在过去一年,K8s对CPU和内存资源的分配策略进行了深度优化。以往,容器的资源请求与限制设定较为粗放,常导致资源浪费或不足。如今,K8s引入了更为精细的CPU份额调整机制。
    例如,通过CPU Manager策略,能依据容器的实际需求,以独占或共享的方式分配CPU核心,显著提升了CPU资源的利用率。在内存管理方面,K8s强化了对内存超卖场景的管控,借助内存QoS(Quality of Service)机制,确保关键容器在内存紧张时仍能稳定运行。

项目介绍

以我们部门维护的大数据分析平台为例,其包含数据预处理、模型训练和结果展示三个主要的容器化任务。数据预处理任务需要大量CPU资源进行数据清洗与转换,模型训练任务则因需加载大规模数据集而对内存需求极高。
我运用K8s的CPU
Manager策略,为数据预处理任务独占分配4个CPU核心,使得数据预处理速度大幅提升,能够快速完成海量数据的清洗工作。针对模型训练任务,通过内存QoS机制,设置其内存请求为16GB,限制为32GB。在一次集群内存紧张的情况下,模型训练任务凭借这16GB的保障内存,稳定运行,未因内存不足而失败。
这种精细化的资源分配方式,让各个任务在同一集群中高效协作,显著提高了整体资源利用率。

以下是代码实现的示例:
代码实现示例

apiVersion: v1
kind: Pod
metadata:name: data-analysis-pod
spec:containers:- name: data-preprocessing-containerimage: your-data-preprocessing-imageresources:requests:cpu: "4"memory: "16Gi"limits:cpu: "4"memory: "32Gi"- name: model-training-containerimage: your-model-training-imageresources:requests:cpu: "2"memory: "8Gi"limits:cpu: "4"memory: "16Gi"- name: result-display-containerimage: your-result-display-imageresources:requests:cpu: "1"memory: "2Gi"limits:cpu: "2"memory: "4Gi"

代码示例讲解

上述 YAML 代码定义了一个包含三个容器的 Pod,分别是
data-preprocessing-containermodel-training-container
result-display-container
对于 data-preprocessing-container,请求 4 个 CPU 核心和 16GB 内存,限制为 4 个 CPU 核心和 32GB 内存;
model-training-container 请求 2 个 CPU 核心和 8GB 内存,限制为 4 个 CPU 核心和 16GB 内存;
result-display-container 请求 1 个 CPU 核心和 2GB 内存,限制为 2 个 CPU 核心和 4GB 内存。
这体现了根据不同任务对 CPU 和内存资源的精细化分配,可根据实际情况调整资源请求和限制值。

  1. 节点亲和性与反亲和性的增强
    K8s的节点亲和性和反亲和性规则在过去一年得到了进一步丰富。以前,亲和性规则主要基于节点标签进行简单匹配。如今,K8s支持更为复杂的拓扑感知亲和性,可根据节点所在的机架、数据中心等物理位置信息进行容器调度。这对一些对数据局部性要求较高的应用,如分布式数据库而言,能显著提升数据访问性能。同时,反亲和性规则也有所扩展,不仅可避免将同一类型的容器调度到同一节点,还能依据应用的依赖关系,防止将相互依赖的容器调度到存在故障风险的相邻节点。

项目介绍

在去年参与的分布式数据库系统项目中,该系统由多个数据节点和查询节点组成。为提升数据访问性能,我们利用拓扑感知亲和性,将数据节点调度到与存储数据的磁盘阵列所在机架相同的K8s节点上。如此一来,数据节点读取数据时,减少了跨机架的数据传输,大幅提高了数据访问速度。同时,为防止单点故障,我使用反亲和性规则,确保不同的数据节点不会被调度到同一节点上。
此外,针对查询节点和数据节点之间的依赖关系,我通过反亲和性规则,避免将查询节点与数据节点调度到存在网络故障风险的相邻节点,从而保证了系统的高可用性和数据访问效率。在实际运行中,这种调度策略有效减少了因节点故障或网络问题导致的服务中断。

代码实现示例

apiVersion: v1
kind: Pod
metadata:name: distributed-db-data-node
spec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: rackoperator: Invalues:- "rack-1"podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchLabels:app: distributed-db-data-nodetopologyKey: kubernetes.io/hostnamecontainers:- name: db-data-containerimage: your-distributed-db-data-image
---
apiVersion: v1
kind: Pod
metadata:name: distributed-db-query-node
spec:affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchLabels:app: distributed-db-data-nodetopologyKey: kubernetes.io/hostnamecontainers:- name: db-query-containerimage: your-distributed-db-query-image

代码讲解示例

上述 YAML 代码为分布式数据库的数据节点和查询节点分别定义了亲和性和反亲和性规则。distributed-db-data-nodenodeAffinity 确保该节点被调度到 rack: rack-1 的节点上,且使用 podAntiAffinity 避免多个数据节点被调度到同一节点;distributed-db-query-node 使用 podAntiAffinity 避免与数据节点调度到同一节点,可根据实际情况调整标签和拓扑键。

(二)网络策略的完善

  1. 网络隔离与安全策略强化
    K8s的网络策略在过去一年着重强化了网络隔离能力。NetworkPolicy资源对象的功能更加丰富,不仅可基于IP地址、端口进行访问控制,还能依据服务账号、标签等维度实施精细的网络流量管理。
    例如,在微服务架构中,可以针对不同的微服务设置独立的网络访问策略,只允许授权的服务之间进行通信,有效防止了横向网络攻击。同时,K8s与云原生安全工具(如Calico等)的集成更为紧密,实现了从网络层到应用层的全方位安全防护。

项目介绍

在我们负责的微服务架构项目中,涉及用户服务、订单服务和支付服务。为保障安全,我通过K8s的NetworkPolicy设置了如下策略:仅允许订单服务访问用户服务的特定端口以获取用户信息,支付服务仅能与订单服务进行通信以完成支付流程。并且,基于服务账号进行访问控制,只有授权的服务账号对应的微服务才能进行通信。有一次,发现有恶意容器试图获取用户服务的信息,但由于缺乏对应的服务账号权限,无法进行非法访问。同时,我结合Calico安全工具,对进出容器的网络流量进行深度包检测,成功拦截了数次试图通过网络流量进行恶意数据传输的攻击,有力保障了电商系统的网络安全。

代码实现示例

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: user-service-policy
spec:podSelector:matchLabels:app: user-serviceingress:- from:- podSelector:matchLabels:app: order-serviceports:- protocol: TCPport: 8080
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: order-service-policy
spec:podSelector:matchLabels:app: order-serviceingress:- from:- podSelector:matchLabels:app: payment-serviceports:- protocol: TCPport: 8081
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: payment-service-policy
spec:podSelector:matchLabels:app: payment-serviceingress:- from:- podSelector:matchLabels:app: order-serviceports:- protocol: TCPport: 8082

代码示例讲解

上述 YAML 代码为用户服务、订单服务和支付服务分别定义了 NetworkPolicyuser-service-policy 只允许 order-service 访问 user-service 的 8080 端口,order-service-policy
只允许 payment-service 访问其 8081 端口,payment-service-policy 只允许
order-service 访问其 8082 端口,确保了服务间的安全通信,可根据实际端口和服务标签调整配置。

  1. 服务网格集成下的网络优化
    随着服务网格技术(如Istio)与K8s的深度融合,K8s网络在服务间通信方面得到了显著优化。Istio的Sidecar注入机制,使K8s集群内的服务能够透明地享受服务网格提供的流量管理、故障注入、链路追踪等功能。例如,通过Istio的流量路由规则,能够轻松实现灰度发布、蓝绿部署等高级部署策略,同时在网络层面实现对流量的精准控制和监控,提升了整个K8s应用生态系统的网络可靠性和可观测性。

项目介绍

在对在线教育平台的课程推荐服务进行升级时,我们借助Istio的流量路由规则实现灰度发布。
首先,将10%的用户流量导向新版本的课程推荐服务,密切观察新版本的运行情况,包括响应时间、错误率等指标。在确认新版本运行稳定后,逐步增加导向新版本的流量比例,直至100%完成升级。
在此过程中,通过Istio的链路追踪功能,能够清晰地看到每个请求在微服务之间的流转路径,便于定位可能出现的问题。
有一次在增加流量比例后,发现某个微服务的响应时间略有增加,通过链路追踪迅速定位到是该微服务与下游服务的接口调用出现了问题,及时解决后确保了升级过程的顺利推进。同时,利用故障注入功能,模拟网络延迟或服务中断等故障场景,提前测试系统的容错能力,确保了升级过程的稳定性和可靠性。

代码实现示例

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: course-recommendation-vs
spec:hosts:- course-recommendationhttp:- route:- destination:host: course-recommendationsubset: v1weight: 90- destination:host: course-recommendationsubset: v2weight: 10
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:name: course-recommendation-dr
spec:host: course-recommendationsubsets:- name: v1labels:version: v1- name: v2labels:version: v2

代码示例讲解

上述 YAML 代码使用 Istio 的 VirtualServiceDestinationRule
实现了课程推荐服务的灰度发布。将 90% 的流量导向 v1 版本,10% 的流量导向 v2 版本,可根据需要调整权重和版本标签。

二、K8s技术工具与平台的年度使用心得

(一)Helm - 应用部署与管理利器

  1. Chart管理与版本控制
    Helm作为K8s应用的包管理器,在过去一年的使用中,其Chart管理功能愈发成熟。Helm Chart提供了一种标准化的方式来打包、分发和部署K8s应用。通过Helm的Chart版本控制系统,可以轻松管理应用的不同版本,包括版本的升级、回滚等操作。在应用开发中,多个团队需要基于同一个基础Chart进行定制开发,Helm的版本控制功能使得不同团队的应用版本能够有序管理,避免了版本冲突和混乱。

项目介绍

在参与的企业客户关系管理(CRM)系统项目中,该系统由多个团队共同开发维护。不同团队负责不同模块,销售模块、客户服务模块等。这些模块都基于同一个基础Helm
Chart进行定制。当销售模块团队对其功能进行升级时,我们通过Helm的版本控制系统,将销售模块的Chart版本从1.0.0升级到1.1.0。同时,客户服务模块仍保持1.0.0版本。在1.1.0版本升级过程中,发现新功能与现有系统的某个部分存在兼容性问题,通过Helm轻松回滚到1.0.0版本,保证了销售模块的正常运行。这样,各个团队的开发和部署工作互不干扰,版本管理清晰有序。

代码实现示例

Chart.yaml

apiVersion: v2
name: crm-sales-module
description: A Helm chart for the sales module of the CRM system
version: 1.0.0
appVersion: "1.0"

升级命令

helm upgrade crm-sales-release crm-sales-module --version 1.1.0

回滚命令

helm rollback crm-sales-release 1.0.0

代码示例讲解

上述代码包含 Chart.yaml 中定义了 crm-sales-module 的版本为 1.0.0,使用 helm upgrade 命令将 crm-sales-release 升级到 1.1.0 版本,使用 helm rollback
命令可将其回滚到 1.0.0 版本。

  1. 依赖管理与模板化配置
    Helm的依赖管理功能极大地简化了复杂应用的部署。一个Chart可以声明对其他Chart的依赖关系,Helm在部署时会自动下载并安装这些依赖。同时,Helm的模板化配置机制,通过使用Values文件,可以轻松定制不同环境(开发、测试、预发、生产)下的应用配置。在部署一个基于微服务架构的应用时,通过Helm可以快速配置数据库连接、缓存服务器地址等环境相关的参数,而无需修改应用的核心代码,提高了应用部署的灵活性和效率。

项目介绍

在部署公司商城应用时,该应用依赖于MySQL数据库和Redis缓存。我们在Helm Chart中声明对MySQL Chart和Redis Chart的依赖。当执行 Helm install 命令部署电商应用时,Helm自动下载并安装了MySQL和Redis的相关资源。
对于不同环境,如开发环境,在Values文件中配置MySQL的连接地址为开发数据库地址,Redis的缓存大小为较小值以适应开发环境资源。
在生产环境,修改Values文件中的配置,将MySQL连接地址改为生产数据库地址,Redis缓存大小设置为较大值以满足高并发需求。
通过这种方式,无需修改应用的核心代码,就能快速在不同环境中部署应用,极大地提高了部署效率。

代码实现示例
Chart.yaml

apiVersion: v2
name: e-commerce-app
description: Helm chart for e-commerce application
version: 1.0.0
appVersion: "1.0"
dependencies:
- name: mysqlversion: 5.7.0repository: "https://charts.bitnami.com/bitnami"
- name: redisversion: 12.0.0repository: "https://charts.bitnami.com/bitnami"

values-dev.yaml

mysql:auth:rootPassword: devRootPassworddatabase: devDBusername: devUserpassword: devPasswordprimary:service:port: 3306service:port: 3306
redis:architecture: standaloneauth:password: devRedisPasswordmaster:persistence:size: 1Gi

values-prod.yaml

mysql:auth:rootPassword: prodRootPassworddatabase: prodDBusername: prodUserpassword: prodPasswordprimary:service:port: 3306service:port: 3306
redis:architecture: standaloneauth:password: prodRedisPasswordmaster:persistence:size: 10Gi

部署命令(开发环境)

helm install e-commerce-dev e-commerce-app -f values-dev.yaml

部署命令(生产环境)

helm install e-commerce-prod e-commerce-app -f values-prod.yaml

代码示例讲解

上述代码展示了 Chart.yaml 中声明对 MySQL 和 Redis 的依赖,values-dev.yaml
values-prod.yaml 分别配置了开发和生产环境的参数,使用不同的 helm install 命令部署不同环境的应用。

(二)Prometheus - 监控与指标收集平台

  1. 指标采集与可视化
    Prometheus作为K8s生态中广泛应用的监控与指标收集平台,在K8s集群监控方面表现卓越。它能够通过Kube-State-Metrics和Node-Exporter等组件,高效采集K8s集群中节点、Pod、服务等各种资源的丰富指标,如CPU使用率、内存占用、网络流量等。
    Prometheus与Grafana的集成,为这些指标提供了强大的可视化功能,通过定制化的Dashboard,可以直观地展示集群的运行状态和性能趋势。
    例如,在监控一个高并发的Web应用时,通过Prometheus和Grafana的组合,可以实时观察到应用在不同负载下的性能指标变化,及时发现性能瓶颈。

项目介绍

在监控教育的Web应用时,我们使用Prometheus结合Kube-State-Metrics和Node-Exporter采集指标。在Grafana中创建定制化Dashboard,展示该Web应用所在K8s集群的各项指标,包括Web应用Pod的CPU使用率、内存占用,以及前端服务器节点的网络流量。在一次重大课程事件发布时,Web应用流量剧增,我们通过Dashboard实时看到Pod的CPU使用率瞬间飙升至90%,内存占用也接近上限。根据这些实时指标,及时采取扩容措施,增加了Pod的数量,避免了因资源不足导致的服务卡顿或崩溃,保障了用户的正常访问。

代码实现示例
Prometheus 配置文件(prometheus.yml)

global:scrape_interval: 15s
scrape_configs:
- job_name: 'kubernetes-pods'kubernetes_sd_configs:- role: podrelabel_configs:- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]action: keepregex: true- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]action: replacetarget_label: __metrics_path__regex: (.+)- source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]action: replacetarget_label: __address__regex: ([^:]+)(?::\d+)?;(\d+)replacement: $1:$2- action: labelmapregex: __meta_kubernetes_pod_label_(.+)- source_labels: [__meta_kubernetes_namespace]action: replacetarget_label: kubernetes_namespace- source_labels: [__meta_kubernetes_pod_name]action: replacetarget_label: kubernetes_pod_name

上述 Prometheus 配置文件用于采集 K8s 集群中的 Pod 指标,可根据实际情况调整采集规则。

  1. 告警与异常检测
    Prometheus的告警功能基于其灵活的规则配置,能够根据采集到的指标数据进行实时分析,当指标超出预设阈值时,及时触发告警。与Alertmanager集成后,可以实现多渠道的告警通知,如邮件、Slack等。在实际应用中,当K8s集群中某个节点的CPU使用率持续超过80%时,Prometheus能够迅速检测到并通过Alertmanager发送告警通知,运维人员可以及时采取措施,避免因资源耗尽导致的服务中断。

项目介绍

在中台交易系统的K8s集群中,我们设置Prometheus告警规则,当交易处理服务的响应时间超过500毫秒,且持续时间超过1分钟时,触发告警。同时,配置Alertmanager与企业内部的Slack群组集成。
有一次,告警触发,Alertmanager向指定的Slack群组发送通知,告知我交易处理服务出现性能问题。我立即介入,排查问题,发现是数据库连接池的配置出现了问题,部分连接没有及时释放,导致响应时间变长。经过调整数据库连接池的参数,交易处理服务恢复正常,确保了交易系统的稳定性和可靠性,避免了因交易延迟给用户带来损失。

代码实现示例
Prometheus 告警规则文件(alerts.yml)

groups:
- name: examplerules:- alert: HighCPUUsageexpr: node_cpu_usage_seconds_total{job="kubernetes-nodes"} > 0.8for: 1mlabels:severity: warningannotations:summary: "High CPU usage on node"description: "CPU usage on node {{ $labels.instance }} is above 80% for more than 1 minute."**代码实现(续)**:
**Alertmanager 配置文件(alertmanager.yml)**:
```yaml
global:slack_api_url: 'https://hooks.slack.com/services/your/slack/webhook/url'
route:receiver: 'slack-notifications'
receivers:
- name: 'slack-notifications'slack_configs:- channel: '#alerts'send_resolved: truetext: '{{ template "slack.overview". }}'
templates:
- '/etc/alertmanager/templates/*.tmpl'

代码示例讲解

上述 alertmanager.yml 配置文件将 Alertmanager 与 Slack 集成,当告警触发时,会将通知发送到指定的 Slack 频道。
alerts.yml 中的告警规则 HighCPUUsage 表示当节点的 CPU 使用率超过 80% 并持续 1 分钟时,会触发告警。可以根据实际需求修改告警规则和 Slack 频道信息。

三、K8s技术项目实战经验

(一)项目背景

公司计划将其核心业务系统从传统的物理机部署迁移到K8s容器化环境,以提升系统的可扩展性、弹性和资源利用率。该业务系统包含多个微服务,如用户管理、订单处理、支付服务等,每天处理海量的用户请求。

(二)实战经验

  1. 迁移策略与应用改造
    在迁移过程中,我们首先对各个微服务进行了容器化改造,将每个微服务打包成Docker镜像。然后,针对K8s的资源管理和调度机制,对微服务的资源请求和限制进行了重新评估和配置。例如,对于订单处理微服务,根据其历史业务数据和性能测试结果,合理设置了CPU和内存的请求与限制,确保在高并发场景下既能满足业务需求,又不会过度占用资源。同时,对微服务之间的通信进行了优化,引入了服务网格技术(Istio)来管理服务间的流量和通信安全。

具体介绍

以订单处理微服务为例,我们通过对历史订单数据的分析,发现该微服务在业务高峰期每秒处理订单数可达1000笔,而在低谷期每秒仅处理100笔。
基于此,在K8s环境中,为订单处理微服务设置CPU请求为2核心,限制为4核心;内存请求为4GB,限制为8GB。
在业务高峰期,订单处理微服务能够充分利用资源,快速处理订单,满足了业务需求;
在低谷期,又不会过度占用资源,节省了成本。

同时,引入Istio服务网格,对订单处理微服务与其他微服务(如库存管理微服务)之间的通信进行加密和流量控制。
设置订单处理微服务到库存管理微服务的请求速率限制为每秒500次,防止因流量过大导致库存管理微服务出现性能问题,保障了整个业务系统的稳定运行。

代码实现示例
订单处理微服务的 Pod 配置(order-processing-pod.yaml)

apiVersion: v1
kind: Pod
metadata:name: order-processing-podlabels:app: order-processing
spec:containers:- name: order-processing-containerimage: your-order-processing-imageresources:requests:cpu: "2"memory: "4Gi"limits:cpu: "4"memory: "8Gi"
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:name: order-processing-dr
spec:host: order-processingtrafficPolicy:connectionPool:http:http1MaxPendingRequests: 100maxRequestsPerConnection: 10outlierDetection:consecutiveErrors: 5interval: 10sbaseEjectionTime: 30smaxEjectionPercent: 50
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: order-processing-vs
spec:hosts:- order-processinghttp:- route:- destination:host: order-processingsubset: v1retries:attempts: 3perTryTimeout: 2s

代码示例讲解

上述代码中,order-processing-pod.yaml 为订单处理微服务的 Pod
定义了资源请求和限制。order-processing-drorder-processing-vs 利用 Istio 的
DestinationRuleVirtualService
对服务的流量进行管理,设置连接池和重试策略,可根据需要调整相关参数。

  1. 集群搭建与高可用配置
    我们搭建了一个多节点的K8s集群,采用主从架构,其中主节点负责集群的管理和调度,从节点负责运行容器化的应用。为确保集群的高可用性,对主节点进行了多副本部署,并使用了Keepalived和HAProxy等工具实现主节点的故障转移。在网络方面,采用了Calico作为网络插件,实现了集群内容器之间的高效网络通信和网络策略管理。同时,通过设置合适的节点亲和性和反亲和性规则,确保关键微服务能够分布在不同的节点上,避免单点故障。

具体介绍

我们搭建了一个由3个主节点和10个从节点组成的K8s集群。使用Keepalived配置虚拟IP地址,将其绑定到3个主节点上。
HAProxy作为负载均衡器,将集群管理请求均匀分配到3个主节点。
有一次,其中一个主节点出现硬件故障,Keepalived自动将虚拟IP地址切换到其他正常主节点,确保了集群管理服务不中断。
在网络方面,Calico为每个容器分配独立的IP地址,通过BGP协议实现容器之间的高效通信。对于关键微服务,如用户管理微服务,通过节点反亲和性规则,确保其3个副本分别分布在不同的从节点上。
后来,有一个从节点因网络故障离线,用户管理微服务的其他副本依然能够正常运行,保证了用户管理功能的可用性。

代码实现示例
Keepalived 配置示例(keepalived.conf)

vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 51priority 100virtual_ipaddress {192.168.1.100}
}

HAProxy 配置示例(haproxy.cfg)

frontend k8s-apibind *:6443mode tcpdefault_backend k8s-api-backendbackend k8s-api-backendmode tcpbalance roundrobinserver master1 192.168.1.101:6443 checkserver master2 192.168.1.102:6443 checkserver master3 192.168.1.103:6443 check

节点反亲和性规则示例(user-management-pod.yaml)

apiVersion: v1
kind: Pod
metadata:name: user-management-podlabels:app: user-management
spec:replicas: 3selector:matchLabels:app: user-managementtemplate:metadata:labels:app: user-managementspec:affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchLabels:app: user-managementtopologyKey: kubernetes.io/hostnamecontainers:- name: user-management-containerimage: your-user-management-image

代码示例讲解

上述代码中,keepalived.conf 配置了 Keepalived 的虚拟 IP 地址,haproxy.cfg 配置了
HAProxy 作为负载均衡器将请求分发给多个主节点,user-management-pod.yaml 为用户管理微服务的 Pod
配置了反亲和性规则,避免多个副本部署在同一节点。

(三)成果展示

  1. 资源利用率提升

迁移到K8s环境后,通过K8s的资源管理和调度优化,集群的资源利用率得到了显著提升。在相同的硬件资源条件下,能够承载更多的业务负载,物理服务器的数量减少了30%,有效降低了硬件成本。

在传统物理机部署时,运行公司核心业务系统需要100台物理服务器。迁移到K8s环境后,通过K8s的资源精细化管理和调度,CPU和内存的合理分配,以及容器的动态调度,同样的业务负载仅需70台物理服务器即可满足需求。这节省了30%的硬件资源,降低了硬件采购和运维成本,为公司带来了显著的经济效益。

  1. 业务弹性增强

K8s的弹性伸缩功能可依据业务流量自动调整微服务副本数。如订单处理微服务,高峰时从5个副本扩至20个,低谷时缩至3个,显著提升业务系统稳定性和用户体验,使业务中断时间减半。

商城促销时,因订单处理微服务的CPU使用率超80%,K8s将其副本数从5个扩至20个,用户下单等待时间从10秒缩至2秒;活动结束后,CPU使用率低于30%,副本数又自动减至3个,避免资源浪费,业务中断时间从10分钟降至5分钟。

代码实现示例
HorizontalPodAutoscaler 配置(order-processing-hpa.yaml)

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:name: order-processing-hpa
spec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: order-processing-deploymentminReplicas: 3maxReplicas: 20metrics:- type: Resourceresource:name: cputarget:type: UtilizationaverageUtilization: 80

上述 order-processing-hpa.yaml 为订单处理微服务配置了水平自动伸缩,根据 CPU 使用率自动调整副本数,可根据实际情况调整 minReplicasmaxReplicasaverageUtilization 等参数。

  1. 运维效率提高

通过使用 Helm 部署管理应用以及 Prometheus 和 Grafana 监控告警,运维效率大幅提升。传统微服务升级需 3 小时,包括下载包、配置环境和启动服务;而使用 Helm 仅需 5 分钟(执行 helm upgrade 命令并结合 Values 文件)。

借助 Prometheus 和 Grafana 监控,当微服务响应时间变长时,运维人员 1
分钟内即可收到告警通知,故障发现时间显著缩短。结合更优的问题定位解决流程,故障修复时间平均缩短 40%,极大提高了运维工作的效率和质量。

四、未来展望

云原生浪潮下,K8s前景佳。

  • 资源管理:结合机器学习等,实现精准资源预测与弹性分配,提升利用率和成本控制。
  • 网络策略:与零信任融合,强化身份验证授权,保网络安全。
  • 工具:Helm 完善生态,Prometheus 增强集成与告警。
  • 实践:更多行业向 K8s 迁移,在边缘计算、物联网领域可高效管理容器应用。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyCharm+RobotFramework框架实现UDS自动化测试- (四)项目实战0x10

1.环境搭建 硬件环境:CANoe、待测设备(包含UDS诊断模块) 2.pythonPyCharm环境 pip install robotframework pip install robotframework-ride pip install openpyxl pip install udsoncan pip install python-can pip install can-isotp3…

mybatis(19/134)

大致了解了一下工具类,自己手敲了一边,java的封装还是真的省去了很多麻烦,封装成一个工具类就可以不用写很多重复的步骤,一个工厂对应一个数据库一个environment就好了。 mybatis中调用sql中的delete占位符里面需要有字符&#xf…

学习ASP.NET Core的身份认证(基于JwtBearer的身份认证7)

本文验证基于请求头中传递token信息的认证方式,webapi项目的控制器类中新建如下函数,仅通过验证的客户端能调用,需要客户端请求在Header中添加’Authorization’: Bearer token’的键值对且通过token验证后才能调用。 [Authorize] [HttpGet]…

Linux:进程(三)

1. 进程创建补充 fork之后父子两个执行流分别执行,fork之后谁谁先执行由调度器来决定。 一般,父子代码共享。当父子不再写入时,数据也是共享的,但是当有一方要写入,就触发写时拷贝。 fork调用失败的原因 1. 系统中有…

一、vue智能Ai对话(高仿通义千问)普通版。

如需源码&#xff1a;请私信。 普通版视频地址&#xff1a;普通版视频 流式进阶版视频地址&#xff1a;流式进阶版视频 流式进阶版&#xff1a;流式进阶版源码 html结构和js方法&#xff1a; <!DOCTYPE html> <html lang"zh"><head><meta …

Taro+Vue实现图片裁剪组件

cropper-image-taro-vue3 组件库 介绍 cropper-image-taro-vue3 是一个基于 Vue 3 和 Taro 开发的裁剪工具组件&#xff0c;支持图片裁剪、裁剪框拖动、缩放和输出裁剪后的图片。该组件适用于 Vue 3 和 Taro 环境&#xff0c;可以在网页、小程序等平台中使用。 源码 https:…

【winRAR】windows11右键直接打开winRAR

总览 目前能够完成的操作不能像 win10 那样全面&#xff0c;需要做一些取舍&#xff0c;这两种解决后的样子任选其一&#xff1a; 1.右键之后&#xff0c;直接显示 “解压到当前文件夹” 2.右键之后&#xff0c;直接出现 winRAR 的母菜单&#xff0c;在鼠标 hover 到上面的时…

云计算、AI与国产化浪潮下DBA职业之路风云变幻,如何谋破局启新途?

引言 在近日举办的一场「云和恩墨大讲堂」直播栏目中&#xff0c;云和恩墨联合创始人李轶楠、副总经理熊军和欧冶云商数据库首席薛晓刚共同探讨了DBA的现状与未来发展。三位专家从云计算、人工智能、国产化替代等多个角度进行了深入的分析和探讨&#xff0c;为从业者提供了宝贵…

STM32 FreeRTOS 任务挂起和恢复---实验

实验目标 学会vTaskSuspend( )、vTaskResume( ) 任务挂起与恢复相关API函数使用&#xff1a; start_task:用来创建其他的三个任务。 task1&#xff1a;实现LED1每500ms闪烁一次。 task2&#xff1a;实现LED2每500ms闪烁一次。 task3&#xff1a;判断按键按下逻辑&#xff0c;KE…

2025年PHP面试宝典,技术总结。

面试是进入职场的第一道坎&#xff0c;因为我本身学校太一般的问题在面试中遇到了各种不爽&#xff0c;和那些高学历的相比自己真是信心大跌。我面试的方向是php开发工程师&#xff0c;主要做网站后台、APP接口等。下面是我这段时间总结的面试方面的常考常问的知识点&#xff0…

Python运算符

1、算术运算符 加 减— 乘* 除/ 整除// 取余% 幂运算** 优先级&#xff1a; 第1级&#xff1a;** 第2级&#xff1a;* &#xff0c; / &#xff0c; % &#xff0c;// 第3级&#xff1b; &#xff0c; - print("加", 1 4) print("减",8 - 19) p…

RTMP|RTSP播放器只解码视频关键帧功能探讨

技术背景 我们在做RTMP|RTSP直播播放器的时候&#xff0c;遇到过这样的技术诉求&#xff0c;在一些特定的应用场景中&#xff0c;可能只需要关键帧的信息&#xff0c;例如视频内容分析系统&#xff0c;可能只对关键帧进行分析&#xff0c;以提取特征、检测对象或场景变化。鉴于…

2024年度总结-CSDN

2024年CSDN年度总结 Author&#xff1a;OnceDay Date&#xff1a;2025年1月21日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 文章目录 2024年CSDN年度总结1. 整体回顾2…

【Node.js]

一、概述 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境 &#xff0c;使用了一个事件驱动、非阻塞式I/O模型&#xff0c; 让JavaScript 运行在服务端的开发平台&#xff0c;它让JavaScript成为与PHP、Python、Perl、Ruby等服务端语言平起平坐的脚本语言。 官网地…

【基于无线电的数据通信链】Link 11 仿真测试

〇、废话 Link 11 仿真测试 涉及多个方面&#xff0c;包括信号仿真、协议模拟、数据链路层的仿真以及网络性能评估等。Link 11 是一种基于 HF&#xff08;高频&#xff09; 或 UHF&#xff08;超高频&#xff09; 波段的无线通信协议&#xff0c;主要用于军事通信系统中。为了…

iOS 网络请求: Alamofire 结合 ObjectMapper 实现自动解析

引言 在 iOS 开发中&#xff0c;网络请求是常见且致其重要的功能之一。从获取资料到上传数据&#xff0c;出色的网络请求框架能夠大大提升开发效率。 Alamofire 是一个极具人气的 Swift 网络请求框架&#xff0c;提供了便据的 API 以完成网络请求和响应处理。它支持多种请求类…

分布式多卡训练(DDP)踩坑

多卡训练最近在跑yolov10版本的RT-DETR&#xff0c;用来进行目标检测。 单卡训练语句&#xff08;正常运行&#xff09;&#xff1a; python main.py多卡训练语句&#xff1a; 需要通过torch.distributed.launch来启动&#xff0c;一般是单节点&#xff0c;其中CUDA_VISIBLE…

RV1126+FFMPEG推流项目(8)AENC音频编码模块

本节分享的是AENC音频编码模块&#xff0c;是负责在AI模块通道里面取出收集到的音频数据&#xff0c;进行编码。了解AENC模块之前&#xff0c;先来看一个数据结构“RV1126_AENC_CONFIG”&#xff0c;这个数据结构是自己封装的&#xff0c;里面有AENC通道号&#xff0c;和内部描…

智能新浪潮:亚马逊云科技发布Amazon Nova模型

在2024亚马逊云科技re:Invent全球大会上&#xff0c;亚马逊云科技宣布推出新一代基础模型Amazon Nova&#xff0c;其隶属于Amazon Bedrock&#xff0c;这些模型精准切入不同领域&#xff0c;解锁多元业务可能&#xff0c;为人工智能领域带来革新。 带你认识一起了解Amazon Nova…

【Prometheus】PromQL进阶用法

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…