极客视点
极客时间编辑部
极客时间编辑部
113243 人已学习
免费领取
课程目录
已完结/共 3766 讲
2020年09月 (90讲)
时长 05:33
2020年08月 (93讲)
2020年07月 (93讲)
时长 05:51
2020年06月 (90讲)
2020年05月 (93讲)
2020年04月 (90讲)
2020年03月 (92讲)
时长 04:14
2020年02月 (87讲)
2020年01月 (91讲)
时长 00:00
2019年12月 (93讲)
2019年11月 (89讲)
2019年10月 (92讲)
2019年09月 (90讲)
时长 00:00
2019年08月 (91讲)
2019年07月 (92讲)
时长 03:45
2019年06月 (90讲)
2019年05月 (99讲)
2019年04月 (114讲)
2019年03月 (122讲)
2019年02月 (102讲)
2019年01月 (104讲)
2018年12月 (98讲)
2018年11月 (105讲)
时长 01:23
2018年10月 (123讲)
时长 02:06
2018年09月 (119讲)
2018年08月 (123讲)
2018年07月 (124讲)
2018年06月 (119讲)
时长 02:11
2018年05月 (124讲)
时长 03:16
2018年04月 (120讲)
2018年03月 (124讲)
2018年02月 (112讲)
2018年01月 (124讲)
时长 02:30
时长 02:34
2017年12月 (124讲)
时长 03:09
2017年11月 (120讲)
2017年10月 (86讲)
时长 03:18
时长 03:31
时长 04:25
极客视点
15
15
1.0x
00:00/04:30
登录|注册

使用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。
请确保创建了 pdb ,以避免由于节点耗尽而造成不必要的服务中断。感兴趣的话,你可以查看有关这个话题的博客文章

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 流量路由,而这种设置可以极大地减少此类请求的延迟。
这里有一篇很棒的博客文章,更深入地讨论了 externalTrafficPolicy 和它们的权衡取舍

5. 把集群当宠物 + 控制平面压力过大

你有没有过这样的经历:给服务器取一些带梗的名称、译注等,或者给节点随机生成 ID,却给集群取个有含义的名称?
还可能是这样的经历:一开始用 Kubernetes 做概念验证,给集群取名 “testing”,结果到了生产环境还没给它改名,结果谁都不敢碰它?
把集群当宠物可不是开玩笑的,你可能需要不时地删除集群,演练灾难恢复并管理你的控制平面。反过来说,控制平面也不要用过头了。也许随着时间的流逝,控制平面变慢了。这很可能是因为你创建了很多对象而没有轮换它们,或者是因为你不断从 kube-api 中删除和编辑了大量内容。
另外,请检查托管 Kubernetes 提供的“SLAs”/SLOs 和保证。供应商可能会保证控制平面(或其子组件)的可用性,但不能保证发送给它的请求的 p99 延迟水平。换句话说,就算你 kubectl get nodes 后用了 10 分钟才得到正确结果,也没有违反服务保证。
别指望所有问题都能自动解决,Kubernetes 不是银弹。希望巴蒂克总结的这些常见错误能给你带来帮助。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
免费领取
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
大纲
固定大纲
1. Pod 的 self anti-affinities
2. 无 PodDisruptionBudget
3. 共享集群中有不止一个租户或环境
4. externalTrafficPolicy: Cluster
5. 把集群当宠物 + 控制平面压力过大
显示
设置
留言
收藏
55
沉浸
阅读
分享
手机端
快捷键
回顶部