zoukankan      html  css  js  c++  java
  • Kubernetes部署Prometheus+Grafana以及HPA实验测试

    前言

    我们现在想要达到的效果是以可视化数据来展示 Kubernetes 集群的资源,并且能够实现 HPA(Pod 水平自动扩缩)功能,至于什么是 HPA 可以看我之前的文章, 《K8s-Pod 水平自动扩缩实践(简称HPA)》其实这篇文章已经很好的实现 HPA 功能,但是没有可视化监控数据。

    由于 Prometheus 已经集成了 Metrics-Server,所以需要把之前单独部署的 Metrics-Server 给移除即可。

    image-20210723140241545

    下载相关配置文件

    GitHub下载地址:https://github.com/prometheus-operator/kube-prometheus

    这里需要注意的是根据你部署的 Kubernetes 版本来选择对应的版本号。

    image-20210723140555767

    Kubernetes v1.14.0 之前的版本要选择 release-0.1 版本来部署。

    image-20210723140627725

    修改配置文件,使用 NodePort 方式访问

    grafana-service.yaml 配置文件

    [root@k8s-master01 manifests]# pwd
    /root/kube-prometheus-release-0.1/manifests
    [root@k8s-master01 manifests]# cat grafana-service.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: grafana
      name: grafana
      namespace: monitoring
    spec:
      # 新添加
      type: NodePort
      ports:
      - name: http
        port: 3000
        targetPort: http
        # 新添加
        nodePort: 30100
      selector:
        app: grafana
    

    prometheus-service.yaml 配置文件

    [root@k8s-master01 manifests]# cat prometheus-service.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        prometheus: k8s
      name: prometheus-k8s
      namespace: monitoring
    spec:
      # 新添加
      type: NodePort
      ports:
      - name: web
        port: 9090
        targetPort: web
        # 新添加
        nodePort: 30200
      selector:
        app: prometheus
        prometheus: k8s
      sessionAffinity: ClientIP
    

    alertmanager-service.yaml 配置文件

    [root@k8s-master01 manifests]# cat alertmanager-service.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        alertmanager: main
      name: alertmanager-main
      namespace: monitoring
    spec:
      # 新添加
      type: NodePort
      ports:
      - name: web
        port: 9093
        targetPort: web
        # 新添加
        nodePort: 30300
      selector:
        alertmanager: main
        app: alertmanager
      sessionAffinity: ClientIP
    

    开始构建

    [root@k8s-master01 manifests]# pwd
    /root/kube-prometheus-release-0.1/manifests
    [root@k8s-master01 manifests]# kubectl apply -f .
    namespace/monitoring created
    ....
    

    如果出现如下错误,重新再执行一遍即可。

    image-20210723143345658

    创建完成之后查看 Pod 状态,全部都在 monitoring 名称空间里,这里需要等待一段时间下载镜像,后面会有个别镜像下载失败,因为镜像仓库在国外,需要我们手动下载。

    image-20210723143857635

    等待了蛮久的一段时间后,发现只有一个 Pod 镜像下载失败,需要我们手动去对应的 Node 下载这个镜像,镜像名称可以通过 describe 来查看。

    image-20210723144826893

    查看 kube-state-metrics 需要的镜像

    [root@k8s-master01 ~]# kubectl describe pod kube-state-metrics-69c95c6466-4jxqr -n monitoring
    ...
      Normal   BackOff    11m (x2 over 12m)    kubelet, k8s-node02  Back-off pulling image "k8s.gcr.io/addon-resizer:1.8.4"
      Warning  Failed     11m (x3 over 12m)    kubelet, k8s-node02  Failed to pull image "k8s.gcr.io/addon-resizer:1.8.4": rpc error: code = Unknown desc = Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
      Normal   Pulling    10m (x4 over 13m)    kubelet, k8s-node02  pulling image "k8s.gcr.io/addon-resizer:1.8.4"
      Warning  Failed     5m39s (x6 over 12m)  kubelet, k8s-node02  Error: ErrImagePull
      Warning  Failed     46s (x45 over 12m)   kubelet, k8s-node02  Error: ImagePullBackOff
    

    每个节点都下载一下,防止重构后它被分配到另外节点,手动下载还是失败,需要先下载国内的镜像源,再通过 docker tag 来实现。

    [root@k8s-node02 ~]# docker pull registry.cn-beijing.aliyuncs.com/minminmsn/addon-resizer:1.8.4
    [root@k8s-node02 ~]# docker tag registry.cn-beijing.aliyuncs.com/minminmsn/addon-resizer:1.8.4 k8s.gcr.io/addon-resizer:1.8.4
    

    此时再次查看就已经全部 Running

    image-20210723145521172

    可以通过命令来查看 Node 和 Pod 相关资源

    [root@k8s-master01 ~]# kubectl top node
    NAME           CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
    k8s-master01   168m         8%     1422Mi          76%       
    k8s-node01     108m         5%     1120Mi          60%       
    k8s-node02     85m          4%     985Mi           52%       
    [root@k8s-master01 ~]# kubectl top pod -n kube-system
    NAME                                   CPU(cores)   MEMORY(bytes)   
    coredns-78d4cf999f-25wzl               2m           16Mi            
    coredns-78d4cf999f-dc8xs               1m           16Mi            
    etcd-k8s-master01                      13m          99Mi
    

    访问 Dashboard 仪表盘界面

    image-20210723150023848

    访问各组件 Web 界面

    image-20210723150439031

    访问 Prometheus

    http://MasterIP:30200

    image-20210723150642602

    访问 Grafana 进行配置

    http://MasterIP:30100,初始用户/密码都是 admin

    image-20210723150730593

    添加 Prometheus 数据源

    image-20210723150958193

    添加数据看板

    image-20210723151057913

    就可以查看到对应的数据了

    image-20210723151145672

    HPA 功能测试

    首先创建 Pod,直接使用阿里源的 hpa-example 镜像,谷歌的拉取不了

    [root@k8s-master01 ~]# kubectl run php-apache --image=registry.cn-beijing.aliyuncs.com/google_registry/hpa-example --requests=cpu=200m --expose --port=80
    

    这个镜像比较大,稍微等一会

    image-20210723152029689

    创建对应 HPA

    [root@k8s-master01 ~]# kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
    

    image-20210723152148552

    开始增加负载进行测试

    [root@k8s-master01 ~]# kubectl run -i --tty load-generator --image=busybox /bin/sh/ 
    /# while true; do wget -q -O- http://php-apache.default.svc.cluster.local; done
    

    image-20210723152425671

    此时 Pod 负载持续增加,已经自动扩容到七个 Pod 来应对

    image-20210723152700519

    查看 Pod 现在的个数,已经升至九个了

    image-20210723152755928

    开始减压,测试是否自动收缩

    image-20210723152852015

    需要等待较长的时间,已经收缩为最小 Pod 数量

    image-20210723153444974

    到此就完成整套的 K8s 监控系统,全部以实操为主,其他具体的配置、概念、理论可以查阅对应组件的官网,由于时间原因这里就不做赘述。


    作者:神奇二进制
    文章出处:https://www.cnblogs.com/l-hh/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
    文章如有叙述不当的地方,欢迎指正。如果觉得文章对你有帮助,可以精神上的支持 [推荐] 或者 [关注我] ,一起交流,共同进步!

  • 相关阅读:
    C++类型转换运算符
    今天开通了博客
    计算每天工时逻辑,去掉可能重叠交叉的数据(由于前端插件存储["11:30","12:00"] 这样的json字符串)
    初次涉及左右值算法(树结构)
    MySql数据库在表中添加新字段,设置主键,设置外键,字段移动位置,以及修改数据库后如何进行部署和维护的总结
    关于使用JQuery追加Option标签时使用三元运算符添加选中属性的解决办法
    【Spring】关于SpringMvc监听的知识点
    关于使用三元运算符来判断下拉框选项是否选中的总结
    关于frameset的一些小总结
    关于上传文件的一点总结
  • 原文地址:https://www.cnblogs.com/l-hh/p/15049183.html
Copyright © 2011-2022 走看看