Kubernetes 中 4 种容器设计模式

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 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(初始化模式)
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
12天前
|
存储 Kubernetes C++
【专栏】Kubernetes VS Docker Swarm:哪个容器编排工具更适合你?
【4月更文挑战第27天】对比Kubernetes和Docker Swarm:K8s在可扩展性和自动化方面出色,有强大社区支持;Swarm以简易用著称,适合初学者。选择取决于项目需求、团队技能和预期收益。高度复杂项目推荐Kubernetes,快速上手小项目则选Docker Swarm。了解两者特点,助力选取合适容器编排工具。
|
20小时前
|
Kubernetes Java 调度
Java容器技术:Docker与Kubernetes
Java容器技术:Docker与Kubernetes
8 0
|
14天前
|
运维 Kubernetes Linux
10分钟搭建Kubernetes容器集群平台(kubeadm)
10分钟搭建Kubernetes容器集群平台(kubeadm)
|
14天前
|
Kubernetes Ubuntu Linux
Kubernetes(K8S)集群管理Docker容器(部署篇)
Kubernetes(K8S)集群管理Docker容器(部署篇)
|
14天前
|
存储 Kubernetes Docker
Kubernetes(K8S)集群管理Docker容器(概念篇)
Kubernetes(K8S)集群管理Docker容器(概念篇)
|
18小时前
|
运维 安全 Linux
深入理解Docker自定义网络:构建高效的容器网络环境
深入理解Docker自定义网络:构建高效的容器网络环境
|
19小时前
|
存储 弹性计算 运维
Docker数据集与自定义镜像:构建高效容器的关键要素
Docker数据集与自定义镜像:构建高效容器的关键要素
|
1天前
|
算法 计算机视觉 Docker
Docker容器中的OpenCV:轻松构建可移植的计算机视觉环境
Docker容器中的OpenCV:轻松构建可移植的计算机视觉环境
Docker容器中的OpenCV:轻松构建可移植的计算机视觉环境
|
1天前
|
存储 Prometheus 监控
【Docker 专栏】Docker 容器内应用的调试与故障排除
【5月更文挑战第8天】本文探讨了Docker容器内应用的调试与故障排除,强调其重要性。方法包括:通过日志排查、进入容器检查、使用监控工具及检查容器配置。常见问题涉及应用启动失败、性能问题、网络连接和数据存储。案例分析展示了实战场景,注意事项提醒避免不必要的容器修改、备份数据和理解应用架构。掌握这些技能能确保Docker应用的稳定运行和性能优化。
【Docker 专栏】Docker 容器内应用的调试与故障排除
|
1天前
|
负载均衡 网络协议 算法
【Docker 专栏】Docker 容器内服务发现与负载均衡
【5月更文挑战第8天】本文探讨了Docker容器中的服务发现与负载均衡。服务发现通过环境变量、DNS或集中式系统(如Consul、Zookeeper)来定位服务实例。负载均衡则采用轮询、随机等算法,可通过软件负载均衡器、云服务或容器编排工具(如Kubernetes)实现。服务发现与负载均衡结合使用,确保请求有效分发和系统稳定性。面对动态性、网络延迟及大规模部署的挑战,需采取相应措施优化。选择合适技术并持续优化,能提升Docker容器应用的性能和可靠性。
【Docker 专栏】Docker 容器内服务发现与负载均衡