web-dev-qa-db-fra.com

Comment configurer un déploiement Kubernetes Multi-Pod

Je souhaite déployer un cluster d'applications en gérant mon déploiement via l'objet de déploiement k8s. La documentation m'a extrêmement confus. Ma mise en page de base comporte les composants suivants qui évoluent indépendamment:

  1. Serveur API
  2. Serveur d'interface utilisateur
  3. Cache Redis
  4. Serveur de tâches programmé/programmé

Techniquement, les 4 ci-dessus appartiennent à des groupes distincts qui sont mis à l'échelle indépendamment.

Mes questions sont:

  1. Dois-je créer pod.yml fichiers et les référencer d’une manière ou d’une autre dans deployment.yml fichier ou un fichier de déploiement peut-il également intégrer des définitions de pod?
  2. La documentation de K8 semble impliquer que la partie spec de Deployment équivaut à définir n pod. Est-ce exact? Et si je veux décrire de manière déclarative les déploiements multi-pod? Ai-je besoin de plusieurs fichiers deployment.yml?
36
Raj

Pagids répond à l'essentiel. Vous devriez créer 4 Deployments pour votre scénario. Chaque déploiement créera un ReplicaSet qui planifie et supervise la collecte de PODs pour le Deployment.

Chaque Deployment nécessitera probablement aussi un Service devant lui pour pouvoir y accéder. Je crée habituellement un seul fichier yaml qui contient Deployment et le Service correspondant. Voici un exemple pour un nginx.yaml que j'utilise:

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
  name: nginx
  labels:
    app: nginx
spec:
  type: NodePort
  ports:
  - port: 80
    name: nginx
    targetPort: 80
    nodePort: 32756
  selector:
    app: nginx
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginxdeployment
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginxcontainer
        image: nginx:latest
        imagePullPolicy: Always
        ports:
        - containerPort: 80

Voici quelques informations supplémentaires pour clarification:

  • Un POD n'est pas une unité évolutive. Un Deployment qui planifie les POD est.
  • Un Deployment est censé représenter un seul groupe de POD remplissant un même objectif.
  • De nombreux Deployments peuvent travailler ensemble dans le réseau virtuel du cluster.
  • Pour accéder à un Deployment pouvant être constitué de nombreux PODs s'exécutant sur différents nœuds, vous devez créer un service.
  • Les déploiements sont censés contenir des services sans état. Si vous devez stocker un état, vous devez plutôt créer StatefulSet (par exemple, pour un service de base de données).
36

Vous pouvez utiliser le Kubernetes référence de l'API pour le déploiement et vous constaterez que le champ spec-> template est de type - PodTemplateSpec avec le commentaire associé ( Le modèle décrit les modules qui seront créés. ), il répond à vos questions. . Vous trouverez bien sûr une description plus détaillée dans le Guide de l'utilisateur du déploiement .

Pour répondre à vos questions...

1) Les Pods sont gérés par le Deployment et leur définition séparée n'a pas de sens, car ils sont créés à la demande par le déploiement. Gardez à l'esprit qu'il pourrait y avoir plus de répliques du même type de pod.

2) Pour chacune des applications de votre liste, vous devez définir un Deployment, ce qui est également utile pour les décomptes de réplicas différents et les déploiements d’applications.

3) vous n'avez pas demandé cela, mais c'est lié - avec un Deployments séparé, chacune de vos applications nécessitera également un dédié - Service pour que les autres puissent y accéder.

12
pagid