Chiriri's blog Chiriri's blog
首页
  • Java

    • JavaSE
    • JavaEE
    • 设计模式
  • Python

    • Python
    • Python模块
    • 机器学习
  • Golang

    • Golang
    • gRPC
  • 服务器

    • Linux
    • MySQL
    • NoSQL
    • Kubernetes
  • 项目

    • 传智健康
    • 畅购商城
  • Hadoop生态

    • Hadoop
    • Zookeeper
    • Hive
    • Flume
    • Kafka
    • Azkaban
    • Hbase
    • Scala
    • Spark
    • Flink
  • 大数据项目

    • 离线数仓
  • 青训营

    • 第四届青训营
  • HTML

    • HTML
    • JavaScript
  • Vue

    • Vue2
    • TypeScript
    • Vue3
    • Uni-APP
  • 数据结构与算法
  • C语言
  • 考研数据结构
  • 计算机组成原理
  • 计算机操作系统
  • Java基础

    • Java基础
    • Java集合
    • JUC
    • JVM
  • 框架

    • Spring
    • Dubbo
    • Spring Cloud
  • 数据库

    • MySQL
    • Redis
    • Elasticesearch
  • 消息队列

    • RabbitMQ
    • RocketMQ
  • 408

    • 计算机网络
    • 操作系统
    • 算法
  • 分类
  • 标签
  • 归档
  • 导航站
GitHub (opens new window)

Iekr

苦逼后端开发
首页
  • Java

    • JavaSE
    • JavaEE
    • 设计模式
  • Python

    • Python
    • Python模块
    • 机器学习
  • Golang

    • Golang
    • gRPC
  • 服务器

    • Linux
    • MySQL
    • NoSQL
    • Kubernetes
  • 项目

    • 传智健康
    • 畅购商城
  • Hadoop生态

    • Hadoop
    • Zookeeper
    • Hive
    • Flume
    • Kafka
    • Azkaban
    • Hbase
    • Scala
    • Spark
    • Flink
  • 大数据项目

    • 离线数仓
  • 青训营

    • 第四届青训营
  • HTML

    • HTML
    • JavaScript
  • Vue

    • Vue2
    • TypeScript
    • Vue3
    • Uni-APP
  • 数据结构与算法
  • C语言
  • 考研数据结构
  • 计算机组成原理
  • 计算机操作系统
  • Java基础

    • Java基础
    • Java集合
    • JUC
    • JVM
  • 框架

    • Spring
    • Dubbo
    • Spring Cloud
  • 数据库

    • MySQL
    • Redis
    • Elasticesearch
  • 消息队列

    • RabbitMQ
    • RocketMQ
  • 408

    • 计算机网络
    • 操作系统
    • 算法
  • 分类
  • 标签
  • 归档
  • 导航站
GitHub (opens new window)
  • JavaSE

  • JavaEE

  • Linux

  • MySQL

  • NoSQL

  • Python

  • Python模块

  • 机器学习

  • 设计模式

  • 传智健康

  • 畅购商城

  • 博客项目

  • JVM

  • JUC

  • Golang

  • Kubernetes

    • Kubernetes(K8S)
    • 安装K8S集群
    • 部署应用到集群中
    • Service
    • StatefulSet
    • 数据持久化
    • ConfigMap & Secret
    • Helm 和 命名空间
    • Ingress
    • Kubeasz
    • Kainstall
    • 探针
    • 调度器
    • 集群安全机制 RBAC
    • 性能监控平台
      • 部署
      • 启动监控相关服务
    • 高可用集群
  • 硅谷课堂

  • C

  • 源码

  • 神领物流

  • RocketMQ

  • 短链平台

  • 后端
  • Kubernetes
Iekr
2023-11-20
目录

性能监控平台

# 性能监控平台

开源软件 cAdvisor(Container Advisor)用于监控所在节点的容器运行状态,当前已经被默认集成到 kubelet 组件内,默认使用 tcp 4194 端口。在大规模容器集群,一般使用 Heapster+Influxdb+Grafana 平台实现集群性能数据的采集,存储与展示。

环境:Kubernetes + heapster + Influxdb + Grafana

image-20231120055958706

  • Heapster:集群中各 node 节点的 cAdvisor 的数据采集汇聚系统,通过调用 node 上 kubelet 的 api,再通过 kubelet 调用 cAdvisor 的 api 来采集所在节点上所有容器的性能数据。Heapster 对性能数据进行聚合,并将结果保存到后端存储系统,heapster 支持多种后端存储系统,如 memory,Influxdb 等。
  • Influxdb:分布式时序数据库(每条记录有带有时间戳属性),主要用于实时数据采集,时间跟踪记录,存储时间图表,原始数据等。Influxdb 提供 rest api 用于数据的存储与查询。
  • Grafana:通过 dashboard 将 Influxdb 中的时序数据展现成图表或曲线等形式,便于查看集群运行状态

Heapster,Influxdb,Grafana 均以 Pod 的形式启动与运行。

# 部署

kubernetes 部署服务时,为避免部署时发生 pull 镜像超时的问题,建议提前将相关镜像 pull 到相关所有节点(以下以 kubenode1 为例),或搭建本地镜像系统。

需要从 gcr.io pull 的镜像,已利用 Docker Hub 的 "Create Auto-Build GitHub" 功能(Docker Hub 利用 GitHub 上的 Dockerfile 文件 build 镜像),在个人的 Docker Hubbuild 成功,可直接 pull 到本地使用。

docker pull netonline/heapster-amd64:v1.5.1
docker pull netonline/heapster-influxdb-amd64:v1.3.3
docker pull netonline/heapster-grafana-amd64:v4.4.3
1
2
3

Heapster release 下载页:https://github.com/kubernetes/heapster/releases

cd /usr/local/src/
wget -O heapster-v1.5.1.tar.gz https://github.com/kubernetes/heapster/archive/v1.5.1.tar.gz
tar -zxvf heapster-v1.5.1.tar.gz -C /usr/local/
mv /usr/local/heapster-1.5.1 /usr/local/heapster
1
2
3
4

heapster 需要向 kubernetes-master 请求 node 列表,需要设置相应权限;默认不需要对 heapster-rbac.yaml 修改,将 kubernetes 集群自带的 ClusterRole: system:heapster 做 ClusterRoleBinding,完成授权

cd /usr/local/heapster/deploy/kube-config/rbac/
cat heapster-rbac.yaml
1
2

heapster-rbac.yaml

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: heapster
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:heapster
subjects:
  - kind: ServiceAccount
    name: heapster
    namespace: kube-system
1
2
3
4
5
6
7
8
9
10
11
12

hepster.yaml 由 3 个模块组成:ServiceAccout,Deployment,Service。

ServiceAccount 默认不需要修改 ServiceAccount 部分,设置 ServiceAccount 资源,获取 rbac 中定义的权限。

Deployment

修改处:第 23 行,变更镜像名;

  • --source:配置采集源,使用安全端口调用 kubernetes 集群 api;
  • --sink:配置后端存储为 influxdb;地址采用 influxdb 的 service 名,需要集群 dns

正常工作,如果没有配置 dns 服务,可使用 service 的 ClusterIP 地址

cd /usr/local/heapster/deploy/kube-config/influxdb/
sed -i 's|gcr.io/google_containers/heapster-amd64:v1.5.1|netonline/heapster-amd64:v1.5.1|g' heapster.yaml
cat heapster.yaml
1
2
3

hepster.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: heapster
  namespace: kube-system
spec:
  replicas: 1
  template:
    metadata:
      labels:
        task: monitoring
        k8s-app: heapster
    spec:
      serviceAccountName: heapster
      containers:
        - name: heapster
          image: netonline/heapster-amd64:v1.5.1
          imagePullPolicy: IfNotPresent
          command:
            - /heapster
            - --source=kubernetes:https://kubernetes.default
            - --sink=influxdb:http://monitoring-influxdb.kube-system.svc:8086
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

Service 默认不需要修改 Service 部分。


influxdb.yaml 由 2 个模块组成:Deployment,Service。

Deployment

修改处:第 16 行,变更镜像名;

sed -i 's|gcr.io/google_containers/heapster-influxdb-amd64:v1.3.3|netonline/heapster-influxdb-amd64:v1.3.3|g' influxdb.yaml
1

Service 默认不需要修改 Service 部分,注意 Service 名字的对应即可。


grafana.yaml 由 2 个模块组成:Deployment,Service。

修改处:

第 16 行,变更镜像名;

第 43 行,取消注释;“GF_SERVER_ROOT_URL” 的 value 值设定后,只能通过 API Server proxy 访问 grafana;

第 44 行,注释本行;

INFLUXDB_HOST 的 value 值设定为 influxdb 的 service 名,依赖于集群 dns,或者直接使用 ClusterIP

sed -i 's|gcr.io/google_containers/heapster-grafana-amd64:v4.4.3|netonline/heapster-grafana-amd64:v4.4.3|g' grafana.yaml
sed -i '43s|# value:|value:|g' grafana.yaml
sed -i '44s|value:|# value:|g' grafana.yaml
cat grafana.yaml
1
2
3
4
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: monitoring-grafana
  namespace: kube-system
spec:
  replicas: 1
  template:
    metadata:
      labels:
        task: monitoring
        k8s-app: grafana
    spec:
      containers:
        - name: grafana
          image: netonline/heapster-grafana-amd64:v4.4.3
          ports:
            - containerPort: 3000
              protocol: TCP
          volumeMounts:
            - mountPath: /etc/ssl/certs
              name: ca-certificates
              readOnly: true
            - mountPath: /var
              name: grafana-storage
          env:
            - name: INFLUXDB_HOST
              value: monitoring-influxdb
            - name: GF_SERVER_HTTP_PORT
              value: "3000"
            - name: GF_AUTH_BASIC_ENABLED
              value: "false"
            - name: GF_AUTH_ANONYMOUS_ENABLED
              value: "true"
            - name: GF_AUTH_ANONYMOUS_ORG_ROLE
              value: Admin
            - name: GF_SERVER_ROOT_URL
              value: /api/v1/namespaces/kube-system/services/monitoring-grafana/proxy
      volumes:
        - name: ca-certificates
          hostPath:
            path: /etc/ssl/certs
        - name: grafana-storage
          emptyDir: {}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

Service 默认不需要修改 Service 部分,注意 Service 名字的对应即可。


# 启动监控相关服务

将 heapster-rbac.yaml 复制到 influxdb/ 目录;

cd /usr/local/heapster/deploy/kube-config/influxdb/
cp /usr/local/heapster/deploy/kube-config/rbac/heapster-rbac.yaml .
kubectl create -f .
1
2
3

查看 deployment 与 Pod 运行状态

kubectl get deploy -n kube-system | grep -E 'heapster|monitoring'
kubectl get pods -n kube-system | grep -E 'heapster|monitoring'
kubectl get svc -n kube-system | grep -E 'heapster|monitoring'
1
2
3

访问 dashboard

浏览器访问访问 dashboard:https://172.30.200.10:6443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy 注意:Dasheboard 没有配置 hepster 监控平台时,不能展示 node,Pod 资源的 CPU 与内存等 metric 图形

Node 资源 CPU / 内存 metric 图形

image-20231120061719993

Pod 资源 CPU / 内存 metric 图形

image-20231120061729504

访问 grafana

# 通过 kube-apiserver 访问
kubectl cluster-info
1
2

image-20231120061758508

浏览器访问访问 dashboard:https://172.30.200.10:6443/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy

image-20231120061924943

Pod 信息

image-20231120061938299

编辑 (opens new window)
上次更新: 2023/12/13, 06:06:02
集群安全机制 RBAC
高可用集群

← 集群安全机制 RBAC 高可用集群→

最近更新
01
k8s
06-06
02
进程与线程
03-04
03
计算机操作系统概述
02-26
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Iekr | Blog
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式