0
votes

Comment correctement configurer l'environnement dans le cluster Kubettes?

J'ai une application de démarrage à ressort avec deux profils, Dev et Prod, mon fichier Docker est le suivant:

containers:
  - name: myapp
    image: myregistry.azurecr.io/myapp:0.1.7
    imagePullPolicy: "Always"
    ports:
    - containerPort: 8080
      name: myapp
    readinessProbe:
      httpGet:
        path: /actuator/health
        port: 8080
      timeoutSeconds: 3
      periodSeconds: 20
      failureThreshold: 3


0 commentaires

4 Réponses :


3
votes

Vous pouvez remplacer une image code> d'une image code> à l'aide de la commande code> code> d'une spécification KubeNettes POD. De même, vous pouvez remplacer cmd code> à l'aide de la propriété args code> (voir aussi La documentation ): xxx pré>

alternativement, pour fournir un niveau d'abstraction plus élevé, vous pouvez écrire votre propre script d'entrée qui lit le profil d'application à partir d'une variable d'environnement: p> xxx pré>

alors, vous pouvez simplement transmettre cette variable d'environnement dans votre POD: P>

containers:
- name: myapp
  image: myregistry.azurecr.io/myapp:0.1.7
  imagePullPolicy: "Always"
  env:
  - name: APPLICATION_CONTEXT
    value: prod
  ports:
  - containerPort: 8080
    name: myapp


0 commentaires

2
votes

Plutôt plutôt que de mettre printemps.profiles.active code> dans dockerfile dans le point d'entrée.

Utiliser configmaps et Application.Property . P>

Votre point d'entrée dans DockerFile devrait ressembler à: p>

containers:
  - name: myapp
    image: myregistry.azurecr.io/myapp:0.1.7
    imagePullPolicy: "Always"
    command: ["java","-cp","app:app/lib/*","com.my.Application","--spring.config.additional-location=/config/application-dev.properties"]
    ports:
    - containerPort: 8080
      name: myapp
    volumeMounts:
    - name: myapp-application-config
      mountPath: "/config"
      readOnly: true
    volumes:
    - name: myapp-application-config
      configMap:
        name: myapp-config
        items:
        - key: application-dev.properties
          path: application-dev.properties
    readinessProbe:
      httpGet:
        path: /actuator/health
        port: 8080
      timeoutSeconds: 3
      periodSeconds: 20
      failureThreshold: 3


0 commentaires

1
votes

Il y a beaucoup Plusieurs manières pour définir des valeurs de configuration à ressort. Avec Certaines règles , vous pouvez utiliser des variables d'environnement ordinaires pour spécifier des valeurs de propriété individuelles. Vous pouvez voir si vous pouvez l'utiliser au lieu d'avoir un contrôle de profil de ressort distinct.

Utilisation de variables d'environnement comporte deux avantages ici: cela signifie que vous (ou votre équipe Devops) peut modifier les paramètres de déploiement sans recompiler l'application; et si vous utilisez un gestionnaire de déploiement comme Helm où certains détails tels que les noms d'hôte sont intrinsèquement imprévisibles, cela vous permet de spécifier des valeurs qui ne peut pas être connu avant de déployer du temps. p>

Par exemple, disons que vous avez une dépendance REDIS: P>

containers:
  - name: myapp
    env:
      - name: CACHE_REDIS_URL
        value: "redis://myapp-redis.default.svc.cluster.local:6379/0"


0 commentaires

0
votes

Un moyen de le faire consiste à utiliser nuage de printemps Kubettes strong> comme décrit ici HTTPS: // DOCS. printemps.io/spring-cloud-kubernettes/docs/current/reeference/html/index.html#configmap-propertysource

Vous pouvez définir vos profils dans une configmap comme ci-dessous P>

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-name
  labels:
    app: deployment-name
spec:
  replicas: 1
  selector:
    matchLabels:
      app: deployment-name
  template:
    metadata:
      labels:
        app: deployment-name
    spec:
        containers:
        - name: container-name
          image: your-image
          env:
          - name: SPRING_PROFILES_ACTIVE
            value: "development"


0 commentaires