Я пытаюсь перечислить все узлы, которые установлены как незапланированные в операторе operator-sdk.Обычно (до 1.12) это означает, что у них установлено spec.unscheduleable
.Поэтому я попробовал это:
nodes := &corev1.NodeList{}
opts := &client.ListOptions{}
if err := opts.SetFieldSelector("spec.unschedulable=true"); err != nil {
reqLogger.Info("Failed to set field selector")
}
Что является ошибкой:
2019-04-23T10:19:39.761-0700 ERROR kubebuilder.controller Reconciler error {"controller": "node-controller", "request": "/nodename", "error": "Index with name field:spec.unschedulable does not exist"}
Я запутался в этом, потому что селектор поля работает из kubectl:
kubectl get nodes --field-selector="spec.unschedulable=true"
Помимо этой проблемы, я заметил, что после версии 1.1.12 поле spec.unscheduleable было устарело в пользу TaintNodeByCondition.Это еще более усложняет ситуацию, потому что теперь я действительно не думаю, что могу использовать кого-либо из поля fieldselector, потому что я не верю (если я не ошибаюсь?), Что вы все равно можете использовать fieldselector с порками.
Итак, мой вопрос - как я могу эффективно перечислить все испорченные / незапланированные узлы в моем кластере, особенно при использовании operator-sdk
ОБНОВЛЕНИЕ:
Мне удалось решить селектор полейпроблема с использованием вызова v1meta.ListOptions, например, так:
nodes := &corev1.NodeList{}
opts := &client.ListOptions{
Raw: &metav1.ListOptions{
FieldSelector: "spec.unschedulable=true",
},
}
Однако я до сих пор не знаю, как это сделать с порчей, поэтому я отредактировал вопрос и оставлю его открытым