大规模生产中 自动化Kubernetes的7种经典装备

Posted K8S技术社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大规模生产中 自动化Kubernetes的7种经典装备相关的知识,希望对你有一定的参考价值。


文末添加K8S技术社区小助手,获取Kubernetes 2018容器热点私享会视频PPT!


Kubernetes开源容器编排引擎并非一个管理平台,也不应该被误认为是一个管理平台。整个编排的关键是可靠地启用一个自动化系统,以便于大规模部署和管理应用,而不需要人为干预每个步骤。如果Kubernetes使用的工具不支持自动化,那么你并没有真正利用上编排的好处。


以下7种方式可以支持你的Kubernetes集群在规模生产中实现自动化(事实上,你也应该这么做)。


1)日志


任何Kubernetes生产环境都将重度依赖日志。在Kenzan,我们通常会尝试从应用程序日志中分离出平台日志。这可以通过多种非常不同的工具和应用程序来完成,甚至可以通过在日志本身内进行过滤和标记来完成。与任何分布式系统一样,日志为准确跟踪特定的调用提供了重要的证据(即使它们位于不同的微服务中),因此可以确定根本原因。


2)自我修复


我们认为,如果不具备自我修复能力,系统几乎不可能实现较长的正常运行时间,特别是在分布式环境中。 Kubernetes可以定期监控pod和容器的健康状况,遇到问题时立即采取措施来解决这些问题。 Kubernetes本身识别的两种对象类型是podstatus和containerstatus。


容器探针(livenessProbe和readinessProbe)允许你定义容器处于活动状态且准备就绪时,Kubernetes该如何监控。readinessProbe特别有用,因为如果探针失败,它将离开pod,不发送任何流量。


但是请注意,虽然自我修复功能(例如每半小时重启一次)是非常有用的功能,但它们可能掩盖应用程序的问题。你需要足够强大、可以解决可能发生的任何问题的监控和日志功能,


3)弹性测试


根据应用程序的需求(例如,99.999%的正常运行时间),弹性测试可以并且应该是平台的一部分。应用程序任何级别的失败都应该是可以恢复的,这样任何人都不会遭遇任何停机时间。根据我们的经验,只有开发团队事先知道他们的工作将通过广泛的弹性测试,“无懈可击”的应用才是可能的。


虽然你可以通过最简单的手动方法进行某一种弹性测试,例如手动关闭数据库或随机杀死pod,但我们的经验证明,将这些方法自动化更为有效。虽然Netflix的Chaos Monkey是一个非常强大的、非常有用的弹性测试工具(它运行在AWS中),但它并不是为Kubernetes而构建的。值得庆幸的是,Kubernetes领域正在形成弹性测试框架,其中两个是fabric8 Chaos Monkey(fabric8集成开发环境的一部分)和kube-monkey。


4)例行审计


你的Kubernetes生产环境将受益于例行维护和审计。这些审计将涵盖常规监控无法涵盖的主题。传统上,审计是作为一个手动过程进行的,但目前在这个领域中,自动化工具正在迅速而显著地改进。


5)自动伸缩


对于Kubernetes来说,伸缩通常意味着下面两件事之一:

  • 伸缩pod

  • 伸缩集群内的节点


伸缩pod绝对是最常见的缩放形式。这将添加更多的服务实例,并让它们准备开始接受流量。通常,执行pod级别的伸缩使用Heapster指标,以确定是否需要创建新实例。我们通常实际上将最小pod数设置得非常低,并相信Kubernetes Horizontal  Pod Autoscaler可以正确设置最佳副本数。我们始终将每个集群的最小副本值设置为大于1,以避免出现单点故障的情况。


伸缩节点的情况比较少见,但对于高度弹性的应用程序来说可能是一个非常有用的伸缩机制。节点伸缩需要IaaS(AWS,GCP等)来伸缩并注册到Kubernetes集群。这个过程可以是一个手动操作(虽然我们不建议这样做)。通常我们使用可以自动伸缩单个节点的工具(例如Kubernetes Repo)。节点级自动伸缩器将执行两个主要操作:第一个是在需要时添加更多节点,第二个是删除未充分利用的节点。


6)资源配额


资源配额使你可以限制Kubernetes平台中的某个命名空间,确保一个应用程序不会占用所有资源并影响其他应用程序。设置资源配额可能有点困难。根据我们的经验,我们发现按预期负载来分解命名空间,并使用一个比率来计算集群的百分比是最好的开始方式。运行Heapster允许使用kubectl top {node | pod}命令(它显示当前节点或pod资源使用情况,有时也可以帮助配额)。然后,使用监视和审计来确定分区是否正确。


7)容器资源约束


弄清楚单个容器或pod需要多少资源已经成为一门艺术。从历史上看,开发团队已经有了强大的估算方式。我们尝试执行某种级别的负载测试以查看它是如何进行故障切换,然后适当地分配资源的。 Netflix创造了“挤压测试”的方法。



推荐阅读:




添加K8S技术社区小助手,参与K8S技术社区评论员认证,将有机会获得由K8S技术社区赞助的Kubernetes国际盛会直飞门票!

以上是关于大规模生产中 自动化Kubernetes的7种经典装备的主要内容,如果未能解决你的问题,请参考以下文章

阿里云 ACK@Edge 助力元戎启行加速进入自动驾驶规模化生产

阿里云 ACK@Edge 助力元戎启行加速进入自动驾驶规模化生产

搞定大规模容器平台生产落地十大实践

搞定大规模容器平台生产落地十大实践

Kubeadm部署CentOS8三节点Kubernetes V1.18.0集群实践

Kubeadm部署CentOS8三节点Kubernetes V1.18.0集群实践