1.docker和kubernetes安装过程省略,相关版本信息
k8s安装好后,dashboard里没有cpu和mem监控信息,需要安装metrics-server收集资源指标数据
2.metrics-server介绍
Metrics Server是Kubernetes内置自动伸缩管道的一个可伸缩、高效的容器资源度量来源。
Metrics Server从Kubelets收集资源指标,并通过Metrics API将它们暴露在Kubernetes apiserver中,供水平Pod Autoscaler和垂直Pod Autoscaler使用。kubectl top还可以访问Metrics API,这使得调试自动伸缩管道变得更容易。
Metrics Server不是用于非自动伸缩的目的。例如,不要将其用于将指标转发给监视解决方案,或者作为监视解决方案指标的来源。在这种情况下,请直接从Kubelet /metrics/resource端点收集度量。
Metrics Server提供:
1.在大多数集群上工作的单个部署
2.快速自动缩放,每15秒收集一次指标。
3.资源效率,为集群中的每个节点使用1毫秒的CPU内核和2 MB的内存。
4.可扩展支持多达5000个节点群集。
3.安装metrics-server
a.从Releases · kubernetes-sigs/metrics-server · GitHub上找到对应的版本,这里使用的是v0.6.0,全地址https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.0/components.yaml
b.修改文件:打开文件找到image把地址改成“registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.6.0” 便于拉取镜像,containers节点args添加- --kubelet-insecure-tls防止后续x509证书错误
c.执行安装:kubectl apply -f componeets.yaml
d.查看pod运行状态:kubectl get pods -n kube-system |findstr metrics-server
e.执行top命令验证安装: 看top节点 kubectl top node,查看top pod命令:kubectl top pod,如果可以显示了,那dashboard上就能看到信息了
f.dashboard上pod使用的cpu和mem信息显示
4.HPA介绍:Horizontal Pod Autoscaling(Pod 水平自动伸缩),简称HPA,HPA 通过监控分析一些控制器控制的所有 Pod 的负载变化情况来确定是否需要调整 Pod 的副本数量。可以简单的通过 kubectl autoscale 命令来创建一个 HPA 资源对象,HPA Controller默认30s轮询一次(可通过 kube-controller-manager 的–horizontal-pod-autoscaler-sync-period 参数进行设置),查询指定的资源中的 Pod 资源使用率,并且与创建时设定的值和指标做对比,从而实现自动伸缩的功能
a。实验开始,先创建一个springboot项目的Deployment,注意yaml中药添加request资源声明,否则后续允许会出现failed to get cpu utilization: missing request。 添加代码如下(CPU只分配50毫核(0.05核CPU)和50M的内存)
spec:
containers:
resources:
requests:
memory: 50Mi
cpu: 50m
b.以cpu为例创建HPA资源对象
kubectl autoscale deployment springboot-k8s-test --cpu-percent=10 --min=1 --max=5
c.压测观察扩缩容
d.以内存为例创建HPA资源,内存使用达到60%开始扩容
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: springboot-k8s-test
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: springboot-k8s-test
minReplicas: 1
maxReplicas: 5
metrics:
- type: Resource
resource:
name: memory
targetAverageUtilization: 60
e.观察扩缩容,最后和预期一致
5.遇到问题列表
Q1:执行kubectl top pod时报错Metrics not available for pod default/example,执行top node正常
A1:kubernetes和docker版本不兼容,查阅了很多资料,推荐使用上图的版本,经测试可用
Q2:执行kubectl top命令时报错error: metrics not available yet
A2:检查metrcs-server服务是否运行正常:kubectl get pods -n kube-system |findstr metrics-server
Q3:事件信息里面出现了 failed to get cpu utilization: missing request for cpu 这样的错误信息
A3:创建的 Pod 对象没有添加 request 资源声明,这样导致 HPA 读取不到 CPU 指标信息,所以如果要想让 HPA 生效,对应的 Pod 资源必须添加 requests 资源声明
spec:
template:
spec:
containers:
resources:
requests:
memory: 50Mi #CPU只分配50毫核(0.05核CPU)
cpu: 50m #50M的内存
Q:其他问题参考metrics-server/KNOWN_ISSUES.md at master · kubernetes-sigs/metrics-server · GitHub