Kubernetes 中 4 种容器设计模式

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
可观测监控 Prometheus 版,每月50GB免费额度
日志服务 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搭建和管理企业级网站应用
相关文章
|
6天前
|
Kubernetes 监控 开发者
掌握容器化:Docker与Kubernetes的最佳实践
【10月更文挑战第26天】本文深入探讨了Docker和Kubernetes的最佳实践,涵盖Dockerfile优化、数据卷管理、网络配置、Pod设计、服务发现与负载均衡、声明式更新等内容。同时介绍了容器化现有应用、自动化部署、监控与日志等开发技巧,以及Docker Compose和Helm等实用工具。旨在帮助开发者提高开发效率和系统稳定性,构建现代、高效、可扩展的应用。
|
14天前
|
Kubernetes 监控 Cloud Native
|
7天前
|
Kubernetes 负载均衡 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第27天】Kubernetes(简称K8s)是云原生应用的核心容器编排平台,提供自动化、扩展和管理容器化应用的能力。本文介绍Kubernetes的基本概念、安装配置、核心组件(如Pod和Deployment)、服务发现与负载均衡、网络配置及安全性挑战,帮助读者理解和实践Kubernetes在容器编排中的应用。
29 4
|
7天前
|
Kubernetes 监控 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第26天】随着云计算技术的发展,容器化成为现代应用部署的核心趋势。Kubernetes(K8s)作为容器编排领域的佼佼者,以其强大的可扩展性和自动化能力,为开发者提供了高效管理和部署容器化应用的平台。本文将详细介绍Kubernetes的基本概念、核心组件、实践过程及面临的挑战,帮助读者更好地理解和应用这一技术。
30 3
|
8天前
|
存储 运维 Kubernetes
云端迁移:备份中心助力企业跨云迁移K8s容器服务平台
本文将简要介绍阿里云容器服务ACK的备份中心,并以某科技公司在其实际的迁移过程中遇到具体挑战为例,阐述如何有效地利用备份中心来助力企业的容器服务平台迁移项目。
|
10天前
|
运维 Kubernetes Cloud Native
云原生入门:Kubernetes和容器化的未来
【10月更文挑战第23天】本文将带你走进云原生的世界,探索Kubernetes如何成为现代软件部署的心脏。我们将一起揭开容器化技术的神秘面纱,了解它如何改变软件开发和运维的方式。通过实际的代码示例,你将看到理论与实践的结合,感受到云原生技术带来的革命性影响。无论你是初学者还是有经验的开发者,这篇文章都将为你开启一段新的旅程。让我们一起踏上这段探索之旅,解锁云原生技术的力量吧!
|
2天前
|
关系型数据库 MySQL API
|
19天前
|
存储 Docker 容器
docker中挂载数据卷到容器
【10月更文挑战第12天】
47 5
|
3天前
|
Java 应用服务中间件 Linux
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
本文主要讲解了Docker的安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库以及Docker容器虚拟化与传统虚拟机比较。
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
|
4天前
|
JavaScript 持续交付 Docker
解锁新技能:Docker容器化部署在微服务架构中的应用
【10月更文挑战第29天】在数字化转型中,微服务架构因灵活性和可扩展性成为企业首选。Docker容器化技术为微服务的部署和管理带来革命性变化。本文探讨Docker在微服务架构中的应用,包括隔离性、可移植性、扩展性、版本控制等方面,并提供代码示例。
29 1