web-dev-qa-db-fra.com

Comment pouvons-nous créer des dépendances de service à l'aide de kubernetes

J'ai 2 services. Un contenant 2 répliques pod pour une application web qui dépend d'un autre service backend ayant pod (2 répliques) pour les conteneurs MySQL.

L'application Web utilise des variables d'environnement définies par le service de base de données backend. J'ai tous les json dans le même répertoire.

Existe-t-il un moyen d'exprimer les dépendances afin que kubectl crée (et exécute) toujours des pods et des services backend avant de démarrer le service d'application Web? J'ai utilisé kubedeam pour créer le cluster.

8
Gaurav Kumar

Je peux suggérer deux solutions:

Tout d'abord, pour attacher un conteneur d'initialisation aux serveurs Web qui attend que MySQL soit opérationnel. Le déploiement serait quelque chose comme ceci:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: web
  replicas: 2
  template:
    metadata:
      labels:
        app: web
    spec:
      initContainers:
      - name: init-wait
        image: Alpine
        command: ["sh", "-c", "for i in $(seq 1 300); do nc -zvw1 mysql 3306 && exit 0 || sleep 3; done; exit 1"]
      containers:
      - name: web
        image: web-server
        ports:
        - containerPort: 80
          protocol: TCP

Il utilise netcat pour essayer de démarrer une connexion TCP au service mysql sur le port 3306 toutes les 3 secondes. Une fois qu'il parvient à se connecter, le conteneur init se termine et le serveur Web démarre normalement.

La deuxième option consiste à utiliser Mirantis AppController . Il vous permet de créer des objets de dépendance selon vos besoins entre les déploiements de serveur et de base de données. Consultez leur dépôt pour une documentation complète.

3
Ignacio Millán

Utilisez une sonde de préparation ou un conteneur d'initialisation, reportez-vous à ici

0
Kun Li