Heim > Java > javaLernprogramm > 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

巴扎黑
Freigeben: 2017-07-22 15:21:21
Original
2132 Leute haben es durchsucht

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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

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

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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.
Nach dem Login kopieren

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.
Nach dem Login kopieren

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
Nach dem Login kopieren

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>
Nach dem Login kopieren

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
Nach dem Login kopieren

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

gcloud compute disks delete mysql-disk
Nach dem Login kopieren

 

文章转自:

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage