Heim  >  Artikel  >  Java  >  Kubernetes-Dienst – ein kurzes Beispiel für die Ausführung eines zustandsbehafteten Einzelinstanzdiensts

Kubernetes-Dienst – ein kurzes Beispiel für die Ausführung eines zustandsbehafteten Einzelinstanzdiensts

巴扎黑
巴扎黑Original
2017-07-22 15:21:212079Durchsuche

Ziel

Erstellen Sie ein PV in Ihrer Umgebung
Erstellen Sie eine Bereitstellung von MySQl
MySQl für andere Pods im Cluster als DNS-Namen verfügbar machen

Zuvor starten

Sie benötigten einen Kubernetes-Cluster und ein kubectl-Befehlszeilentool, das eine Verbindung zum Cluster herstellen kann. Wenn Sie keinen Cluster haben, können Sie mit Minikube einen erstellen.
Wir erstellen ein PV (PersistentVolume) zur Datenspeicherung. Klicken Sie hier, um die unterstützten PV-Typen anzuzeigen. In diesem Handbuch wird GCEPersistentDisk zur Demonstration verwendet, aber jeder PV-Typ funktioniert normal. GCEPersistentDisk funktioniert nur auf Google Compute Engine (GCE).

Erstellen Sie die Festplatte in Ihrer Umgebung

Führen Sie in Google Compute Engine Folgendes aus:

gcloud compute disks create --size=20GB mysql-disk

Erstellen Sie dann eine PV, die auf die gerade erstellte MySQL-Festplatte verweist. Das Folgende ist eine Konfigurationsdatei zum Erstellen einer PV, die auf die oben erwähnte GCE-Festplatte verweist:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv
spec:
  capacity:
    storage: 20Gi
  accessModes:- ReadWriteOnce
  gcePersistentDisk:
    pdName: mysql-disk
    fsType: ext4

Beachten Sie, dass die Zeile pdName: mysql-disk übereinstimmt Erstellen Sie in der oben genannten GCE-Umgebung den Namen der Festplatte. Wenn Sie PVs in anderen Umgebungen erstellen möchten, können Sie sich für weitere Details Persistent Volumes ansehen.
PV erstellen:

kubectl create -f https://k8s.io/docs/tasks/run-application/gce-volume.yaml

MySQL bereitstellen

Sie können über Kubernetes Deployment einen zustandsbehafteten Dienst erstellen und dann PVC (PersistentVolumeClaim) verwenden, um eine Verbindung zum vorhandenen PV herzustellen. Die folgende YAML-Datei beschreibt beispielsweise eine Bereitstellung, die MySQL ausführt und PVC verwendet. Die Datei definiert ein in /var/lib/mysql gemountetes Volume und erstellt einen PVC, der eine Volume-Größe von 20 GB erfordert.
Hinweis: Das Passwort ist in der YAML-Konfigurationsdatei definiert, die nicht sicher ist. Weitere sichere Lösungen finden Sie unter Kubernetes Secrets.

apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  ports:- port: 3306
  selector:
    app: mysql
  clusterIP: None---apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
spec:
  accessModes:- ReadWriteOnce
  resources:
    requests:
      storage: 20Gi---apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: mysql
spec:
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:      - image: mysql:5.6name: mysql
        env:
          # Use secret in real usage- name: MYSQL_ROOT_PASSWORD
          value: password
        ports:- containerPort: 3306  name: mysql
        volumeMounts:- name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim

1 Stellen Sie den Inhalt in der YAML-Datei bereit.

kubectl create -f https://k8s.io/docs/tasks/run-application/mysql-deployment.yaml

2. Bereitstellungsinformationen anzeigen.

kubectl describe deployment mysql

 Name:                 mysql
 Namespace:            default
 CreationTimestamp:    Tue, 01 Nov 2016 11:18:45 -0700
 Labels:               app=mysql
 Selector:             app=mysql
 Replicas:             1 updated | 1 total | 0 available | 1 unavailable
 StrategyType:         Recreate
 MinReadySeconds:      0
 OldReplicaSets:       <none>
 NewReplicaSet:        mysql-63082529 (1/1 replicas created)
 Events:
   FirstSeen    LastSeen    Count    From                SubobjectPath    Type        Reason            Message   ---------    --------    -----    ----                -------------    --------    ------            -------
   33s          33s         1        {deployment-controller }             Normal      ScalingReplicaSet Scaled up replica set mysql-63082529 to 1

3. Zeigen Sie die durch die Bereitstellung erstellten Pods an.

kubectl get pods -l app=mysql

 NAME                   READY     STATUS    RESTARTS   AGE
 mysql-63082529-2z3ki   1/1       Running   0          3m

4.

 kubectl describe pv mysql-pv

 Name:            mysql-pv
 Labels:          <none>
 Status:          Bound
 Claim:           default/mysql-pv-claim
 Reclaim Policy:  Retain
 Access Modes:    RWO
 Capacity:        20Gi
 Message:    
 Source:
     Type:        GCEPersistentDisk (a Persistent Disk resource in Google Compute Engine)
     PDName:      mysql-disk
     FSType:      ext4
     Partition:   0 ReadOnly:    false
 No events.

5. Überprüfen Sie das PVC.

 kubectl describe pvc mysql-pv-claim

 Name:         mysql-pv-claim
 Namespace:    default
 Status:       Bound
 Volume:       mysql-pv
 Labels:       <none>
 Capacity:     20Gi
 Access Modes: RWO
 No events.

Zugriff auf MySQL-Instanz

Vorherige Die Die YAML-Datei erstellt einen Dienst, der anderen Pods im Cluster den Zugriff auf die Datenbank ermöglicht. Die Dienstoption „clusterIP:None“ bewirkt, dass der DNS-Name des Dienstes direkt in die IP-Adresse des Pods aufgelöst wird. Dies ist die beste Möglichkeit, es zu verwenden, wenn Ihr Dienst nur über einen Pod verfügt und Sie nicht vorhaben, die Anzahl der Pods zu erhöhen.
Führen Sie einen MySQL-Client aus, um eine Verbindung zum MySQL-Dienst herzustellen:

kubectl run -it --rm --image=mysql:5.6 mysql-client -- mysql -h <pod-ip> -ppassword

Der obige Befehl erstellt einen neuen Client im Cluster-Pod, der einen MySQL-Client ausführt und mit dem oben bereitgestellten MySQL-Server verbunden ist. Wenn die Verbindung erfolgreich hergestellt wird, bedeutet dies, dass die zustandsbehaftete MySQL-Datenbank erfolgreich eingerichtet und ausgeführt wird.

Waiting for pod default/mysql-client-274442439-zyp6i to be running, status is Pending, pod ready: falseIf you don't see a command prompt, try pressing enter.mysql>

Update

Das Aktualisieren des Deployment-Images oder anderer Teile kann ebenfalls erfolgen done Verwenden Sie zum Abschluss wie gewohnt den Befehl kubectl apply. Folgendes ist bei der Verwendung von Stateful-Anwendungen zu beachten:

Erweitern Sie die Anwendung nicht. Diese Anwendung ist nur für Singleton-Anwendungen. Das folgende PV kann nur einem Pod zugeordnet werden. Informationen zu geclusterten zustandsbehafteten Anwendungen finden Sie in der StatefulSet-Dokumentation.
Verwenden Sie die Strategie: Typ: Neu erstellen im YAML-Konfigurationsdokument der Bereitstellung. Dadurch wird Kubernetes angewiesen, kein rollierendes Update zu verwenden. Da ein fortlaufendes Update nicht funktioniert, werden nicht mehrere Pods gleichzeitig ausgeführt. Die Strategie „Neu erstellen“ löscht den vorherigen Pod, wenn ein neuer Pod mit aktualisierter Konfiguration erstellt wird.

Bereitstellung löschen

Bereitstellungsobjekt nach Name löschen:

kubectl delete deployment,svc mysql
kubectl delete pvc mysql-pv-claim
kubectl delete pv mysql-pv

另外,如果你使用的是GCE disk,还需要删除对应的disk:

gcloud compute disks delete mysql-disk

 

文章转自:

Das obige ist der detaillierte Inhalt vonKubernetes-Dienst – ein kurzes Beispiel für die Ausführung eines zustandsbehafteten Einzelinstanzdiensts. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn