Maison >Java >javaDidacticiel >Service Kubernetes : un bref exemple d'exécution d'un service avec état à instance unique

Service Kubernetes : un bref exemple d'exécution d'un service avec état à instance unique

巴扎黑
巴扎黑original
2017-07-22 15:21:212121parcourir

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn