【智簡聯接,萬物互聯】華為云·云享專家董昕:Serverless和微服務下, IoT的變革蓄勢待發
969
2022-05-28
前言
查看 Etcd 信息
創建 ServiceMonitor
創建 Service & Endpoints
查看 Prometheus 規則
Grafana 引入 ETCD 儀表盤
前言
查看 Etcd 信息
創建 ServiceMonitor
創建 Service & Endpoints
查看 Prometheus 規則
Grafana 引入 ETCD 儀表盤
前言
除了 Kubernetes 集群中的一些資源對象、節點以及組件需要監控,有的時候我們可能還需要根據實際的業務需求去添加自定義的監控項,添加一個自定義監控的步驟也是非常簡單的,主要有以下三個步驟:
第一步建立一個 ServiceMonitor 對象,用于 Prometheus 添加監控項;
第二步為 ServiceMonitor 對象關聯 metrics 數據接口的一個 Service 對象;
第三步確保 Service 對象可以正確獲取到 Metrics 數據;
上面已經配置了 Kubernetes 集群監控 kube-prometheus 部署,但是并沒有監控 ETCD 的信息,接下來我們就來為大家演示如何添加 ETCD 集群的監控。無論是 Kubernetes 集群外的還是使用 Kubeadm 安裝在集群內部的 ETCD 集群,我們這里都將其視作集群外的獨立集群,因為對于二者的使用方法沒什么特殊之處。
注意:
ETCD 是 K8S 集群的核心組件,即數據庫。
查看 Etcd 信息
獲取 Etcd Pod 名稱:
$ kubectl get pods -n kube-system | grep etcd etcd-k8s-master.novalocal 1/1 Running 0 17h
查看 Etcd 描述信息:
$ kubectl describe pod etcd-k8s-master.novalocal -n kube-system
...... Containers: etcd: Container ID: docker://4ac9ea30de1ea4e0f6f0be10069f7333dff492e17654484dcf11e9c7c73db28e Image: registry.aliyuncs.com/k8sxio/etcd:3.4.3-0 Image ID: docker-pullable://registry.aliyuncs.com/k8sxio/etcd@sha256:4afb99b4690b418ffc2ceb67e1a17376457e441c1f09ab55447f0aaf992fa646 Port:
我們可以看到啟動參數里面有一個 --listen-metrics-urls=http://127.0.0.1:2381 的配置,該參數就是來指定 Metrics 接口運行在 2381 端口下面的,而且是 http 的協議,所以也不需要什么證書配置,這就比以前的版本要簡單許多了,以前的版本需要用 https 協議訪問,所以要配置對應的證書。
創建 ServiceMonitor
創建 Prometheus 監控資源,配置用于監控 ETCD 參數:
$ vi prometheus-serviceMonitorEtcd.yaml
apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: etcd-k8s namespace: monitoring labels: k8s-app: etcd-k8s spec: jobLabel: k8s-app endpoints: - port: port interval: 15s selector: matchLabels: k8s-app: etcd namespaceSelector: matchNames: - kube-system
上面我們在 monitoring 命名空間下面創建了名為 etcd-k8s 的 ServiceMonitor 對象,基本屬性和前面介紹的一致,匹配 kube-system 這個命名空間下面的具有 k8s-app=etcd 這個 label 標簽的 Service,jobLabel 表示用于檢索 job 任務名稱的標簽,由于 etcd 的 metrics 接口在 2381 端口下面,不需要 https 安全認證,所以用默認的配置即可。然后我們直接創建這個 ServiceMonitor 對象即可:
kubectl apply -f prometheus-serviceMonitorEtcd.yaml
創建 Service & Endpoints
但實際上現在并不能監控到 ETCD 集群,因為并沒有一個滿足 ServiceMonitor 條件的 Service 對象與之關聯:
$ kubectl get svc -n kube-system -l k8s-app=etcd No resources found.
因為 ETCD 是獨立于集群之外的,所以我們需要創建一個 Endpoints 將其代理到 Kubernetes 集群,然后創建一個 Service 綁定 Endpoints,然后 Kubernetes 集群的應用就可以訪問 ETCD 集群了。
$ vi prometheus-etcdService.yaml
apiVersion: v1 kind: Service metadata: name: etcd-k8s namespace: kube-system labels: k8s-app: etcd spec: type: ClusterIP clusterIP: None #設置為None,不分配Service IP ports: - name: port port: 2381 --- apiVersion: v1 kind: Endpoints metadata: name: etcd-k8s namespace: kube-system labels: k8s-app: etcd subsets: - addresses: - ip: 10.151.30.11 # 指定etcd節點地址,如果是集群則繼續向下添加 nodeName: etc-master ports: - name: port port: 2381 # Etcd 端口號
我們這里創建的 Service 沒有采用前面通過 label 標簽的形式去匹配 Pod 的做法,因為前面我們說過很多時候我們創建的 ETCD 集群是獨立于集群之外的,這種情況下面我們就需要自定義一個 Endpoints,要注意 metadata 區域的內容要和 Service 保持一致,Service 的 clusterIP 設置為 None,新版本的 etcd 將 metrics 接口數據放置到了 2381 端口。
創建 Service & Endpoints:
$ kubectl apply -f prometheus-etcdService.yaml $ kubectl get svc -n kube-system -l k8s-app=etcd NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE etcd-k8s ClusterIP None
查看 Prometheus 規則
上述配置完成后,隔一會兒去 Prometheus 的 Dashboard 中查看 targets,便會有 ETCD 的監控項了:
可以看到有一個明顯的錯誤,2381 端口鏈接被拒絕,這是因為我們這里的 ETCD 的 Metrics 接口是監聽在 127.0.0.1 這個 IP 上面的,所以訪問會拒絕:
--listen-metrics-urls=http://127.0.0.1:2381
我們只需要在 /etc/kubernetes/manifests/ 目錄下面(靜態 Pod 默認的目錄)的 etcd.yaml 文件中將上面的 listen-metrics-urls 更改成節點 IP 即可:
--listen-metrics-urls=http://0.0.0.0:2381
修改完 ETCD 自動重啟生效后,查看 ETCD 這個監控任務就正常了:
Grafana 引入 ETCD 儀表盤
完成 Prometheus 配置后,直接打開 Grafana 頁面,引入 Dashboard ,輸入編號 “3070” 的儀表盤:
可以看到監控 ETCD 的各個看板:
本文源碼:
https://github.com/zuozewei/blog-example/tree/master/Kubernetes/k8s-kube-promethues/etcd
Kubernetes
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。