3 votes

Kubernetes - mes 2 déploiements d'applications sont différents seulement dans un "args" - puis-je avoir le Service qui fera référence à tous les deux?

Je pense avoir un cas d'utilisation intéressant, donc j'aimerais entendre les conseils des personnes plus expérimentées. J'ai mon App ("ads") qui fonctionne dans Kubernetes sans aucun problème. Il tourne sur le port 9000. Il a des arguments qui ont son nom d'instance (serverName) et dans la liste des serveurs, il référence également tous les autres serveurs (servers) afin de les exécuter en mode compagnon (companion mode) requis pour des raisons de performance. Veuillez noter que ce n'est PAS un SERVEUR WEB et que les simples répliques ne fonctionneront PAS pour ce que nous devons accomplir, qui est d'avoir plusieurs serveurs ADS fonctionnant en mode compagnon, où le serveur principal envoie les données en cache à un autre serveur afin que ce serveur dispose également des données récentes et puisse prendre le relais en cas de défaillance.

Extrait du premier fichier YAML de l'ADS :

- Dans serverName, nous spécifions le nom de l'instance du serveur - Dans l'argument servers, nous spécifions l'adresse régulière du serveur ADS avec son port.

args:
....
  "-serverName", "ads"
  "-servers", "{ { ads , ads-test:9000 }, { ads2 , ads-test2:9000}"]
ports:
  - containerPort: 9000
..................
    kind: Service
    metadata:
      name: ads-test
    spec:
      type: ClusterIP
      ports:
      - protocol: TCP
        port: 9000
      selector:
        app: ads-test

Ainsi, dans la liste des arguments, nous spécifions le Service à travers lequel nous devrions accéder à cette instance ADS en utilisant la connexion TCP (et non la connexion HTTP) avec ads-test:9000. Étant donné que c'est une application conteneurisée, je ne savais pas quoi d'autre je pourrais spécifier comme adresse de serveur à part "NomDuService:port", car le développement de cette application ne prévoyait pas une application conteneurisée.

Par conséquent, le deuxième fichier YAML devrait être différent seulement avec les informations de serverName. Et j'ai ajouté un Service supplémentaire ads-test2

args:
....
  "-serverName", "ads2"
  "-servers", "{ { ads , ads-test:9000 }, { ads2 , ads-test2:9000}"]
ports:
  - containerPort: 9000
..................
    kind: Service
    metadata:
      name: ads-test2
    spec:
      type: ClusterIP
      ports:
      - protocol: TCP
        port: 9000
      selector:
        app: ads-test2

Étant donné qu'il s'agit en réalité de la même App, mais avec seulement un argument différent dans sa configuration (serverName), je me demandais s'il y avait un moyen de simplifier ceci et d'utiliser un seul Service afin d'accéder aux deux serveurs ADS, mais d'avoir cette configuration dans l'argument server qui active en fait ce type de mode compagnon nécessaire pour des raisons de performance pour l'utilisation de différents serveurs mais pour avoir des informations à jour sur les deux serveurs.

Merci

2voto

Non, vous ne pouvez pas avoir un seul service pour deux pods logiquement différents. Normalement, le service effectue l'équilibrage de charge entre les pods répliqués. Ainsi, la demande de l'utilisateur sur vos pods sera automatiquement routée vers l'un des pods par le service automatiquement. Donc, dans votre cas, vous ne voulez pas que cela se produise. La demande d'annonces peut se faire vers le pod du serveur ads2. La manière recommandée est d'avoir deux services différents pour vos pods ou vous pouvez avoir plusieurs conteneurs à l'intérieur d'un seul pod et avoir un seul service dans ce cas. Et l'argument pour le nom du serveur peut être pris de l'environnement.
Env:
clé:
valeur:

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X