Kubernetes-SiderCar&服务网格(Service Mesh)

作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

我们上一章介绍了Docker基本情况,目前在规模较大的容器集群基本都是Kubernetes,但是Kubernetes涉及的东西和概念确实是太多了,而且随着版本迭代功能在还增加,笔者有些功能也确实没用过,所以只能按照我自己的理解来讲解。

我们前面讲Pod介绍的时候就介绍过一个Pod里面可以有多个容器,不同的容器承担不同的任务。在前面介绍InitContainer的时候也介绍过初始化容器是做什么的,实际上这个SiderCar也是在Pod里面跑多个容器,但是他们有啥区别呢?

严格来说SiderCar并不是属于Kubernnetes里面的资源,而是针对Pod里面多容器的一种设计模式,或者通俗来说就是一种Pod里面的多容器的一种用法,前面我们的多容器实际上还是和业务强相关的,但是我们通过SiderCar这里注入的Pod实际上它和业务并不相关,而是为了达到某一种目的向里面注入的非业务容器。

在 Kubernetes(简称 K8s)中,sidecar 是一种设计模式,它涉及在同一个 Pod 中运行一个或多个辅助容器来支持主容器(主应用程序)。Sidecar 容器与主容器同时运行,可以执行多种辅助任务,如日志记录、监控、配置、更新、代理等。

以下是 sidecar 模式的一些常见用途:

  1. 日志收集:Sidecar 可以用来收集主应用程序容器的日志,并将其转发到中央日志管理系统。

  2. 服务网格代理:在服务网格架构中,如 Istio,sidecar 代理(通常是 Envoy)被用于处理服务间的通信,包括流量管理、安全性、策略实施等。

  3. 配置管理:Sidecar 可以用来从配置中心获取配置,并将其传递给主应用程序容器。

  4. 健康检查和自愈:Sidecar 可以监控主应用程序的健康状况,并在检测到问题时重启主应用程序或 Pod。

  5. 资源清理:在主应用程序容器停止后,sidecar 可以负责清理资源,如临时文件或锁。

  6. 适配和桥接:当主应用程序需要与外部系统交互,但又不方便直接修改主应用程序时,可以使用 sidecar 进行适配或桥接。

下面是一个简单的 Kubernetes Pod 配置示例,其中包含一个主应用程序容器和一个 sidecar 容器:

apiVersion: v1
kind:Pod
metadata:
name:myapp-pod
labels:
    app:myapp
spec:
containers:
-name:myapp-container
    image:myapp-image
    ports:
    -containerPort:80
-name:sidecar-container
    image:sidecar-image
    volumeMounts:
    -name:shared-logs
      mountPath:/var/log
volumes:
-name:shared-logs
    emptyDir: {}

在这个例子中,myapp-container 是主应用程序容器,而 sidecar-container 是辅助容器,它可能负责日志收集等任务。两个容器共享 shared-logs 卷,这样 sidecar 容器可以访问主应用程序的日志文件。

使用 sidecar 模式可以带来以下好处:

  • 解耦:通过将辅助任务从主应用程序中分离出来,可以简化主应用程序的设计和部署。
  • 灵活性:可以独立于主应用程序更新和扩展 sidecar 容器。
  • 可重用性:相同的 sidecar 容器可以在多个不同的应用程序中使用。

基于 Sidecar 模式,已经发展出了一些重要的产品和框架,其中最著名的包括:

服务网格(Service Mesh):服务网格是一种用于处理服务间通信的基础设施层。它通过在应用程序旁部署轻量级代理(即 Sidecar)来控制服务间的通信。Istio 和 Linkerd 是服务网格的两个主要实现,它们利用 Sidecar 模式来提供负载均衡、服务发现、流量管理、熔断、遥测等功能。

Rainbond:Rainbond 是一个基于 Kubernetes 的云原生应用管理平台,它集成了 Sidecar 模式,用于实现服务网格等功能。它通过 Sidecar 容器来扩展和增强应用程序的能力

云原生技术:在云原生技术领域,Sidecar 模式被广泛应用于构建高度可扩展、弹性和安全性的微服务架构。这种模式有助于降低微服务架构的复杂性,并提供了许多关键功能,如日志记录、监控、配置管理、服务发现等。

Service Mesh 是一种架构模式,用于处理服务间通信。随着微服务架构的流行,应用程序被拆分为更小、独立部署的服务单元,这些服务需要相互之间进行安全且可靠的通信。Service Mesh 提供了一个基础设施层来管理这些服务间的复杂通讯。

服务网格的组件

  1. 数据平面:数据平面由一组智能代理(通常称为 sidecar)组成,这些代理与服务实例一起部署在同一个主机上。每个代理负责处理入站和出站的网络通信,例如请求路由、负载均衡、熔断、重试等。

  2. 控制平面:控制平面是服务网格的大脑,它负责管理和配置数据平面代理。控制平面通常包括以下功能:

    • 服务发现

    • 路由规则配置

    • 安全策略实施

    • 监控和遥测数据的聚合

服务网格的关键功能

动态服务发现:服务网格能够自动发现服务实例,并更新服务列表,以便正确路由请求。

负载均衡:服务网格可以基于不同的算法(如轮询、最小连接数等)分配流量到服务实例。

故障恢复:当服务实例不可用时,服务网格可以自动尝试其他实例,或者执行重试策略。

熔断:为了防止系统雪崩,服务网格可以在服务实例无法处理更多请求时自动断开连接。

安全通信:服务网格可以加密服务间的通信,并提供服务身份验证和授权。

监控和跟踪:服务网格收集有关服务间通信的遥测数据,包括延迟、错误率和其他关键指标。

流量控制:服务网格允许管理员定义细粒度的流量控制策略,如金丝雀部署、蓝绿部署等。

服务网格的优势

解耦网络功能:服务网格将网络功能从应用程序代码中解耦出来,使得开发者可以专注于业务逻辑。

透明性:服务网格对应用程序透明,不需要修改应用程序代码即可实现网络功能。

跨语言和平台:服务网格适用于多种编程语言和平台,为微服务提供一致的网络管理。

易于管理和维护:服务网格提供集中式的管理和控制,简化了运维工作。

Service Mesh 架构图

简单来说就是原来服务A访问服务B,以前是直接访问,现在由于sidecar和服务是在同一个网络层面,就可以通过控制sidecar注入不同的访问规则从而实现对服务A访问服务B鉴权,熔断等操作。

由于目前我对这个还没有真实使用经验,而且在中小规模集群里面也很难用到这个功能,所以我这里只能做一个很简单介绍。

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值