Kubernetes是出了名的难!以下是在生产中使用它时要遵循的一些最佳实践。遵循这些步骤将确保更高的安全性和生产力。毫无疑问,DevOps已经取得了长足的进步!借助Kubernetes编排平台,企业可以比以往更快地发布软件。随着越来越多地使用容器来构建和分发软件,Kubernetes已成为容器编排工具的事实标准,并在软件企业中非常受欢迎。Kubernetes具有出色的特性,例如:支持可伸缩性、零停机部署、服务发现、自动重启和回滚功能等。要大规模管理容器部署,Kubernetes是必须的。它支持资源和工作负载的灵活分配。毫无疑问,生产中的Kubernetes是一个很好的解决方案,但需要一些时间来设置和熟悉该工具。由于现在许多公司都想在生产中使用Kubernetes,因此值得考虑一些最佳实践。在本文中,我们将讨论一些Kubernetes最佳实践。生产环境中的KubernetesKubernetes是一种复杂的编排工具,学习曲线陡峭,但功能丰富。处理生产操作时应格外小心谨慎。如果您面临内部人才短缺的问题,您可以将其外包给为您提供所有最佳实践的PaaS提供商。但是假设您在生产环境中单独管理Kubernetes。在这种情况下,关注最佳实践非常重要,尤其是在可观察性、日志记录、集群监控和安全配置方面。正如我们许多人所知,在生产环境中运行容器并非易事。它需要大量的工作和计算资源等等。市场上有许多编排平台,但Kubernetes已获得大多数云提供商的大力支持和支持。总结——Kubernetes、容器化、微服务都是美好的基础设施,但同时也带来了安全挑战。Kubernetespod可以在所有基础设施类之间快速切换,导致pod之间的内部流量增加,造成安全风险。此外,Kubernetes通常具有更大的攻击面。您必须考虑到Kubernetes的高度动态和全新环境与传统安全工具不能很好地融合。Gartner预测,到2022年,超过75%的全球组织将在生产中运行容器化应用程序,高于目前的不到30%。到2025年,超过85%的全球组织将在生产中推动容器应用程序,与2019年的不到35%相比有了显着增长。原生云应用程序需要高度的基础设施自动化、DevOps和专业的操作技能,而这在普通IT组织中是很难找到的。因此,必须使用Kubernetes的一些策略,在安全、监控、网络、治理、存储、容器生命周期管理和平台选择方面应用最佳实践。让我们看一下Kubernetes的一些生产最佳实践。在生产环境中运行Kubernetes并不容易;有几个方面需要注意。liveness和readiness探针是否用于健康检查?管理大型分布式系统可能会很复杂,尤其是当出现问题而我们无法及时得到通知时。为确保应用程序实例正常运行,设置Kubernetes健康检查至关重要。通过创建自定义运行健康检查,可以有效避免分布式系统运行僵尸服务,可以根据环境和需求进行调整。就绪探测的目的是让Kubernetes知道应用程序是否准备好服务流量。Kubernetes将始终确保准备就绪探测通过以开始分配服务,将流量发送到pod。Liveness-SurvivalProbes你怎么知道你的应用程序是活的还是死的?LivenessProbes可以让您做到这一点。如果您的应用程序挂掉,Kubernetes将删除旧的Pod并用新的Pod替换它。资源管理——资源管理是为单个容器指定资源请求和限制的良好实践。另一个好的做法是将Kubernetes环境划分为不同的团队、部门、应用程序和客户端的独立命名空间。Kubernetes资源使用Kubernetes资源使用是指容器/pod在生产中使用的资源量。因此,密切关注Pod的资源使用情况非常重要。一个明显的原因是成本,因为更高的资源利用率意味着更少的资源浪费。资源利用率Ops团队通常希望优化和最大化资源pod消耗的百分比。资源使用情况是Kubernetes环境实际优化程度的指标之一。你可以认为在优化后的Kubernetes环境中运行的容器的平均CPU和其他资源利用率是最优的。启用RBACRBAC代表基于角色的访问控制。它是一种限制系统/网络上的用户和应用程序访问和准入的方法。他们从Kubernetes1.8版引入了RBAC。使用rbac.authorization.k8sRBAC创建授权策略。在Kubernetes中,RBAC用于授权,使用RBAC,您将能够为用户、帐户授予权限、添加/删除权限、设置规则等。因此它基本上为Kubernetes集群增加了一个额外的安全层。RBAC限制谁可以访问您的生产环境和集群。集群供应和负载平衡生产级Kubernetes基础设施通常需要考虑某些关键方面,例如高可用性、多主机、多etcdKubernetes集群等。此类集群的配置通常涉及Terraform或Ansible等工具。一旦集群全部设置好并为运行的应用程序创建了pod,这些pod就会配备负载均衡器;这些负载均衡器将流量路由到服务。开源Kubernetes项目不是默认的负载均衡器;因此,它需要与HAProxy或ELB等工具与NGINXIngress控制器或任何其他增强KubernetesIngress插件以提供负载平衡功能的工具集成。标记Kubernetes对象标签就像附加到对象(例如pod)的键/值对。标签用于标识对用户重要且有意义的对象属性。在生产中使用Kubernetes时,一个不可忽视的重要问题是标签;标签允许批量查询和操作Kubernetes对象。标签的特殊之处在于它们还可以用于识别Kubernetes对象并将其组织成组。这样做的最佳用例之一是根据Pod所属的应用程序对Pod进行分组。在这里,团队可以建立并拥有任意数量的标签约定。配置网络策略使用Kubernetes时,设置网络策略至关重要。网络策略只不过是一个对象,它使您能够明确声明和决定允许哪些流量,不允许哪些流量。这样,Kubernetes将能够阻止所有其他不需要的和不合规的流量。在我们的集群中定义和限制网络流量是强烈推荐的基本和必要的安全措施之一。Kubernetes中的每个网络策略都定义了一个授权连接列表,如上所述。每当创建任何网络策略时,它引用的所有pod都有资格建立或接受列出的连接。简而言之,网络策略基本上是授权和允许连接的白名单——一个连接,无论是进出pod的连接,只有在至少一个应用到pod的网络策略允许的情况下才被允许。集群监控和日志记录监控部署在使用Kubernetes时至关重要。确保配置、性能和流量保持安全更为重要。没有日志记录和监控,就不可能诊断发生的问题。为了确保合规性,监控和日志记录变得非常重要。监控时,需要在架构的每一层都具备日志记录功能。生成的日志将帮助我们启用安全工具、审计功能和分析性能。从无状态应用程序运行无状态应用程序比运行有状态应用程序简单得多,但随着Kubernetes操作员的不断增长,这种想法正在发生变化。对于刚接触Kubernetes的团队,建议从无状态应用开始。建议使用无状态后端,以便开发团队可以确保不存在使扩展变得困难的长时间运行的连接。使用无状态,开发人员还可以更高效地部署应用程序并实现零停机。人们普遍认为,无状态应用程序可以根据业务需求轻松迁移和扩展。Side-startautoscalingKubernetes具有三种用于部署的自动缩放功能:水平Pod自动缩放(HPA)、垂直Pod自动缩放(VPA)和集群自动缩放。水平pod自动缩放器根据感知到的CPU利用率自动扩展部署、复制控制器、复制集和状态集的数量。垂直pod自动缩放为CPU和内存请求和限制推荐合适的值,它可以自动更新。ClusterAutoscaler扩展和收缩工作节点池的大小。它根据当前利用率调整Kubernetes集群的大小。控制图像拉取源控制运行集群中所有容器的图像源。如果您允许您的pod从公共资源中提取图像,您将不知道它们内部真正运行的是什么。如果从受信任的注册表中提取镜像,则可以在注册表上应用策略以提取安全且经过认证的镜像。持续学习不断评估应用程序的状态和设置以学习和改进。例如,回顾容器的历史内存使用情况可以得出这样的结论:我们可以分配更少的内存,从长远来看可以节省成本。ProtectingImportantServicesUsingPodPriorities,您可以决定设置不同服务运行的重要性。例如,为了更好的稳定性,您需要确保RabbitMQpod比您的应用程序pod更重要。或者你的入口控制器pod比数据处理pod更重要,以保持服务对用户可用。零宕机通过在HA中运行所有服务,支持集群和服务的零宕机升级。这也将保证为您的客户提供更高的可用性。使用Pod反亲和性保证一个Pod的多个副本被调度到不同的节点上,从而通过计划内和计划外的集群节点中断来保证服务的可用性。使用pod中断策略来确保不惜一切代价拥有最少数量的pod副本!计划失败硬件最终会失败,而软件最终会运行。--(MichaelHatton)结语众所周知,Kubernetes实际上已经成为DevOps领域的标准编排平台。Kubernetes从可用性、可扩展性、安全性、弹性、资源管理和监控的角度解决生产环境产生的风暴。由于许多公司都在生产中使用Kubernetes,因此必须遵循上述最佳实践才能平稳可靠地扩展应用程序。来源:https://my.oschina.net/u/1787...
