Maison >Java >javaDidacticiel >Service Kubernetes : un bref exemple d'exécution d'un service avec état à instance unique
Cible
Créez un PV dans votre environnement
Créez un Déploiement de MySQl
Exposez MySQL à d'autres pods du cluster en tant que noms DNS
Démarrer précédemment
Vous aviez besoin d'un cluster Kubernetes et d'un outil de ligne de commande kubectl capable de se connecter au cluster. Si vous n'avez pas de cluster, vous pouvez utiliser Minikube pour en créer un.
Nous allons créer un PV (PersistentVolume) pour le stockage des données. Cliquez ici pour afficher les types PV pris en charge. Ce guide utilisera GCEPersistentDisk pour démontrer, mais tout type PV fonctionnera normalement. GCEPersistentDisk ne fonctionne que sur Google Compute Engine (GCE).
Créez le disque dans votre environnement
Dans Google Compute Engine, exécutez :
gcloud compute disks create --size=20GB mysql-disk
Créez ensuite un PV pointant vers le disque mysql que vous venez de créer. Ce qui suit est un fichier de configuration pour créer un PV, pointant vers le disque GCE mentionné ci-dessus :
apiVersion: v1 kind: PersistentVolume metadata: name: mysql-pv spec: capacity: storage: 20Gi accessModes:- ReadWriteOnce gcePersistentDisk: pdName: mysql-disk fsType: ext4
Notez que la ligne pdName: mysql-disk correspond l'environnement GCE ci-dessus Créez le nom du disque. Si vous souhaitez créer des PV dans d'autres environnements, vous pouvez consulter les volumes persistants pour plus de détails.
Créer un PV :
kubectl create -f https://k8s.io/docs/tasks/run-application/gce-volume.yaml
Déployer MySQL
Vous pouvez créer un service avec état via le déploiement Kubernetes, puis utiliser PVC (PersistentVolumeClaim) pour vous connecter au PV existant. Par exemple, le fichier YAML suivant décrit un déploiement qui exécute MySQL et utilise PVC. Le fichier définit un volume monté sur /var/lib/mysql et crée un PVC qui nécessite une taille de volume de 20 Go.
Remarque : Le mot de passe est défini dans le fichier de configuration YAML, ce qui n'est pas sûr. Consultez Kubernetes Secrets pour des solutions plus sécurisées.
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. Déployez le contenu dans le fichier YAML.
kubectl create -f https://k8s.io/docs/tasks/run-application/mysql-deployment.yaml
2. Afficher les informations de déploiement.
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. Affichez les pods créés par Déploiement.
kubectl get pods -l app=mysql NAME READY STATUS RESTARTS AGE mysql-63082529-2z3ki 1/1 Running 0 3m
4. Vérifiez PV.
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. Vérifiez le 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.
Accéder à l'instance MySQL
Précédent Le Le fichier YAML crée un service qui permet aux autres pods du cluster d'accéder à la base de données. L'option de service clusterIP:None entraîne la résolution directe du nom DNS du service en adresse IP du pod. C'est la meilleure façon de l'utiliser lorsque votre service ne dispose que d'un seul Pod et que vous ne prévoyez pas d'augmenter le nombre de Pods.
Exécutez un client Mysql pour vous connecter au service Mysql :
kubectl run -it --rm --image=mysql:5.6 mysql-client -- mysql -h <pod-ip> -ppassword
La commande ci-dessus en crée un nouveau dans le cluster Pod, qui exécute un client MySQL et est connecté au serveur Mysql servi ci-dessus. S'il se connecte avec succès, cela signifie que la base de données MySQL avec état est opérationnelle et opérationnelle.
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>
Mise à jour
La mise à jour de l'image du déploiement ou d'autres parties peut également être done Utilisez la commande kubectl apply comme d'habitude pour terminer. Voici les points à noter lors de l'utilisation d'applications avec état :
Ne développez pas l'application. Cette application est uniquement destinée aux applications singleton. Le PV suivant ne peut être mappé qu’à un seul pod. Pour les applications avec état en cluster, consultez la documentation StatefulSet.
Utiliser la stratégie : tapez : Recreate dans le document de configuration YAML du déploiement. Cela indiquera à Kubernetes de ne pas utiliser de mise à jour continue. Étant donné que la mise à jour progressive ne fonctionnera pas, plusieurs pods ne seront pas exécutés en même temps. La stratégie Recreate supprimera le Pod précédent lors de la création d'un nouveau Pod avec une configuration mise à jour.
Supprimer le déploiement
Supprimer l'objet de déploiement par son nom :
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
文章转自:
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!