Kubernetes最佳实践
@ 归零 | 星期三,十二月 22 日,2021 年 | 1 分钟阅读 | 更新于 星期三,十二月 22 日,2021 年

容器的使用越来越多,导致对Kubernetes等容器编排平台的需求随之上升。使用容器来打包应用程序,极大地简化了应用程序从开发到生产的部署过程。毫无疑问,Kubernetes作为一个平台协调器,通过引入其深奥的方式,进一步简化了这个过程。

今天,我想谈谈我在使用Kubernetes时学到的一些好的做法,这些做法可以实现安全部署并推动集群的效率。 那么,让我们开始吧。

1. 使用Namespaces

Kubernetes为大型团队提供了一种有效的资源来隔离他们的工作,称为Namespaces。你应该利用Namespaces的能力,在一个Kubernetes集群上分离不同团队的工作。Namespaces也有助于隔离单个应用程序,以便管理它们变得更容易。 我们可以用适当的标准,表明哪种Namespaces应该用于哪种工作,从而简化管理。还可以避免杂乱无章,不必把所有东西都放在一个屋檐下。

2. 使用Secretsconfigmaps

大多数应用程序都需要配置细节,包括一些机密数据,如密钥、密码或用户ID。一个快速的解决方案是通过环境变量传递这些细节。 然而,这种做法不太安全,你应该使用Secretsconfigmaps。这不仅保证了应用程序的安全,而且还提供了一种方法,可以在各自的YAML文件中单独编辑这些细节,而不必改变主应用程序的部署文件。

3. 充分利用RBAC功能

Kubernetes已经实现了相当丰富的RBAC功能,以定义个人、团队或应用程序对集群的访问。Kubernetes角色是一种资源,用于指定集群中允许的行为。这些角色使用RoleBindings与用户或应用程序(服务账户)绑定。这种定义对集群的限制性访问的方式实现了一个访问管理的层次。

说到这里,我们必须明智地使用这些功能。一个命名空间范围内的pod查看权限的应用程序,不能被赋予访问集群范围的pod列表权限。而一个用户也不应该被赋予他不关心的数据的访问权。严格的访问管理层使集群远离意外事故的发生。

4. 指定资源限制

为应用程序设置资源使用限制是一个好的做法。它可以使集群的资源受到控制,并消除单个应用程序过度消耗资源的机会,这可能会严重影响其他应用程序的性能。可以在Kubernetes Pod/Deployment/StatefulSet的spec中为每个容器定义CPU或内存使用的限制。

5. 使用initContainers

initContainer表现出一个有吸引力的特点。它在主应用容器启动前运行到完成。出于这个原因,我们把它看作是一个潜在的助手,它可以运行自定义的实用程序和设置代码,而这并不是主镜像的一部分。

在执行任务的情况下使用initContainers是一个很好的做法,比如从代码仓库中拉取代码或使用 “sed”、“awk “等命令进行设置。它可以消除镜像中的额外层次,不必在镜像构建过程中包含这些步骤。

6. 使用Liveness和Readiness探针

Kubernetes探针是为Pod定义的。Readiness探针检查一个Pod是否准备好接受流量。当一个Pod的所有容器都准备好时,就认为它已经准备好了。这个信息很重要,因为它被用来决定是否从Kubernetes服务背后的负载平衡服务器列表中添加一个Pod。

Liveness探针有助于在Pod没有给出健康响应的情况下重新启动它。有时应用程序发生故障,除了重启,没有其他选择。在这种情况下,Liveness探针很有用。

还应该承认,periodSeconds(执行探测的频率)的默认值是10秒,initialDelaySeconds(容器开始执行探测后的等待秒数)是0。

这些值并不适合所有情况。你怀疑需要时间才能启动的重型应用程序不应该经历不必要的重启。因此,每一个值和liveness Probe的类型(liveness command,liveness HTTP request,TCP liveness probe)都应该自己设置。

7. 监控和日志

密切关注Kubernetes集群,在出现故障时可以更好地管理和更快地进行调试。因此,我们应该有一个可靠的监控和日志机制,以便透明地查看整个集群。

每个工具都有其用途,而Kubernetes是容器化世界中游戏规则改变者。坚持一些特定的实践可以确保我们以最佳的方式利用最佳的功能。

原文地址:https://inshiya-nalawala211.medium.com/7-best-practices-in-kubernetes-27e7173e2f64

© 2014 - 2022 Lionel's Blog

Powered by Hugo with theme Dream.