Unter http://kubernetes.io/docs/user-guide/labels/#selecting-sets-of-nodes scheint es möglich zu sein, einen bestimmten Bereich von Pods basierend auf Etiketten auszuwählen. In meinem Fall möchte ich jedoch alle Pods auf einem Knoten auswählen, aber nicht jeden Pod auf dem entsprechenden Knoten kennzeichnen.
Fehlt mir etwas in der Dokumentation oder ist es einfach nicht möglich, nach Knoten auszuwählen? Wenn ich mache:
kubectl --server="<SERVER>" --namespace=<NS> get pods -o wide | head
NAME READY STATUS RESTARTS AGE NODE
Kann einer dieser Header als Selektor verwendet werden? Wenn ja, wie geht das mit Kubectl Bust am wichtigsten? Wie geht das mit der API?
Danke im Voraus
kubernetes
kubectl
Regnoult
quelle
quelle
Antworten:
Wie in der akzeptierten Antwort erwähnt, wird der PR jetzt zusammengeführt und Sie können Pods nach Knoten wie folgt erhalten:
kubectl get pods --all-namespaces -o wide --field-selector spec.nodeName=<node>
quelle
--all-namespaces
wird zuerst alle Pods aus dem gesamten Cluster ziehen und dann nach Knoten filtern? oder werden nur alle Pods von diesem Knoten abgerufen, ohne dass alle Namespaces-Pods stark vom gesamten Cluster abgerufen werden?Beispiel für das Sortieren von Pods nach Knotenname:
kubectl get pods -o wide --sort-by="{.spec.nodeName}"
Beispiel für das Abrufen von Pods auf Knoten mithilfe des Etikettenfilters:
for n in $(kubectl get nodes -l your_label_key=your_label_value --no-headers | cut -d " " -f1); do kubectl get pods --all-namespaces --no-headers --field-selector spec.nodeName=${n} done
oder nach Anzahl der Neustarts
kubectl get pods --sort-by="{.status.containerStatuses[:1].restartCount}"
Beispielfilterung nach Knotenname mit dem Flag --template:
$ kubectl get nodes NAME STATUS AGE ip-10-0-90-30.ec2.internal Ready 2d ip-10-0-90-35.ec2.internal Ready 2d ip-10-0-90-50.ec2.internal Ready,SchedulingDisabled 2d ip-10-0-91-60.ec2.internal Ready 2d ip-10-0-91-65.ec2.internal Ready 2d $kubectl get pods --template '{{range .items}}{{if eq .spec.nodeName "ip-10-0-90-30.ec2.internal"}}{{.metadata.name}}{{"\n"}}{{end}}}{{end}}' filebeat-pezch app-5xole node-exporter-6kfs8 prometheus-0 sso-359976856-wu8zt
quelle
Mit dem folgenden Befehl können Sie auch alle Pods und Knoten abfragen
kubectl get pods -o wide --all-namespaces | grep <YOUR-NODE>
quelle
kubectl describe node <node>
zeigt alle nicht terminierten Pods an, die auf diesem Knoten ausgeführt werdenquelle
Was Sie möchten, wird auf der serverseitigen Kubernetes-API wie folgt unterstützt:
curl --cacert ca.crt --cert apiserver.crt --key apiserver.key https://<server>:<port>/api/v1/namespaces/<namespace>/pods?fieldSelector=spec.nodeName%3Dsomenodename
Diese Feldauswahloption ist jedoch noch
kubectl
nicht integriert: https://github.com/kubernetes/kubernetes/pull/50140quelle
Ich habe den gleichen Prozess mit dem Go-Client durchlaufen und er deckt einige Verknüpfungen auf, die die CLI verwendet.
func doNodesHavePods(clientset *kubernetes.Clientset) error { nodeLabelSelector := "nodelabel=interesting_nodes" nodes, err := clientset.CoreV1().Nodes().List(metav1.ListOptions{LabelSelector: nodeLabelSelector}) if err != nil { return err } nodeNames := []string{} for _, node := range nodes.Items { nodeNames = append(nodeNames, node.Name) } // --all-namespaces -> listing and looping on namespaces namespaces, err := clientset.CoreV1().Namespaces().List(metav1.ListOptions{}) if err != nil { return err } for _, namespace := range namespaces.Items { for _, name := range nodeNames { // pods need a namespace to be listed. pods, err := clientset.CoreV1().Pods(namespace.Name).List(metav1.ListOptions{FieldSelector: "spec.nodeName=" + name}) if err != nil { println("%v", err) } for _, pod := range pods.Items { fmt.Println(pod.Namespace, pod.Name) } } } return nil }
Ich habe festgestellt, dass viele der Fragen, die ich stellen muss, für die CLI zu komplex werden, was ein großartiges Arbeitstier ist. Wenn Sie jedoch lernen, den Go-Client zu verwenden, können Sie die erste Antwort erhalten, nach der Sie suchen vertiefen Sie sich auch tiefer in Fragen, die diese Antworten aufwerfen.
quelle