Kubernetes生产环境最佳实践

众所周知,Kubernetes很难! 以下是在生产中使用它应遵循的一些最佳实践。遵循这些步骤能够确保更高的安全性和生产效率。

毫无疑问,DevOps已经走过了一段很长的路! 借助于Kubernetes编排平台使得公司比以往更快地发布软件。随着容器用于构建和发布软件的使用量不断增加,Kubernetes已经成为事实上的容器编排工具标准,在软件企业中非常受欢迎。

Kubernetes具有优秀的特性,比如:支持可扩展、零停机部署、服务发现、自动重启和回滚功能等。要大规模管理容器部署,Kubernetes是必须的。它支持灵活地分配资源和工作负载。毫无疑问,生产环境中的Kubernetes是一个很好的解决方案,但需要花费一些时间来设置和熟悉这个工具。由于现在许多公司都希望在生产中使用Kubernetes,因此有必要考虑一些最佳实践。在本文中,我们将讨论一些Kubernetes的最佳实践。

生产环境中的Kubernetes

Kubernetes是一个复杂并且学习曲线陡峭的编排工具,但它具有丰富的功能。生产操作应尽可能小心谨慎处理。如果您面临内部人才短缺的问题,您可以将其外包给PaaS供应商,为您提供所有最佳实践。但假设您在生产中独自管理Kubernetes。在这种情况下,关注最佳实践是非常重要的,特别是关于可观察性、日志记录、集群监控和安全配置。

我们很多人都知道,在生产环境中运行容器不是一件容易的事情。它需要大量的工作和计算资源等等。市场上有许多编排平台,但Kubernetes已经获得了巨大的吸引力和大多数云提供商的支持。

总之——Kubernetes、集装箱化和微服务都是美好的基础设施,但同时带来了安全挑战。Kubernetes Pod可以在所有基础设施类之间快速切换,从而导致Pod之间的内部流量增加,引发安全隐患。此外,Kubernetes的攻击面通常更大。您必须考虑到Kubernetes的高度动态且全新的环境无法与旧版安全工具完美融合的问题。

Gartner预测,到2022年,超过75%的全球组织将在生产中运行集装箱应用程序,而目前这一比例还不到30%。到2025年,超过85%的全球组织将在生产中推动集装箱应用,较2019年的不到35%有显著增长。本地云应用程序需要高度的基础设施自动化、DevOps和专门的操作技能,这些在普通IT组织中很难找到这些技能。

所以必须使用Kubernetes的一些策略,在安全性、监控、网络、治理、存储、容器生命周期管理和平台选择方面应用最佳实践。下面让我们来看看Kubernetes的一些生产最佳实践。

在生产中运行Kubernetes并不容易; 有以下几个方面需要注意。

是否使用存活探针和就绪探针进行健康检查?

管理大型分布式系统可能会很复杂,特别是当出现问题时,我们无法及时得到通知。为了确保应用实例正常工作,设置Kubernetes健康检查至关重要。

通过创建自定义运行健康检查,可以有效避免分布式系统中僵尸服务运行,具体可以根据环境和需要对其进行调整。

Readiness-就绪探针

就绪探针的目的是让Kubernetes知道该应用是否已经准备好为流量服务。Kubernetes将始终确保准备就绪探针通过之后开始分配服务,将流量发送到Pod。

Liveness-存活探针

你怎么知道你的应用程序是活的还是死的?存活探针可以让你做到这一点。如果你的应用死了,Kubernetes会移除旧的Pod并用新Pod替换它。

Resource Management- 资源管理

为单个容器指定资源请求和限制是一个很好的实践。

另一个好的实践是将Kubernetes环境划分为不同团队、部门、应用程序和客户机的独立名称空间。

Kubernetes资源使用情况

Kubernetes资源使用指的是容器/pod在生产中所使用的资源数量。

因此,密切关注pods的资源使用情况是非常重要的。一个明显的原因是成本,因为越高的资源利用证明越少的资源浪费。

Resource utilization资源利用率

Ops团队通常希望优化和最大化pods消耗的资源百分比。资源使用情况是Kubernetes环境实际优化程度的指标之一。

您可以认为优化后的Kubernetes环境中运行的容器的平均CPU等资源利用率是最优的。

启用RBAC

RBAC代表基于角色的访问控制。它是一种用于限制系统/网络上的用户和应用程序的访问和准入的方法。

他们从Kubernetes 1.8版本引入了RBAC。使用rbac.authorization.k8s RBAC用于创建授权策略。

在Kubernetes中,RBAC用于授权,使用RBAC,您将能够授予用户、帐户、添加/删除权限、设置规则等权限。因此,它基本上为Kubernetes集群添加了额外的安全层。RBAC限制谁可以访问您的生产环境和集群。

集群置备和负载均衡

生产级Kubernetes基础设施通常需要考虑某些关键方面,例如高可用性、多主机、多etcd Kubernetes集群等。此类集群的配置通常涉及到Terraform或Ansible等工具。

一旦集群都设置好了,并且为运行应用程序创建了pods,这些pods就配备了负载平衡器;这些负载均衡器将流量路由到服务。开源的Kubernetes项目并不是默认的负载平衡器;因此,它需要与NGINX Ingress controller与HAProxy或ELB等工具集成,或任何其他工具,扩大Kubernetes的Ingress插件,以提供负载均衡能力。

给Kubernetes对象添加标签

标签就像附加到对象上的键/值对,比如pods。标签是用来标识对象的属性的,这些属性对用户来说是重要的和有意义的。在生产中使用Kubernetes时,不能忽视的一个重要问题是标签;标签允许批量查询和操作Kubernetes对象。标签的特殊之处在于,它们还可以用于识别Kubernetes对象并将其组织成组。这样做的最佳用例之一是根据pod所属的应用程序对它们进行分组。在这里,团队可以构建并拥有任意数量的标签约定。

配置网络策略

使用Kubernetes时,设置网络策略至关重要。

网络策略只不过是一个对象,它使你能够明确地声明和决定哪些流量是允许的,哪些是不允许的。这样,Kubernetes将能够阻止所有其他不想要的和不符合规则的流量。在我们的集群中定义和限制网络流量是强烈推荐的基本且必要的安全措施之一。

Kubernetes中的每个网络策略都定义了一个如上所述的授权连接列表。无论何时创建任何网络策略,它所引用的所有pod都有资格建立或接受列出的连接。简单地说,网络策略基本上就是授权和允许连接的白名单——一个连接,无论它是还是pod,只有在应用于pod的至少一个网络策略允许的情况下才被允许。

集群监控和日志记录

在使用Kubernetes时,监控部署是至关重要的。确保配置、性能和流量保持安全更是重要。如果不进行日志记录和监控,就不可能诊断出发生的问题。为了确保合规性,监视和日志记录变得非常重要。

在进行监视时,有必要在体系结构的每一层上设置日志记录功能。生成的日志将帮助我们启用安全工具、审计功能和分析性能。

从无状态应用程序开始

运行无状态应用要比运行有状态应用简单得多,但随着Kubernetes运营商的不断增长,这种想法正在改变。对于刚接触Kubernetes的团队来说,建议首先使用无状态应用程序。

建议使用无状态后端,这样开发团队就可以确保不存在长时间运行的连接,从而增加了扩展的难度。使用无状态,开发人员还可以更有效地、零停机部署应用程序。

人们普遍认为,无状态应用程序可以方便地根据业务需要进行迁移和扩展。

启动自动扩缩容

Kubernetes有三种用于部署的自动伸缩功能:水平pod自动伸缩(HPA)、垂直pod自动伸缩(VPA)和集群自动伸缩。

水平pod autoscaler根据感知到的CPU利用率自动扩展deployment、replicationcontroller, replicaset, statefulset的数量。

Vertical pod autoscaling为CPU和内存请求和限制推荐合适的值,它可以自动更新这些值。

Cluster Autoscaler扩展和缩小工作节点池的大小。它根据当前的利用率调整Kubernetes集群的大小。

控制镜像拉取来源

控制在集群中运行所有容器的镜像源。如果您允许您的Pod从公共资源中拉取镜像,您就不知道其中真正运行的是什么。

如果从受信任的注册表中提取它们,则可以在注册表上应用策略以提取安全和经过认证的镜像。

持续学习

不断评估应用程序的状态和设置,以学习和改进。例如,回顾容器的历史内存使用情况可以得出这样的结论:我们可以分配更少的内存,在长期内节省成本。

保护重要服务

使用Pod优先级,您可以决定设置不同服务运行的重要性。例如,为了更好的稳定性,你需要确保RabbitMQ pod比你的应用pod更重要。或者你的入口控制器pods比数据处理pods更重要,以保持服务对用户可用。

零停机时间

通过在HA中运行所有服务,支持集群和服务的零停机升级。这也将保证您的客户获得更高的可用性。

使用pod反亲和性来确保在不同的节点上调度一个pod的多个副本,从而通过计划中的和计划外的集群节点停机来确保服务可用性。

使用pod Disruptions策略,不惜一切代价确保您有最低的Pod副本数量!

计划失败

硬件最终会失败,软件最终会运行。--(迈克尔·哈顿)

结论

众所周知,Kubernetes实际上已经成为DevOps领域的编排平台标准。Kubernetes从可用性、可伸缩性、安全性、弹性、资源管理和监控的角度来应对生产环境产生的风暴。由于许多公司都在生产中使用Kubernetes,因此必须遵循上面提到的最佳实践,以顺利和可靠地扩展应用程序。

推荐

Loki漫谈

Loki | 数据过期自动删除策略设计

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DevOps 五大理念及其落地实践 研发运维一体化(DevOps)成熟度模型 中国DevOps现状调查报告及解读 构建企业DevOps的度量体系 DevOps实践指南精要 分布式敏捷和DevOps实践案例 AWS DevOps 助力爱乐奇大规模业务扩展 AWS 云上的 DevOps 实践简介 多云环境下的 DevOps 实践 DevOps中如何系统开展微服务性能测试 “神兵”天降 - 揭秘平安 DevOps 的核心实践 大型Scrum实践银行产品敏捷转型与DevOps实践经验分享 如何基于 Jenkins 支撑腾讯上千产品的CICD SecDevOps工具链 券商DevOps转型—平安证券容器化实践之路 招行如何基于 K8S 容器技术打造 DevOps 流水线 民生银行的DevOps实践之旅 以自动化先行的 DevOps 落地实践经验 东方明珠集团基于 AWS 的 DevOps 实战分享 中小银行的DevOps 实践之路 让DevOps生产线加速的敏捷之道 云原生时代的 DevOps 新实践 新场景高效能快交付腾讯敏捷研发平台 DevOps 解决方案 中小金融企业如何开心玩DevOps DevOps 变革的剖析与实践 猎豹移动基于 AWS 构建 DevOps 实践分享 DevOps在联通IT系统的落地实施 DevOpsMadeByGoogle 流水线3.0打造DevOps落地工具链 混合云下的DevOps在vivo互联网的探索落地 大型企业实施 DevOps 的三个阶段 DevOps最佳实践之海量资源技术运营 诺基亚 DevOps 演进-大数据推动流程优化与高效执行 苏宁 AIOps 实践之路 金融云业务网络 智能采集与一体化分析实战 如何构建新一代智能运维平台 CMDB - 企业一体化运维平台的基石 用友方法+之-YSDP 研发交付平台实践之路 顺丰云计算和运维自动化团队从0到1的DevOps之旅 诺基亚的转身:数字化时代的 DevOps 转型之路 大型主机核心银行系统的 DevOps 践行之路 DevOps标准认证评估权威指南及案例解读. 浙江移动的DevOps实践 携程持续交付与构建系统实践 每天万次触发的持续交付工具链实践 Android 超大型代码的快速集成之路 基于猪齿鱼构建企业研发体系 大型制造业实践DevOps团队之路等
最近的三年多时间,随着容器技术的火爆及Kubernetes成为容器编排管理的标准,国内外厂商均已开始了全面拥抱Kubernetes的转型, 无数中小型企业已经落地 Kubernetes,或正走在容器化的道路上 。 第一章介绍docker的前世今生,了 解docker的实现原理,以Django项目为例,教大家如何编写最佳的Dockerfile实现构业务镜像的制作。通过本章的学习,大家会知道docker的概念及基本操作,并学会构建自己的业务镜像,并通过抓包的方式掌握Docker最常用的bridge网络模式的通信。 第二章本章学习kubernetes的架构及工作流程,重点介绍如本章学习kubernetes的架构及工作流程,重点介绍如断的滚动更新,通过服务发现来实现集群内部的服务间访问,并通过ingress- -nginx实现外部使用域名访问集群内部的服务。同时介绍基于EFK如何搭建Kubernetes集群的日志收集系统。学完本章,我们的Django demo项目已经可以运行在k8s集群中,同时我们可以使用域名进行服务的访问。第三章本章基于k8s集群部署gitlab、sonarQube、 Jenkins等工具,并把上述工具集成到Jenkins中,以Django项目为例,通过多分支流水线及Jenkinsfle实现项目代码提交到不同的仓库分支,实现自动代码扫描、单元测试、docker容器构建、k8s服务的自动部署。第四章由于公司内部项目众多,大量的项目使用同一套流程做CICD,那么势必会存在大量的重复代码,因此本章主要通过使用groovy实现Jenkins的sharedL ibrary的开发,以提取项目在CICD实践过程中的公共逻辑,提供一系列的流程的接口供公司内各项目调用,开发完成后,还是以Django的demo项目为例,进行Jenkinsfle的改造,最后仅需通过简单的Jenkinsfle的配置,即可优雅的完成CICD流程的整个过程,此方式已在大型企业内部落地应用。
### 回答1: 新版Kubernetes生产落地全程实践资源丰富多样,可以帮助企业和开发者顺利实施和管理Kubernetes生产环境。 首先,Kubernetes官方文档是最重要和全面的资源之一。官方文档详细介绍了Kubernetes的各个组件、原理和特性,以及如何部署和管理Kubernetes集群。它提供了用户指南、API 参考和自诊断工具等知识,帮助开发者理解和使用Kubernetes的方方面面。 其次,Kubernetes社区是一个宝贵的资源。在社区中,你可以找到其他Kubernetes用户、开发者和贡献者的经验和知识分享。在社区中,你可以参与讨论、提问问题、汇报BUG和分享自己的经验,从而学习和进步。 第三,书籍和培训课程也是帮助你学习和实践Kubernetes的重要资源。有很多优秀的书籍,介绍了Kubernetes的设计原理、架构和最佳实践。此外,一些在线培训课程和认证考试可以帮助你系统地学习和掌握Kubernetes技术。 此外,还有一些开源工具和平台可以帮助你更好地部署和管理Kubernetes集群。例如,Helm是一个包管理工具,可以简化应用程序在Kubernetes上的部署和管理。Prometheus是一个监控系统,可以用于监控Kubernetes集群的健康状态和性能指标。 最后,一些云平台(如Google Cloud Platform、Amazon Web Services和Microsoft Azure)也提供了Kubernetes-as-a-Service的托管服务,可以帮助你快速部署和运行Kubernetes集群。这些托管服务通常集成了自动缩放、日志管理、监控和安全等功能,让你可以更专注于应用程序的开发和业务需求。 综上所述,新版Kubernetes生产落地全程实践资源包括官方文档、社区支持、书籍和培训课程、开源工具和云平台等,它们共同构成了一个全面而完善的学习和实践Kubernetes的生态系统。 ### 回答2: 新版Kubernetes生产落地全程实践资源主要包括以下几个方面。 首先,官方文档。Kubernetes有非常详细的官方文档,涵盖了从部署到管理的各个方面,包括设计理念、核心概念、API文档、入门指南、运维手册等等。官方文档是学习和理解Kubernetes的重要资源。 其次,开源社区。Kubernetes拥有庞大的开源社区,开发者和用户可以在这个社区中进行交流、提问和分享经验。可以通过参与社区贡献的方式深入了解Kubernetes实践经验,并解决遇到的问题。 另外,实践指南和教程。有很多博客、论坛和技术社区上都有专门介绍Kubernetes实践的指南和教程。这些资源可以帮助我们了解Kubernetes的最佳实践,学习如何部署和管理生产环境中的应用。 此外,培训和认证。Kubernetes官方提供了培训和认证机制,包括培训课程、在线教程和认证考试。通过参加培训和认证,可以系统地学习和掌握Kubernetes的知识和技能,从而更好地实践和落地Kubernetes。 最后,实践中的经验和教训。实际落地和使用Kubernetes的过程中,我们会积累很多实践中的经验和教训。这些经验和教训是最具实用性的资源,可以帮助我们避免一些常见的问题和错误,更好地实现Kubernetes生产落地。因此,我们要不断总结和分享自己的实践经验,也要关注其他人的经验和分享。 总结来说,新版Kubernetes生产落地全程实践的资源包括官方文档、开源社区、实践指南和教程、培训和认证以及实践中的经验和教训。通过充分利用这些资源,可以更好地学习和应用Kubernetes,实现生产环境中的成功落地。 ### 回答3: 新版 Kubernetes 生产落地全程实践资源包括以下几个方面: 1. 官方文档:Kubernetes 官方提供了详尽的文档,包括入门指南、概念解释、架构设计、API 参考等,可帮助用户深入理解 Kubernetes 的各个组件和功能。 2. 书籍和教程:有许多专门针对 Kubernetes 的书籍和在线教程,以不同的层次介绍 Kubernetes 的使用和实践,包括从基础知识到高级技巧的全方位覆盖。 3. 开源项目:Kubernetes 生态系统中有很多优秀的开源项目,例如 Helm、Prometheus、Istio 等,它们为使用 Kubernetes 提供了便捷的工具和解决方案,能够加速生产落地的过程。 4. 社区支持:Kubernetes 拥有庞大的社区,用户可以通过社区邮件列表、论坛、Slack 等渠道获取帮助和交流经验,社区不仅提供了技术支持,也有许多实践分享和最佳实践的案例供参考。 5. 实践经验和案例:很多企业和组织已经在生产环境中成功落地了 Kubernetes,他们的实践经验和案例可以为其他用户提供宝贵的指导和参考,包括架构设计、部署方案、性能优化等方面。 综合利用以上资源,用户可以系统地学习和掌握 Kubernetes 的使用和实践技术,同时可以借鉴他人的经验和教训,帮助自己在生产环境中顺利落地 Kubernetes
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值