11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

Kubernetes 中的负载均衡全解

  • 2020-04-12
  • 本文字数:2115 字

    阅读完需:约 7 分钟

Kubernetes中的负载均衡全解

很多企业在部署容器的时候都会选择 Kubernetes 作为其容器编排系统。这是对 Kubernetes 的可靠性、灵活性和特性广泛的肯定。在这篇文章中,我们将对 Kubernetes 如何处理一个非常常见且必要的工作——负载均衡,进行深入的解读。在许多非容器环境(即服务器之间的均衡)中,负载均衡是一个相对简单的任务,但当涉及到容器时,就需要一些其他的、特殊的处理。


管理容器

要理解 Kubernetes 的负载均衡,首先需要了解 Kubernetes 是如何组建容器的。


容器通常用来执行特定的服务或者一组服务,因此需要根据他们提供的服务来看待它们,而不是仅当作服务的单个实例(即单个容器)。实际上,这就是 Kubernetes 所做的。


把它们放置在 Pods 中

在 Kubernetes 中,pod 是一种基本功能单元。一个 pod 是一组容器以及它们共享的卷(volumes)。容器在功能和服务方面通常是密切相关联的。


将具有相同功能集的 pods 抽象成集合,就称为服务。这些服务接受基于 Kubernetes 搭建的应用程序客户端访问;这些独立的 pod 中的服务,反过来可以管理对构成它们的容器的访问,使得客户端与容器本身隔离。


管理 Pods

现在我们来看看一些具体细节。Pods 通常由 Kubernetes 创建和销毁,而不是设计成持久化实体。每个 pod 都有自己的 IP 地址(基于本地地址)、UID 和端口号;新创建的 pod,无论它们是当前 pod 还是之前的 pod 的副本,都会分配新的 UID 和 IP 地址。


每个 pod 内部是可以进行容器之间的通信的,但是不能与不同 pod 中的容器直接通信。


让 Kubernetes 处理事务

Kubernetes 使用自己的内置工具来管理和单个 pod 之前的通信。这说明一般情况下,依靠 Kubernetes 内部监控 pods 就足够了,不必担心 pods 的创建、删除或者复制。不过,有时也需要 Kubernetes 管理的应用程序中至少某些内部元素对底层网络可见。发生这种情况时,方案必须考虑到缺少永久 IP 地址该怎么处理。


Pods 和节点(Nodes)

在许多方面上,Kubernetes 都可看作是一个 pod 管理系统,就像容器管理系统一样。大部分基础设施都是在 pod 层面处理容器,而不是在容器层面。


从 Kubernetes 内部管理来看,pod 上面的组织级别相当于节点,是一个虚拟机,包含了管理和通信的资源并且是部署 pod 的环境。节点本身也可以在内部创建、销毁和替换/重新部署。无论是节点层面还是 pod 层面,它们的创建、销毁、重新部署、使用和扩展等功能都由被称为控制器(Controller)的内部进程处理。


充当调度者的“服务”

服务(service)是 Kubernetes 在管理层面处理容器和 pods 的方式。不过正如我们上面提到的,它还将功能相关或相同的 pods 抽象成服务,并且在外部客户端和应用程序中其他元素与 pod 交互时,Kubernetes 处在服务层面


服务有相对稳定的 IP 地址(由 Kubernetes 内部使用)。当一个程序需要使用由服务中的功能时,它会向服务、而非向单个 pod 提出请求。接着该服务会作为调度员,分配一个 pod 来处理请求。


调 ## 度和负载分配


看到这里你可能会想,负载均衡会不会是在调度层面进行的?事实确实如此。Kubernetes 的服务有点像一个巨大的设备池,根据需要将功能相同的机器送入指定区域。作为调度过程的一部分,它需要充分考虑管理可用性,避免遇到资源瓶颈。


让 kube-proxy 来执行负载均衡

Kubernetes 中最基本的负载均衡类型实际上是负载分配(load distribution),这在调度层面是容易实现的。Kubernetes 使用了两种负载分配的方法,都通过 kube-proxy 这一功能执行,该功能负责管理服务所使用的虚拟 IPs。


Kube-proxy 的默认模式是 iptables,它支持相当复杂的基于规则的 IP 管理。iptables 模式下,负载分配的本地方法是随机选择——由一个传入的请求去随机选择一个服务中的 pod。早先版本(以及原来的默认模式)的 kube-proxy 模式是 userspace,它使用循环的负载分配,在 IP 列表上来分配下一个可以使用的 pod,然后更换(或置换)该列表。


真正的负载均衡:Ingress

我们之前提到了两种负载均衡的方法,然而,这些并不是真正的负载均衡。为了实现真正的负载均衡,当前最流行、最灵活、应用于很多领域的方法是 Ingress,它通过在专门的 Kubernetes pod 中的控制器进行操作。控制器包括一个 Ingress 资源——一组管理流量的规则和一个应用这些规则的守护进程。


控制器有自己内置的负载均衡特性,具备一些相当复杂的功能。你还可以让 Ingress 资源包含更复杂的负载均衡规则,来满足对具体系统或供应商的负载均衡功能和需求。


使用负载均衡器作为替代品

除了 Ingress,你还可以使用负载均衡器类型的服务来替代它。该服务使用基于云服务的外部负载均衡器。负载均衡器只能与 AWS、Azure、OpenStack、CloudStack 和 Google Compute Engine 等特定的云服务提供商一起使用,且均衡器的功能根据提供者而定。除此之外其他的负载均衡方法可以从服务提供商以及第三方获得。


总的来说,还是推荐 Ingress

当前 Ingress 是首选的负载均衡方法。因为它是作为一个基于 pod 的控制器在 Kubernetes 内部执行,因此对 Kubernetes 功能的访问相对不受限制(不同于外部负载均衡器,它们中的一些可能无法在 pod 层面访问)。Ingress 资源中包含的可配置规则支持非常详细和高度细化的负载均衡,可以根据应用程序的功能要求极其运行条件进行定制。


2020-04-12 20:40369

评论

发布
暂无评论
发现更多内容

区块链技术最重要价值所在

CECBC

区块链 数字经济 互联网革命

SpringBoot写后端接口,看这一篇就够了!

华为云开发者联盟

后端 swagger pringboot

哈哈,成为作者了

大海

两年Java开发经验赶上金九招聘季涨到23K,这究竟是怎么做到的?

Java架构师迁哥

我敢说,这个版本的斗地主你肯定没玩过?

华为云开发者联盟

命令行 游戏 斗地主

彻底理解JavaScript执行上下文

Walker

Java 大前端 this指针 函数执行

Mysql学习笔记:InnoDB索引结构浅析

马迪奥

MySQL 索引结构 innodb

如何正确设置Java.home

谷鱼

在Ubuntu 20.04 搭建 Django 开发环境 以及 快速构建一个简单的 Blog

Matrix Chan

Python django 后端 Ubuntu20.04

Apache Pulsar 在腾讯 Angel PowerFL 联邦学习平台上的实践

Apache Pulsar

Apache 学习 开源 Apache Pulsar

区块链技术与我们的生活将并存

CECBC

区块链 数字经济

我写了一个TypeScript虚拟机。

渔子长

Java typescript 大前端 deno Node

繁星计划将成为引领全球币值管理的带动计划!

InfoQ_967a83c6d0d7

@所有人 Flink Forward Asia 2020 向您发出议题征集邀请!

Apache Flink

flink

USDT跑分承兑系统开发,区块链支付平台搭建

LeetCode题解:206. 反转链表,双指针,JavaScript,详细注释

Lee Chen

大前端 LeetCode

读书笔记之《普罗普:故事形态学》

AI代笔

区块链合约层是一种自动执行的数字协议

CECBC

区块链 智能合约

用Go-Guardian写一个Golang的可扩展的身份认证

朱亚光

微服务 身份认证 Go 语言

Clickhouse在大数据分析平台-留存分析上的应用

腾讯云大数据

大数据

百度大脑6.0重磅升级 不断进阶中的中国AI底座实力尽显

脑极体

Java面试史上最全的JAVA专业术语面试100问 (前1-50)

Java架构师迁哥

端-边-云全面协同创新 英特尔携手百度共推产业智能化升级

新闻科技资讯

开源决策树工具xDecision简介

赫杰辉

决策树 可视化 简化代码

滴滴基于 Flink 的实时数仓建设实践

Apache Flink

flink

服务质量分析:腾讯会议&腾讯云Elasticsearch玩出了怎样的新操作?

腾讯云大数据

大数据

金融企业敏捷转型大咖风采 | 中国出口信用保险公司的 DevOps 落地之道

Atlassian

项目管理 DevOps 敏捷 行业资讯 Atlassian

Mysql学习笔记:分库分表(sharding)

马迪奥

MySQL Sharding

如何让知识图谱告诉你“故障根因”

华为云开发者联盟

华为云 知识图谱 图谱

Netty之旅三:Netty服务端启动源码分析,一梭子带走!

一枝花算不算浪漫

Netty

介绍

剑心

学习

Kubernetes中的负载均衡全解_文化 & 方法_Rancher_InfoQ精选文章