ydswin

忘记背后,努力面前的,向着标杆直跑

导航

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

posted on 2024-03-27 11:43  dashery  阅读(28)  评论(0编辑  收藏  举报