docker for windows kubernetes实现弹性扩缩容

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版本不兼容,查阅了很多资料k8s学习 踩坑之 top nodes - k8s Metrics not available for pod 报错_shrek11的博客-CSDN博客,推荐使用上图的版本,经测试可用

 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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值