首页 > 其他分享 >如何在K8s中实现 Pod 的自动扩展

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

时间:2024-03-27 11:44:06浏览次数:36  
标签:name Kubernetes app 扩展 Pod K8s my CPU

在 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 数量。

备注 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 为了实现更细粒度、更公平和更高效的资源分配而采用的一种设计策略。

标签:name,Kubernetes,app,扩展,Pod,K8s,my,CPU
From: https://www.cnblogs.com/ydswin/p/18098613

相关文章

  • blog-engine-07-gatsby 建极速网站和应用程序 基于React的最佳框架,具备性能、可扩展
    拓展阅读blog-engine-01-常见博客引擎jekyll/hugo/Hexo/Pelican/Gatsby/VuePress/Nuxt.js/Middleman对比blog-engine-02-通过博客引擎jekyll构建githubpages博客实战笔记blog-engine-02-博客引擎jekyll-jekyll博客引擎介绍blog-engine-02-博客引擎jekyll-jekyll如何......
  • 使用K8S集群运行MongoDB7.0
    参考:https://hub.docker.com/_/mongo创建PVC创建PVC用于数据持久化#catmongodb-pvc.yamlapiVersion:v1kind:PersistentVolumeClaimmetadata:name:mongodb-pvcspec:accessModes:-ReadWriteOnceresources:requests:storage:22Gistorag......
  • Rancher Dashboard 无法访问 引申发现K8S报错Unable to connect to the server: x509:
    访问RancherDashboard,发现无法访问由于笔者的rancher是用docker部署的,查看rancherlog:dockerlogs[container-name]截取一部分报错如下:..2024-03-2406:52:27.085313I|embed:readytoserveclientrequests2024-03-2406:52:27.085567I|etcdserver:published{N......
  • aardio教程) 搭建自己的扩展库仓库
    前言aardio中有些经常使用的库,换个项目总需要复制一下,还不便于修改。虽然可以直接把它放到aardio\lib目录下,也是不便于共享给其他人使用。最近偶然翻到编辑器里的工具->开发环境->扩展库发布工具,就想着可以像官方一样,发布自己的扩展库,也便于分享给大家使用,最好能像官方扩展库一......
  • duilib 自定义扩展列表
    目录前言一、扩展列表项1、基本数据结构列表项Item1)、ListContainerElement定义......
  • 初学 FSMC - 扩展外部SRAM(一)
    1.SRAM控制原理​ STM32控制器芯片内部有一定大小的SRAM及FLASH作为内存和程序存储空间,但当程序较大,内存和程序空间不足时,就需要在STM32芯片的外部扩展存储器了。STM32F407系列芯片可以扩展外部SRAM用作内存。型号为IS62WV51216的SRAM芯片外观:SRAM芯片的内部功能框......
  • 【K8s】scale缩容时删除指定pod
    PodDeletionCost是k8s1.22后默认开启的新特性,以annotation的方式作用于Pod,表示这个pod的“删除代价”,代价越小的pod删除优先级相对越高。因此在scale前给需要删除的pod加上annotation即可。//ActivePodsWithRanksisasortablelistofpodsandalistofcorresponding//r......
  • chrome扩展通过点击图标控制侧边栏的显示和隐藏
    manifest.json:{"manifest_version":3,"name":"ChatGPT学习","version":"0.0.6","description":"欢迎加入我们一起学习ChatGPT","icons":{"16":"./src/image......
  • 查看k8s中etcd集群的状态
    1.1使用脚本下载与服务端相同版本的 etcdctl 软件包[[email protected]]$pwd/home/shutang/k8s/etcd[[email protected]]$lsdownload.sh[[email protected]]$catdownload.sh#!/bin/bashETCD_VER=v3.4.3ETCD_DIR=etcd-downloadDOWNLOAD_UR......
  • Red Hat Enterprise Linux Server 7.9 扩展目录空间实践
    原磁盘总空间100GB,新加一块100GB硬盘扩展到/目录。一、收集待扩展磁盘目录信息lsblk    检查磁盘信息df-TH   检查磁盘目录root@localhost~]#lsblkNAME         MAJ:MINRM SIZEROTYPEMOUNTPOINTsda            8:0   0 1......