<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      k8s 監(jiān)控(二)監(jiān)控集群組件和 pod

      原文鏈接:https://juejin.cn/post/6844903921207492621

      在上一篇文章中,我們已經(jīng)在 k8s 中安裝了 Prometheus,并且收集了它自身的監(jiān)控指標。而在這篇文章,我們將收集 k8s 所有組件和 pod 的監(jiān)控指標。

      在這之前需要先修改下之前監(jiān)控 Prometheus 自身使用的一個配置,因為它來源于 prometheus-operator,更多的是我對它使用這個配置的理解。而我們自己直接使用的話,沒有必要搞這么麻煩,下面是修改后的內(nèi)容。

       
      復(fù)制代碼
      - job_name: prometheus
        honor_labels: false
        kubernetes_sd_configs:
          - role: endpoints
            namespaces:
              names:
                - monitoring
        scrape_interval: 30s
        relabel_configs:
          - action: keep
            source_labels:
              - __meta_kubernetes_service_label_prometheus
            regex: k8s
          - source_labels:
              - __meta_kubernetes_namespace
            target_label: namespace
          - source_labels:
              - __meta_kubernetes_service_name
            target_label: service
          - source_labels:
              - __meta_kubernetes_pod_name
            target_label: pod
          - target_label: endpoint
            replacement: web
      

      這一看就懂,我也就不多做解釋了。下面我們開始進入正題,首先監(jiān)控 etcd。

      監(jiān)控 etcd

      之前我們通過 curl 命令訪問到了 etcd 監(jiān)控指標所在的 URL,知道了它的監(jiān)控指標有哪些,現(xiàn)在我們要配置 Prometheus,讓其收集這些監(jiān)控數(shù)據(jù)。

      之前也提到過,k8s 中 Prometheus 的監(jiān)控是通過發(fā)現(xiàn) endpoint 的方式進行,而 endpoint 又是 service 創(chuàng)建的,所以我們需要先創(chuàng)建一個 etcd 的 service。

      我們新建一個名為 kube-etcd-service.yml 的文件,內(nèi)容如下:

       
      復(fù)制代碼
      apiVersion: v1
      kind: Service
      metadata:
        name: kube-etcd
        labels:
          k8s-app: kube-etcd
        namespace: kube-system
      spec:
        clusterIP: None
        ports:
          - name: http-metrics
            port: 2379
            protocol: TCP
            targetPort: 2379
        selector:
          component: etcd
        type: ClusterIP
      

      說明:

      • 由于 etcd 處于 kube-system 名稱空間,所以這里的 namespace 也應(yīng)該是 kube-system;
      • 因為 etcd pod 本身會存在 component=etcd 這個標簽,所以這里的選擇器使用的就是這個。
       
      復(fù)制代碼
      kubectl apply -f kube-etcd-service.yml
      

      創(chuàng)建成功后,可以通過如下命令查看它創(chuàng)建的 endpoint:

       
      復(fù)制代碼
      kubectl -n kube-system get endpoints kube-etcd
      

      現(xiàn)在通過這個 endpoint 就能夠訪問到后面三臺 etcd,現(xiàn)在只需要在 Prometheus 中添加對應(yīng)的配置即可,配置內(nèi)容如下。

       
      復(fù)制代碼
      - job_name: kube-etcd
        honor_labels: false
        kubernetes_sd_configs:
          - role: endpoints
            namespaces:
              names:
                - kube-system
        scheme: https
        tls_config:
          insecure_skip_verify: false
          ca_file: /etc/prometheus/secrets/etcd-client-cert/ca.crt
          cert_file: /etc/prometheus/secrets/etcd-client-cert/healthcheck-client.crt
          key_file: /etc/prometheus/secrets/etcd-client-cert/healthcheck-client.key
        relabel_configs:
          - action: keep
            source_labels:
              - __meta_kubernetes_service_label_k8s_app
            regex: kube-etcd
          - source_labels:
              - __meta_kubernetes_namespace
            target_label: namespace
          - source_labels:
              - __meta_kubernetes_service_name
            target_label: service
          - source_labels:
              - __meta_kubernetes_pod_name
            target_label: pod
          - target_label: endpoint
            replacement: http-metrics
        metric_relabel_configs:
          - action: drop
            regex: (etcd_debugging|etcd_disk|etcd_request|etcd_server|grpc_server).*
            source_labels:
              - __name__
      

      因為訪問 etcd 需要驗證客戶端證書,所以這里需要提供證書和私鑰文件。這三個文件之前都已掛載到 Prometheus 容器中,直接拿來用就行。

      下面的 relabel_configs 就不多提了,和前面監(jiān)控 Prometheus 自身的配置差不多,最主要的還是 metric_relabel_configs,它是用來刪除我們不需要的監(jiān)控指標的。

      這里將以 etcd_debugging|etcd_disk|etcd_request|etcd_server|grpc_server 這些開頭的監(jiān)控指標都刪掉了,你們不要學(xué)我,最好搞清楚它的作用來決定是不是將其刪掉,我純粹是看不懂所以才刪的。

      最后將上面的內(nèi)容粘貼進 prometheus-config.yml。當你 apply 配置文件后,不要急著 reload,因為 Prometheus 中可能沒有立即更新,你可以通過 kubectl exec -it 連接到 Prometheus 的 pod 中驗證下配置文件是否已經(jīng)更新。

      如果更新了,就直接通過下面命令讓其 reload:

       
      復(fù)制代碼
      curl -XPOST PROMETHEUS_IP:9090/-/reload
      

      然后訪問 Prometheus 的 web 頁面,就可以在 targets 中看到 etcd 了。

       

       

      監(jiān)控 apiserver

      apiserver 的監(jiān)控方式更簡單,因為它的 service 已經(jīng)自動創(chuàng)建了。但你需要注意的是,它的 service 創(chuàng)建在 default 名稱空間,名為 kubernetes。

      沒什么好說的,直接放出 Prometheus 監(jiān)控 apiserver 的配置。

       
      復(fù)制代碼
      - job_name: kube-apiserver
        honor_labels: false
        kubernetes_sd_configs:
          - role: endpoints
            namespaces:
              names:
                - default
        scrape_interval: 30s
        scheme: https
        tls_config:
          insecure_skip_verify: false
          ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
          server_name: kubernetes
        bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
        relabel_configs:
          - action: keep
            source_labels:
              - __meta_kubernetes_service_label_component
            regex: apiserver
        metric_relabel_configs:
          - source_labels:
              - __name__
            action: drop
            regex: (apiserver_storage_data_key_generation_latencies_microseconds_bucket|apiserver_admission_controller_admission_latencies_milliseconds_bucket|apiserver_admission_step_admission_latencies_milliseconds_bucket|apiserver_admission_step_admission_latencies_milliseconds_summary|apiserver_request_latencies_bucket|apiserver_request_latencies_summary|apiserver_storage_data_key_generation_latencies_microseconds_bucket|rest_client_request_latency_seconds_bucket)
      

      這里因為 insecure_skip_verify 設(shè)為了 false,也就是校驗服務(wù)端證書,所以這里提供了 ca 文件和 server_name。同樣,這個證書事先已經(jīng)掛載到了容器中,所以直接指定就行。

      因為我不想關(guān)注的指標太多,所以刪了一批。先聲明,我是瞎刪的,并不懂它們的確切意義,只是覺得沒啥用,所以就刪了,你們別學(xué)我!

      最后你看著 reload 吧。

       

       

      監(jiān)控 pod

      pod 的監(jiān)控指標是 kubelet 提供的,前面也已經(jīng)使用 curl 命令看到了,因此這里也是直接干。

      prometheus-operator 使用的同樣是 endpoints 發(fā)現(xiàn)的方式,但是 kubelet 是操作系統(tǒng)的進程,并不是 pod,因此通過創(chuàng)建 service 的方式是不可能創(chuàng)建對應(yīng)的 endpoint 的,也不知道它為啥可以做到。

      為了更通用,我們這里是通過 node 發(fā)現(xiàn)的方式進行的。使用 node 發(fā)現(xiàn),你無法指定端口,prometheus 會自動訪問發(fā)現(xiàn) node 的 10250 端口。

      prometheus 的配置如下:

       
      復(fù)制代碼
          - job_name: pods
            honor_labels: true
            kubernetes_sd_configs:
            - role: node
            scrape_interval: 30s
            metrics_path: /metrics/cadvisor
            scheme: https
            tls_config:
              insecure_skip_verify: true
            bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
            metric_relabel_configs:
            - source_labels:
              - __name__
              regex: container_(cpu_cfs_periods_total|fs_inodes_total|fs_sector_reads_total|fs_sector_writes_total|last_seen|memory_mapped_file|spec_memory_reservation_limit_bytes|spec_memory_swap_limit_bytes|tasks_state)
              action: drop
            - source_labels:
              - container
              regex: ""
              action: drop
            - action: labeldrop
              regex: (id|name|pod_name|image)
      

      后面的 metric_relabel_configs 中,除了刪除了一些我認為沒用的監(jiān)控指標外,還刪除了所有 container 標簽為空的監(jiān)控指標,就像這些:

       
      復(fù)制代碼
      container_memory_cache{container="",container_name="",id="/",image="",name="",namespace="",pod="",pod_name=""} 2.144395264e+09 1565777155746
      container_memory_cache{container="",container_name="",id="/kubepods.slice",image="",name="",namespace="",pod="",pod_name=""} 7.14027008e+08 1565777155757
      container_memory_cache{container="",container_name="",id="/kubepods.slice/kubepods-besteffort.slice",image="",name="",namespace="",pod="",pod_name=""} 3.5053568e+08 1565777145294
      container_memory_cache{container="",container_name="",id="/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-poda213e57700fd1325c59a70dd70f1a07d.slice",image="",name="",namespace="kube-system",pod="etcd-ops.k8s.master.01.sit",pod_name="etcd-ops.k8s.master.01.sit"} 3.09784576e+08 1565777149076
      container_memory_cache{container="",container_name="",id="/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-podcfdbebf5_8211_11e9_8699_005056a7c0c5.slice",image="",name="",namespace="kube-system",pod="kube-proxy-xw8sw",pod_name="kube-proxy-xw8sw"} 4.0767488e+07 1565777147425
      

      實在不知道這些是干啥的,而且數(shù)量非常多,干脆直接刪掉。同時還刪除了一些標簽,比如下面這種的:

       
      復(fù)制代碼
      container_fs_io_current{container="coredns",container_name="coredns",device="/dev/mapper/centos-root",endpoint="https-metrics",id="/kubepods.slice/kubepods-burstable.slice/kubepods-burstable-poda9693624_85e3_11e9_80cb_005056a7c0c5.slice/docker-9b95ca870a0e7a8fde7ce116b07fc696bd91bea75f6bc61478f3ecc98f36f131.scope",image="sha256:eb516548c180f8a6e0235034ccee2428027896af16a509786da13022fe95fe8c",instance="10.99.100.2:10250",job="pods",name="k8s_coredns_coredns-fb8b8dccf-9dvh7_kube-system_a9693624-85e3-11e9-80cb-005056a7c0c5_2",namespace="kube-system",pod="coredns-fb8b8dccf-9dvh7",pod_name="coredns-fb8b8dccf-9dvh7",service="kubelet"}
      

      可以看到 id、name 和 image 這些標簽的值非常長,不好看不說,還浪費內(nèi)存和存儲資源,我就都刪了。它貌似會造成一個 pod 中如果有多個容器,你可能無法知道這個容器是監(jiān)控指標中是哪一個,因為 image 這個標簽被刪了。

      反正我刪了,你看著辦。刪除之后就是這樣:

       
      復(fù)制代碼
      container_fs_io_current{container="coredns",container_name="coredns",device="/dev/mapper/centos-root",endpoint="https-metrics",instance="10.99.100.2:10250",job="pods",namespace="kube-system",pod="coredns-fb8b8dccf-9dvh7",service="kubelet"}
      

      當然很多標簽是我們自己創(chuàng)建,如果你不需要,可以在上面的 relabel_configs 中刪除對應(yīng)標簽的配置。或許你還想刪其他的標簽,那你往上面的配置中加就行。

      最后記得 reload。

       

       

      安裝 kube-state-metrics

      k8s 的其他組件我就不繼續(xù)監(jiān)控了,包括 kubelet、controller manager、coredns 等,它們監(jiān)控的手段和之前的幾個組件都差不多,相信你們自己弄起來也是輕輕松松。

      下面我們會安裝 kube-state-metrics,這個東西會連接 apiserver,然后將集群里的各種資源的指標都暴露出來,比如 configMap、ingress、secret、pod、deployment、statefulset 等,這是對 pod 指標的一大補充,非常有用。

      RBAC 權(quán)限

      因為它要訪問集群內(nèi)的所有資源,才能將它們的信息提供出去,因此部署它之前,先為它創(chuàng)建一些權(quán)限。這些權(quán)限都會綁定到一個 serviceAccount 上,然后我們用這個 sa 運行 kube-state-metrics 就行。

      kube-state-metrics-clusterRole.yml:

       
      復(fù)制代碼
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        name: kube-state-metrics
      rules:
        - apiGroups:
            - ""
          resources:
            - configmaps
            - secrets
            - nodes
            - pods
            - services
            - resourcequotas
            - replicationcontrollers
            - limitranges
            - persistentvolumeclaims
            - persistentvolumes
            - namespaces
            - endpoints
          verbs:
            - list
            - watch
        - apiGroups:
            - extensions
          resources:
            - daemonsets
            - deployments
            - replicasets
            - ingresses
          verbs:
            - list
            - watch
        - apiGroups:
            - apps
          resources:
            - statefulsets
            - daemonsets
            - deployments
            - replicasets
          verbs:
            - list
            - watch
        - apiGroups:
            - batch
          resources:
            - cronjobs
            - jobs
          verbs:
            - list
            - watch
        - apiGroups:
            - autoscaling
          resources:
            - horizontalpodautoscalers
          verbs:
            - list
            - watch
        - apiGroups:
            - authentication.k8s.io
          resources:
            - tokenreviews
          verbs:
            - create
        - apiGroups:
            - authorization.k8s.io
          resources:
            - subjectaccessreviews
          verbs:
            - create
        - apiGroups:
            - policy
          resources:
            - poddisruptionbudgets
          verbs:
            - list
            - watch
        - apiGroups:
            - certificates.k8s.io
          resources:
            - certificatesigningrequests
          verbs:
            - list
            - watch
      

      kube-state-metrics-clusterRoleBinding.yml:

       
      復(fù)制代碼
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRoleBinding
      metadata:
        name: kube-state-metrics
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: ClusterRole
        name: kube-state-metrics
      subjects:
        - kind: ServiceAccount
          name: kube-state-metrics
          namespace: monitoring
      

      kube-state-metrics-role.yml:

       
      復(fù)制代碼
      apiVersion: rbac.authorization.k8s.io/v1
      kind: Role
      metadata:
        name: kube-state-metrics
        namespace: monitoring
      rules:
        - apiGroups:
            - ""
          resources:
            - pods
          verbs:
            - get
        - apiGroups:
            - extensions
          resourceNames:
            - kube-state-metrics
          resources:
            - deployments
          verbs:
            - get
            - update
        - apiGroups:
            - apps
          resourceNames:
            - kube-state-metrics
          resources:
            - deployments
          verbs:
            - get
            - update
      

      kube-state-metrics-roleBinding.yml:

       
      復(fù)制代碼
      apiVersion: rbac.authorization.k8s.io/v1
      kind: RoleBinding
      metadata:
        name: kube-state-metrics
        namespace: monitoring
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: Role
        name: kube-state-metrics
      subjects:
        - kind: ServiceAccount
          name: kube-state-metrics
      

      kube-state-metrics-serviceAccount.yml:

       
      復(fù)制代碼
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: kube-state-metrics
        namespace: monitoring
      

      deployment 和 service

      kube-state-metrics 會提供兩個指標頁面,一個是暴露集群內(nèi)資源的,另一個是它自身的,它自身的可以選擇性的關(guān)注。

      先創(chuàng)建 kube-state-metrics-deployment.yml:

       
      復(fù)制代碼
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        labels:
          app: kube-state-metrics
        name: kube-state-metrics
        namespace: monitoring
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: kube-state-metrics
        template:
          metadata:
            labels:
              app: kube-state-metrics
          spec:
            containers:
              - args:
                  - --port=10000
                  - --telemetry-port=10001
                image: quay.io/coreos/kube-state-metrics:v1.6.0
                name: kube-state-metrics
                resources:
                  limits:
                    cpu: 100m
                    memory: 150Mi
                  requests:
                    cpu: 100m
                    memory: 150Mi
              - command:
                  - /pod_nanny
                  - --container=kube-state-metrics
                  - --cpu=100m
                  - --extra-cpu=2m
                  - --memory=150Mi
                  - --extra-memory=30Mi
                  - --threshold=5
                  - --deployment=kube-state-metrics
                env:
                  - name: MY_POD_NAME
                    valueFrom:
                      fieldRef:
                        apiVersion: v1
                        fieldPath: metadata.name
                  - name: MY_POD_NAMESPACE
                    valueFrom:
                      fieldRef:
                        apiVersion: v1
                        fieldPath: metadata.namespace
                image: k8s.gcr.io/addon-resizer:1.8.4
                name: addon-resizer
                resources:
                  limits:
                    cpu: 50m
                    memory: 30Mi
                  requests:
                    cpu: 10m
                    memory: 30Mi
            nodeSelector:
              kubernetes.io/os: linux
            securityContext:
              runAsNonRoot: true
              runAsUser: 65534
            serviceAccountName: kube-state-metrics
      

      指定了兩個啟動參數(shù),也就是兩個端口,其中 10000 是暴露集群資源指標的端口,10001 就是它自身了。除了 kube-state-metrics 之外,還啟動了 addon-resizer 這個容器,我不知道它是干啥的,反正官方怎么搞我們怎么弄就是了。

      最后是 service 文件 kube-state-metrics-service.yml:

       
      復(fù)制代碼
      apiVersion: v1
      kind: Service
      metadata:
        labels:
          k8s-app: kube-state-metrics
        name: kube-state-metrics
        namespace: monitoring
      spec:
        clusterIP: None
        ports:
          - name: http-main
            port: 10000
            targetPort: 10000
          - name: http-self
            port: 10001
            targetPort: 10001
        selector:
          app: kube-state-metrics
      

      兩個端口都暴露出來,你可以都收集或者只收集 10000 端口。如果只收集 10000,你可以只暴露一個端口,也可以兩個都暴露,然后在 Prometheus 配置中過濾掉一個端口即可。

      收集監(jiān)控數(shù)據(jù)

      將上面所有的文件都 apply 之后,就可以直接配置 Prometheus 進行收集了。在此之前,你可以使用 curl 命令訪問它的指標頁面,看看里面都有啥:

       
      復(fù)制代碼
      curl IP:10000/metrics
      curl IP:10001/metrics
      

      這個 ip 地址不用我說怎么拿吧,然后你就可以看到集群資源的指標非常非常非常的多,我覺得你最好對其進行過濾,將不需要的統(tǒng)統(tǒng)拒絕掉,不然對 Prometheus 造成的壓力很大。

      然后下面就是 Prometheus 的配置:

       
      復(fù)制代碼
      - job_name: kube-state-metrics
        honor_labels: true
        kubernetes_sd_configs:
          - role: endpoints
            namespaces:
              names:
                - monitoring
        scrape_interval: 30s
        scrape_timeout: 30s
        tls_config:
          insecure_skip_verify: true
        bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
        relabel_configs:
          - action: keep
            source_labels:
              - __meta_kubernetes_service_label_k8s_app
            regex: kube-state-metrics
          - action: keep
            source_labels:
              - __meta_kubernetes_endpoint_port_name
            regex: http-main
        metric_relabel_configs:
          - source_labels:
              - __name__
            regex: (kube_daemonset_status_number_ready|kube_daemonset_status_number_unavailable|kube_deployment_status_replicas_unavailable|kube_deployment_spec_paused|kube_deployment_spec_strategy_rollingupdate_max_surge|kube_deployment_spec_strategy_rollingupdate_max_unavailable|kube_endpoint_address_available|kube_endpoint_address_not_ready|kube_node_info|kube_node_spec_unschedulable|kube_node_status_condition|kube_node_status_capacity|kube_node_status_capacity|kube_node_status_allocatable|kube_persistentvolumeclaim_info|kube_persistentvolumeclaim_status_phase|kube_persistentvolumeclaim_resource_requests_storage_bytes|kube_persistentvolume_status_phase|kube_persistentvolume_info|kube_persistentvolume_capacity_bytes|kube_pod_info|kube_pod_status_phase|kube_pod_status_ready|kube_pod_container_info|kube_pod_container_status_waiting|kube_pod_container_status_waiting_reason|kube_pod_container_status_running|kube_pod_container_status_terminated_reason|kube_pod_container_status_last_terminated_reason|kube_pod_container_status_restarts_total|kube_pod_container_resource_limits|kube_service_info|kube_statefulset_status_replicas_current|kube_statefulset_status_replicas_ready)
            action: keep
      

      配置的內(nèi)容就無需我多提了,和前面監(jiān)控的配置都差不多。

      主要是這里刪除了一大批我不關(guān)注的指標,注意我這里做的是白名單,只收集我指定的,因為不需要的實在太多,寫不過來。雖然正則表達式這么長,但是由于指標名稱短,且 regex 默認錨定了行首和行尾,所以匹配效率還是很高的。

      最后記得 reload。

       

       

      ok,本文到此為止,下一篇會提到如何使用 grafana 和 alertmanager,謝謝!

      posted @ 2023-09-27 16:16  whtjyt  閱讀(571)  評論(0)    收藏  舉報
      主站蜘蛛池模板: av中文字幕一区二区| 国产免费又黄又爽又色毛| 禹州市| 国产成人无码av大片大片在线观看| 中文字幕第一页国产精品| 亚洲一区二区在线无码| 免费AV片在线观看网址| 免费人妻无码不卡中文18禁| 国产亚洲精品AA片在线播放天| 国产又色又爽无遮挡免费动态图| 无码h片在线观看网站| 黄瓜一区二区三区自拍视频| 国产色无码专区在线观看| 国产不卡在线一区二区| 精品无码一区在线观看| 日产精品一区二区三区免费| 亚洲日本欧美日韩中文字幕 | 国产精品女生自拍第一区| 天堂亚洲免费视频| 国产无套内射又大又猛又粗又爽 | 久久月本道色综合久久| 国产成人精品亚洲午夜| 偷拍精品一区二区三区| 亚洲色大成网站www久久九九| 午夜成人理论无码电影在线播放| 国产精品无码a∨麻豆| 麻豆tv入口在线看| 久热re这里精品视频在线6| 日韩三级一区二区在线看| 亚洲人成网站观看在线观看 | 在线中文字幕国产一区| 日本强好片久久久久久aaa| 亚洲国产精品线观看不卡| 精品偷拍一区二区三区在| 精品少妇人妻av无码久久 | 鲁一鲁一鲁一鲁一澡| 在线免费成人亚洲av| 聂拉木县| 在线观看亚洲欧美日本| 久热爱精品视频线路一| 日韩精品有码中文字幕|