如何识别Kubernetes中的可调度节点

Adr*_*uat 5 kubernetes

我想(以编程方式)获取我的kubernetes集群中所有可调度节点的列表。

我相当确定这曾经可以通过查看.spec.unschedulable完整的输出kubectl get nodes(使用JSON或模板输出)来实现,但是现在看来此信息在 scheduler.alpha.kubernetes.io/taints键中,这很难解析,而且感觉不像正确的地方。

还有其他方法可以找到此信息吗?我是否缺少明显的东西?我目前正在使用1.5.1版。

更新:我几乎可以使用一些Go模板到达那里:

$ kubectl get nodes -o go-template='{{range .items}}{{with $x := index .metadata.annotations "scheduler.alpha.kubernetes.io/taints"}}{{.}}{{end}}{{end}}'
[{"key":"dedicated","value":"master","effect":"NoSchedule"}]
Run Code Online (Sandbox Code Playgroud)

但这给我留下了无法在模板中解析的JSON斑点,而且我仍然必须反转结果并取出节点名称。

更新2:显然,不可计划的节点应已.spec.unschedulable设置。似乎并非总是如此。不知道这是由于我的错误还是误解。

小智 2

这是一个现在可以运行的 go 文本/模板,即spec.taintsGA:

{{/* scehdulable.gotmpl */}}
{{- range .items }}
  {{- $taints:="" }}
  {{- range .spec.taints }}
    {{- if eq .effect "NoSchedule" }}
      {{- $taints = print $taints .key "," }}
    {{- end }}
  {{- end }}
  {{- if not $taints }}
    {{- .metadata.name}}{{ "\n" }}
  {{- end }}
{{- end }}
Run Code Online (Sandbox Code Playgroud)
{{/* scehdulable.gotmpl */}}
{{- range .items }}
  {{- $taints:="" }}
  {{- range .spec.taints }}
    {{- if eq .effect "NoSchedule" }}
      {{- $taints = print $taints .key "," }}
    {{- end }}
  {{- end }}
  {{- if not $taints }}
    {{- .metadata.name}}{{ "\n" }}
  {{- end }}
{{- end }}
Run Code Online (Sandbox Code Playgroud)

紧凑型:

kubectl get no -o go-template-file=./schedulable.gotmpl
kind-worker
kind-worker2
Run Code Online (Sandbox Code Playgroud)