web-dev-qa-db-fra.com

Comment puis-je lister les taches sur mes nœuds?

Les docs expliquent très bien comment définir une souillure sur un nœud ou en supprimer une. Et je peux utiliser kubectl describe node pour obtenir une description détaillée d'un noeud, y compris de ses défauts. Mais que se passe-t-il si j'ai oublié le nom de la souillure que j'ai créée ou les nœuds sur lesquels je l'ai configurée? Puis-je lister tous mes nœuds, avec les traces présentes sur eux?

10
Chris Jones
kubectl get nodes -o json | jq .items[].spec

qui donnera la spécification complète avec le nom du noeud, ou:

kubectl get nodes -o json | jq .items[].spec.taints

produira la liste des souillures pour chaque noeud

6
kranthi guttikonda

Dans Kubernetes 1.6.x, les tests de nœuds sont passés à la spécification. Par conséquent, la réponse ci-dessus de jaxxstorm ne fonctionnera pas. Au lieu de cela, vous pouvez utiliser le modèle suivant.

{{printf "%-50s %-12s\n" "Node" "Taint"}}
{{- range .items}}
    {{- if $taint := (index .spec "taints") }}
        {{- .metadata.name }}{{ "\t" }}
        {{- range $taint }}
            {{- .key }}={{ .value }}:{{ .effect }}{{ "\t" }}
        {{- end }}
        {{- "\n" }}
    {{- end}}
{{- end}}

Je l'ai sauvegardé dans un fichier et le référence comme suit:

kubectl get nodes -o go-template-file="./nodes-taints.tmpl"

Vous obtiendrez une sortie comme ceci:

Node                                            Taint
ip-xxx-xxx-xxx-xxx.us-west-2.compute.internal   dedicate=etcd:NoSchedule
ip-xxx-xxx-xxx-xxx.us-west-2.compute.internal   dedicate=jenkins:NoSchedule
ip-xxx-xxx-xxx-xxx.us-west-2.compute.internal   dedicate=etcd:NoSchedule
ip-xxx-xxx-xxx-xxx.us-west-2.compute.internal   dedicate=containerlinux-canary-channel-workers:NoSchedule
ip-xxx-xxx-xxx-xxx.us-west-2.compute.internal   dedicate=jenkins:NoSchedule
ip-xxx-xxx-xxx-xxx.us-west-2.compute.internal   dedicate=etcd:NoSchedule
ip-xxx-xxx-xxx-xxx.us-west-2.compute.internal   dedicate=etcd:NoSchedule
ip-xxx-xxx-xxx-xxx.us-west-2.compute.internal   dedicate=etcd:NoSchedule
ip-xxx-xxx-xxx-xxx.us-west-2.compute.internal   dedicate=jenkins:NoSchedule

Je ne suis pas un grand utilisateur de gabarits et je suis donc sûr qu'il y a des choses que j'aurais pu mieux faire mais c'est ce que c'est.

21
Brett Wagner

Pour trouver des traces de noeud, il suffit de lancer:

kubectl describe nodes your-node-name

Sortie:

Name:                   your-node-name
...
Taints:                 node-role.kubernetes.io/master:NoSchedule
CreationTimestamp:      Wed, 19 Jul 2017 06:00:23 +0800
8
Pavel Evstigneev

Je cherchais à obtenir la liste des nœuds qui ont une Taint spécifique. J'ai trouvé seulement cette réponse SO. Si quelqu'un cherche cette réponse, voici la solution

kubectl get nodes -o go-template='{{range $item := .items}}{{with $nodename := $item.metadata.name}}{{range $taint := $item.spec.taints}}{{if and (eq $taint.key "node-role.kubernetes.io/master") (eq $taint.effect "NoSchedule")}}{{printf "%s\n" $nodename}}{{end}}{{end}}{{end}}{{end}}'

Sur mon cluster, le résultat est:

preprod-master
preprod-proxy
2
user9869741

Vous pouvez utiliser les options de sortie go-template de kubectl pour vous aider ici,

kubectl get nodes -o go-template='{{range .items}}{{if $x := index .metadata.annotations "scheduler.alpha.kubernetes.io/taints"}}{{with $x := index .metadata.name}}{{.}}{{printf "\n"}}{{end}}{{end}}{{end}}'

Sur mon cluster, cela imprime mes maîtres, qui sont souillés:

kubemaster-1.example.net
kubemaster-2.example.net
kubemaster-3.example.net
1
jaxxstorm

PowerShell: \> kubectl décrit les nœuds | findstr "Nom d'hôte Taint"

ou

Bash # kubectl décrit les nœuds | egrep "Taint | Nom d'hôte"

Cette commande est facile à retenir

La sortie ressemble à ceci:

Taints:             <none>  
  Hostname:   aks-agentpool-30208295-0  
Taints:             <none>    
  Hostname:  aks-agentpool-30208295-1
...
0
neokyle