Введение
В этом лабораторном занятии (lab) вы узнаете, как использовать команду Kubernetes exec для выполнения команд внутри контейнера, запущенного в поде (pod) Kubernetes. Вы начнете с простых примеров и постепенно перейдете к более сложным сценариям.
Запустите кластер Minikube
Перед созданием ресурсов вам нужен работающий кластер Kubernetes. Minikube - это легковесная среда Kubernetes, которая запускается на вашем локальном компьютере.
Перейдите в рабочую директорию:
Откройте терминал и перейдите в папку проекта по умолчанию:
cd /home/labex/projectЗапустите Minikube:
Запустите Minikube для инициализации кластера Kubernetes:
minikube start- Эта команда настраивает однодневный кластер Kubernetes на вашем локальном компьютере.
- В зависимости от производительности вашей системы Minikube может потребовать несколько минут для запуска.
Проверьте, что Minikube запущен:
Проверьте статус кластера Minikube:
minikube status- Ищите компоненты, такие как
kubeletиapiserver, перечисленные какRunning(работающие). - Если кластер не запущен, запустите команду
minikube startснова.
- Ищите компоненты, такие как
Если у вас возникли проблемы при запуске Minikube, используйте minikube delete для сброса среды при необходимости.
Исследуйте команду kubectl exec
Команда kubectl exec используется для выполнения команд непосредственно внутри контейнера в поде (pod). Она особенно полезна для отладки и проверки контейнерных сред.
Выполните следующую команду, чтобы просмотреть доступные параметры для kubectl exec:
kubectl exec -h
Вы увидите следующий вывод:
Execute a command in a container.
Examples:
## Get output from running the 'date' command from pod mypod, using the first container by default
kubectl exec mypod -- date
## Get output from running the 'date' command in ruby-container from pod mypod
kubectl exec mypod -c ruby-container -- date
## Switch to raw terminal mode; sends stdin to 'bash' in ruby-container from pod mypod
## and sends stdout/stderr from 'bash' back to the client
kubectl exec mypod -c ruby-container -i -t -- bash -il
## List contents of /usr from the first container of pod mypod and sort by modification time
## If the command you want to execute in the pod has any flags in common (e.g. -i),
## you must use two dashes (--) to separate your command's flags/arguments
## Also note, do not surround your command and its flags/arguments with quotes
## unless that is how you would execute it normally (i.e., do ls -t /usr, not "ls -t /usr")
kubectl exec mypod -i -t -- ls -t /usr
## Get output from running 'date' command from the first pod of the deployment mydeployment, using the first container by default
kubectl exec deploy/mydeployment -- date
## Get output from running 'date' command from the first pod of the service myservice, using the first container by default
kubectl exec svc/myservice -- date
Выполнение команды в контейнере
На этом шаге вы узнаете, как выполнять команды в контейнере, запущенном в поде (pod).
Сначала создайте развертывание (deployment) с одним репликой и контейнером Nginx:
kubectl create deployment nginx --image=nginx --replicas=1Подождите, пока под (pod) перейдет в готовое состояние:
kubectl wait --for=condition=Ready pod -l app=nginxИспользуйте команду
kubectl execдля выполнения команды внутри контейнера Nginx:kubectl exec -it POD_NAME -- /bin/bashЗамените
POD_NAMEименем пода, созданного на шаге 1. Вы можете получитьPOD_NAMEс помощью командыkubectl get pod -l app=nginx.
Выполнение команды в конкретном контейнере
На этом шаге вы узнаете, как выполнять команду в конкретном контейнере, запущенном в поде (pod), содержащем несколько контейнеров.
Создайте под с двумя контейнерами: Nginx и BusyBox:
cat << EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: name: nginx-busybox spec: containers: - name: nginx image: nginx - name: busybox image: busybox command: - sleep - "3600" EOFПодождите, пока под перейдет в готовое состояние:
kubectl wait --for=condition=Ready pod nginx-busyboxИспользуйте команду
kubectl execдля выполнения команды внутри контейнера BusyBox:kubectl exec nginx-busybox -c busybox -- ls /bin
Выполнение команды с использованием TTY
На этом шаге вы узнаете, как выполнять команду с использованием терминалного интерфейса (tty) в контейнере.
Используйте команду
kubectl execс параметрами-itдля выполнения команды с использованием tty:kubectl exec -it nginx-busybox -- /bin/shПосле входа в оболочку контейнера выполните команду:
echo "Hello, world!"Выйдите из оболочки контейнера:
exit
Выполнение команды с использованием переменных окружения
На этом шаге вы узнаете, как выполнять команду с использованием переменных окружения внутри контейнера.
Создайте развертывание (deployment) с одним репликой и контейнером Nginx с переменной окружения:
kubectl run nginx-env --image=nginx --env="MY_VAR=my-value"Подождите, пока под (pod) перейдет в готовое состояние:
kubectl wait --for=condition=Ready pod -l run=nginx-envИспользуйте команду
kubectl execдля выполнения команды внутри контейнера Nginx, которая выводит значение переменной окружения:kubectl exec nginx-env -- sh -c 'echo $MY_VAR'Замените
nginx-envименем пода, созданного на шаге 1.
Резюме
Поздравляем! Вы успешно завершили лабораторную работу по использованию команды exec в Kubernetes! В рамках этой лабораторной работы вы научились использовать команду kubectl exec для выполнения команд внутри контейнеров, запущенных в подах (pods) Kubernetes. Вы также узнали, как выполнять команды в конкретных контейнерах, выполнять команды с использованием терминалного интерфейса (tty) и выполнять команды с переменными окружения. Эти навыки являются важными для отладки проблем в кластере Kubernetes.


