k8s优化
更新于:2024年3月10日
k8s优化
目录
[toc]
推荐文章
我的开源项目:
https://onedayxyy.cn/docs/MyOpenSourceProject
使用 PDB
在Kubernetes (k8s) 里,PDB是Pod Disruption Budget的缩写。Pod Disruption Budget允许用户指定其应用中的一定数量的Pod副本是在任何给定时间都必须保持运行的,这在进行**集群维护操作(如升级、节点替换等)**时非常有用。
通过使用PDB,可以定义应用的最小可用性。
例如,如果一个部署有10个副本,你可以指定至少要有7个副本是可用的。这样,在Kubernetes进行自动的或计划内的Pod删除时,它将确保不会违反这一规定。如果删除更多的Pod将使得可用Pod的数量降到规定的阈值以下,那么系统将阻止这种删除操作发生。
PDB通常用于那些需要高可用性的服务,确保在进行集群管理和维护操作时,用户的关键服务不会因为Pod的删除而变得不可用。这是通过以下两个参数来定义的:
minAvailable
:表示在任何时候应保持可用的最小Pod数量或百分比。maxUnavailable
:表示在任何时候可以不可用的最大Pod数量或百分比。
只能设置minAvailable
或maxUnavailable
中的一个。
下面是一个PDB的YAML示例:
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: my-pdb
spec:
minAvailable: 1
selector:
matchLabels:
app: myapp
这个例子中,PDB确保标签为app=myapp
的Pod至少有一个是可用的。
关于 PDB 的更多详细信息可以查看官方文档:https://kubernetes.io/docs/tasks/run-application/configure-pdb/。
🚩 背景
有些时候线上的某些节点需要做一些维护操作,比如要升级内核,这个时候我们就需要将要维护的节点进行驱逐操作,驱逐节点首先是将节点设置为不可调度,这样可以避免有新的 Pod 调度上来,然后将该节点上的 Pod 全部删除,ReplicaSet 控制器检测到 Pod 数量减少了就会重新创建一个新的 Pod,调度到其他节点上面的,这个过程是先删除,再创建,并非是滚动更新,因此更新过程中,如果一个服务的所有副本都在被驱逐的节点上,则可能导致该服务不可用。
如果服务本身存在单点故障,所有副本都在同一个节点,驱逐的时候肯定就会造成服务不可用了,这种情况我们使用上面的反亲和性和多副本就可以解决这个问题。
但是如果我们的服务本身就被打散在多个节点上,这些节点如果都被同时驱逐的话,那么这个服务的所有实例都会被同时删除,这个时候也会造成服务不可用了,这种情况下我们可以通过配置 PDB(PodDisruptionBudget)对象来避免所有副本同时被删除。比如我们可以设置在驱逐的时候 wordpress 应用最多只有一个副本不可用,其实就相当于逐个删除并在其它节点上重建:
🚩 使用
- 创建资源清单
# pdb.yaml
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: wordpress-pdb
namespace: kube-example
spec:
maxUnavailable: 1
selector:
matchLabels:
app: wordpress
tier: frontend
- 直接创建这个资源对象即可:
$ kubectl apply -f pdb.yaml
poddisruptionbudget.policy/wordpress-pdb created
$ kubectl get pdb -n kube-example
NAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONS AGE
wordpress-pdb N/A 1 1 9s
关于我
我的博客主旨:
- 排版美观,语言精炼;
- 文档即手册,步骤明细,拒绝埋坑,提供源码;
- 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!
🍀 微信二维码
x2675263825 (舍得), qq:2675263825。
🍀 微信公众号
《云原生架构师实战》
🍀 个人博客站点
🍀 语雀
https://www.yuque.com/xyy-onlyone
🍀 csdn
https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421
🍀 知乎
https://www.zhihu.com/people/foryouone
最后
好了,关于本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!