使用Kubernetes最常见的十个错误(下)
极客时间编辑部
讲述:初明明大小:4.11M时长:04:30
你好,欢迎收听极客视点。
工程师马雷克·巴蒂克(Marek Bartik)在使用 kubernetes 多年后,总结了使用 Kubernetes 最常见的十个错误以及应对错误的方法。在上一篇文章,我们分享了其中 5 个,下面继续其余 5 个常见错误,希望你能避免犯同样的错误。
1. Pod 的 self anti-affinities
某个部署有 3 个 Pod 副本正在运行,然后节点关闭了,所有的副本也都随之关闭。
要避免这种情况,你需要显式地定义 Kubernetes 调度程序为你的 Pod 使用 anti-affinites。这样能保证 Pod 被调度到不同的节点上,提供高可用性。
2. 无 PodDisruptionBudget
你在 Kubernetes 上运行生产负载,你的节点和集群必须不时升级或停用。pdb(PodDisruptionBudget)是一种用于在集群管理员和集群用户之间提供服务保证的 API。
3. 共享集群中有不止一个租户或环境
Kubernetes 命名空间不提供任何强隔离。
人们似乎期望,如果将非生产负载放到一个命名空间,然后将生产负载放到生产命名空间,那么这些负载之间就永远不会相互影响了。你可以在某种程度上公平分配,比如资源的请求和限制、配额、优先级等,并实现隔离(比如 affinities、tolerations、taints 或 nodeselectors),进而“物理地”分离数据平面上的负载,但这种分离是相当复杂的。
如果你需要在同一个集群中同时拥有这两种类型的负载,那么就必须要承担这种复杂性。如果你用不着局限在一个集群里,而且再加一个集群的成本更低时(比如在公共云上),那么应该将它们放在不同的集群中以获得更强的隔离级别。
4. externalTrafficPolicy: Cluster
经常看到这种情况,所有流量都在集群内路由到一个 NodePort 服务上,该服务默认使用 externalTrafficPolicy: Cluster 。这意味着在集群中的每个节点上都打开了 NodePort,这样你可以任选一个来与所需的服务(一组 Pod)通信。
通常情况下,NodePort 服务所针对的那些 Pod 实际上只运行在这些节点的一个子集上。这意味着,如果你与一个没有运行 Pod 的节点通信,它将会把流量转发给另一个节点,从而导致额外的网络跳转并增加延迟。
在 Kubernetes 服务上设置 externalTrafficPolicy: Local,就不会在每个节点上都打开 NodePort,只会在实际运行 Pod 的节点上开启它。如果你使用一个外部负载均衡器来检查它端点的运行状况(就像 AWS ELB 所做的那样),它就会只将流量发送到应该接收流量的节点上,这样就能改善延迟、减少计算开销、降低出口成本并提升健全性。
你可能会有像 traefik 或 nginx-ingress-controller 之类的东西,被公开成 NodePort(或使用 NodePort 的负载均衡器)来处理入口 HTTP 流量路由,而这种设置可以极大地减少此类请求的延迟。
5. 把集群当宠物 + 控制平面压力过大
你有没有过这样的经历:给服务器取一些带梗的名称、译注等,或者给节点随机生成 ID,却给集群取个有含义的名称?
还可能是这样的经历:一开始用 Kubernetes 做概念验证,给集群取名 “testing”,结果到了生产环境还没给它改名,结果谁都不敢碰它?
把集群当宠物可不是开玩笑的,你可能需要不时地删除集群,演练灾难恢复并管理你的控制平面。反过来说,控制平面也不要用过头了。也许随着时间的流逝,控制平面变慢了。这很可能是因为你创建了很多对象而没有轮换它们,或者是因为你不断从 kube-api 中删除和编辑了大量内容。
另外,请检查托管 Kubernetes 提供的“SLAs”/SLOs 和保证。供应商可能会保证控制平面(或其子组件)的可用性,但不能保证发送给它的请求的 p99 延迟水平。换句话说,就算你 kubectl get nodes 后用了 10 分钟才得到正确结果,也没有违反服务保证。
别指望所有问题都能自动解决,Kubernetes 不是银弹。希望巴蒂克总结的这些常见错误能给你带来帮助。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
请先领取课程
免费领取
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论