跳到主要内容

k8s优化

更新于:2024年3月10日

k8s优化

image-20240310104058562

目录

[toc]

推荐文章

我的开源项目:

https://onedayxyy.cn/docs/MyOpenSourceProject

image-20240305125631154

使用 PDB

在Kubernetes (k8s) 里,PDB是Pod Disruption Budget的缩写。Pod Disruption Budget允许用户指定其应用中的一定数量的Pod副本是在任何给定时间都必须保持运行的,这在进行**集群维护操作(如升级、节点替换等)**时非常有用。

通过使用PDB,可以定义应用的最小可用性。

例如,如果一个部署有10个副本,你可以指定至少要有7个副本是可用的。这样,在Kubernetes进行自动的或计划内的Pod删除时,它将确保不会违反这一规定。如果删除更多的Pod将使得可用Pod的数量降到规定的阈值以下,那么系统将阻止这种删除操作发生。

PDB通常用于那些需要高可用性的服务,确保在进行集群管理和维护操作时,用户的关键服务不会因为Pod的删除而变得不可用。这是通过以下两个参数来定义的:

  • minAvailable:表示在任何时候应保持可用的最小Pod数量或百分比。
  • maxUnavailable:表示在任何时候可以不可用的最大Pod数量或百分比。
只能设置minAvailablemaxUnavailable中的一个。

下面是一个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。

image-20230107215114763

🍀 微信公众号

《云原生架构师实战》

image-20230107215126971

🍀 个人博客站点

https://onedayxyy.cn/

🍀 语雀

https://www.yuque.com/xyy-onlyone

🍀 csdn

https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421

image-20230107215149885

🍀 知乎

https://www.zhihu.com/people/foryouone

image-20230107215203185

最后

好了,关于本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!