En utilisant la flotte, je peux spécifier une commande à exécuter à l'intérieur du conteneur lors de son démarrage. Il semble que cela devrait également être facilement possible avec Kubernetes, mais je n'arrive pas à trouver quoi que ce soit qui dise comment. Il semble que vous devez créer le conteneur spécifiquement pour lancer avec une certaine commande.
Avoir un conteneur à usage général et le lancer avec des arguments différents est beaucoup plus simple que de créer de nombreux conteneurs différents pour des cas spécifiques, ou de définir et d'obtenir des variables d'environnement.
Est-il possible de spécifier la commande exécutée par un pod kubernetes dans l'image Docker au démarrage?
Je passe 45 minutes à chercher ça. Ensuite, je poste une question à ce sujet et trouve la solution 9 minutes plus tard.
Il y a un indice sur ce que je voulais dans le Cassandra exemple . La ligne command
sous l'image:
id: cassandra
kind: Pod
apiVersion: v1beta1
desiredState:
manifest:
version: v1beta1
id: cassandra
containers:
- name: cassandra
image: kubernetes/cassandra
command:
- /run.sh
cpu: 1000
ports:
- name: cql
containerPort: 9042
- name: thrift
containerPort: 9160
env:
- key: MAX_HEAP_SIZE
value: 512M
- key: HEAP_NEWSIZE
value: 100M
labels:
name: cassandra
Malgré la recherche de la solution, ce serait bien s'il y avait un endroit évident dans le projet Kubernetes où je pouvais voir toutes les options possibles pour les différents fichiers de configuration (pod, service, contrôleur de réplication).
pour ceux qui cherchent à utiliser une commande avec des paramètres, vous devez fournir un tableau
par exemple
command: [ "bin/bash", "-c", "mycommand" ]
ou aussi
command:
- "bin/bash"
- "-c"
- "mycommand"
Pour répondre à la question de Derek Mahar dans les commentaires ci-dessus:
Quel est le but des arguments si l'on pouvait spécifier tous les arguments en utilisant la commande?
Les Dockerfiles peuvent avoir un Entrypoint uniquement ou un CMD uniquement ou les deux ensemble.
S'ils sont utilisés ensemble, tout ce qui est dans CMD est passé à la commande dans ENTRYPOINT comme arguments, c'est-à-dire.
ENTRPOINT ["print"]
CMD ["hello", "world"]
Donc, dans Kubernetes lorsque vous spécifiez une commande, c'est-à-dire.
command: ["print"]
Il remplacera la valeur d'Entrypoint dans le Dockerfile du conteneur.
Si vous spécifiez uniquement des arguments, ces arguments seront transmis à la commande qui se trouve dans le point d'entrée du conteneur.
Afin de spécifier la commande qu'un pod kubernetes exécute dans l'image Docker au démarrage, nous devons inclure les champs de commande et d'arguments dans le fichier yaml pour que la commande et les arguments soient passés. Par exemple,
apiVersion: v1
kind: Pod
metadata:
name: command-demo
labels:
purpose: demo-command
spec:
containers:
- name: command-demo-container
image: ubuntu
command: ["/bin/sh"]
args: ["-c", "while true; do echo hello; sleep 10;done"]
En plus de la réponse acceptée, vous pouvez utiliser des variables avec des valeurs de secrets dans les commandes comme suit:
command: ["/some_command","-instances=$(<VARIABLE_NAME>)"]
env:
- name: <VARIABLE_NAME>
valueFrom:
secretKeyRef:
name: <secret_name>
key: <secret_key>