主頁 >  其他 > 在 KubeSphere 中監控集群外部 Etcd

在 KubeSphere 中監控集群外部 Etcd

2022-04-25 06:55:18 其他

作者:張延英(老Z),電信系統集成公司山東分公司運維架構師,云原生愛好者,目前專注于云原生運維,

1. 本文簡介

本文源于 KubeSphere 開源社區 8 群里的一個小伙伴 @Jam 提到的 Ectd 監控沒有資料,希望我幫忙看一下,本來我也是沒有啟用 Etcd 監控的,但是既然小伙伴如此信任我提了要求了,那必須安排,所以才有了本文,

經研究發現,KubeSphere 自帶的集群狀態監控中有 Etcd 監控的頁面展示,但是在 KubeSphere3.2.1 版本中,默認配置開啟 Etcd 監控后,集群狀態中的 Etcd 監控頁面確實沒有任何資料,本文將記錄里解決該問題的排障之旅,

本文知識點

  • 定級:入門級
  • Prometheus-Operator
  • KubeSphere 開啟 Etcd 監控

演示服務器配置

主機名 IP CPU 記憶體 系統盤 資料盤 用途
zdeops-master 192.168.9.9 2 4 40 200 Ansible 運維控制節點
ks-k8s-master-0 192.168.9.91 8 32 40 200 KubeSphere/k8s-master/k8s-worker
ks-k8s-master-1 192.168.9.92 8 32 40 200 KubeSphere/k8s-master/k8s-worker
ks-k8s-master-2 192.168.9.93 8 32 40 200 KubeSphere/k8s-master/k8s-worker
glusterfs-node-0 192.168.9.95 4 8 40 200 GlusterFS/ElasticSearch
glusterfs-node-1 192.168.9.96 4 8 40 200 GlusterFS/ElasticSearch
glusterfs-node-2 192.168.9.97 4 8 40 200 GlusterFS/ElasticSearch

2. KubeSphere CRD 開啟 Etcd 監控

  1. 編輯 CRD 中的 ks-installer 的 YAML 組態檔,

    在 YAML 檔案中,搜索 etcd,并將 monitoringfalse 改為 true,

    etcd:
      endpointIps: '192.168.9.91,192.168.9.92,192.168.9.93'
      monitoring: true
      port: 2379
      tlsEnable: true
    
  2. 所有配置完成后,點擊右下角的確定,保存配置,

  3. 在 kubectl 中執行以下命令檢查安裝程序,

    kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f
    

    結果不做展示,

  4. 驗證安裝結果,

    登錄控制臺,平臺管理->集群管理->監控告警->集群狀態,檢查 etcd 監控標簽頁是否存在,如果存在,表明監控開啟成功,

  5. 雖然前面配置開啟了,但是此時監控資料并不存在,同時,檢查 prometheus-k8s 的 Pod 會發現如下報錯,

  6. 接下來我們會講解原因和配置方法,

3. 問題解決程序記錄

  1. 查找官方論壇,關鍵詞使用 etcd 找到了以下一篇看著比較接近的檔案,打開來看看,

    etcd 使用自簽名證書,prometheus 報錯未知機構簽發 #2.11

    但是檔案里并沒有詳細的問題解決程序,看的我是一頭霧水,但是獲得了很重要的配置步驟,

  2. 根據上面 get 到的關鍵點 1用外部 etcd 的證書生成 secret

    這條命令就是為了根據 etcd 的 cert 生成一個 secret 配置,

    # kubectl -n kubesphere-monitoring-system create secret generic kube-etcd-client-certs --from-file=etcd-client-ca.crt=/etc/ssl/etcd/ssl/ca.pem --from-file=etcd-client.crt=/etc/ssl/etcd/ssl/admin-i-ezjb7gsk.pem --from-file=etcd-client.key=/etc/ssl/etcd/ssl/admin-i-ezjb7gsk-key.pem
    

    先不急,先看看 secret 是否存在,如果不存在再根據命令生成,

    [root@ks-k8s-master-0 ~]# kubectl get secrets -n kubesphere-monitoring-system
    NAME                                         TYPE                                  DATA   AGE
    additional-scrape-configs                    Opaque                                1      9d
    alertmanager-main                            Opaque                                1      9d
    alertmanager-main-generated                  Opaque                                1      9d
    alertmanager-main-tls-assets                 Opaque                                0      9d
    alertmanager-main-token-7b9xc                kubernetes.io/service-account-token   3      9d
    default-token-tnxh7                          kubernetes.io/service-account-token   3      9d
    kube-etcd-client-certs                       Opaque                                3      9d
    kube-state-metrics-token-czbrg               kubernetes.io/service-account-token   3      9d
    node-exporter-token-qrhl7                    kubernetes.io/service-account-token   3      9d
    notification-manager-sa-token-lc6z4          kubernetes.io/service-account-token   3      9d
    notification-manager-webhook-server-cert     kubernetes.io/tls                     2      9d
    prometheus-k8s                               Opaque                                1      9d
    prometheus-k8s-tls-assets                    Opaque                                0      9d
    prometheus-k8s-token-7fk45                   kubernetes.io/service-account-token   3      9d
    prometheus-operator-token-wlmcf              kubernetes.io/service-account-token   3      9d
    sh.helm.release.v1.notification-manager.v1   helm.sh/release.v1                    1      9d
    

    居然發現了 kube-etcd-client-certs

    再看看具體內容 , 發現該有的都有,一個不少,

    [root@ks-k8s-master-0 ~]# kubectl get secrets -n kubesphere-monitoring-system kube-etcd-client-certs -o yaml
    apiVersion: v1
    data:
      etcd-client-ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM5VENDQWQyZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFTTVJBd0RnWURWUVFERXdkbGRHTmsKTFdOaE1CNFhEVEl5TURRd09URTBNekl5TjFvWERUTXlNRFF3TmpFME16SXlOMW93RWpFUU1BNEdBMVVFQXhNSApaWFJqWkMxallUQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQU53SnpobDFPSVpyCkZYOUNsbER3czVVdnA5NkxHOHpxWkZGbmRGZVBlb1RrTXlFSVpESFRQM0lYSFhzaFFPNjF3VlpVd3VvMmJoeTcKdTBLbEFUcXZmZ1ZJTWE2MlpKTFVNcGwrendvMnFDcWpzbHd1b3RacHArTHVYaldYRTFOeWcwWi9MRmd3NDArOQpGSDV3Y2VWK0FhNjhETElKQWw4a0l6VktScVgraENjZGVTOFRWbDNVeS9PMWRkRFJGODExYzB6VTNteEF2Z0h5CmlxOFF0S2dBQ3E0L294N3RPRFRZUVNlVVdOa25tZTBLMituWmR6M1RveHpUamdIZ2FDVlFXVW5nNFNyMVlSYWwKV2owTGlET2tWb2l3TlFrSVd6ZnBrVXUrM2RJUGNPL29Wc0E3eEJLenhGdEp2dmthTGU1ZDd6a3p2d2xVdE1NYgp2NzNzNERqNU0yc0NBd0VBQWFOV01GUXdEZ1lEVlIwUEFRSC9CQVFEQWdLa01BOEdBMVVkRXdFQi93UUZNQU1CCkFmOHdIUVlEVlIwT0JCWUVGREh3WUNYcW90OG9oYWNZa1FBaHMrRjNSWW5tTUJJR0ExVWRFUVFMTUFtQ0IyVjAKWTJRdFkyRXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBS3l3SEJpVEkxYjExQjNrTDJNZFN0WGRaZ2ZNT05obApuZ1QyUjVuQWZISUVTZVRGNnpFbWh6QnBRb3ozMm1GbG1VdlRKMjdhdVk4UGh2cC9pT0pKbWZIZnY3RWcyYVpJCmlkK2w5YTJoQXFrMnVnNmV4NFpjUzgvOUxyTUV3SlhDOGZqeTA0OWdLQjIyMXFuSFh0Q3VyNE95MUFyMHBiUUwKaEQ4T0lpaExBbHpZNnIvQTlzVDYrNU12cy80OE5LeWN0Sy9KYzFhbVVQK0tnWXlPWDNWNXVsM096MFpIT2ptRAo5akIrdlNHUHM5REdrdnJEeFp4SDRIM0NhaTF5cHBlc29YVFZndS81UTFjcVlvdGNJalZpekx5eVNjZ1EzQ2ZqCmVvdnk3NW8vZUdiRmpYSmJQV0NncDhYV2RJWkVmcmNXMXZtWjZPZDVmcXIwblY5QVExekhueWs9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
      etcd-client.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUQrVENDQXVHZ0F3SUJBZ0lJT2Y3Ky90T3NYa013RFFZSktvWklodmNOQVFFTEJRQXdFakVRTUE0R0ExVUUKQXhNSFpYUmpaQzFqWVRBZUZ3MHlNakEwTURreE5ETXlNamRhRncwek1qQTBNRFl4TkRNeU16QmFNQ1F4SWpBZwpCZ05WQkFNVEdXVjBZMlF0Ym05a1pTMXJjeTFyT0hNdGJXRnpkR1Z5TFRBd2dnRWlNQTBHQ1NxR1NJYjNEUUVCCkFRVUFBNElCRHdBd2dnRUtBb0lCQVFDN0NvS1dWKzJKeXRVRTc2VnhvU3lOZzZXOU4yRUlxaTA5UkQ3TThTYUMKZzNHSFZJcXRjWUZzWEhNSHNGeGkyc0ltRWdTblRQMU1sS2Y2Q2xoZ1llSUJqbHJjdWVGNzNDUW45dkw3bXdqMwpJVzV0cUJ4Z1BwRmpvc1FQcGs5eU5XWmpEVGJsbHJTbkZjTXNKekFEOXNIZjdiRWUrQTZJcnJDUnhLZGJWaVY1CnFveFR5THhJenF4c2NDMlMwclJCYk5YbHAzZFU1QStldGZhOUYxUFNCeDQxdmk1MXcvTnBVRkNOa2ZuaWhyZnUKcUVoYW0zNUdCbFYrRzd4ZENSVGt6K3h3V3IwdnhMUitueGZ5MElHL2hyYlIxL0RLbHo5Y3BnbHhTWUg5S3ZvbgpzVXRpemhQYXVsRFZIN2NFdTJGOWZuTHZlK2hZemt3c3hhS1RsQTFlQ2VEeEFnTUJBQUdqZ2dFL01JSUJPekFPCkJnTlZIUThCQWY4RUJBTUNCYUF3SFFZRFZSMGxCQll3RkFZSUt3WUJCUVVIQXdFR0NDc0dBUVVGQndNQ01Bd0cKQTFVZEV3RUIvd1FDTUFBd0h3WURWUjBqQkJnd0ZvQVVNZkJnSmVxaTN5aUZweGlSQUNHejRYZEZpZVl3Z2RvRwpBMVVkRVFTQjBqQ0J6NElFWlhSalpJSVFaWFJqWkM1cmRXSmxMWE41YzNSbGJZSVVaWFJqWkM1cmRXSmxMWE41CmMzUmxiUzV6ZG1PQ0ltVjBZMlF1YTNWaVpTMXplWE4wWlcwdWMzWmpMbU5zZFhOMFpYSXViRzlqWVd5Q0QydHoKTFdzNGN5MXRZWE4wWlhJdE1JSVBhM010YXpoekxXMWhjM1JsY2kweGdnOXJjeTFyT0hNdGJXRnpkR1Z5TFRLQwpFMnhpTG10MVltVnpjR2hsY21VdWJHOWpZV3lDQ1d4dlkyRnNhRzl6ZEljRWZ3QUFBWWNRQUFBQUFBQUFBQUFBCkFBQUFBQUFBQVljRXdLZ0pXNGNFd0tnSlhJY0V3S2dKWFRBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQXZOR2gKdHdlTG1QS2F2YjVhOFoxU2sxQkFZdzZ6dEdHTnJGdzg2M1dKRVBEblFFa3duOFhJNGh4SU82UVV3eHJic1MweAp0YUg2ZmRKeFZZcEN5UXVrV3JldHpkZ05zMTVWYnlNdUlqVkJRMytGZnBRaDB5T25tUXlmRWc2UWZNdU5IWGpJCjZCdVp5M0p0S0tFZGZmUFh4U3VlMFV2TG5idlN6U0tVQkRIcy9nNVV0Q3cyeHVIVFU5bFdoQXY2dm1WQ08yQW4KZmc2MjAzMUpUNG9ya2F6c1hmdENOTlZqUmdIZ2pjQ0NDZkMwY1hSRVZTVFZqZUFaZU40ZUdtYWlRcFdEUWkxbApUVWZJMlE0dGRySlFsOXk0dDNKRDgrSmFLT0VJWkt3NWVWaTc3cUZobWR1MmFkRThkODc0aVBnN2ZEYmVFS2tWCkYxVWVKb3NKOFN3Z1psWTRpQT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
      etcd-client.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb3dJQkFBS0NBUUVBdXdxQ2xsZnRpY3JWQk8rbGNhRXNqWU9sdlRkaENLb3RQVVErelBFbWdvTnhoMVNLCnJYR0JiRnh6QjdCY1l0ckNKaElFcDB6OVRKU24rZ3BZWUdIaUFZNWEzTG5oZTl3a0ovYnkrNXNJOXlGdWJhZ2MKWUQ2Ulk2TEVENlpQY2pWbVl3MDI1WmEwcHhYRExDY3dBL2JCMysyeEh2Z09pSzZ3a2NTblcxWWxlYXFNVThpOApTTTZzYkhBdGt0SzBRV3pWNWFkM1ZPUVBuclgydlJkVDBnY2VOYjR1ZGNQemFWQlFqWkg1NG9hMzdxaElXcHQrClJnWlZmaHU4WFFrVTVNL3NjRnE5TDhTMGZwOFg4dENCdjRhMjBkZnd5cGMvWEtZSmNVbUIvU3I2SjdGTFlzNFQKMnJwUTFSKzNCTHRoZlg1eTczdm9XTTVNTE1XaWs1UU5YZ25nOFFJREFRQUJBb0lCQVFDamQ1c0x4SXNRMjFsegpOL0xUTFhhZnM0ZmRxQkhCSGVIdDRzQTBJeXB4OUdqN1NwTHM1UCtrOGVPQ3U4cnlocGdaNTdOemVDRUVsZ044Cnp4L1FGSndPbWhpbFFqdGtJZERqc0x0SjFJUndZQ0ovNmVYcTQ2UHpmV1IyL1BZQUxkVnZDalNKVVQ1UHJRQm4KalZRMGtxdDhodU0rMnJMeEdDT3ZNanpGNGJOYzhZZGFSOTI0c095Y1Q2UzI1Vzg3TklQWnVqY3VBUXIzaEE2bwpUbEdmVU44Q0hSM21jVnBIbEJ1NDhEeEpYaml2MkVKZTRHSmN2L0NWQTVqVGNNNlNoTjJuSGN3OGpHYVg0bGJtCjJYaktKemE0RStON3hGRXBRVEJRMUNqRGM1cndKY0tKUm9IQkxFUGtJVE5LWnNWSDlmK0tuNmpjQWtmOTZoWVkKKzY1TTMza1ZBb0dCQU5GMVdRNG4wcTE0YlpSY1FkbnFoWDdYT0pFbDBtOUZuYVhOTjNsb0M1SnNneGxkbXh5bgpRV1IvZkJVQnRaTUc5MmgzdTBheWUyaWdZdGtSc1pDV0wwL2VicmJGMWlmYXozR2Z1b3lSZWozMHVsRDJYY3phCmQzSEUwdVpTSVQrUkFSTTF1VjJUczVUSHJqUStIT3Z5cEpFQjFlSnY1L21LWmRpUTRtMzBGMDUzQW9HQkFPU1oKL21NWXd4V1Y4SFRtaENyNGsycDJQd1NLTHVrajhZaVJQZHhVSFpXWXdRTGFFRU1uSVVnUFJBSnFHc1VtWng5TApacDVjYXp3bW9ldDI0cXpGeVhkemFUMi96VGc1Rjg1d0FzRDl1WEZSWWYzc01OZ0VkazJkSmc1VGZmcWcrNlRQCjBla2VtWG9vSTYxTTc3VVFjWVdSVCtPWUtFd1V3dzZMcjJ3bGFKM1hBb0dBTzF3alVlU3RTeVllLy9XcFgrV2IKMFplUzIyZTVuSGxCTlRUVWJONjBzTmw1eWQyQ1VQdUJoOGF0VnBLMmI2V0F4aVZ3ZUplcWE3dFFhQzRnZ1ZaZQpzQ2JjZjRYUHJGblJnbVQvREVsS09IYTd1cWduYXgvYXkrNDR5cmNwM3dic0pCS01wdDF0L2xNY3BvZVgwTEppCk93b25JRllRaXVMUy9DNExUWmZvWnY4Q2dZQnIrMlhUajRYUE0zVlM4dlJwaStPdWZVNkZLWFRCUWU0OHNVYkUKUmFOMzM2RUVaTmNic1djaUw3dlRYQ1ZyRFJuWENYbmV3ZzhSYWJwQWpIYkVYK1VybklPUTNJSG0xZWt0NVhFWAprb0kvU2M3ODc4MmVySFRwY3ByZ1Y0WUJsbnRudlpjTkJCeEJQS2Fsbk5yNTcxdUFXVVNnWUdaZ2tjb1ZtOXZ3ClBMZHZId0tCZ0dYS2l5Y29zZzFuZHhkclQ0S05SSmdWZUd1M3ZqSjg4N0tQbThpbHB4alF3ekM2cjNRZDhYUWIKbGdWUnFBcG5mTnA1amM0WUZ5c2RvKzFhc2JrRTloczVUZk5sVUVtSWdvR3dxVnlmUkRiOEl0TklRQTBXZDZLdQpONy81UkZYRVlkUFR4YVhpNjl0cTZnRXp6cThTcnQyUUY5eEk5eG1EV0U5bGVEeDUwd1dZCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==
    kind: Secret
    metadata:
      creationTimestamp: "2022-04-09T14:34:37Z"
      name: kube-etcd-client-certs
      namespace: kubesphere-monitoring-system
      resourceVersion: "856"
      uid: c74b122b-438d-4e40-8e1a-1b9445d4b3d5
    type: Opaque
    

    看到這說明 secrets 暫時看著沒問題,最起碼資源配置存在,我們先繼續往后排查,不行的話再回來,

    在寫檔案的程序中,Jam 反饋他的環境并沒有這個 secrets 資源配置,可以按照上面的命令生成一個 secrets,注意檢查 Etcd 密鑰的實際路徑,

  3. 根據上面 get 到的關鍵點 2,**用外部 etcd 各節點的 ip 生成 endpoint **,

    先看看 prometheus-endpointsEtcd.yaml 檔案是個啥,

    prometheus-endpointsEtcd.yaml

    apiVersion: v1
    kind: Endpoints
    metadata:
      labels:
        k8s-app: etcd
      name: etcd
      namespace: kube-system
    subsets:
    - addresses:
      - ip: 127.0.0.1
      ports:
      - name: metrics
        port: 2379
        protocol: TCP
    

    再看看我們的 kubernetes 中有沒有 Endpoints 資源,

    [root@ks-k8s-master-0 ~]# kubectl get endpoints -n kubesphere-monitoring-system
    NAME                                      ENDPOINTS                                                                AGE
    alertmanager-main                         10.233.116.11:9093,10.233.117.10:9093,10.233.87.9:9093                   9d
    alertmanager-operated                     10.233.116.11:9094,10.233.117.10:9094,10.233.87.9:9094 + 6 more...       9d
    kube-state-metrics                        10.233.87.8:8443,10.233.87.8:9443                                        9d
    node-exporter                             192.168.9.91:9100,192.168.9.92:9100,192.168.9.93:9100                    9d
    notification-manager-controller-metrics   10.233.116.8:8443                                                        9d
    notification-manager-svc                  10.233.116.13:19093,10.233.116.14:19093                                  9d
    notification-manager-webhook              10.233.116.8:9443                                                        9d
    prometheus-k8s                            10.233.117.43:9090,10.233.87.160:9090                                    9d
    prometheus-operated                       10.233.117.43:9090,10.233.87.160:9090                                    9d
    prometheus-operator                       10.233.116.7:8443                                                        9d
    thanos-ruler-operated                     10.233.117.18:10902,10.233.87.17:10902,10.233.117.18:10901 + 1 more...   8d
    

    居然沒有跟 Etcd 相關的 Endpoints,需要新建?

    正要根據組態檔重新創建的時候,突然發現了自己的錯誤,慣性思維,被上面的命令帶偏了,用錯了命令空間,組態檔實體的命令空間是 kube-system

    再次在 kube-system 中查詢,查詢到了我們要的資源配置,

    [root@ks-k8s-master-0 ~]# kubectl get endpoints -n kube-system
    NAME                          ENDPOINTS                                                              AGE
    coredns                       10.233.117.2:53,10.233.117.3:53,10.233.117.2:53 + 3 more...            9d
    etcd                          192.168.9.91:2379,192.168.9.92:2379,192.168.9.93:2379                  3d20h
    kube-controller-manager-svc   192.168.9.91:10257,192.168.9.92:10257,192.168.9.93:10257               9d
    kube-scheduler-svc            192.168.9.91:10259,192.168.9.92:10259,192.168.9.93:10259               9d
    kubelet                       192.168.9.91:10250,192.168.9.92:10250,192.168.9.93:10250 + 6 more...   9d
    openebs.io-local              <none>                                                                 9d
    

    看看組態檔內容,

    [root@ks-k8s-master-0 ~]# kubectl get endpoints etcd -n kube-system -o yaml
    apiVersion: v1
    kind: Endpoints
    metadata:
      annotations:
        kubectl.kubernetes.io/last-applied-configuration: |
          {"apiVersion":"v1","kind":"Endpoints","metadata":{"annotations":{},"labels":{"k8s-app":"etcd"},"name":"etcd","namespace":"kube-system"},"subsets":[{"addresses":[{"ip":"192.168.9.91"},{"ip":"192.168.9.92"},{"ip":"192.168.9.93"}],"ports":[{"name":"metrics","port":2379,"protocol":"TCP"}]}]}
      creationTimestamp: "2022-04-15T08:24:18Z"
      labels:
        k8s-app: etcd
      name: etcd
      namespace: kube-system
      resourceVersion: "1559305"
      uid: c6d0ee2c-a228-4ea8-8ef1-73b387030950
    subsets:
    - addresses:
      - ip: 192.168.9.91
      - ip: 192.168.9.92
      - ip: 192.168.9.93
      ports:
      - name: metrics
        port: 2379
        protocol: TCP
    

    組態檔看著也正確,那我們繼續往下查,

  4. 根據上面 get 到的關鍵點 3生成利用上述 endpoint 的 etcd service

    先看看 prometheus-serviceEtcd.yaml 檔案是個啥,

    prometheus-serviceEtcd.yaml

    
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        k8s-app: etcd
      name: etcd
      namespace: kube-system
    spec:
      clusterIP: None
      ports:
      - name: metrics
        port: 2379
        targetPort: 2379
      selector: null
    

    再看看我們的 kubernetes 中有沒有 Service 資源,

    [root@ks-k8s-master-0 ~]# kubectl get service -n kube-system
    NAME                          TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                        AGE
    coredns                       ClusterIP   10.233.0.3   <none>        53/UDP,53/TCP,9153/TCP         9d
    etcd                          ClusterIP   None         <none>        2379/TCP                       3d21h
    kube-controller-manager-svc   ClusterIP   None         <none>        10257/TCP                      9d
    kube-scheduler-svc            ClusterIP   None         <none>        10259/TCP                      9d
    kubelet                       ClusterIP   None         <none>        10250/TCP,10255/TCP,4194/TCP   9d
    

    看看資源配置詳細內容,

    [root@ks-k8s-master-0 ~]# kubectl get service etcd -n kube-system -o yaml
    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        kubectl.kubernetes.io/last-applied-configuration: |
          {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"k8s-app":"etcd"},"name":"etcd","namespace":"kube-system"},"spec":{"clusterIP":"None","ports":[{"name":"metrics","port":2379,"targetPort":2379}],"selector":null}}
      creationTimestamp: "2022-04-15T08:24:18Z"
      labels:
        k8s-app: etcd
      name: etcd
      namespace: kube-system
      resourceVersion: "1559307"
      uid: cfd92ee5-dbd1-4ee4-a4c4-d683ca7a41ea
    spec:
      clusterIP: None
      clusterIPs:
      - None
      ipFamilies:
      - IPv4
      - IPv6
      ipFamilyPolicy: RequireDualStack
      ports:
      - name: metrics
        port: 2379
        protocol: TCP
        targetPort: 2379
      sessionAffinity: None
      type: ClusterIP
    status:
      loadBalancer: {}
    

    組態檔看著正確,那我們繼續往下查,

  5. 根據上面 get 到的關鍵點 4,**生成用于抓取 Etcd 資料的 ServiceMonitor **

    先看看 prometheus-serviceMonitorEtcd.yaml 檔案是個啥,

    prometheus-serviceMonitorEtcd.yaml

    
    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      labels:
        k8s-app: etcd
      name: etcd
      namespace: kubesphere-monitoring-system
    spec:
      endpoints:
      - interval: 1m
        port: metrics
        scheme: https
        tlsConfig:
          caFile: /etc/prometheus/secrets/kube-etcd-client-certs/etcd-client-ca.crt
          certFile: /etc/prometheus/secrets/kube-etcd-client-certs/etcd-client.crt
          keyFile: /etc/prometheus/secrets/kube-etcd-client-certs/etcd-client.key
          serverName: etcd.kube-system.svc.cluster.local
      jobLabel: k8s-app
      namespaceSelector:
        matchNames:
        - kube-system
      selector:
        matchLabels:
          k8s-app: etcd
    

    再看看我們的 Kubernetes 中有沒有 ServiceMonitor 資源,

    [root@ks-k8s-master-0 ~]# kubectl get servicemonitor -n kubesphere-monitoring-system
    NAME                      AGE
    alertmanager              9d
    coredns                   9d
    devops-jenkins            8d
    etcd                      3d21h
    kube-apiserver            9d
    kube-controller-manager   9d
    kube-scheduler            9d
    kube-state-metrics        9d
    kubelet                   9d
    node-exporter             9d
    prometheus                9d
    prometheus-operator       9d
    s2i-operator              8d
    

    看看資源配置詳細內容,

    [root@ks-k8s-master-0 ~]# kubectl get servicemonitor etcd -n kubesphere-monitoring-system -o yaml
    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      annotations:
        kubectl.kubernetes.io/last-applied-configuration: |
          {"apiVersion":"monitoring.coreos.com/v1","kind":"ServiceMonitor","metadata":{"annotations":{},"labels":{"app.kubernetes.io/vendor":"kubesphere","k8s-app":"etcd"},"name":"etcd","namespace":"kubesphere-monitoring-system"},"spec":{"endpoints":[{"interval":"1m","port":"metrics","scheme":"https","tlsConfig":{"caFile":"/etc/prometheus/secrets/kube-etcd-client-certs/etcd-client-ca.crt","certFile":"/etc/prometheus/secrets/kube-etcd-client-certs/etcd-client.crt","keyFile":"/etc/prometheus/secrets/kube-etcd-client-certs/etcd-client.key"}}],"jobLabel":"k8s-app","namespaceSelector":{"matchNames":["kube-system"]},"selector":{"matchLabels":{"k8s-app":"etcd"}}}}
      creationTimestamp: "2022-04-15T08:24:18Z"
      generation: 1
      labels:
        app.kubernetes.io/vendor: kubesphere
        k8s-app: etcd
      name: etcd
      namespace: kubesphere-monitoring-system
      resourceVersion: "1559308"
      uid: 386f16c0-74cd-4dbf-aa35-cc227062c881
    spec:
      endpoints:
      - interval: 1m
        port: metrics
        scheme: https
        tlsConfig:
          caFile: /etc/prometheus/secrets/kube-etcd-client-certs/etcd-client-ca.crt
          certFile: /etc/prometheus/secrets/kube-etcd-client-certs/etcd-client.crt
          keyFile: /etc/prometheus/secrets/kube-etcd-client-certs/etcd-client.key
      jobLabel: k8s-app
      namespaceSelector:
        matchNames:
        - kube-system
      selector:
        matchLabels:
          k8s-app: etcd
    

    組態檔看著也正確,那我們繼續往下查,

  6. 查到現在我發現自己能查的都查了,該有的配置都有,那為啥還有問題呢,參考檔案中也沒有更詳細的說明了,

  7. 這時我發現我忘記了一點,還有沒看過 Pod 的日志,趕緊去看看,

    集群管理->應用負載->作業負載->有狀態副本集, 選擇 kubesphere-monitoring-system 專案,找到 prometheus-k8s

    點擊 prometheus-k8s,進入詳細頁面,點擊容器組中的 prometheus-k8s-0 容器,

    點擊按鈕容器日志,彈出容器日志頁面,

    這時會發現有大量的報錯日志

    詳細報錯日志,

    level=error ts=2022-04-19T06:49:08.169Z caller=manager.go:188 component="scrape manager" msg="error creating nescrape pool" err="error creating HTTP client: unable to load specified CA cert /etc/prometheus/secrets/kube-etcclient-certs/etcd-client-ca.crt: open /etc/prometheus/secrets/kube-etcd-client-certs/etcd-client-ca.crt: no sucfile or directory" scrape_pool=kubesphere-monitoring-system/etcd/0
    

    看到這我們發現了問題的原因,找不到檔案 /etc/prometheus/secrets/kube-etcd-client-certs/etcd-client-ca.crt

    打開 Pod 的終端,進入系統里驗證,

    結果顯示,整個檔案夾都不存在,

    再去看一眼 Pod 的配置,是否有 secrets 的配置,

    看到這,實錘了,我認為我發現了問題的根本,也想到了問題的解決辦法,那就是 Pod 中沒有掛載 kube-etcd-client-certs 這個 secrets,那我們想辦法掛載上,問題就能解決了???

    在控制臺中,找到我們的有狀態副本集 prometheus-k8s,點擊更多操作->編輯設定

    存盤卷中,掛載配置字典或保密字典

    選擇保密字典,只讀掛載 kube-etcd-client-certs/etc/prometheus/secrets/kube-etcd-client-certs,最終確定,

    點擊確定后,你會發現 Pod 開始重建,我以為這就可以了等著看效果就完了,結果,,,

    待 Pod 重建成功后,我以為一切都被我掌控了,肯定沒有問題了,結果我發現,改過的配置又變回了原來的樣子,Pod 中根本沒有掛載我們想要的 secrets,配置跟原來一樣,

    反復操作三次后,我崩潰了,幡然醒悟,我改的方法不對,這個是由 prometheus-operator,單獨修改不會配置不會生效的,

  8. prometheus-operator,這玩意我以前沒玩過,不了解技術細節,咋辦,,,繼續百度,

  9. 百度,

    關鍵字 prometheus operator etcd

    第一名看了一眼,沒啥幫助,不展示了,各位有興趣的可以自己看
    2 分鐘后打開了排名第二的文章,文章思路程序比較清晰,迅速下翻,看到第點找到了我要的方法,

  10. 細節我也不知道,但是我們的目的是為了掛載 secrets,既然這里提到了,那我們就去試試,

    [root@ks-k8s-master-0 ~]# kubectl edit prometheuses -n kubesphere-monitoring-system
    
    # Please edit the object below. Lines beginning with a '#' will be ignored,
    # and an empty file will abort the edit. If an error occurs while saving this file will be
    # reopened with the relevant failures.
    #
    apiVersion: monitoring.coreos.com/v1
    kind: Prometheus
    metadata:
      annotations:
        kubectl.kubernetes.io/last-applied-configuration: |
    ....
    

    檔案內容類似上面的,我們搜索 secret,出現報錯 E486: Pattern not found: secret

    說明默認配置里沒有 secret 的配置,我們自己添加 , 在檔案 78 行左右加入,

    secrets:
    - kube-etcd-client-certs
    

    最終效果類似 (為了看的清楚,我加了行號):

    71   securityContext:
    72     fsGroup: 0
    73     runAsNonRoot: false
    74     runAsUser: 0
    75   serviceAccountName: prometheus-k8s
    76   serviceMonitorNamespaceSelector: {}
    77   serviceMonitorSelector: {}
    78   secrets:
    79   - kube-etcd-client-certs
    80   storage:
    81     volumeClaimTemplate:
    82       spec:
    83         resources:
    84           requests:
    85             storage: 20Gi
    86   tolerations:
    87   - effect: NoSchedule
    88     key: dedicated
    89     operator: Equal
    90     value: monitoring
    91   version: v2.26.0
    

    保存退出,

    我們再去查看有狀態副本集的配置,會發現多了一個保密字典的配置,

    再去看 Pod 的具體配置,會發現 Pod 的配置也多了保密字典的配置

    再看看 Pod 的日子,發現也沒有 error

    感覺問題都解決了,那我們去看看監控是否有圖形了(還有點小期待呢),

  11. 揭曉最終答案的時刻,

    先來一張全景圖,

    再來幾張區域高清圖(后補的,剛開始沒抓),

  12. 至此,問題初步解決,不過還有很多細節需要我們在后面深入學習了解更深的底層知識,

4. Prometheus-Operator 監控 Etcd 的技術關鍵點

技術關鍵點

  1. Etcd 的安裝方式

    KubeSphere 安裝的 Etcd 為二進制方式,驗證方法如下,

    ## 看行程確認是二進制方式
    [root@ks-k8s-master-0 ~]# ps -ef | grep etcd
    root      1158 56409  0 15:43 pts/0    00:00:00 grep --color=auto etcd
    root     15301     1  6 Apr09 ?        15:35:08 /usr/local/bin/etcd
    root     17247 17219 13 Apr09 ?        1-06:55:24 kube-apiserver --advertise-address=192.168.9.91 --allow-privileged=true --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --client-ca-file=/etc/kubernetes/pki/ca.crt --enable-admission-plugins=NodeRestriction --enable-bootstrap-token-auth=true --etcd-cafile=/etc/ssl/etcd/ssl/ca.pem --etcd-certfile=/etc/ssl/etcd/ssl/node-ks-k8s-master-0.pem --etcd-keyfile=/etc/ssl/etcd/ssl/node-ks-k8s-master-0-key.pem --etcd-servers=https://192.168.9.91:2379,https://192.168.9.92:2379,https://192.168.9.93:2379 --feature-gates=CSIStorageCapacity=true,RotateKubeletServerCertificate=true,TTLAfterFinished=true,ExpandCSIVolumes=true --insecure-port=0 --kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt --kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key --requestheader-allowed-names=front-proxy-client --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/etc/kubernetes/pki/sa.pub --service-account-signing-key-file=/etc/kubernetes/pki/sa.key --service-cluster-ip-range=10.233.0.0/18 --tls-cert-file=/etc/kubernetes/pki/apiserver.crt --tls-private-key-file=/etc/kubernetes/pki/apiserver.key
    
    ## 看 ssl 密鑰檔案有哪些
    [root@ks-k8s-master-0 ~]# ll /etc/ssl/etcd/ssl/
    total 80
    -rw------- 1 root root 1675 Apr  9 22:32 admin-ks-k8s-master-0-key.pem
    -rw-r--r-- 1 root root 1440 Apr  9 22:32 admin-ks-k8s-master-0.pem
    -rw------- 1 root root 1679 Apr  9 22:32 admin-ks-k8s-master-1-key.pem
    -rw-r--r-- 1 root root 1440 Apr  9 22:32 admin-ks-k8s-master-1.pem
    -rw------- 1 root root 1679 Apr  9 22:32 admin-ks-k8s-master-2-key.pem
    -rw-r--r-- 1 root root 1440 Apr  9 22:32 admin-ks-k8s-master-2.pem
    -rw------- 1 root root 1675 Apr  9 22:32 ca-key.pem
    -rw-r--r-- 1 root root 1086 Apr  9 22:32 ca.pem
    -rw------- 1 root root 1679 Apr  9 22:32 member-ks-k8s-master-0-key.pem
    -rw-r--r-- 1 root root 1440 Apr  9 22:32 member-ks-k8s-master-0.pem
    -rw------- 1 root root 1675 Apr  9 22:32 member-ks-k8s-master-1-key.pem
    -rw-r--r-- 1 root root 1440 Apr  9 22:32 member-ks-k8s-master-1.pem
    -rw------- 1 root root 1675 Apr  9 22:32 member-ks-k8s-master-2-key.pem
    -rw-r--r-- 1 root root 1440 Apr  9 22:32 member-ks-k8s-master-2.pem
    -rw------- 1 root root 1675 Apr  9 22:32 node-ks-k8s-master-0-key.pem
    -rw-r--r-- 1 root root 1440 Apr  9 22:32 node-ks-k8s-master-0.pem
    -rw------- 1 root root 1679 Apr  9 22:32 node-ks-k8s-master-1-key.pem
    -rw-r--r-- 1 root root 1440 Apr  9 22:32 node-ks-k8s-master-1.pem
    -rw------- 1 root root 1679 Apr  9 22:32 node-ks-k8s-master-2-key.pem
    -rw-r--r-- 1 root root 1440 Apr  9 22:32 node-ks-k8s-master-2.pem
    
  2. Prometheus-Operator 監控 Etcd 的配置

  • 用外部 Etcd 的證書生成 secret
  • 用外部 Etcd 各節點的 ip 生成 endpoint
  • 生成利用 Endpoint 的 etcd service
  • 生成用于抓取 Etcd 資料的 ServiceMonitor

需要深入學習的地方(占位,待補充)

  1. Prometheus-Operator 的實作原理和技術細節,
  2. KubeSphere 對于 Prometheus-Operator 的配置程序,

5. 總結

本文根據運維實際需求,介紹了開啟 Etcd 監控的正確姿勢,同時也詳細介紹了解決該問題的排障流程,有需要開啟 KubeSphere 3.2.1 版本的 Etcd 監控功能的小伙伴,可以參考本文進行配置,

參考檔案

  • etcd 使用自簽名證書,prometheus 報錯未知機構簽發 #2.11
  • https://www.cnblogs.com/lvcisco/p/12575608.html?ivk_sa=1024320u

Get 檔案

  • Github https://github.com/devops/z-notes
  • Gitee https://gitee.com/zdevops/z-notes

Get 代碼

  • Github https://github.com/devops/ansible-zdevops
  • Gitee https://gitee.com/zdevops/ansible-zdevops

B 站

  • 老Z 手記

本文由博客一文多發平臺 OpenWrite 發布!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/463509.html

標籤:其他

上一篇:HCNP Routing&Switching之埠隔離

下一篇:Java基礎——介面組成更新

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more