Neste documento oficial, ele pode executar o comando em um arquivo de configuração yaml:
apiVersion: v1
kind: Pod
metadata:
name: hello-world
spec: # specification of the pod’s contents
restartPolicy: Never
containers:
- name: hello
image: "ubuntu:14.04"
env:
- name: MESSAGE
value: "hello world"
command: ["/bin/sh","-c"]
args: ["/bin/echo \"${MESSAGE}\""]
Se eu quiser executar mais de um comando, como fazer?
fonte
command
vez que substitui o DockerfileEntrypoint
;)Minha preferência é multilinha os argumentos, isso é mais simples e fácil de ler. Além disso, o script pode ser alterado sem afetar a imagem, basta reiniciar o pod. Por exemplo, para um dump do mysql, a especificação do contêiner pode ser algo assim:
A razão para isso funcionar é que yaml na verdade concatena todas as linhas após o "-" em uma, e sh executa uma longa string "echo started; ls ...; echo done;".
fonte
command: ['/bin/bash', '-c']
args:
- exec &> /path/to/redirected/program.output;
`python / program.py`` --key1 = val1` `--key2 = val2`` --key3 = val3`Se você deseja usar um Volume e um ConfigMap, pode montar os dados do ConfigMap como um script e, em seguida, executar esse script:
Isso limpa um pouco as especificações do pod e permite scripts mais complexos.
fonte
Se você deseja evitar a concatenação de todos os comandos em um único comando com
;
ou&&
também pode obter verdadeiros scripts de várias linhas usando um heredoc:Isso é útil para executar scripts bash existentes, mas tem a desvantagem de exigir uma instância de shell interno e externo para configurar o heredoc.
fonte
IMHO, a melhor opção é usar os escalares de bloco nativos do YAML . Especificamente neste caso, o bloco de estilo dobrado .
Ao invocar,
sh -c
você pode passar argumentos para seu contêiner como comandos, mas se quiser separá-los elegantemente com novas linhas, use o bloco de estilo dobrado , para que YAML saiba como converter novas linhas em espaços em branco, concatenando efetivamente os comandos.Um exemplo completo de trabalho:
fonte
Veja como você pode passar vários comandos e argumentos em um arquivo YAML com kubernetes:
Bloco completo de contêineres do arquivo yaml:
fonte
Apenas para trazer outra opção possível, os segredos podem ser usados conforme são apresentados ao pod como volumes:
Exemplo secreto:
Extrato de Yaml:
Sei que muitos argumentarão que não é para isso que os segredos devem ser usados, mas é uma opção.
fonte