Запустить контейнер kubernetes с определенной командой
Используя флот, я могу указать команду для запуска внутри контейнера при его запуске. Похоже, это и с Кубернетом тоже легко, но я не могу найти ничего, что говорит, как это сделать. Кажется, вам нужно создать контейнер специально для запуска с определенной командой.
Наличие контейнера общего назначения и запуск его с различными аргументами намного проще, чем создание множества различных контейнеров для конкретных случаев или настройка и получение переменных среды.
Можно ли указать команду kubernetes pod для запуска в образ Docker при запуске?
Ответы
Ответ 1
Я провожу 45 минут в поисках этого. Тогда я отправляю вопрос об этом и нахожу решение 9 минут спустя.
Есть подсказка о том, что я хотел в примере с Кассандрой. command
строка под изображением:
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
Несмотря на поиск решения, было бы неплохо, если бы в проекте Kubernetes было что-то очевидное, где я мог бы увидеть все возможные варианты для различных файлов конфигурации (pod, service, replication controller).
Ответ 2
для тех, кто хочет использовать команду с параметрами, вам необходимо предоставить массив
например
command: [ "bin/bash", "-c", "mycommand" ]
а также
command:
- "bin/bash"
- "-c"
- "mycommand"
Ответ 3
Чтобы ответить на вопрос Дерека Махара в комментариях выше:
Какова цель аргументов, если можно указать все аргументы с помощью команды?
Докеры могут иметь только точку входа или только CMD или оба вместе.
Если используется вместе, то все, что находится в CMD, передается команде ENTRYPOINT в качестве аргументов i.e.
ENTRPOINT ["print"]
CMD ["hello", "world"]
Итак, в Kubernetes, когда вы указываете команду i.e.
command: ["print"]
Он переопределит значение Entrypoint в файле Docker контейнера.
Если вы укажете только аргументы, то эти аргументы будут переданы любой команде в контейнерной точке входа.
Ответ 4
Чтобы указать команду, которую модуль kubernetes запускает в образе Docker при запуске, нам нужно включить поля command и args в файл yaml для передачи команды и аргументов. Например,
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"]
Ответ 5
В дополнение к принятому ответу вы можете использовать переменные со значениями из секретов в командах следующим образом:
command: ["/some_command","-instances=$(<VARIABLE_NAME>)"]
env:
- name: <VARIABLE_NAME>
valueFrom:
secretKeyRef:
name: <secret_name>
key: <secret_key>