扩缩容
安装metrics-server
metrics-server 从kubelet 采集指标并暴露给apiserver ,可为dashboard、hpa、vpa 提供支持
第一步:拉取镜像
k8s 版本v1.23.17
docker pull k8simage/metrics-server:v0.6.1
docker tag k8simage/metrics-server:v0.6.1 k8s.gcr.io/metrics-server/metrics-server:v0.6.1
第二步:部署metric server
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
第三步:修改metrics-server的启动参数
- --kubelet-insecure-tls=true
第四步:功能验证
kubectl top node --sort-by=memory
kubectl top node --sort-by=cpu
验证自动扩缩容-基于cpu使用率
创建用于测试的deploy
kubectl create deployment autoscale --image=centos:7 --dry-run=client -oyaml -- tail -f /dev/null
cat <<EOF|kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: autoscale
name: autoscale
spec:
replicas: 1
selector:
matchLabels:
app: autoscale
template:
metadata:
labels:
app: autoscale
spec:
containers:
- command:
- tail
- -f
- /dev/null
image: centos:7
name: centos
resources:
requests: # 必须要有request资源配置
cpu: 100m
memory: 1Mi
EOF
为deploy创建hpa
kubectl autoscale deploy autoscale --min=1 --max=5 --cpu-percent=90 --dry-run=client -oyaml
cat <<EOF|kubectl apply -f -
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: autoscale
spec:
maxReplicas: 5
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: autoscale
targetCPUUtilizationPercentage: 90
EOF
压力测试观察状态
执行cpu压测 | 观察扩缩容效果 |
kubectl exec -it autoscale-8fbf8c769-frrzd -- bash -c 'echo "scale=5000;a(1)"|bc -l -q' |
验证扩缩容-基于v2版本内存使用率
HorizontalPodAutoscaler 支持v1和v2两个版本,v1版本支持基于cpu资源使用率的扩缩容,v2版本使用 metrics 数组替代了targetCPUUtilizationPercentage, 可以将更多的指标作为扩缩容的依据。
kubectl explain hpa --api-version='autoscaling/v1'
kubectl explain hpa --api-version='autoscaling/v2'
metrics支持 Resource 、Pod、Object、External 类型,当前只测试出来Resource 类型的使用方法
示例为参照内存使用率执行扩缩容,同样适用于cpu
cat <<EOF|kubectl apply -f -
apiVersion: autoscaling/v2 # 选择v2版本
kind: HorizontalPodAutoscaler
metadata:
name: autoscaler-v2
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: autoscale
minReplicas: 1
maxReplicas: 10
metrics: # v1 版本没有metrics字段
- type: Resource # type=Resource 支持cpu 和 memory
resource:
name: memory
target:
type: Utilization # 支持按照百分比和使用量
averageUtilization: 50
#type: AverageValue # 按照使用量
#averageValue: 512Ki
EOF