Документы хороши для объяснения того, как установить вред на узле или удалить его. И я могу использовать kubectl describe node
чтобы получить подробное описание одного узла, включая его недостатки. Но что, если я забыл название созданного мукоза или какие узлы я установил? Могу ли я перечислить все мои узлы с какими-либо вредными воздействиями на них?
Как я могу перечислить taints на моих узлах?
Ответ 1
kubectl get nodes -o json | jq '.items[].spec'
который даст полную спецификацию с именем узла, или:
kubectl get nodes -o json | jq '.items[].spec.taints'
выдаст список вредов для каждого узла
Ответ 2
В Kubernetes 1.6.x ноды портятся в спецификации. Поэтому приведенный выше ответ по jaxxstorm не будет работать. Вместо этого вы можете использовать следующий шаблон.
{{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}}
Я сохранил это в файл, а затем сослаться на него так:
kubectl get nodes -o go-template-file="./nodes-taints.tmpl"
Вы получите вывод примерно так:
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
Я не большой пользователь шаблона go, поэтому я уверен, что есть кое-что, что я мог бы сделать лучше, но это так и есть.
То же, что и выше, но все в одной строке:
kubectl get nodes -o go-template='{{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}}'
Ответ 3
Чтобы найти taints node, можно просто запустить:
kubectl describe nodes your-node-name
Вывод:
Name: your-node-name
...
Taints: node-role.kubernetes.io/master:NoSchedule
CreationTimestamp: Wed, 19 Jul 2017 06:00:23 +0800
Ответ 4
Вы можете использовать kubectl
вывода kubectl
go-template, чтобы помочь вам здесь,
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}}'
На моем кластере это печатает мои мастера, которые испорчены:
kubemaster-1.example.net
kubemaster-2.example.net
kubemaster-3.example.net
Ответ 5
Я искал список узлов, которые имеют определенный Taint. Я нашел только этот SO-ответ, поэтому, если кто-то ищет этот ответ, вот решение:
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}}'
На моем кластере вывод:
preprod-master
preprod-proxy
Ответ 6
PowerShell: \> kubectl описать узлы | findstr "Taint Hostname"
или же
Bash # kubectl описать узлы | egrep "Taint | Hostname"
Эта команда безумно легко запомнить
Вывод выглядит так:
Taints: <none>
Hostname: aks-agentpool-30208295-0
Taints: <none>
Hostname: aks-agentpool-30208295-1
...