web-dev-qa-db-fra.com

Kubelet a cessé de poster le statut de nœud

Deux de mes nœuds de cluster obtiennent Kubelet stopped posting node status dans kubectl describe node quelquefois. Dans les grumes de ce nœuds, je vois ceci:

Dec 11 12:01:03 alma-kube1 kubelet[946]: E1211 06:01:03.166998     946 controller.go:115] failed to ensure node lease exists, will retry in 6.4s, error: Get https://192.168.151.52:6443/apis/coordination.k8s.io/v1beta1/namespaces/kube-node-lease/leases/alma-kube1?timeout=10s: read tcp 192.168.170.7:46824->192.168.151.52:6443: use of closed network connection
Dec 11 12:01:03 alma-kube1 kubelet[946]: W1211 06:01:03.167045     946 reflector.go:289] object-"kube-public"/"myregistrykey": watch of *v1.Secret ended with: very short watch: object-"kube-public"/"myregistrykey": Unexpected watch close - watch lasted less than a second and no items received
Dec 11 12:01:03 alma-kube1 kubelet[946]: W1211 06:01:03.167356     946 reflector.go:289] object-"kube-system"/"kube-router-token-bfzkn": watch of *v1.Secret ended with: very short watch: object-"kube-system"/"kube-router-token-bfzkn": Unexpected watch close - watch lasted less than a second and no items received
Dec 11 12:01:03 alma-kube1 kubelet[946]: W1211 06:01:03.167418     946 reflector.go:289] object-"kube-public"/"default-token-kcnfl": watch of *v1.Secret ended with: very short watch: object-"kube-public"/"default-token-kcnfl": Unexpected watch close - watch lasted less than a second and no items received
Dec 11 12:01:13 alma-kube1 kubelet[946]: E1211 06:01:13.329262     946 kubelet_node_status.go:385] Error updating node status, will retry: failed to patch status "{\"status\":{\"$setElementOrder/conditions\":[{\"type\":\"MemoryPressure\"},{\"type\":\"DiskPressure\"},{\"type\":\"PIDPressure\"},{\"type\":\"Ready\"}],\"conditions\":[{\"lastHeartbeatTime\":\"2019-12-11T06:01:03Z\",\"type\":\"MemoryPressure\"},{\"lastHeartbeatTime\":\"2019-12-11T06:01:03Z\",\"type\":\"DiskPressure\"},{\"lastHeartbeatTime\":\"2019-12-11T06:01:03Z\",\"type\":\"PIDPressure\"},{\"lastHeartbeatTime\":\"2019-12-11T06:01:03Z\",\"type\":\"Ready\"}]}}" for node "alma-kube1": Patch https://192.168.151.52:6443/api/v1/nodes/alma-kube1/status?timeout=10s: net/http: request canceled (Client.Timeout exceeded while awaiting headers)
3
Nessero Karuzo

Le problème est que kubelet Impossible de corriger son statut de nœud parfois, plus de 250 ressources restent sur le nœud, Kubelet ne peut pas regarder plus de 250 ruisseaux avec Kube-apiserver en même temps. Ajustez KUBE-APISERVER --http2-max-streams-per-connection à 1000 pour soulager la douleur.

Regardez sur: Kubettes-Patch .

Edit:

Kubettes utilise des certificats clients, des jetons porteurs, un proxy authentifiant ou HTTP Basic Auth pour authentifier les demandes d'API via des plugins d'authentification. Comme les demandes HTTP sont apportées au serveur API, les plugins tentent d'associer les attributs suivants avec la demande:

Vous pouvez activer plusieurs méthodes d'authentification à la fois. Vous devez généralement utiliser au moins deux méthodes:

  • jetons de compte de service pour comptes de service
  • au moins une autre méthode pour l'authentification de l'utilisateur.

Lorsque plusieurs modules d'authentificateur sont activés, le premier module à authentifier avec succès l'évaluation de la requête en court-circuits. Le serveur API ne garantit pas les authentificateurs de commande s'exécutent.

Informations sur les jetons que vous pouvez trouver ici: jetons .

Vous pouvez également utiliser un compte de service qui est un authentificateur automatiquement activé qui utilise des jetons Signé Bearer Jetkens pour vérifier les demandes.

- comptes de service sont généralement créés automatiquement par le serveur API et associés à des pods exécutés dans le cluster via le contrôleur d'admission du serviceAccount. Les jetons porteurs sont montés dans des gousses à des emplacements bien connus et permettent aux processus en cluster de parler au serveur API.

Les jetons de compte de compte de service sont parfaitement valables pour utiliser à l'extérieur du cluster et peuvent être utilisés pour créer des identités pour des travaux de longue date qui souhaitent parler à l'API Kubettes. Pour créer manuellement un compte de service, utilisez simplement la commande KubectL Créer un serviceAcCount (nom). Cela crée un compte de service dans l'espace de noms actuel et un secret associé.

Les secrets tiennent souvent des valeurs qui couvrent un spectre d'importance, dont beaucoup peuvent provoquer des escalades de Kubettes (par exemple, des jetons de compte de service) et des systèmes externes. Même si une application individuelle peut raisonner sur la puissance des secrets, il s'attend à interagir avec, d'autres applications dans la même espace de noms peuvent rendre ces hypothèses invalides.

Pour vérifier les jetons d'abord, vous devez énumérer des secrets, puis les décrire ($ kubectl describe secret secret-name).

Pour répertorier les secrets exécutez la commande ci-dessous:

$ kubectl get secret

Les secrets tiennent souvent des valeurs qui couvrent un spectre d'importance, dont beaucoup peuvent provoquer des escalades de Kubettes (par exemple, des jetons de compte de service) et des systèmes externes. Même si une application individuelle peut raisonner sur la puissance des secrets, il s'attend à interagir avec, d'autres applications dans la même espace de noms peuvent rendre ces hypothèses invalides.

Plus d'informations que vous pouvez trouver ici: secret .

1
Malgorzata