Labels und Selectors in Kubernetes

Labels sind nichts anderes als Schlüssel-Werte-Paare, die Kubernetes-Objekten wie Pods, Services usw. zugeordnet sind. Labels können zum Organisieren und Auswählen von Kubernetes-Objekten verwendet werden. Labels können den Objekten bei der Erstellung beigefügt werden und können jederzeit geändert werden. Wir können mehrere Labels zu Kubernetes-Objekten hinzufügen.

Selektoren werden von den Benutzern verwendet, um einen Satz von Objekten auszuwählen. Der Label-Selektor ist das Kerngruppierungsprimitiv in Kubernetes. Kubernetes API unterstützt zwei Arten von Selektoren

  1. Auf Gleichberechtigung basierende Selektoren:
    Dies ermöglicht die Filterung nach Schlüssel und Wert, wobei übereinstimmende Objekte allen angegebenen Labels genügen sollten.
  2. Set-basierte Selektoren:
    Dies ermöglicht das Filtern von Schlüsseln nach einem Satz von Werten.

Um mehr über Labels und Selektoren zu erfahren, klicken Sie hier.

In diesem Artikel werden wir einen Pod mit Etiketten erstellen und die Anfragen des Dienstes mit Hilfe des Selectors an ihn umleiten. Wir werden auch Hol- und Löschoperationen an Pod und Dienst unter Verwendung von Label/Selector auf der Befehlszeile durchführen.

Vorraussetzungen

  1. Kubernetes Cluster mit mindestens 1 Worker-Knoten.
    Wenn Sie lernen möchten, wie man einen Kubernetes-Cluster erstellt, klicken Sie hier. Dieses Handbuch hilft Ihnen, einen Kubernetes-Cluster mit 1 Master- und 2 Worker-Knoten auf AWS Ubuntu 18l04 EC2-Instanzen zu erstellen.

Was wir tun werden

  1. Pod und Dienst mit Labels und Selektor erstellen
  2. Etiketten verstehen

Erstellen Sie einen Pod und einen Dienst mit Labels und Selektoren

Um einen Pod mit Labels zu erstellen, erstellen Sie eine neue Datei und fügen Sie den folgenden Inhalt darin ein.

vim my-lable-demo-pod.yml
apiVersion: v1
kind: Pod
metadata:
  name: label-demo-pod
  labels:
    environment: test
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80

label-demo-pod

Um einen Dienst mit einem Selektor zu erstellen, erstellen Sie eine Datei mit der folgenden Dienstdefinition.

vim my-selector-demo-service.yml
apiVersion: v1
kind: Service
metadata:
  name: selector-demo-service
  namespace: default
  labels:
    environment: test
    app: nginx
spec:
  externalTrafficPolicy: Local
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  selector:    
    app: nginx
  type: NodePort

Selektor-Demo-Dienst

Um einen Pod zu erstellen, führen Sie den folgenden Befehl aus.

kubectl create -f my-lable-demo-pod.yml
kubectl get pods

create-pod-with-label

Um einen Dienst zu erstellen, führen Sie den folgenden Befehl aus.

kubectl create -f my-selector-demo-service.yml
kubectl get service

schaffe-Dienst-mit-Auswahl

Um zu überprüfen, ob der Label Selector funktioniert, versuchen Sie nun, auf den Dienst auf NodeIP:NodePort zuzugreifen.

Hier ist die Ip meines Knotens 106.210.138.189 und der Dienst ist auf Port=30385 exponiert.

dienst-zeigt-auf-den-Pod-mit-Matching-Etikett

Da wir mit dem von uns erstellten Dienst auf den Nginx-Pod zugreifen können, bedeutet dies, dass Label und Selector funktionieren.

Labels verstehen

Jetzt können wir verschiedene Operationen mit dem Pod und dem Service durchführen, die wir mit dem Label erstellt haben.

Um Pods zu erhalten, die mit einem Label unserer Wahl übereinstimmen, können wir „–selector“ im Befehl wie folgt eingeben.

kubectl get pods --selector environment=test
kubectl get pods --selector app=nginx

get-pods-with-matching-labels

Wir können auch „-l“ anstelle von „–selector“ verwenden, um die Pods mit dem Etikett unserer Wahl zu erhalten.

kubectl get pods -l environment=test
kubectl get pods -l environment=prod

Alternative-zur-Auswahl-Befehl

Wir können sogar die Lösch-Pod-Operation durchführen, indem wir das Label angeben. Pods, die dem Label entsprechen, können mit den folgenden Befehlen gelöscht werden.

kubectl get pods
kubectl delete pods -l environment=test
kubectl get pods

delete-pods-with-matching-label

So wie wir Pods löschen könnten, die mit den Labels übereinstimmen, können wir auch den Dienst löschen.

Um den Dienst zu löschen, der mit einem Label übereinstimmt, verwenden Sie den folgenden Befehl. Auch wenn es keinen Dienst gibt, der mit dem angegebenen Label im Befehl übereinstimmt, wird kein Löschvorgang durchgeführt.

kubectl get service
kubectl delete service -l environemt=test
kubectl delete service -l environment=test
kubectl get service

Lösch-Dienst-mit-Abgleich-Etikett

Schlussfolgerung

In diesem Artikel haben wir einen Pod mit Labels erstellt und einen Dienst erstellt und auf diejenigen Pods verwiesen, die mit dem Label übereinstimmen. Wir haben auch gesehen, wie mit den Labels übereinstimmende Pods und Dienste gelöscht werden können.

Das könnte Dich auch interessieren …