0
votes

Édition Scripted d'un pod en cours d'exécution Kubettes

J'ai un pod qui est défini par un déploiement et la définition de YAML est stockée dans mon codeBase. Il y a du temps quand j'aimerais avoir un montage en volume configuré pour la gousse / conteneur, il serait donc formidable d'avoir un script pouvant permettre cela. Je sais que je peux utiliser kubectl edit pour ouvrir un éditeur et faire ceci (puis redémarrez la POD), mais il serait plus applicable si notre DevS pourrait simplement faire quelque chose comme ./ Notre_scripts / activation_mount.sh .

Une option serait de simplement avoir une copie de la définition de YAML et de créer / d'appliquer ce que tout en supprimant l'autre, mais il serait plus agréable de modifier l'existence en place.

Y a-t-il un moyen d'y parvenir? Est-ce que kubectl edit a des indicateurs qui me manquent à y parvenir?


1 commentaires

Vous pouvez utiliser la commande kubectl KUBERNETES.IO/DOCS/TASKS/RUN-AppLication/...


3 Réponses :


1
votes

Vous souhaitez déployer une pod différemment dans différentes conditions d'environnement. Helm vous permet de le faire. Vous pouvez avoir un modèle pour la POD, puis passer des valeurs qui changent en fonction de l'environnement ou des conditions que vous souhaitez exécuter.

import yaml
document = """
apiVersion: v1
kind: Pod
metadata:
  name: myapp
  labels:
    name: myapp
spec:
  containers:
  - name: myapp
    image: nginx
"""

volumemount = True
podSpec = yaml.load(document)
if volumemount:
    volumeSpecDoc = """
    volumes:
     - configMap:
         name:  app-config
       name : app-config-volume
    """
    volumeSpec = yaml.load(volumeSpecDoc, Loader=yaml.FullLoader)

    podSpec['spec'].update(volumeSpec)
    containerVolumeMountDoc = """
    volumeMounts:
        - name: app-config-volume
          mountPath: /etc/config
    """
    containerVolumeMount = yaml.load(containerVolumeMountDoc,Loader=yaml.FullLoader)
    original = podSpec['spec']['containers'][0]
    original.update(containerVolumeMount)
    podSpec['spec']['containers'][0] = original


print yaml.dump(podSpec)


0 commentaires

2
votes

Utilisez Gestion déclarative des objets Kubettes utilisant Kustomize . Vous avez déjà un déploiement.yaml code> manifeste dans votre codeBase. Maintenant, déplacez-le à base / déploiement.yaml code> et créez également un superpositions / avec montage / déploiement-with-mont.yaml code> que remplace em> avec un mont quand vous le souhaitez.

Pour déployer la base, vous utilisez P>

kubectl apply -k overlays/with-mount/deployment-with-mount.yaml


0 commentaires

1
votes

J'aimerais élaborer une réponse faite par @jonas.

L'une des commandes "avancées" pour kubectl est kustomize . Il construit une cible de kustomisation à partir d'un répertoire ou d'une URL distante. Disponible auprès du V1.14 Il prend en charge quelques types de fonctionnalités

  • Générer des ressources d'autres sources
  • Réglage des champs transversaux pour les ressources
  • Composition et personnalisation des collections de ressources

    Je sais que je peux utiliser kubectl éditer pour ouvrir un éditeur et faire ceci (puis redémarrez la POD), mais il serait plus applicable si notre Devs pourrait simplement faire quelque chose comme . /our_scripts/enable_mount.sh.

    " Composition et personnalisation des collections de ressources " On ressemble à celui que vous pouvez considérer dans ce contexte.

    C'est peut-être une excédente si vous aimez faire apparaître une podie unique (fichier YAML unique); Cependant, il est utile que vous devez faire quelque chose qui est un peu plus complexe :) xxx

    si vous exécutez kubectl kustomize

    (ici dir signifie que votre kustomization.yaml est assis dans et dans mon exemple, c'est juste un . ), vous pouvez voir que kubectl propose avec les nouveaux objets à appliquer : xxx

    Comme vous pouvez le deviner, c'est simplement un "concat" de

    • pod_with_volume.yaml
    • Service.YAML

      La seule particularité de cette méthode est que le fichier que vous faisant référence doit être dans ou sous le répertoire, le kustomization.yaml est assis.

      comme Vous pouvez voir, ./ Notre_scripts / activer_mount.sh peut simplement appeler correctement formaté kubectl kustomize

      J'espère que vous trouverez cette réponse utile :)


0 commentaires