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

宁睿  金牌会员 | 2024-5-15 15:18:22 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 567|帖子 567|积分 1709

在 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 的配置文件:
  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4.   name: my-app
  5. spec:
  6.   replicas: 1
  7.   selector:
  8.     matchLabels:
  9.       app: my-app
  10.   template:
  11.     metadata:
  12.       labels:
  13.         app: my-app
  14.     spec:
  15.       containers:
  16.       - name: my-container
  17.         image: my-image
  18.         ports:
  19.         - containerPort: 80
复制代码
3、创建 HorizontalPodAutoscaler 资源来自动扩缩 Pod
  1. apiVersion: autoscaling/v2beta2
  2. kind: HorizontalPodAutoscaler
  3. metadata:
  4.   name: my-hpa
  5. spec:
  6.   scaleTargetRef:
  7.     apiVersion: apps/v1
  8.     kind: Deployment
  9.     name: my-app
  10.   minReplicas: 1
  11.   maxReplicas: 10
  12.   metrics:
  13.   - type: Resource
  14.     resource:
  15.       name: cpu
  16.       target:
  17.         type: Utilization
  18.         averageUtilization: 80
复制代码
在这个例子中,HPA 会根据 Pod 的 CPU 使用率自动扩缩 my-app Deployment 中的 Pod 数量,目标是保持平均 CPU 使用率在 80% 左右。minReplicas 和 maxReplicas 定义了扩缩的界限。
确保你的容用具有相关的资源请求和限制,如许 HPA 才华正常工作:
  1. containers:
  2. - name: my-container
  3.   image: my-image
  4.   ports:
  5.   - containerPort: 80
  6.   resources:
  7.     requests:
  8.       cpu: "100m"
  9.     limits:
  10.       cpu: "200m"
复制代码
记得应用这些配置文件到你的 Kubernetes 集群:
  1. kubectl apply -f deployment.yaml
  2. 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 为了实现更细粒度、更公平和更高效的资源分配而接纳的一种设计计谋。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

宁睿

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表