Как я могу перечислить taints на моих узлах?

Документы хороши для объяснения того, как установить вред на узле или удалить его. И я могу использовать kubectl describe node чтобы получить подробное описание одного узла, включая его недостатки. Но что, если я забыл название созданного мукоза или какие узлы я установил? Могу ли я перечислить все мои узлы с какими-либо вредными воздействиями на них?

Ответ 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
...