Kubernetes EKS 集群中的 IP 地址分配问题

简介: Kubernetes EKS 集群中的 IP 地址分配问题

运行 EKS 集群时,你可能会遇到两个问题:

  • 分配给 pod 的 IP 地址用完了。
  • 每个节点的 pod 数量少(由于 ENI 限制)。

在本文中,你将学习如何克服这些问题。

在我们开始之前,这里有一些关于节点内网络如何在 Kubernetes 中工作的背景知识。

创建节点时,kubelet 委托:

  1. 创建容器到容器运行时。
  2. 将容器连接到 CNI 的网络。
  3. 将卷安装到 CSI。

kubelet 将任务委托给 CRI、CNI 和 CSI

让我们关注 CNI 部分。

每个 pod 都有自己独立的 Linux 网络命名空间,并连接到一个网桥。

CNI 负责创建网桥、分配 IP 并将 veth0 连接到 cni0。

大多数情况下,一个节点上的所有容器都连接到一个网桥上

这通常会发生,但不同的 CNI 可能会使用其他方式将容器连接到网络。

例如,可能没有 cni0 网桥。

AWS-CNI 是此类 CNI 的一个示例。

并非所有 CNI 都使用网桥连接同一节点上的容器

在 AWS 中,每个 EC2 实例都可以有多个网络接口 (ENI)。

你可以为每个 ENI 分配有限数量的 IP。

例如,一个 m5.large 实例可以为 ENI 分配最多 10 个 IP。

在这 10 个 IP 中,你必须将一个分配给网络接口。

剩下的你可以不用管。

弹性网络接口和 IP 地址

以前,你可以使用额外的 IP 并将它们分配给 Pod。

但是有一个很大的限制:IP 地址的数量。

让我们看一个例子。

使用 m5.large 实例,你最多有 3 个 ENI,每个有 10 个 IP 私有地址。

由于保留了一个 IP,每个 ENI 还剩下 9 个(总共 27 个)。

这意味着你的 m5.large 实例最多可以运行 27 个 Pod。

这不是很多。

你最多可以在 m5.large 中拥有 27 个 pod

但是 AWS 发布了对 EC2 的更改,允许将“地址前缀”分配给网络接口。

地址前缀是什么?!

简而言之,ENI 现在支持范围而不是单个 IP 地址。

如果以前你可以拥有 10 个私有 IP 地址,那么现在你可以拥有 10 个 IP 地址槽。

地址槽有多大呢?

默认情况下,16 个 IP 地址。

使用 10 个槽,你最多可以拥有 160 个 IP 地址。

这是一个相当显着的变化!

让我们看一个例子。

EC2 中的地址前后对比

使用 m5.large 实例,你有 3 个 ENI,每个有 10 个插槽(或 IP)。

由于为 ENI 保留了一个 IP,因此你还剩下 9 个插槽。

每个插槽是 16 个 IP,所以是 9*16=144 个 IP。

由于有 3 个 ENI,那就是 144x3=432 个 IP。

你现在最多可以拥有 432 个 Pod(之前是 27 个)。

你最多可以在 m5.large 中拥有 432 个 pod

AWS-CNI 支持插槽并将 Pod 的最大数量限制为 110 或 250,因此你最多可以在 m5.large 中拥有 432 个 pod 。

还值得指出的是,这不是默认启用的——即使在较新的集群中也是如此。

可能是因为只有 nitro 实例支持它。

分配插槽非常棒,直到你意识到 CNI 一次提供 16 个 IP 地址,而不是仅提供 1 个,这具有以下含义:

  • 更快地耗尽 IP 空间。
  • 碎片化。

让我们回顾一下。

EC2 和 EKS 中的前缀问题

一个 pod 被调度到一个节点。

AWS-CNI 分配 1 个 slot(16 个 IP),pod 使用一个。

现在想象一下有 5 个节点和一个包含 5 个副本的部署。

会发生什么?

Kubernetes 调度程序更喜欢将 pod 分布在整个集群中。

很可能,每个节点接收 1 个 pod,AWS-CNI 分配 1 个插槽(16 个 IP)。

你从你的网络分配了 5*15=75 个 IP,但仅使用了 5 个。

使用 AWS CNI 分配 IP

但还有更多。

插槽分配一个连续的 IP 地址块。

如果分配了一个新 IP(例如创建了一个节点),你可能会遇到碎片问题。

怎么解决这些问题呢?

  • 你可以为 EKS 分配一个次级 CIDR。
  • 你可以在子网内保留 IP 空间供插槽独占使用。

相关链接:

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
11天前
|
Kubernetes 应用服务中间件 Docker
Kubernetes学习-集群搭建篇(二) 部署Node服务,启动JNI网络插件
Kubernetes学习-集群搭建篇(二) 部署Node服务,启动JNI网络插件
|
21小时前
|
存储 Kubernetes 调度
Kubernetes 集群的持续性能优化策略
【5月更文挑战第25天】 随着容器化技术的普及,越来越多的企业采用 Kubernetes 作为其服务部署和运维的标准平台。然而,随着集群规模的增长和应用复杂性的上升,性能问题逐渐浮现,成为系统管理员关注的焦点。本文将探讨在 Kubernetes 环境中进行持续性能优化的实践方法,旨在为读者提供一系列实用的调优技巧,帮助其提升集群的稳定性与效率。通过深入分析资源分配、调度优化、网络效率以及存储管理等方面的调优手段,我们将展示如何构建一个高效、可扩展的 Kubernetes 集群。
|
1天前
|
运维 监控 Kubernetes
Kubernetes 集群的监控与维护最佳实践
【5月更文挑战第25天】 在现代微服务架构中,容器编排平台如Kubernetes已成为不可或缺的组成部分。随着其广泛应用,对集群进行有效的监控和维护变得至关重要。本文将探讨针对Kubernetes集群监控的最佳工具选择、常见问题的诊断方法以及预防性维护措施。通过深入分析Prometheus和Grafana在性能监控中的应用,以及介绍如何使用ELK栈进行日志管理,文章旨在为运维专家提供一系列实用的策略和步骤,以确保集群的健康和优化性能。
|
2天前
|
Prometheus 运维 Kubernetes
Kubernetes 集群的监控与日志管理最佳实践
【5月更文挑战第23天】 在容器化和微服务架构日益普及的当下,Kubernetes 已成为众多企业的首选平台。随之而来的是对集群性能、资源利用和运行状况的持续监控需求,以及日志管理的重要性。本文将探讨在 Kubernetes 环境中实现有效监控和日志管理的策略,涵盖关键组件的选择、配置优化及故障排查流程,旨在为运维工程师提供一套综合解决方案,确保集群的稳定性和高可用性。
|
2天前
|
存储 运维 Kubernetes
Kubernetes 集群的持续性能优化策略
【5月更文挑战第23天】 在动态且日益复杂的云计算环境中,维护 Kubernetes 集群的性能是一个不断进化的挑战。本文深入探讨了一系列实用的技术手段和最佳实践,旨在帮助运维专家持续优化其 Kubernetes 环境。通过分析关键组件、资源调度策略、网络效率以及存储优化等方面,我们提出了一套综合性能提升方案。这些策略不仅有助于提高系统的响应能力和资源利用率,还能确保长期的稳定运行。
|
3天前
|
存储 运维 监控
Kubernetes 集群的监控与维护策略
【5月更文挑战第23天】在微服务架构日益普及的当下,容器化技术与编排工具如Kubernetes已成为部署和管理应用程序的重要手段。然而,随着集群规模的扩大和复杂性的增加,确保系统的稳定性和高效性成为了一项挑战。本文将深入探讨针对Kubernetes集群的监控和维护策略,旨在为运维人员提供一套系统的方案,以实现对集群状态的实时监控、性能优化和故障快速响应。
|
4天前
|
存储 Kubernetes 监控
Kubernetes 集群的持续性能优化策略
【5月更文挑战第22天】 在微服务架构日益普及的背景下,容器编排成为关键性技术之一。其中,Kubernetes 凭借其强大的功能、灵活的扩展性和便捷的管理特性,成为业界广泛采用的解决方案。然而,随着集群规模的扩大和业务复杂度的增加,性能问题逐渐凸显,影响系统稳定性和响应效率。本文聚焦于 Kubernetes 集群的性能优化,提出一系列持续优化的策略,旨在帮助运维人员系统性地分析和解决性能瓶颈,提升集群运行效率。通过实际案例分析与经验总结,为读者呈现一套实用的性能调优方法论。
|
6天前
|
运维 监控 Kubernetes
Kubernetes 集群的监控与日志管理最佳实践
【5月更文挑战第19天】 在现代微服务架构中,容器编排平台如Kubernetes已成为部署、管理和扩展应用程序的关键工具。随着其应用范围不断扩大,集群的稳定性和性能监控变得至关重要。本文将探讨针对Kubernetes集群的监控策略,并深入分析日志管理的实现方法。通过介绍先进的技术堆栈和实用工具,旨在为运维专家提供一套完整的解决方案,以确保集群运行的透明度和可靠性。
39 3
|
7天前
|
存储 运维 监控
Kubernetes 集群的监控与性能优化策略
【5月更文挑战第19天】 在微服务架构日益普及的背景下,容器编排工具如Kubernetes已成为部署、管理和扩展服务的关键平台。然而,随着集群规模的增长和服务的复杂化,有效的监控和性能优化成为确保系统稳定性和高效性的重要挑战。本文将探讨针对Kubernetes集群监控的最佳实践,并提出一系列性能优化策略,旨在帮助运维人员识别潜在的瓶颈,保障服务的持续可靠性及响应速度。
|
9天前
|
资源调度 Kubernetes 监控
Kubernetes 集群性能优化实践
【5月更文挑战第17天】在容器化和微服务架构日益普及的当下,Kubernetes 已成为众多企业的首选容器编排工具。然而,随着集群规模的增长和业务复杂度的提升,性能优化成为确保系统稳定性与高效运行的关键。本文将深入探讨 Kubernetes 集群性能优化的策略与实践,覆盖从节点资源配置到网络通信优化,再到高效的资源调度机制,旨在为运维人员提供系统的优化路径和具体的操作建议。