开发者社区> 科技小能手> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

实用干货: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资源中包含的可配置规则支持非常详细和高度细化的负载均衡,可以根据应用程序的功能要求极其运行条件进行定制。


本文转自 RancherLabs 51CTO博客,原文链接:http://blog.51cto.com/12462495/2073022

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Kubernetes上的负载均衡详解
如果您的应用程序是面向大量用户、会吸引大量流量,那么一个不变的目标一定是在高效满足用户需求的同时、不让用户感知到任何类似于“服务器繁忙!”的情况。这一诉求的典型解决方案是横向扩展部署,以便有多个应用程序容器可以为用户请求提供服务。
2065 0
大规模 Kubernetes 集群故障注入的利器-ChaosBlade
本文将主要介绍 ChaosBlade 在 Kubernetes 中故障注入的底层实现原理、版本优化过程以及大规模应用演练测试。01
0 0
蚂蚁大规模 Kubernetes 集群无损升级实践指南【探索篇】
蚂蚁 Sigma 作为蚂蚁集团核心的基础设施,经过多年的发展其规模已经处于业界领先位置,大规模集群对 Kubernetes 的稳定性及功能性提出更高的要求。蚂蚁 Sigma 力争在万级规模的云原生环境下,挑战高效稳定、无损无感的云原生操作系统升级,给用户带来极致稳定的、功能新颖的云原生服务。
0 0
Kubernetes 集群部署 Redis + redis_exporter (单点)
在使用 Kubernetes 部署应用后,一般会习惯与将应用的配置文件外置,用 ConfigMap 存储,然后挂载进入镜像内部。这样,只要修改 ConfigMap 里面的配置,再重启应用就能很方便就能够使应用重新加载新的配置,很方便。
0 0
Kubernetes 集群部署 NFS-Subdir-External-Provisioner 存储插件
Kubernetes 对 Pod 进行调度时,以当时集群中各节点的可用资源作为主要依据,自动选择某一个可用的节点,并将 Pod 分配到该节点上。在这种情况下,Pod 中容器数据的持久化如果存储在所在节点的磁盘上,就会产生不可预知的问题,例如,当 Pod 出现故障,Kubernetes 重新调度之后,Pod 所在的新节点上,并不存在上一次 Pod 运行时所在节点上的数
0 0
Kubernetes 集群可视化监控之Weave Scope
weave scope 可以以其简洁的可视化为我们更生动形象的展现出service/controller/pod等资源对象的管理及简单的 Web UI 操作,方便故障排除及时定位。
0 0
Kubernetes 集群基本概念
Kubernetes 集群基本概念
0 0
如果你非要在 Kubernetes 集群中用 nscd
前言我写了一篇文档《Kubernetes 集群中的 DNS 最佳实践》,其中提到你可以使用 nscd 作为容器内的 DNS 缓存。对,只写了这简单一句话,但没有提到其具体的实现方案。原因是 nscd 方案可能是我最不推荐的方案,本文将阐述你应该优先考虑的方案、为什么不推荐 nscd、以及如何合理地在 Kubernetes 集群中使用 nscd。更好的方案连接池在 Kubernetes 集群中 DN
0 0
Kubernetes集群添加用户
Kubernetes集群添加用户
0 0
自建Kubernetes集群如何使用免密组件拉取容器镜像
aliyun-acr-credential-helper是一个可以在ACK集群中免密拉取ACR个人版或企业版私有镜像的组件。该组件会默认安装在所有ACK集群中。本文列举四个场景介绍如何使用免密组件拉取私有镜像。
0 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
大规模场景下KubernetesService 负载均衡性能
立即下载
基于Kubernetes的互联网Ingress实践
立即下载
基于kubernetes的互联网ingress实践
立即下载