Kubernetes 中 4 种容器设计模式

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
日志服务 SLS,月写入数据量 50GB 1个月
简介: Kubernetes 中 4 种容器设计模式

屏幕截图 2023-09-06 104734.png

基于云原生的新应用程序在 Kubernetes 集群运行没有问题,但是当你有旧应用程序时会发生什么情况:

  • 记录到文件而不是标准输出?
  • 不支持Prometheus?
  • 不支持HTTPS?

首先,让我们了解一些基础知识。

在Kubernetes中,一个Pod是一组容器。

容器使用两个Linux原语进行隔离:控制组命名空间

  • 控制组用于限制资源(最大256MB内存)。
  • 命名空间用于隔离(只能看到此文件夹)。

屏幕截图 2023-09-06 104747.png

控制组和Linux命名空间是容器的基本原语。

除了网络之外,Pod中的所有容器都是隔离的。

网络是共享的,一个IP地址分配给Pod中的所有容器(Pod的IP地址)。

屏幕截图 2023-09-06 104800.png

同一个Pod中的容器共享相同的网络命名空间。

为什么需要在Pod中运行多个容器?

如果你不能(或不想)更改应用程序中的代码,你可能需要通过其他方式来调整其功能。

让我们看一个例子。

最近的Elasticsearch版本支持TLS,但长时间以来这是一个付费的额外功能。

你如何使用TLS保护流量?

你可以将代理作为一个容器添加到你的Pod中。

屏幕截图 2023-09-06 104811.png

(加密的)流量首先到达代理,然后到达(未加密的)Elasticsearch。

流量在到达ElasticSearch之前由NGINX容器代理。 另一个例子是在没有Ingress的情况下将你的应用程序暴露给公共互联网。

Cloudflare隧道运行一个代理与应用程序一起,并代理所有的流量。

tunneld代理将流量隧道传输到Cloudflare网络。

屏幕截图 2023-09-06 104822.png

当你想要使用Prometheus,但你的应用程序具有自定义的指标公开格式时,会发生什么情况?

如果你使用一个适配器,就不需要更改代码。

例如:Elasticsearch不暴露Prometheus指标。

适配器来解救!

容器将Elasticsearch指标适配为与Prometheus兼容。

当你在Pod中有一个额外的容器来处理输入时,这被称为Ambassador模式。

如果它处理主容器的输出,那么它就是一个适配器。

屏幕截图 2023-09-06 104833.png

适配器与Ambassador模式

在Kubernetes中,应用程序的默认日志输出是打印到标准输出(stdout)。

那么如果你的应用程序将日志记录到文件中,该怎么收集日志呢?

你可以使用一个容器来检索日志文件的内容并将其打印到标准输出(stdout)。

Sidecar容器检索文件内容并将其打印到标准输出(stdout)。

其他Sidecar包括注入密钥、在ConfigMaps发生更改时重新加载应用程序、缓存等容器。

任何增强你的应用程序的容器通常被称为Sidecar容器。

示例包括:

  • 注入密钥
  • 在ConfigMaps发生更改时重新加载
  • 缓存

Elasticsearch建议在应用程序启动之前将虚拟内存设置为较高的值(即mmap计数)。

你如何在Kubernetes中做到这一点? 它是在“普通”容器启动之前运行完毕的容器。

你可以使用Kubernetes中的Init容器

屏幕截图 2023-09-06 104847.png

因此,如果你要将现有应用迁移到Kubernetes中,你有四种模式可供选择:

  • Ambassador(大使模式)
  • Adapter(适配器模式)
  • Sidecar(边车模式)
  • Init(初始化模式)
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
4天前
|
Kubernetes 监控 开发者
掌握容器化:Docker与Kubernetes的最佳实践
【10月更文挑战第26天】本文深入探讨了Docker和Kubernetes的最佳实践,涵盖Dockerfile优化、数据卷管理、网络配置、Pod设计、服务发现与负载均衡、声明式更新等内容。同时介绍了容器化现有应用、自动化部署、监控与日志等开发技巧,以及Docker Compose和Helm等实用工具。旨在帮助开发者提高开发效率和系统稳定性,构建现代、高效、可扩展的应用。
|
11天前
|
Kubernetes 监控 Cloud Native
|
4天前
|
Kubernetes 负载均衡 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第27天】Kubernetes(简称K8s)是云原生应用的核心容器编排平台,提供自动化、扩展和管理容器化应用的能力。本文介绍Kubernetes的基本概念、安装配置、核心组件(如Pod和Deployment)、服务发现与负载均衡、网络配置及安全性挑战,帮助读者理解和实践Kubernetes在容器编排中的应用。
19 4
|
5天前
|
Kubernetes 监控 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第26天】随着云计算技术的发展,容器化成为现代应用部署的核心趋势。Kubernetes(K8s)作为容器编排领域的佼佼者,以其强大的可扩展性和自动化能力,为开发者提供了高效管理和部署容器化应用的平台。本文将详细介绍Kubernetes的基本概念、核心组件、实践过程及面临的挑战,帮助读者更好地理解和应用这一技术。
23 3
|
6天前
|
存储 运维 Kubernetes
云端迁移:备份中心助力企业跨云迁移K8s容器服务平台
本文将简要介绍阿里云容器服务ACK的备份中心,并以某科技公司在其实际的迁移过程中遇到具体挑战为例,阐述如何有效地利用备份中心来助力企业的容器服务平台迁移项目。
|
7天前
|
运维 Kubernetes Cloud Native
云原生入门:Kubernetes和容器化的未来
【10月更文挑战第23天】本文将带你走进云原生的世界,探索Kubernetes如何成为现代软件部署的心脏。我们将一起揭开容器化技术的神秘面纱,了解它如何改变软件开发和运维的方式。通过实际的代码示例,你将看到理论与实践的结合,感受到云原生技术带来的革命性影响。无论你是初学者还是有经验的开发者,这篇文章都将为你开启一段新的旅程。让我们一起踏上这段探索之旅,解锁云原生技术的力量吧!
|
3天前
|
设计模式 安全 Java
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
|
2月前
|
设计模式 数据库连接 PHP
PHP中的设计模式:提升代码的可维护性与扩展性在软件开发过程中,设计模式是开发者们经常用到的工具之一。它们提供了经过验证的解决方案,可以帮助我们解决常见的软件设计问题。本文将介绍PHP中常用的设计模式,以及如何利用这些模式来提高代码的可维护性和扩展性。我们将从基础的设计模式入手,逐步深入到更复杂的应用场景。通过实际案例分析,读者可以更好地理解如何在PHP开发中应用这些设计模式,从而写出更加高效、灵活和易于维护的代码。
本文探讨了PHP中常用的设计模式及其在实际项目中的应用。内容涵盖设计模式的基本概念、分类和具体使用场景,重点介绍了单例模式、工厂模式和观察者模式等常见模式。通过具体的代码示例,展示了如何在PHP项目中有效利用设计模式来提升代码的可维护性和扩展性。文章还讨论了设计模式的选择原则和注意事项,帮助开发者在不同情境下做出最佳决策。
|
6天前
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###
|
22天前
|
设计模式 Java Kotlin
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
本教程详细讲解Kotlin语法,适合希望深入了解Kotlin的开发者。对于快速学习Kotlin语法,推荐查看“简洁”系列教程。本文重点介绍了构建者模式在Kotlin中的应用与改良,包括如何使用具名可选参数简化复杂对象的创建过程,以及如何在初始化代码块中对参数进行约束和校验。
18 3

推荐镜像

更多