Команды и аргументы в подах Kubernetes

В этой статье мы рассмотрим различные сценарии использования команд и аргументов в подах Kubernetes. Итак, начнем!

Выполнение процесса в поде

Когда мы говорим, что приложение работает в поде Kubernetes, мы на самом деле имеем в виду, что данный контейнер упакован и представлен как под.

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

Обычно команда и аргументы, которые мы определяем в пользовательской форме, переопределяют команду и аргументы базового образа контейнера по умолчанию.

В контексте этого мануала мы будем иметь дело с разными способами создания и определения команд и аргументов для контейнера, работающего как под приложения.

Определение команд и аргументов для пода Kubernetes

Чтобы определить аргумент внутри контейнера, мы можем использовать поле command. При определении команд нам нужно передать аргументы. Мы можем передать их команде, используя поле args.

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

apiVersion: v1
kind: Pod
metadata:
  name: demo-cmd
spec:
  containers:
  - name: cmd-arg-demo
    image: debian
    command: ["printenv"]
    args: ["KUBECONFIG"]
  restartPolicy: OnFailure

А теперь давайте применим приведенный выше файл и создадим под: 

kubectl apply -f pod.yaml

Как только мы создадим под, мы можем просмотреть логи пода и конкретного контейнера для поиска результата выполнения команды.

kubectl logs -f demo-cmd

Вывод возвращает значение для выполнения команды. То есть в качестве значения отображается путь к файлу KUBECONFIG.

/home/.kube

1: Использование переменных среды для определения аргументов

Как вариант, мы можем использовать переменные окружения для передачи значений аргументов командам. Давайте посмотрим на приведенный ниже фрагмент кода:

env:
- name: data
  value: "002234-welcome-message"
command: ["/bin/data"]
args: ["$(data)"]

Используя приведенный выше блок кода, мы можем передать значение аргументов с помощью переменной среды. Здесь мы передаем команде аргумент в виде переменной по имени data, значение которой указывается как переменная среды.

Помимо переменных среды, мы также можем аналогичным образом анализировать значение в форме ConfigMap и Secret.

2: Запуск команд в оболочке

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

Этого можно добиться, запустив виртуальную оболочку во время выполнения.

Мы определяем команду для запуска всех указанных команд в поде в оболочке, как показано ниже:

command: ["/bin/sh"]
args: ["-c", "while true; do echo Welcome to JournalDev; sleep 100;done"]

Здесь, в этом примере, мы сказали поду использовать оболочку для запуска сценария BASH, выполняющую несколько команд в целом, например цикл while.

Читайте также: Облачные приложения и Kubernetes: Kubernetes как услуга

Tags:

Добавить комментарий