k8s 安装 全栈监控: metrics-server和prometheus

1、概述html

  • 使用metric-server收集数据给k8s集群内使用,如kubectl,hpa,scheduler等
  • 使用prometheus-operator部署prometheus,存储监控数据
  • 使用kube-state-metrics收集k8s集群内资源对象数据
  • 使用node_exporter收集集群中各节点的数据
  • 使用prometheus收集apiserver,scheduler,controller-manager,kubelet组件数据
  • 使用alertmanager实现监控报警
  • 使用grafana实现数据可视化

一、部署metrics-servernode

 

git clone https://github.com/cuishuaigit/k8s-monitor.git
cd k8s-monitor  

 

我都是把这种服务部署在master节点上面,此时须要修改metrics-server-deployment.yamlgit

复制代码
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: metrics-server
  namespace: kube-system
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: metrics-server
  namespace: kube-system
  labels:
    k8s-app: metrics-server
spec:
  selector:
    matchLabels:
      k8s-app: metrics-server
  template:
    metadata:
      name: metrics-server
      labels:
        k8s-app: metrics-server
    spec:
      serviceAccountName: metrics-server
      tolerations:
        - effect: NoSchedule
          key: node.kubernetes.io/unschedulable
          operator: Exists
        - key: NoSchedule
          operator: Exists
          effect: NoSchedule
      volumes:
      # mount in tmp so we can safely use from-scratch images and/or read-only containers
      - name: tmp-dir
        emptyDir: {}
      containers:
      - name: metrics-server
        image: k8s.gcr.io/metrics-server-amd64:v0.3.1
        imagePullPolicy: Always
        command:
        - /metrics-server
        - --kubelet-insecure-tls
        - --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP
        volumeMounts:
        - name: tmp-dir
          mountPath: /tmp
      nodeSelector:
        metrics: "yes"
复制代码

为master节点添加labelgithub

kubectl label nodes k8s-master metrics=yes

部署sql

在 配置文件里 更改image pull路径: docker pull lizhenliang /metrics-server-amd64:v0.3.1
kubectl create -f metrics-server/deploy/1.8+/

 

验证:docker

it's coolvim

注:metrics-server默认使用node的主机名,可是coredns里面没有物理机主机名的解析,一种是部署的时候添加一个参数:api

- --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIPbash

第二种是使用dnsmasq构建一个上游的dns服务,参照https://www.cnblogs.com/cuishuai/p/9856843.html。app

 

 

二、部署prometheus

下载相关文件:

 前面部署metrics-server已经把全部的文件pull到本地了,因此直接使用
cd k8s-monitor
复制代码

1.搭建nfs服务动态提供持久化存储

yum install -y nfs-utils
1.
1.1 master上安装nfs sudo

  在 nfs-deployment.yaml 更改image pull路径: lizhenliang/nfs-client-provisioner:latest

sudo vi /etc/exports 
systemctl restart /data/opv *(rw,sync,no_root_squash,no_subtree_check) 注意将*换成本身的ip段,纯内网的话也能够用*,代替任意 sudo rpcbind restart 
systemctl restart nfssudo 
sudo systemctl enable rpcbind nfs 
1.2 客户端 Node节点上 安装: sudo yum install -y nfs-common mount -t nfs k8s-masterIP:/data/opv /data/opv -o proto=tcp -o nolock 为了方便使用将上面的mount命令直接放到.bashrc里面

2.
master上:
建立namesapce kubectl creaet -f nfs/monitoring-namepsace.yaml 3.为nfs建立rbac kubectl create -f nfs/rbac.yaml 4.建立deployment,将nfs的地址换成本身的 kubectl create -f nfs/nfs-deployment.yaml 5.建立storageclass kubectl create -f nfs/storageClass.yaml 

2.安装Prometheus

cd k8s-monitor/Promutheus/prometheus

1.建立权限
kubectl create -f rbac.yaml 2.建立 node-exporter kubectl create -f prometheus-node-exporter-daemonset.yaml kubectl create -f prometheus-node-exporter-service.yaml 3.建立 kube-state-metrics kubectl create -f kube-state-metrics-deployment.yaml kubectl create -f kube-state-metrics-service.yaml 4.建立 node-directory-size-metrics kubectl create -f node-directory-size-metrics-daemonset.yaml 5.建立 prometheus kubectl create -f prometheus-pvc.yaml kubectl create -f prometheus-core-configmap.yaml kubectl create -f prometheus-core-deployment.yaml kubectl create -f prometheus-core-service.yaml kubectl create -f prometheus-rules-configmap.yaml 6.修改core-configmap里的etcd地址

#修正文件prometheus-core-configmap.yaml的143行开始修改为以下:注意insecure比上一行后退2格:

vim prometheus-core-configmap.yaml +143

- job_name: 'etcd'

        scheme: https

        tls_config:

          insecure_skip_verify: true

 

7. 若是promethus Pod有问题,先用kubectl delete依次如下的全部yaml文件:

kubectl delete -f prometheus-core-service.yaml

再kubectl create 全部delete的yaml文件。

 

3.安装Grafana

cd k8s-monitor/Promutheus/grafana

1.安装grafana service kubectl create -f grafana-svc.yaml 2.建立configmap kubectl create -f grafana-configmap.yaml 3.建立pvc kubectl create -f grafana-pvc.yaml 4.建立gragana deployment kubectl create -f grafana-deployment.yaml 5.建立dashboard configmap kubectl create configmap "grafana-import-dashboards" --from-file=dashboards/ --namespace=monitoring 6.建立job,导入dashboard等数据 kubectl create -f grafana-job.yaml
 

 

 
   
  

 

 

 
   
  

 

 

 
  
 
  
复制代码

 

查看部署:

 

prometheus和grafana都是采用的nodePort方式暴漏的服务,因此能够直接访问。

grafana默认的用户名密码:admin/admin

 

 

QA:

一、集群是使用kubeadm部署的,controller-manager和schedule都是监听的127.0.0.1,致使prometheus收集不到相关的数据?

能够在初始化以前修改其监听地址:

复制代码
apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterConfiguration
controllerManager:
  extraArgs:
    address: 0.0.0.0
scheduler:
  extraArgs:
    address: 0.0.0.0
复制代码

若是集群已经构建好了:

sed -e "s/- --address=127.0.0.1/- --address=0.0.0.0/" -i /etc/kubernetes/manifests/kube-controller-manager.yaml
sed -e "s/- --address=127.0.0.1/- --address=0.0.0.0/" -i /etc/kubernetes/manifests/kube-scheduler.yaml

 

二、metrics-server不能使用,报错不能解析node节点的主机名?

须要修改deployment文件,

- --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP

三、metrics-server报错,x509,证书是非信任的?

 

 

command:
        - /metrics-server
        - --kubelet-insecure-tls

 

四、完整的配置文件

复制代码
containers:
      - name: metrics-server
        image: k8s.gcr.io/metrics-server-amd64:v0.3.1
        command:
        - /metrics-server
        - --metric-resolution=30s
        - --kubelet-insecure-tls
        - --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP
复制代码
相关文章
相关标签/搜索