Wie man ein Replikaset in Kubernetes erstellt

Ein Replikasatz stellt sicher, dass die angegebenen Replikate von Pods immer ausgeführt werden. Es kann als Ersatz für den Replikationscontroller betrachtet werden. Der Hauptunterschied zwischen den beiden besteht darin, dass ReplicaSets die Verwendung eines so genannten „Label Selector“ ermöglichen. Replicaset ist einer der Kubernetes-Controller. Er wird verwendet, um sicherzustellen, dass wir eine bestimmte Anzahl von Pod-Replikaten haben, die immer einsatzbereit sind.

Die Vorlage des Replikasets sieht wie folgt aus.

apiVersion: apps/v1 
kind: ReplicaSet   
Metadata: 
  name: some-name
  labels:
    app: some-App
    tier: some-Tier
Spec: 
  replicas: 3 # Here we tell k8s how many replicas we want
  Selector: # A label selector field. 
    matchLabels:
      tier: some-Tier
    matchExpressions:
      - {key: tier, operator: In, values: [some-Tier]} #set-based operators
  template:
    metadata:
      labels:
        app: some-App
        tier: someTier
    Spec: 
      Containers:

In diesem Artikel sehen wir, wie ein Replikasatz erstellt wird und wie er Hülsen mit Labels identifiziert.

Vorraussetzungen

Kubernetes Cluster mit mindestens 1 Worker-Knoten.
Wenn Sie lernen möchten, wie man einen Kubernetes-Cluster erstellt, klicken Sie hier. Dieser Leitfaden hilft Ihnen bei der Erstellung eines Kubernetes-Clusters mit 1 Master- und 2 Worker-Knoten auf AWS Ubuntu 18.04 EC2-Instanzen.

Was wir tun werden

  • Ein Replikaset erstellen

Ein Replikaset erstellen

Erstellen Sie eine neue Datei und fügen Sie die folgende Definition des Replikatsatzes hinzu.

vim my-replica-set.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: nginx-proxy
  labels:
    app: nginx-proxy
    tier: frontend
spec:
  # modify replicas according to your case
  replicas: 3
  selector:
    matchLabels:
      tier: frontend
  template:
    metadata:
      labels:
        tier: frontend
    spec:
      containers:
      - name: nginx
        image: nginx

meine-Replikat

Die obige Objektdefinition wird drei Replikate der Hülse erstellen.

Überprüfen Sie zunächst den vorhandenen Replikasatz mit dem folgenden Befehl.

kubectl get replicaset

Um ein Replikat zu erstellen, führen Sie den folgenden Befehl aus.

kubectl create -f my-replica-set.yml
kubectl get replicaset
kubectl get pods

Replikat erstellen -

In der obigen Abbildung sehen Sie die Details der Teiche, die nach der Erstellung eines Replikasatzes erstellt wurden.

Erstellen Sie nun eine einzelne Hülse mit den gleichen Beschriftungen, die wir zuvor in der Definition des Replikasatzes angegeben haben.

vim my-test-pod.yml
apiVersion: v1
kind: Pod
metadata:
  name: pod1
  labels:
    tier: frontend
spec:
  containers:
  - name: nginx
    image: nginx

my-test-pod

Wenn wir diesen nun erstellen, wird er nicht erstellt.

Führen Sie die folgenden Befehle aus, um die vorherigen Pods zu erstellen und einen neuen Pod zu erstellen.

kubectl get pods
kubectl create -f my-test-pod.yml
kubectl get pods

pod-matching-Etikett erstellen

Im obigen Screenshot können Sie sehen, dass auch nach dem Erstellen eines neuen Pods dieser sich im Beendigungszustand befindet. Der Grund dafür ist, dass wir bereits ein Replikat-Set mit Replikaten als 3 haben und wir einen neuen Pod separat mit den gleichen Labels erstellen. Da die Labels und Selektoren mit dem Replikat-Satz übereinstimmen, wird der Pod gelöscht, um die angegebene Anzahl von Replikaten beizubehalten, die wir in der Definition des Replikat-Satzes angegeben haben.

Sie können die Details des Replikatsatzes mit den folgenden Befehlen abrufen.

kubectl get replicaset
kubectl describe replicaset nginx-proxy

Beschreiben-Replikaset

Im obigen Screenshot sehen Sie, dass ein Replikat-Satz die Pod löscht, um die Anzahl der Replikate beizubehalten.

Lassen Sie uns nun einen Pod ohne Beschriftung mit der folgenden Pod-Definition erstellen.

vim my-test-pod-no-label.yml
apiVersion: v1
kind: Pod
metadata:
  name: pod1
spec:
  containers:
  - name: nginx
    image: nginx

my-test-pod-without-Label

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

kubectl get pods
kubectl create -f my-test-pod-no-label.yml
kubectl get pods

create-pod-with-no-label

Im obigen Screenshot sehen Sie, dass ein neuer Pod erstellt wurde und der Replikat-Satz den neuen Pod diesmal nicht gelöscht hat.

Der Grund dafür ist, dass der neue Port kein Label hat, so dass ein Replikasatz nicht mit ihm übereinstimmt und nicht als Teil des Replikasatzes betrachtet wird.

Versuchen wir nun, einen Port zu erstellen, der zu dem Replikat-Satz gehört.

Führen Sie die folgenden Befehle aus, um einen Pod zu löschen.

kubectl get pods
kubectl delete pod nginx-proxy-6gc46
kubectl get pods

delete-pod-from-replicaset

Im obigen Screenshot können Sie sehen, dass selbst nach dem Löschen eines Pods, der zu dem Replikat-Satz gehört, ein neuer Pod erstellt wurde. Ein neuer Pod wurde erstellt, um die Anzahl der Replikate beizubehalten, die wir in der Definition des Replikatsatzes angegeben haben.

Wenn Sie Ihr Replikat-Set nicht mehr benötigen, können Sie es mit den folgenden Befehlen löschen.

kubectl get replicaset
kubectl delete replicaset nginx-proxy
kubectl get replicaset
kubectl get pods

lösche-Replikaset

Da der Pod, den wir separat erstellt haben, nicht Teil des Replikatsatzes ist, müssen wir ihn separat löschen.

Verwenden Sie die Befehle. Um den Pod zu löschen, der nicht zum Replica Set gehört.

kubectl get pods
kubectl delete pod pod1
kubectl get pods

delete-pod-with-no-label

Schlussfolgerung

In diesem Artikel haben wir gesehen, wie man einen einfachen Replikasatz erstellt. Wir haben auch gesehen, wie ein Pod Teil eines Replikat-Satzes wird, wenn die Beschriftung mit dem im Replikat-Satz verfügbaren Selektor übereinstimmt.

Das könnte Dich auch interessieren …