metrics-sever 遇到的一些坑


1. metric-server-nanny 報錯

ERROR: logging before flag.Parse: I1106 20:10:09.444640       1 pod_nanny.go:65] Invoked by [/pod_nanny --config-dir=/etc/config --cpu=80m --extra-cpu=0.5m --memory=80Mi --extra-memory=8Mi --threshold=5 --deployment=metrics-server-v0.3.3 --container=metrics-server --poll-period=300000 --estimator=exponential]

 這個報錯並不能說明什么東西. 我甚至認為是日志等級打錯了, 起初無法kubectl top node, 我就一直在找這個相關的問題,最后發現這個無關緊要

 

2. 使用kubectk top node/pod 的時候

Error from server (ServiceUnavailable): the server is currently unable to handle the request (get pods.metrics.k8s.io)

這個就是因為前邊某一步沒有做好, 可以使用命令看下容器的日志

kubectl -n kube-system logs metrics-server-v0.3.3-866b48f94c-wlkqj  metrics-server --tail 100 -f

(1)  自動生成證書文件

I1106 20:30:12.973355       1 serving.go:312] Generated self-signed cert (apiserver.local.config/certificates/apiserver.crt, apiserver.local.config/certificates/apiserver.key)

這個還是挺煩人的, 大多說問題也是這個.  因為GitHub剛來下來的時候,並沒有讓你做掛載目錄,使用獨立證書的相關示例,而且這個還是一個INFO的信息, 導致很容易誤解這里沒問題. 實際上,你需要生成一個證書文件及其私鑰,並將其掛載到metric-server的容器中使用

① 生成證書

(umask 077; openssl genrsa -out metrics.key 2048)
openssl req -new -key metrics.key -out metrics.csr -subj "/O=k8s/CN=metrics-server"
openssl x509 -req -in metrics.csr -CA ../ca.pem -CAkey ../ca-key.pem -CAcreateserial -out metrics.crt -days 3650

② 創建私鑰並掛載

# 創建私鑰
kubectl -n kube-system create secret generic metrics  --from-file=metrics.crt --from-file=metrics.key

# volume 引入secret
      volumes:
        - name: metrics-volume
          secret:
            secretName: metric

# 容器中掛載
        volumeMounts:
        - name: metrics-volume
          readOnly: true
          mountPath: "/metrics-volume"

 

③ 修改metri-server容器的command命令

        - /metrics-server
        - --metric-resolution=30s
        - --kubelet-insecure-tls
        - --kubelet-preferred-address-types=InternalIP
        - --tls-cert-file=/metrics-volume/metrics.crt
        - --tls-private-key-file=/metrics-volume/metrics.ke

(2) 查看日志的時候包一些403 沒有權限之類的

# 直接把rbac權限授權的文件貼過來了
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: system:metrics-server
  labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
rules:
- apiGroups:
  - ""
  resources:
  - '*'
  verbs:
  - '*'
- apiGroups:
  - "extensions"
  - "apps"
  resources:
  - deployments
  verbs:
  - get
  - list
  - update
  - watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: system:metrics-server
  labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:metrics-server
subjects:
- kind: ServiceAccount
  name: metrics-server
  namespace: kube-system
- kind: User
  name: metrics
  namespace: kube-system

 

(3) 最后還會遇到一個挺奇葩的問題, 訪問metric-server的時候,需要指定證書和私鑰,這個是metric-server那邊的配置,怎么取消沒仔細看

systemctl status kube-apiserver.service
Nov 07 04:20:49 master01.p-pp.cn kube-apiserver[399335]: E1107 04:20:49.955494  399335 available_controller.go:416] v1beta1.metrics.k8s.io failed with: failing or missing response from https://192.168.100.247:443/apis/metrics.k8s.io/v1beta1: bad status from https://192.168.100.247::443/apis/metrics.k8s.io/v1beta1: 403

沒錯,還是403,這個是由於api-server訪問metric-server時候沒有指定證書私鑰導致的,可以參考一下方案

 當metric-server 日志沒問題的時候,可以使用curl置頂證書和私鑰訪問,如果用curl訪問沒有問題的話,那么就是下邊這個原因了

curl -k --cert /opt/kubernetes/ssl/metrics-server/metrics.crt --key /opt/kubernetes/ssl/metrics-server/metrics.key  https://10.244.244.43:443/apis/metrics.k8s.io/v1beta1/nodes

 

kube-apiserver 的配置選項參考

# proxy-client-cert-file 和 proxy-client-key-file 必須要在requestheader-allowed-names 選項的前邊, 看上去是因為requestheader-allowed-names 引用了代理證書和私鑰, 我就是因為順序錯了,當執行kubectl top node/pod 的時候也會報錯.

--enable-aggregator-routing=true \
--proxy-client-cert-file=/opt/kubernetes/ssl/metrics-server/metrics.crt \
--proxy-client-key-file=/opt/kubernetes/ssl/metrics-server/metrics.key \
--requestheader-client-ca-file=/opt/kubernetes/ssl/ca.pem \
--requestheader-allowed-names="metrics"  \
--requestheader-extra-headers-prefix=X-Remote-Extra-  \
--requestheader-group-headers=X-Remote-Group  \
--requestheader-username-headers=X-Remote-User  \

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM