本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

设置容器的提示

运行构建良好的容器可以极大地影响您环境的整体性能和安全性。

以下是一些设置容器的提示。

有关容器安全性的更详细讨论,您还可以参考Rancher的 容器安全指南

使用通用容器操作系统

在可能的情况下,您应该尝试标准化使用通用的容器基础操作系统。

较小的发行版,如 Alpine 和 BusyBox,不仅能减小容器镜像的大小,而且通常具有更小的攻击面和漏洞面。

流行的发行版,如Ubuntu、Fedora和CentOS,经过更多的实地测试,并提供更多的功能。

从空白容器开始

如果您的微服务是独立的静态二进制文件,您应该使用空白容器。

空白容器是一个 官方Docker镜像,它是空的,以便您可以用它来设计最小的镜像。

这将具有最小的攻击面和最小的镜像大小。

以非特权身份运行容器进程

在可能的情况下,在容器内运行进程时使用非特权用户。虽然容器运行时提供了隔离,但仍然可能存在漏洞和攻击。如果容器以 root 身份运行,非故意的主机挂载也可能受到影响。有关为Pod或容器配置安全上下文的详细信息,请参考 Kubernetes文档

定义资源限制

为您的Pod应用CPU和内存限制。这可以帮助管理工作节点上的资源,并避免故障的微服务影响其他微服务。

在标准 Kubernetes 中,您可以在名称空间级别设置资源限制。在 Rancher 中,您可以在项目级别设置资源限制,这些限制将传播到项目内的所有名称空间。有关详细信息,请参见 Rancher 文档。

在设置资源配额时,如果您在项目或名称空间上设置与 CPU 或内存相关的任何内容(即限制或保留),则所有容器在创建时都需要设置相应的 CPU 或内存字段。为了避免在工作负载创建期间对每个容器设置这些限制,可以在名称空间上指定默认的容器资源限制。

Kubernetes 文档提供了有关如何在 容器级别 和名称空间级别设置资源限制的更多信息。

定义资源要求

您应该为您的 Pod 应用 CPU 和内存要求。这对于通知调度程序您的 Pod 需要放置在哪种计算节点上至关重要,并确保不会过度配置该节点。在 Kubernetes 中,您可以通过在 Pod 的容器规格中的资源请求字段中定义 resources.requests 来设置资源要求。有关详细信息,请参见 Kubernetes 文档

如果您为 Pod 部署所在的名称空间设置了资源限制,并且容器没有特定的资源请求,则该 Pod 将无法启动。为了避免在工作负载创建期间对每个容器设置这些字段,可以在名称空间上指定默认的容器资源限制。

建议在容器级别定义资源要求,因为否则,当集群负载时,调度程序会做出假设,这可能对您的应用程序没有帮助。

活跃性和就绪性探针

为您的容器设置活跃性和就绪性探针。除非您的容器完全崩溃,否则 Kubernetes 不会知道它不健康,除非您创建一个可以报告容器状态的端点或机制。或者,确保您的容器在不健康时停止并崩溃。

Kubernetes 文档展示了如何 为容器配置活跃性和就绪性探针。