如何在K8s中实现 Pod 的自动扩展

这篇具有很好参考价值的文章主要介绍了如何在K8s中实现 Pod 的自动扩展。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在 Kubernetes 中实现 Pod 的自动扩缩,你可以使用 HorizontalPodAutoscaler 资源。以下是一个简单的例子:

首先,你需要确保你的 Kubernetes 集群中已经安装了 Metrics Server,因为 HPA 需要它来获取 Pod 的资源使用情况。

1、部署 Metrics Server(如果尚未部署):

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

2、创建一个带有自动扩缩功能的 Deployment 或者 StatefulSet。

例如,以下是一个 Deployment 的配置文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: my-image
        ports:
        - containerPort: 80

3、创建 HorizontalPodAutoscaler 资源来自动扩缩 Pod

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: my-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-app
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 80

在这个例子中,HPA 会根据 Pod 的 CPU 使用率自动扩缩 my-app Deployment 中的 Pod 数量,目标是保持平均 CPU 使用率在 80% 左右。minReplicas 和 maxReplicas 定义了扩缩的界限。

确保你的容器具有相关的资源请求和限制,这样 HPA 才能正常工作

containers:
- name: my-container
  image: my-image
  ports:
  - containerPort: 80
  resources:
    requests:
      cpu: "100m"
    limits:
      cpu: "200m"

记得应用这些配置文件到你的 Kubernetes 集群:

kubectl apply -f deployment.yaml
kubectl apply -f hpa.yaml

一旦部署完成,HPA 会开始根据指定的指标自动扩缩 Pod 数量。

注意
HPA在做出决策时考虑的是所有被监控Pod的总体资源使用情况,而不是单个Pod或容器的资源限制。它会收集所有相关Pod的指标数据,并根据这些数据的聚合结果(如平均值、总和等)来做出扩缩容决策。

备注 k8s 资源限制cpu为什么以m为单位

在 Kubernetes(k8s)中,CPU 资源的限制和请求可以以不同的单位来表示,包括整核(如 1、2、3 等表示完整的 CPU 核心)和毫核(m),其中 1000m 等于 1 个完整的 CPU 核心。这种设计使得资源分配更加灵活和精细。

以毫核(m)为单位的主要原因是为了实现更细粒度的资源分配。在大型集群中,可能有成百上千的 Pod 同时运行,每个 Pod 可能只需要一小部分的 CPU 资源。如果只能以整核为单位进行分配,那么会造成大量的资源浪费。而以毫核为单位,可以确保每个 Pod 都能获得其所需的精确资源量,从而提高集群的整体资源利用率。

此外,以毫核为单位还有助于实现更公平的资源分配。在 Kubernetes 中,调度器会根据每个 Pod 的资源需求和限制来做出调度决策。如果以整核为单位,那么某些 Pod 可能会因为资源需求无法满足而被阻塞或延迟调度。而以毫核为单位,可以使得每个 Pod 都有机会获得其所需的资源,从而实现更公平的资源分配。

总之,以毫核(m)为单位进行 CPU 资源限制和请求是 Kubernetes 为了实现更细粒度、更公平和更高效的资源分配而采用的一种设计策略。文章来源地址https://www.toymoban.com/news/detail-843766.html

到了这里,关于如何在K8s中实现 Pod 的自动扩展的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • k8s中如何正确删除pod

    --- ♦ 在日常的k8s运维过程中,避免不了会对某些pod进行剔除,那么如何才能正确的剔除不需要的pod呢? 首先,需要查出想要删除的pod kubectl 删除pod命令 可是这里你会发现,在进行删除delete pod后,并不会直接删除。该pod会自动重新构建(可以理解为重启、重构),原因是k

    2023年04月27日
    浏览(19)
  • 现场问题排查-k8s(docker)上某服务pod频繁自动重启

    根因:应用内存占用不合理(个人认为)+现场配置内存不够导致频繁触发OOM引发该现象。 为啥要写这个文章? 之前没有k8s下pod频繁重启的问题处理经验,这次实战沉淀思路及过程,供后续自己处理相同问题提供参考资料 为其他遇到类似问题的人提供一些排查思路 现场反馈

    2024年02月03日
    浏览(19)
  • 如何批量删除k8s中的异常pod信息

    kubectl get pods 发现有很多pod出问题了 Evicted可使用kubectl中的强制删除命令 批量删除所有“Evicted”状态的pod即可 OutOfCpu可使用kubectl中的强制删除命令 批量删除所有“OutOfcpu ”状态的pod即可 Terminating可使用kubectl中的强制删除命令

    2024年02月12日
    浏览(19)
  • k8s中如何修改pod中mysql的连接数

    (方法一) 临时更改设置最大连接数据(建议先临时修改,项目没有问题之后再进行永久修改) 使用Navicat连接上数据库,点击连接名——点击新建查询—— 查看最大连接数 查看当前用户使用数 show status like \\\"%connections%; 修改临时最大连接数 set global max_connections=1000; 修改临时最

    2024年02月11日
    浏览(19)
  • 持续集成部署-k8s-资源调度:HPA - Pod 基于负载指标自动水平扩容缩容

    首先我们找一个 Deployment 配置文件: nginx-deploy.yaml

    2024年02月07日
    浏览(30)
  • K8s实战小技巧——该如何查看pod崩溃前的日志

    当pod处于crash状态的时候,容器不断重启,此时用 kubelet logs 可能出现一直捕捉不到前一个奔溃POD日志。本文就教你如何捕捉POD奔溃日志。 解决方法:kubectl previous kubectl previous 参数作用: If true, print the logs for the previous instance of the container in a pod if it exists. 单容器pod: 多容器

    2024年02月12日
    浏览(26)
  • 【Kubernetes】k8s中容器之间、pod之间如何进行网络通信?

    首先来回顾一下Pod: Pod 是用于构建应用程序的最小可部署对象。单个 Pod 代表集群中正在运行的工作负载,并 封装一个或多个 Docker 容器、任何所需的存储以及唯一的 IP 地址 。 集群中每一个 Pod 都会获得自己的、 独一无二的 IP 地址。一个Pod里的一组容器共享相同的IP地址。

    2024年04月28日
    浏览(29)
  • k8s故障排查个案:当Pod内存持续增长,OOM问题如何解决?

    pod 运行一段时间后,内存持续增长,甚至 oom 的情况. 容器化过程中,我们经常会发现 kubernetes 集群内 pod 的内存使用率会不停持续增长,加多少内存吃多少内存,如果对 cgroup 内存的构成不是很清楚的情况下,单纯看监控看不出什么问题。 经过一番查阅,目前总结出大致有

    2024年02月22日
    浏览(29)
  • k8s Pod简介与探针实现零宕机发布

    一、Pod简介 Pod的退出流程 1、什么是Pod 2、定义一个Pod 二、探针、零宕机发布 1、Pod探针 2、Pod探针的检测方式 3、探针检查参数配置 4、startupProbe 5、liveness 6、readiness 7、Pod 优雅关闭 Pod的退出流程 管理员 执行的删除操作 Pod 的状态为 terminating EndPoint 会删除 对应的 Pod-IP 执行

    2024年02月02日
    浏览(23)
  • k8s自定义Endpoint实现内部pod访问外部应用

    endpoint除了可以暴露pod的IP和端口还可以代理到外部的ip和端口 使用场景 公司业务还还没有完成上云, 一部分云原生的,一部分是实体的 业务上云期间逐步实现上云,保证各个模块之间的解耦性 比如使用云数据库或者实体数据库服务器啥的,因为像数据库实现容器化的话在

    2024年01月25日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包