如何在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 为了实现更细粒度、更公平和更高效的资源分配而采用的一种设计策略。
本文来自博客园,作者:dashery,转载请注明原文链接:https://www.cnblogs.com/ydswin/p/18098613