ubernetes 部署 metrics-server 后 执行 kubectl top pod 或 kubectl top node 报错
Erreur du serveur (ServiceUnavailable): le serveur est actuellement incapable de traiter la requête (get pods.metrics.k8s.io)
1. Étapes de vérification des problèmes:
1.1. Afficher le journal du service du serveur de métriques
Cluster doesn't provide requestheader-client-ca-file in configmap/extension-apiserver-authentication in kube-system, so request-header client certificate authentication won't work.
L'inspection a révélé que l'erreur HTTP 403 a été renvoyée en raison du manque d'autorisation d'appeler metrics-server
1.2. Vérifiez si les paramètres suivants sont configurés
args:
- --cert-dir=/tmp
- --secure-port=4443
- --kubelet-insecure-tls=true
- --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,externalDNS
1.3. Résumé du problème:
Il n'y a pas de problème avec la configuration du service de métriques-serveur, mais le service signale toujours une erreur du serveur (ServiceUnavailable): le serveur est actuellement incapable de gérer la demande (get pods.metrics.k8s.io), il y a deux façons de résoudre le problème
1. Autorisez le rôle de cluster au système utilisateur: anonyme
kubectl create clusterrolebinding system:anonymous --clusterrole=cluster-admin --user=system:anonymous
2. Créez le rôle système: metrics-server et autorisez-le
2. Résolution de problèmes (création du système: rôle de serveur de métriques et autorisation)
Configurer le certificat du serveur de métriques
# vim metrics-server-csr.json
{
"CN": "system:metrics-server",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "BeiJing",
"L": "BeiJing",
"O": "k8s",
"OU": "system"
}
]
}
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes metrics-server-csr.json | cfssljson -bare metrics-server
Configurer l'autorisation RBAC du serveur de métriques
cat > auth-metrics-server.yaml << EOF
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: system:auth-metrics-server-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"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: metrics-server:system:auth-metrics-server
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: system:auth-metrics-server-reader
subjects:
- kind: User
name: system:metrics-server
namespace: kube-system
EOF
kube-apiserver ajoute la configuration requise par metrics-server
--requestheader-client-ca-file=/opt/kubernetes/ssl/ca.pem \
--requestheader-allowed-names=aggregator,metrics-server \
--requestheader-extra-headers-prefix=X-Remote-Extra- \
--requestheader-group-headers=X-Remote-Group \
--requestheader-username-headers=X-Remote-User \
--proxy-client-cert-file=/opt/kubernetes/ssl/metrics-server.pem \
--proxy-client-key-file=/opt/kubernetes/ssl/metrics-server-key.pem
Vérifiez si les informations de surveillance peuvent être obtenues normalement