K8S监控-Prometheus部署

阿里云等环境服务商都会提供一键安装的Prometheus监控服务;接下来记录的几篇文章将是这阵子在自建环境中对监控Prometheus的安装配置,使用的是当前最新版本为 v2.26.0,同样是从记录文档中摘取出来。

首先来张官方架构图:

Prometheus用于收集配置中的监控采集任务的数据,这里先简单地把服务部署起来,并未配置具体的采集规则,会在之后步骤逐步添加。

创建命名空间:

kubectl create namespace monitoring
kubectl get namespace

访问授权

为了能够让Prometheus能够访问受到认证保护的Kubernetes API,我们首先需要做的是,对Prometheus进行访问授权。在Kubernetes中主要使用基于角色的访问控制模型(Role-Based Access Control),用于管理Kubernetes下资源访问权限。首先我们需要在Kubernetes下定义角色(ClusterRole),并且为该角色赋予相应的访问权限。同时创建Prometheus所使用的账号(ServiceAccount),最后则是将该账号与角色进行绑定(ClusterRoleBinding)。

vim prometheus-rbac-setup.yml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: prometheus
rules:
- apiGroups: [""]
  resources:
  - nodes
  - nodes/proxy
  - services
  - endpoints
  - pods
  verbs: ["get", "list", "watch"]
- apiGroups:
  - extensions
  resources:
  - ingresses
  verbs: ["get", "list", "watch"]
- nonResourceURLs: ["/metrics"]
  verbs: ["get"]
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: prometheus
  namespace: monitoring
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: prometheus
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: prometheus
subjects:
- kind: ServiceAccount
  name: prometheus
  namespace: monitoring
kubectl create -f prometheus-rbac-setup.yml
kubectl describe sa/prometheus -n monitoring

Service account是为了方便Pod里面的进程调用Kubernetes API或其他外部服务而设计的。它与User account不同:

  • User account是为人设计的,而service account则是为Pod中的进程调用Kubernetes API而设计
  • User account是跨namespace的,而service account则是仅局限它所在的namespace
  • 每个namespace都会自动创建一个default 的service account
  • Token controller检测service account的创建,并为它们创建secret
  • 开启ServiceAccount Admission Controller后
    • 每个Pod在创建后都会自动设置spec.serviceAccount为default(除非指定了其他ServiceAccout)
    • 验证Pod引用的service account已经存在,否则拒绝创建
    • 如果Pod没有指定ImagePullSecrets,则把service account的ImagePullSecrets加到Pod中
    • 每个container启动后都会只读挂载该service account的token和ca.crt到/var/run/secrets/kubernetes.io/serviceaccount/

查看自动创建的Token:

ConfigMap

使用configmap来管理prometheus的配置文件:

vim prometheus-config.yml
apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus
  namespace: monitoring
  labels:
    app: prometheus
    release: v2.26.0
data:
  prometheus.yml: |
    global:
      evaluation_interval: 1m
      scrape_interval: 15s
      scrape_timeout: 10s
    scrape_configs:
      - job_name: 'prometheus'
        static_configs:
        - targets: ['localhost:9090']
kubectl create -f prometheus-config.yml
kubectl get configmaps -n monitoring

先创建一个最简的示例配置文件,仅定义了一个数据收集配置,之后还需添加其它配置以满足监控信息收集。

发表评论

error: Content is protected !!