• kubernetes资源监控


    目录

    一、资源限制

    1、limitrange

    2、ResourceQuota

    二、metrics-server

    三、图形化监控和代码行监控

    1、dashboard

    2、k9s

    四、hpa


    一、资源限制

    • Kubernetes采用request和limit两种限制类型来对资源进行分配。
    • request(资源需求):即运行Pod的节点必须满足运行Pod的最基本需求才能运行Pod
    • limit(资源限额):即运行Pod期间,可能内存使用量会增加,那最多能使用多少内存,这就是资源限额
    • 资源类型:
    • CPU 的单位是核心数,内存的单位是字节。
    • 一个容器申请0.5个CPU,就相当于申请1个CPU的一半,你也可以加个后缀m 表示千分之一的概念。比如说100m的CPU,100豪的CPU和0.1个CPU都是一样的。
    • 内存单位
    • K、M、G、T、P、E           #通常是以1000为换算标准的。
    • Ki、Mi、Gi、Ti、Pi、Ei        #通常是以1024为换算标准的。

     上传镜像

    1. vim limit.yaml
    2. apiVersion: v1
    3. kind: Pod
    4. metadata:
    5. name: memory-demo
    6. spec:
    7. containers:
    8. - name: memory-demo
    9. image: stress
    10. args:
    11. - --vm
    12. - "1"
    13. - --vm-bytes
    14. - 200M
    15. resources:
    16. requests:
    17. memory: 50Mi
    18. limits:
    19. memory: 100Mi
    20. kubectl apply -f limit.yaml
    21. kubectl get pod

    • 如果容器超过其内存限制,则会被终止。如果可重新启动,则与所有其他类型的运行时故障一样,kubelet 将重新启动它。
    • 如果一个容器超过其内存请求,那么当节点内存不足时,它的 Pod 可能被逐出。

    1、limitrange

    1. vim range.yaml
    2. apiVersion: v1
    3. kind: LimitRange
    4. metadata:
    5. name: limitrange-memory
    6. spec:
    7. limits:
    8. - default:
    9. cpu: 0.5
    10. memory: 512Mi
    11. defaultRequest:
    12. cpu: 0.1
    13. memory: 256Mi
    14. max:
    15. cpu: 1
    16. memory: 1Gi
    17. min:
    18. cpu: 0.1
    19. memory: 100Mi
    20. type: Container
    21. kubectl apply -f range.yaml

    LimitRange 在 namespace 中施加的最小和最大内存限制只有在创建和更新 Pod 时才会被应用。改变 LimitRange 不会对之前创建的 Pod 造成影响。       

    创建的pod自动添加限制

    kubectl run demo --image nginx
    

     

    自定义限制的pod也需要在limitrange定义的区间内

    2、ResourceQuota

    • 创建的ResourceQuota对象将在default名字空间中添加以下限制
    • 每个容器必须设置内存请求(memory request),内存限额(memory limit),cpu请求(cpu request)和cpu限额(cpu limit)。
    • 所有容器的内存请求总额不得超过1 GiB。
    • 所有容器的内存限额总额不得超过2 GiB。
    • 所有容器的CPU请求总额不得超过1 CPU。
    • 所有容器的CPU限额总额不得超过2 CPU。
    1. vim range.yaml
    2. 添加进
    3. ---
    4. apiVersion: v1
    5. kind: ResourceQuota
    6. metadata:
    7. name: mem-cpu-demo
    8. spec:
    9. hard:
    10. requests.cpu: "1"
    11. requests.memory: 1Gi
    12. limits.cpu: "2"
    13. limits.memory: 2Gi
    14. pods: "2"
    15. kubectl apply -f range.yaml
    16. kubectl describe resourcequotas

     

    1. 配额是针对namespace施加的总限额,命名空间内的所有pod资源总和不能超过此配额
    2. 创建的pod必须定义资源限制

    二、metrics-server

    • Metrics-Server是集群核心监控数据的聚合器用来替换之前的heapster
    • 容器相关的 Metrics 主要来自于 kubelet 内置的 cAdvisor 服务,有了Metrics-Server之后,用户就可以通过标准的 Kubernetes API 来访问到这些监控数据
    • Metrics API 只可以查询当前的度量数据,并不保存历史数据
    • Metrics API URI 为 /apis/metrics.k8s.io/,在 k8s.io/metrics 维护
    • 必须部署 metrics-server 才能使用该 API,metrics-server 通过调用 Kubelet Summary API 获取数据
    • Metrics Server 并不是 kube-apiserver 的一部分,而是通过 Aggregator 这种插件机制,在独立部署的情况下同 kube-apiserver 一起统一对外服务的
    • kube-aggregator 其实就是一个根据 URL 选择具体的 API 后端的代理服务器。

    • Metrics-server属于Core metrics(核心指标),提供API metrics.k8s.io,仅提供Node和Pod的CPU和内存使用情况。而其他Custom Metrics(自定义指标)由Prometheus等组件来完成 

     官网:https://github.com/kubernetes-sigs/metrics-server

    下载部署文件

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

    修改部署文件

    上传镜像到harbor

    1. kubectl apply -f components.yaml
    2. kubectl -n kube-system logs metrics-server-

    三、图形化监控和代码行监控

    1、dashboard

    • Dashboard可以给用户提供一个可视化的 Web 界面来查看当前集群的各种信息。用户可以用 Kubernetes Dashboard 部署容器化的应用、监控应用的状态、执行故障排查任务以及管理 Kubernetes 各种资源。

    官网:https://github.com/kubernetes/dashboard

    下载部署文件
    wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

    上传所需镜像到harbor

    部署

    kubectl apply -f recommended.yaml
    

    修改svc

    kubectl -n kubernetes-dashboard edit svc kubernetes-dashboard
    

    集群需要部署metallb-system,如果没有可以使用NodePort方式

    访问:

     授权  获取token

    1. vim rbac.yaml
    2. apiVersion: rbac.authorization.k8s.io/v1
    3. kind: ClusterRoleBinding
    4. metadata:
    5. name: admin-user
    6. roleRef:
    7. apiGroup: rbac.authorization.k8s.io
    8. kind: ClusterRole
    9. name: cluster-admin
    10. subjects:
    11. - kind: ServiceAccount
    12. name: kubernetes-dashboard
    13. namespace: kubernetes-dashboard
    14. kubectl apply -f rbac.yaml
    15. kubectl -n kubernetes-dashboard create token kubernetes-dashboard

     使用token登录网页

    使用图像化创建

    2、k9s

    四、hpa

    1. vim hpa.yaml
    2. apiVersion: apps/v1
    3. kind: Deployment
    4. metadata:
    5. name: php-apache
    6. spec:
    7. selector:
    8. matchLabels:
    9. run: php-apache
    10. replicas: 1
    11. template:
    12. metadata:
    13. labels:
    14. run: php-apache
    15. spec:
    16. containers:
    17. - name: php-apache
    18. image: hpa-example
    19. ports:
    20. - containerPort: 80
    21. resources:
    22. limits:
    23. cpu: 500m
    24. requests:
    25. cpu: 200m
    26. ---
    27. apiVersion: v1
    28. kind: Service
    29. metadata:
    30. name: php-apache
    31. labels:
    32. run: php-apache
    33. spec:
    34. ports:
    35. - port: 80
    36. selector:
    37. run: php-apache
    38. kubectl apply -f hpa.yaml

    1. kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
    2. kubectl get hpa
    3. 压测
    4. kubectl run -i --tty load-generator --rm --image=busybox --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"

     pod负载上升触发hpa扩容pod

    结束压测后,默认等待5分钟冷却时间,pod会被自动回收

     多项量度指标

    1. kubectl get hpa php-apache -o yaml > hpa-v2.yaml
    2. 修改文件,增加内存指标
    3. - resource:
    4. name: memory
    5. target:
    6. averageValue: 50Mi
    7. type: AverageValue
    8. type: Resource
    9. kubectl apply -f hpa-v2.yaml
    10. kubectl get hpa

  • 相关阅读:
    react面试题
    dpdk环境搭建
    小程序商城框架源码 小程序源码带前端+后台+数据库
    无人机+自组网:2U机架车载式自组网电台技术详解
    经典的笔试题解析:内存泄漏问题忘记free与非法访问的问题
    mysql数据库的授权访问
    华为机试真题 Python 实现【过滤组合字符串】【2022.11 Q4新题】
    Mybatis-Plus简介
    4-6:关注列表,粉丝列表
    LLaVa大模型关键技术及在线演示
  • 原文地址:https://blog.csdn.net/weixin_56744753/article/details/134295620