Kubernetes 部署 Metrics Server 獲取叢集指標資料
阿新 • • 發佈:2020-10-04
系統環境: Kubernetes 版本:1.18.2 Metrics Server 版本:0.3.6 示例部署檔案地址: https://github.com/my-dlq/blog-example/tree/master/kubernetes/kubernetes-metrics-server 一、Metrics Server 簡介 介紹 Metrics Server 前首先介紹下 Heapster,該工具是用於 Kubernetes 叢集監控和效能分析工具,可以收集節點上的指標資料,例如,節點的 CPU、Memory、Network 和 Disk 的 Metric 資料。不過在 Kubernetes V1.11 版本後將被逐漸廢棄。而 Metrics Server 正是 Heapster 的代替者。 Metrics Server 是 Kubernetes 叢集核心監控資料的聚合器,可以通過 Metrics API 的形式獲取 Metrics 資料,不過僅僅是獲取指標的最新值,不對舊值進行儲存,且不負責將指標轉發到第三方目標。Metrics Server 還可以與 Kubectl 工具結合使用,提供 kubectl top 命令來展示叢集中的指標資料,接下來我們開始部署 Metrics Server。 二、部署應用許可權 RBAC 資源 Kubernetes 部署 Metrics Server 前需要先提前部署 RBAC 相關配置,這樣 Metrics Server 才能有足夠的許可權獲取系統元件的資訊。 準備相關的映象 [root@node1 ~]# docker pull registry.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6 v0.3.6: Pulling from google_containers/metrics-server-amd64 e8d8785a314f: Pull complete b2f4b24bed0d: Pull complete Digest: sha256:c9c4e95068b51d6b33a9dccc61875df07dc650abbf4ac1a19d58b4628f89288b Status: Downloaded newer image for registry.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6 registry.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6 建立 Metrics RBAC 檔案 metrics-rbac.yaml ## ServiceAccount apiVersion: v1 kind: ServiceAccount metadata: name: metrics-server namespace: kube-system --- ## ClusterRole aggregated-metrics-reader apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: system:aggregated-metrics-reader labels: rbac.authorization.k8s.io/aggregate-to-view: "true" rbac.authorization.k8s.io/aggregate-to-edit: "true" rbac.authorization.k8s.io/aggregate-to-admin: "true" rules: - apiGroups: ["metrics.k8s.io"] resources: ["pods","nodes"] verbs: ["get","list","watch"] --- ## ClusterRole metrics-server apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: system:metrics-server rules: - apiGroups: [""] resources: ["pods","nodes","nodes/stats","namespaces","configmaps"] verbs: ["get","list","watch"] --- ## ClusterRoleBinding auth-delegator apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: metrics-server:system:auth-delegator roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:auth-delegator subjects: - kind: ServiceAccount name: metrics-server namespace: kube-system --- ## RoleBinding metrics-server-auth-reader apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: metrics-server-auth-reader namespace: kube-system roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: extension-apiserver-authentication-reader subjects: - kind: ServiceAccount name: metrics-server namespace: kube-system --- ## ClusterRoleBinding system:metrics-server apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: system:metrics-server roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:metrics-server subjects: - kind: ServiceAccount name: metrics-server namespace: kube-system 通過 Kubectl 工具部署 Metrics RBAC -n:指定部署應用的 Namespace 名稱空間 [root@master metrics]# kubectl apply -f metrics-rbac.yaml -n kube-system serviceaccount/metrics-server created clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created clusterrole.rbac.authorization.k8s.io/system:metrics-server created clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created 三、部署 APIService 資源 設定擴充套件 API Service 工作於聚合層,允許使用其 API 擴充套件 Kubernetes apiserver,而這些 API 並不是核心 Kubernetes API 的一部分。這裡部署 APIservice 資源,來提供 Kubernetes Metrics 指標 API 資料。 建立 Metrics APIService 檔案 metrics-api-service.yaml ## APIService apiVersion: apiregistration.k8s.io/v1beta1 kind: APIService metadata: name: v1beta1.metrics.k8s.io spec: service: name: metrics-server namespace: kube-system group: metrics.k8s.io version: v1beta1 insecureSkipTLSVerify: true groupPriorityMinimum: 100 versionPriority: 100 通過 Kubectl 工具部署 Metrics APIService -n:指定部署應用的 Namespace 名稱空間 [root@master metrics]# kubectl apply -f metrics-api-service.yaml -n kube-system apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created 四、部署 Metrics Server 應用 建立 Metrics 部署檔案 metrics-server-deploy.yaml ## Service apiVersion: v1 kind: Service metadata: name: metrics-server namespace: kube-system labels: kubernetes.io/name: "Metrics-server" kubernetes.io/cluster-service: "true" spec: selector: k8s-app: metrics-server ports: - port: 443 targetPort: 4443 --- ## Deployment apiVersion: apps/v1 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: hostNetwork: true serviceAccountName: metrics-server containers: - name: metrics-server image: registry.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6 imagePullPolicy: IfNotPresent args: - --cert-dir=/tmp - --secure-port=4443 - --kubelet-insecure-tls - --kubelet-preferred-address-types=InternalDNS,InternalIP,ExternalDNS,ExternalIP,Hostname ports: - name: main-port containerPort: 4443 protocol: TCP securityContext: readOnlyRootFilesystem: true runAsNonRoot: true runAsUser: 1000 resources: limits: memory: 1Gi cpu: 1000m requests: memory: 1Gi cpu: 1000m volumeMounts: - name: tmp-dir mountPath: /tmp - name: localtime readOnly: true mountPath: /etc/localtime volumes: - name: tmp-dir emptyDir: {} - name: localtime hostPath: type: File path: /etc/localtime nodeSelector: kubernetes.io/os: linux kubernetes.io/arch: "amd64" 通過 Kubectl 工具部署 Metrics 應用 -n:指定部署應用的 Namespace 名稱空間 [root@master metrics]# kubectl apply -f metrics-server-deploy.yaml -n kube-system service/metrics-server created deployment.apps/metrics-server created 五、進行測試 當部署完 Metrics Server 後,可以通過 kubectl 工具進行測試,預設支援下面命令: kubectl top pod: 獲取 Pod 的 CPU、Memory 使用資訊。 kubectl top node: 獲取 Node 的 CPU、Memory 使用資訊。 輸入上面命令進行測試,如下: 1、獲取全部節點指標資訊 [root@master metrics]# kubectl top node NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% master 142m 3% 1144Mi 42% node1 72m 1% 548Mi 20% node2 38m 0% 543Mi 20% 2、獲取某個 Namespace Pod 的指標資訊 [root@master metrics]# kubectl top pods -n kube-system NAME CPU(cores) MEMORY(bytes) coredns-66bff467f8-4hb27 4m 11Mi coredns-66bff467f8-c8v2k 3m 10Mi dashboard-metrics-scraper-d5698f9b8-jlsrt 1m 8Mi etcd-master 21m 32Mi kube-apiserver-master 47m 335Mi kube-controller-manager-master 17m 40Mi kube-flannel-ds-amd64-9lzqb 3m 14Mi kube-flannel-ds-amd64-bqm9r 3m 16Mi kube-flannel-ds-amd64-hntqr 2m 14Mi kube-proxy-46v8f 1m 20Mi kube-proxy-8mmfn 1m 19Mi kube-proxy-c5vkx 1m 19Mi kube-scheduler-master 3m 17Mi kubernetes-dashboard-5c67c4f589-lgzw5 1m 22Mi metrics-server-59f947bc97-7r6xx 1m 12Mi 3、獲取某個 Namespace 下某個 Pod 的指標資訊 [root@master metrics]# kubectl top pods coredns-66bff467f8-4hb27 -n kube-system NAME CPU(cores) MEMORY(bytes) coredns-66bff467f8-4hb27 3m 11Mi 4、獲取全部 Namespace 下的 Pod 的指標資訊 [root@master metrics]# kubectl top pods --all-namespaces NAMESPACE NAME CPU(cores) MEMORY(bytes) kube-system coredns-66bff467f8-4hb27 3m 11Mi kube-system coredns-66bff467f8-c8v2k 3m 10Mi kube-system dashboard-metrics-scraper-d5698f9b8-jlsrt 1m 8Mi kube-system etcd-master 13m 32Mi kube-system kube-apiserver-master 46m 289Mi kube-system kube-controller-manager-master 18m 40Mi kube-system kube-flannel-ds-amd64-9lzqb 4m 14Mi kube-system kube-flannel-ds-amd64-bqm9r 3m 16Mi kube-system kube-flannel-ds-amd64-hntqr 3m 14Mi kube-system kube-proxy-46v8f 1m 20Mi kube-system kube-proxy-8mmfn 1m 19Mi kube-system kube-proxy-c5vkx 1m 19Mi kube-system kube-scheduler-master 3m 17Mi kube-system kubernetes-dashboard-5c67c4f589-lgzw5 1m 22Mi kube-system metrics-server-59f947bc97-7r6xx 1m 13Mi
轉載:https://blog.csdn.net/baidu_38432732/article/details/105742271
親測可用!