暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

k8s资源监控、弹性伸缩

IT那活儿 2025-01-03
91
点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!  

资源监控

Metrics Server是一个集群范围的资源使用情况的数据聚合器。

作为一个应用部署在集群中。Metric server从每个节点上Kubelet API收集指标,通过Kubernetes聚合器注册在Master APIServer早期版本使用cAdvisor采集数据,现已将cAdvisor集成到kubelet组件里面。

当然我们可以使用kubectl top来查看监控信息:

metrics项目地址:
https://github.com/kubernetes-sigs/metrics-server

部署metrics-server:

wget https://github.com/kubernetes-sigs/metrics-server/releases/download/metrics-server-helm-chart-3.8.0/components.yaml

Bash

复制

修改yaml文件,默认image使用google,image无法拉取,这里我们使用aliyun:

133       containers:
134       - args:
135         - --cert-dir=/tmp
136         - --secure-port=4443
137         - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
138         - --kubelet-use-node-status-port
139         - --metric-resolution=15s
140         - --kubelet-insecure-tls
141         #image: k8s.gcr.io/metrics-server/metrics-server:v0.6.0
142         image: registry.aliyuncs.com/google_containers/metrics-server:v0.6.0
143         imagePullPolicy: IfNotPresent
YAML

复制
kubectl apply -f components.yaml

Bash

复制

执行后pod一直未处于就绪状态:

查看pod状态信息,发现就绪检查失败。因为证书的原因,修改启动参数不验证https证书即可。

重新执行yaml文件,pod启动成功:

使用kubectl top 获取采集信息:

[root@k8s-master ~]kubectltopnodek8s-node1
NAME        CPU(cores) CPU%   MEMORY(bytes) MEMORY%   
k8s-node1   336m         16%    965Mi           51%       
[root@k8s-master ~]kubectltopnodek8s-node2
NAME        CPU(cores) CPU%   MEMORY(bytes) MEMORY%   
k8s-node2   357m         17%    961Mi           51%       
[root@k8s-master ~]kubectltoppodmy-busybox
NAME         CPU(cores) MEMORY(bytes) 
my-busybox   0m           0Mi   
Bash

复制

Pod水平伸缩

HPA(Horizontal Pod Autoscaler)pod水平伸缩,可以基于cpu使用率、内存使用率自动扩缩 ReplicationController、Deployment和 StatefulSet 中的 Pod 数量,当然也可以基于其他监控程序的指标来执行扩缩容。

kubectl top/hpa -> apiserver -> metrics-server -> kubelet -> pod

要实现水平扩缩容必须满足两个条件:

  • 集群必须安装metrics监控组件;
  • Pod必须配置resource.request(pod limit)。

首先我们创建一个deployment,必须配置request字段:

apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
    app: nginx
spec:
replicas1
selector:
    matchLabels:
      app: demo
template:
    metadata:
      labels:
        app: demo
    spec:
      containers:
      - name: nginx
        imagenginx:1.14.2
        ports:
        - containerPort80
        resources:
          limits:
            cpu"0.5"
            memory100Mi
          requests:
            cpu"0.2"
            memory50Mi
YAML

复制

配置autoscale,最小1个副本最多4个副本,当cpu-percent超过80进行扩容:

创建svc暴露服务,方便访问nginx:

使用ab工具压测测试,-w观察pod数量、HPA指标:

HPA获取到cpu-percent超过80%,扩容,副本加1:

我们再看下pod和endpoint状态:


END


本文作者:赵建强(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论