Подтвердить что ты не робот

Запустить контейнер kubernetes с определенной командой

Используя флот, я могу указать команду для запуска внутри контейнера при его запуске. Похоже, это и с Кубернетом тоже легко, но я не могу найти ничего, что говорит, как это сделать. Кажется, вам нужно создать контейнер специально для запуска с определенной командой.

Наличие контейнера общего назначения и запуск его с различными аргументами намного проще, чем создание множества различных контейнеров для конкретных случаев или настройка и получение переменных среды.

Можно ли указать команду kubernetes pod для запуска в образ Docker при запуске?

4b9b3361

Ответ 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>