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!