曾国藩:一勤天下无难事

灵雀云K8s集群对接Prometheus

2019.03.22

安装helm

安装helm

docker run -ti --rm -v /usr/local/bin/:/var/log/abc index.alauda.cn/claas/helm:v2.10.0-rc.2 sh -c "cp /systembin/helm /var/log/abc"

安装chart_repo源(我自己的平台已经安装,所以不需要操作)

docker run -d \
-p 8088:8080 \
-e PORT=8080 \
-e DEBUG=1 \
-e STORAGE="local" \
-e STORAGE_LOCAL_ROOTDIR="/data" \
-e BASIC_AUTH_USER="chartmuseum" \
-e BASIC_AUTH_PASS="chartmuseum" \
-v /data:/data \
chartmuseum/chartmuseum:latest

检查确定安装成功

helm repo list
NAME    URL
local   http://127.0.0.1:8879/charts
stable  http://chartmuseum:chartmuseum@172.16.16.21:8088

执行helm init 初始化

helm init --stable-repo-url=http://chartmuseum:chartmuseum@172.16.16.21:8088  --tiller-image=index.alauda.cn/claas/tiller:v2.11.0

添加相关权限

kubectl create serviceaccount --namespace kube-system tiller
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller

等待tiller pod启动

kubectl  get pods --all-namespaces |grep tiller

检查helm安装成功

helm version
Client: &version.Version{SemVer:"v2.11.0", GitCommit:"2e55dbe1fdbxxxxxxxxxxxx44a339489417b146b", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.11.0", GitCommit:"2e55dbe1fdbxxxxxxxxxxxx44a339489417b146b", GitTreeState:"clean"}

部署prometheus

创建所需要的secret

kubectl -n alauda-system create secret generic etcd-certs --from-file=/etc/kubernetes/pki/etcd/healthcheck-client.crt --from-file=/etc/kubernetes/pki/etcd/healthcheck-client.key --from-file=/etc/kubernetes/pki/etcd/ca.crt

修改配置

  • kube-scheduler:在各master节点上,编辑

    vi /etc/kubernetes/manifests/kube-scheduler.yaml
    

    将其中的“--address=127.0.0.1”,替换为“--address=0.0.0.0”,保存退出

  • kube-controller-manager:在各master节点上,编辑

    vi /etc/kubernetes/manifests/kube-controller-manager.yaml
    

    将其中的“--address=127.0.0.1”,替换为“--address=0.0.0.0”,保存退出

  • kube-proxy: 编辑cm kube-proxy

    kubectl edit -n kube-system cm kube-proxy
    

    将“metricsBindAddress: 127.0.0.1:10249”替换为“metricsBindAddress: 0.0.0.0:10249”,保存退出;并杀掉kube-proxy的pod

    注: dockerd: ACE-2.3/ACP-1.4采用docker v1.12.6。这个版本的docker不支持metrics-addr功能,导致prometheus获取不到dockerd相关数据。则grafana关于docker状态获取不到。

安装prometheus-operator

helm install <stable>/prometheus-operator --namespace=alauda-system --name prometheus-operator --set global.registry.address=<registry> --timeout=3000

注:

  • --set global.registry.address=是设置当前环境的registry地址
  • stable 为helm repo list 命令执行后,列出来的某一个repo源的name(是name,不是url),此处可以不同过chart repo源下载安装,也可以将chart下载到master机器上,指定chart路径部署。

安装kube-prometheus

  • 对接LocalVolume作为存储

    • 给集群中的一个node添加 monitoring=enabled的label,用于local volume的调度,命令如下如下:

      kubectl label --overwrite nodes <node hostname> monitoring=enabled
      
    • 在该node上创建以下目录用作持久化目录,保证空间 granafa 2G/prometheus 20G/alertmanager 1G,命令如下:

      mkdir -p /var/lib/monitoring/{grafana,prometheus,alertmanager}
      
    • 如果要使用上述目录之外的其他目录,安装kube-prometheus指定以下参数即可(同样需要提前创建)

      --set grafana.storageSpec.persistentVolumeSpec.local.path=<Your Path>
      --set prometheus.storageSpec.persistentVolumeSpec.local.path=<Your Path>
      --set alertmanager.storageSpec.persistentVolumeSpec.local.path=<Your Path>
      
  • 对接StorageClass作为存储

    • 在安装kube-prometheus指定以下参数即可

      --set grafana.storageSpec.volumeClaimTemplate.spec.storageClassName=<sc name>        # grafana对接现有的StorageClass
      --set prometheus.storageSpec.volumeClaimTemplate.spec.storageClassName=<sc name>     # prometheus对接现有的StorageClass
      --set alertmanager.storageSpec.volumeClaimTemplate.spec.storageClassName=<sc name>   # alertmanager对接现有的StorageClass
      
  • 安装kube-prometheus

    helm install stable/kube-prometheus --name kube-prometheus --namespace alauda-system --timeout=30000 \
    --set global.platform=<ACE/ACP> \
    --set prometheus.service.type=NodePort \
    --set grafana.service.type=NodePort \
    --set grafana.crd.accessUrl=http://<ip> \
    --set global.registry.address=<registry> \
    --set deployKubeDNS=<true> --set deployCoreDNS=<false> \
    --set alertmanager.configForACE.global.http_config.basic_auth.username=<username> \
    --set alertmanager.configForACE.global.http_config.basic_auth.password=<password> \
    --set alertmanager.configForACE.receivers[0].name=default-receiver \
    --set alertmanager.configForACE.receivers[0].webhook_configs[0].url=<http://118.24.232.56:20081/v1/alerts/region_name/router> \
    --set exporter-dockerd.endpoints=<dockerd host ip>
    # 以下参数均是可选的,如果你确认要修改这些配置可以加上这些参数,否则请不要随意设置这些参数
    --set exporter-node.resources.requests.memory=300Mi \
    --set exporter-node.resources.limits.memory=500Mi
    
    • --set global.platform=是设置当前环境是ACP还是ACE【ACP/ACE二者选其一】
    • --set global.registry.address=是设置当前环境的registry地址【ACP/ACE均要设置】
    • --set grafana.crd.accessUrl=http://是设置ACP的grafana的访问地址 【ACP需要设置】
    • --set deployKubeDNS=true --set deployCoreDNS=false如果部署的是kubedns,就像上述设置即可;如果dns是coredns,则需要设置--set deployKubeDNS=false --set deployCoreDNS=true【ACP/ACE均要设置】
    • --set alertmanager.configForACE.global.http_config.basic_auth.username=是设置登录Global平台的用户名【ACE需要设置】
    • --set alertmanager.configForACE.global.http_config.basic_auth.password=是设置登录Global平台的密码【ACE需要设置】
    • --set alertmanager.configForACE.receivers[0].webhook_configs[0].url=http://118.24.232.56:20081/v1/alerts/region_name/router是设置alertmanager的Webhook的地址,其中118.24.232.56:20081是当前环境的jakiro的地址,region_name是当前私有区的名字【ACE需要设置】
    • --set exporter-dockerd.endpoints= 是指定有dockerd主机上ip地址,不然检测不到相关主机上的dockerd的metrics,参数示例:{10.0.96.19\,10.0.96.22\,10.0.96.33\,10.0.96.30\,10.0.96.40\,10.0.96.42}(有两个以上的机器时,注意格式,前面的ip后面要加)
    • --set exporter-node.resources.requests.memory=<300Mi>设置node-exporter的resource requests【可选,ACP/ACE均可选配置】
    • --set exporter-node.resources.limits.memory=<500Mi>设置node-exporter的resource limits【可选,ACP/ACE均可选配置】

检查pod

# kubectl get pods -n alauda-system
NAME                                                   READY     STATUS    RESTARTS   AGE
alertmanager-kube-prometheus-0                         2/2       Running   0          2h
kube-prometheus-exporter-kube-state-78b57fd848-gmsc7   2/2       Running   0          2h
kube-prometheus-exporter-node-7klhv                    1/1       Running   0          2h
kube-prometheus-exporter-node-xsx5g                    1/1       Running   0          2h
kube-prometheus-grafana-f95c87485-79zt5                3/3       Running   0          2h
prometheus-kube-prometheus-0                           3/3       Running   1          2h
prometheus-operator-6dd688ff7f-gd4px                   1/1       Running   0          2h

检查kubelet的配置文件

  • 找到配置文件

    systemctl status kubelet
    kubelet.service - kubelet: The Kubernetes Node Agent
    Loaded: loaded (/etc/systemd/system/kubelet.service; enabled; vendor preset: disabled)
    Active: active (running) since Thu 2019-02-28 11:33:42 CST; 3 weeks 1 days ago
        Docs: http://kubernetes.io/docs/
    Main PID: 21723 (kubelet)
    
  • 添加以下内容(如果有可不添加)

    vim /etc/systemd/system/kubelet.service
    [Service]
    Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt --authentication-token-webhook=true"
    
  • 重启kubelet

    systemctl daemon-reload
    systemctl restart kubelet
    
  • 检查kubelet可以正常启动

    system status kublet 
    

访问Grafan/Prometheus

  • grafana

    kubernetes集群中任何一个节点的ip:30902

  • prometheus

    kubernetes集群中任何一个节点的ip:30900,默认用户名和密码为: admin/admin

删除prometheus

  • 删除 kube-prometheus

    helm delete --purge kube-prometheus
    kubectl delete pvc -n alauda-system prometheus-kube-prometheus-db-prometheus-kube-prometheus-0
    kubectl delete pvc -n alauda-system alertmanager-kube-prometheus-db-alertmanager-kube-prometheus-0
    
  • 删除 prometheus-operator

    helm delete --purge prometheus-operator
    kubectl delete --ignore-not-found customresourcedefinitions alertmanagers.monitoring.coreos.com prometheuses.monitoring.coreos.com prometheusrules.monitoring.coreos.com servicemonitors.monitoring.coreos.com
    

集群对接Prometheus监控

  • 集成中心添加PrometheusOperator 类型的特性

    • 进入"管理视图",打开"集成中心",选择"特性"栏,进入"添加集成"页面
    • 选择 场景"特性",类型"PrometheusOperator"
    • 填写PrometheusOPerator有关集成信息

      prometheus.png

    • 点击"创建"后,完成Prometheus集成实例的创建

  • 集群对接Prometheus监控服务

    • 进入"管理视图",进入对应的集群。并依次点击"操作"、"集群特性管理",进入"集群特性管理"页面
    • 进入集群特性管理页面,查看"监控服务",点击"对接第三方"。选择对应的Prometheus实例
    • 查看集群相关的Cluster、Node、应用有监控数据出现