基于云原生的新应用程序在 Kubernetes 集群运行没有问题但是当你有旧应用程序时会发生什么情况记录到文件而不是标准输出不支持Prometheus不支持HTTPS首先让我们了解一些基础知识。在Kubernetes中一个Pod是一组容器。容器使用两个Linux原语进行隔离控制组和命名空间。控制组用于限制资源最大256MB内存。命名空间用于隔离只能看到此文件夹。控制组和Linux命名空间是容器的基本原语。除了网络之外Pod中的所有容器都是隔离的。网络是共享的一个IP地址分配给Pod中的所有容器Pod的IP地址。同一个Pod中的容器共享相同的网络命名空间。为什么需要在Pod中运行多个容器如果你不能或不想更改应用程序中的代码你可能需要通过其他方式来调整其功能。让我们看一个例子。最近的Elasticsearch版本支持TLS但长时间以来这是一个付费的额外功能。你如何使用TLS保护流量你可以将代理作为一个容器添加到你的Pod中。加密的流量首先到达代理然后到达未加密的Elasticsearch。流量在到达ElasticSearch之前由NGINX容器代理。 另一个例子是在没有Ingress的情况下将你的应用程序暴露给公共互联网。Cloudflare隧道运行一个代理与应用程序一起并代理所有的流量。tunneld代理将流量隧道传输到Cloudflare网络。当你想要使用Prometheus但你的应用程序具有自定义的指标公开格式时会发生什么情况如果你使用一个适配器就不需要更改代码。例如Elasticsearch不暴露Prometheus指标。适配器来解救容器将Elasticsearch指标适配为与Prometheus兼容。当你在Pod中有一个额外的容器来处理输入时这被称为Ambassador模式。如果它处理主容器的输出那么它就是一个适配器。适配器与Ambassador模式在Kubernetes中应用程序的默认日志输出是打印到标准输出stdout。那么如果你的应用程序将日志记录到文件中该怎么收集日志呢你可以使用一个容器来检索日志文件的内容并将其打印到标准输出stdout。Sidecar容器检索文件内容并将其打印到标准输出stdout。其他Sidecar包括注入密钥、在ConfigMaps发生更改时重新加载应用程序、缓存等容器。任何增强你的应用程序的容器通常被称为Sidecar容器。示例包括注入密钥在ConfigMaps发生更改时重新加载缓存Elasticsearch建议在应用程序启动之前将虚拟内存设置为较高的值即mmap计数。你如何在Kubernetes中做到这一点 它是在“普通”容器启动之前运行完毕的容器。你可以使用Kubernetes中的Init容器因此如果你要将现有应用迁移到Kubernetes中你有四种模式可供选择Ambassador大使模式Adapter适配器模式Sidecar边车模式Init初始化模式
Kubernetes 中 4 种容器设计模式
发布时间:2026/6/6 22:19:18
基于云原生的新应用程序在 Kubernetes 集群运行没有问题但是当你有旧应用程序时会发生什么情况记录到文件而不是标准输出不支持Prometheus不支持HTTPS首先让我们了解一些基础知识。在Kubernetes中一个Pod是一组容器。容器使用两个Linux原语进行隔离控制组和命名空间。控制组用于限制资源最大256MB内存。命名空间用于隔离只能看到此文件夹。控制组和Linux命名空间是容器的基本原语。除了网络之外Pod中的所有容器都是隔离的。网络是共享的一个IP地址分配给Pod中的所有容器Pod的IP地址。同一个Pod中的容器共享相同的网络命名空间。为什么需要在Pod中运行多个容器如果你不能或不想更改应用程序中的代码你可能需要通过其他方式来调整其功能。让我们看一个例子。最近的Elasticsearch版本支持TLS但长时间以来这是一个付费的额外功能。你如何使用TLS保护流量你可以将代理作为一个容器添加到你的Pod中。加密的流量首先到达代理然后到达未加密的Elasticsearch。流量在到达ElasticSearch之前由NGINX容器代理。 另一个例子是在没有Ingress的情况下将你的应用程序暴露给公共互联网。Cloudflare隧道运行一个代理与应用程序一起并代理所有的流量。tunneld代理将流量隧道传输到Cloudflare网络。当你想要使用Prometheus但你的应用程序具有自定义的指标公开格式时会发生什么情况如果你使用一个适配器就不需要更改代码。例如Elasticsearch不暴露Prometheus指标。适配器来解救容器将Elasticsearch指标适配为与Prometheus兼容。当你在Pod中有一个额外的容器来处理输入时这被称为Ambassador模式。如果它处理主容器的输出那么它就是一个适配器。适配器与Ambassador模式在Kubernetes中应用程序的默认日志输出是打印到标准输出stdout。那么如果你的应用程序将日志记录到文件中该怎么收集日志呢你可以使用一个容器来检索日志文件的内容并将其打印到标准输出stdout。Sidecar容器检索文件内容并将其打印到标准输出stdout。其他Sidecar包括注入密钥、在ConfigMaps发生更改时重新加载应用程序、缓存等容器。任何增强你的应用程序的容器通常被称为Sidecar容器。示例包括注入密钥在ConfigMaps发生更改时重新加载缓存Elasticsearch建议在应用程序启动之前将虚拟内存设置为较高的值即mmap计数。你如何在Kubernetes中做到这一点 它是在“普通”容器启动之前运行完毕的容器。你可以使用Kubernetes中的Init容器因此如果你要将现有应用迁移到Kubernetes中你有四种模式可供选择Ambassador大使模式Adapter适配器模式Sidecar边车模式Init初始化模式