Отримання доступу до оболонки запущеного контейнера
Ця сторінка показує, як використовувати kubectl exec
для отримання доступу до оболонки запущеного контейнера.
Перш ніж ви розпочнете
Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:
Отримання доступу до оболонки контейнера
У цьому завданні ви створите Pod, який має один контейнер. Контейнер виконує образ nginx. Ось файл конфігурації для Podʼа:
apiVersion: v1
kind: Pod
metadata:
name: shell-demo
spec:
volumes:
- name: shared-data
emptyDir: {}
containers:
- name: nginx
image: nginx
volumeMounts:
- name: shared-data
mountPath: /usr/share/nginx/html
hostNetwork: true
dnsPolicy: Default
Створіть Pod:
kubectl apply -f https://k8s.io/examples/application/shell-demo.yaml
Перевірте, що контейнер працює:
kubectl get pod shell-demo
Отримайте доступ до оболонки запущеного контейнера:
kubectl exec --stdin --tty shell-demo -- /bin/bash
Примітка:
Подвійне тире (--
) відокремлює аргументи, які ви хочете передати команді, від аргументів kubectl.У своїй оболонці виведіть список кореневої теки:
# Виконайте це всередині контейнера
ls /
У своїй оболонці експериментуйте з іншими командами. Ось деякі приклади:
# Ви можете виконати ці приклади команд всередині контейнера
ls /
cat /proc/mounts
cat /proc/1/maps
apt-get update
apt-get install -y tcpdump
tcpdump
apt-get install -y lsof
lsof
apt-get install -y procps
ps aux
ps aux | grep nginx
Редагування головної сторінки nginx
Знову перегляньте файл конфігурації вашого Podʼа. Pod має том emptyDir
, і контейнер монтує цей том в /usr/share/nginx/html
.
У своїй оболонці створіть файл index.html
у теці /usr/share/nginx/html
:
# Виконайте це всередині контейнера
echo 'Hello shell demo' > /usr/share/nginx/html/index.html
У своїй оболонці надішліть GET-запит до сервера nginx:
# Виконайте це в оболонці всередині вашого контейнера
apt-get update
apt-get install curl
curl http://localhost/
Результат покаже текст, який ви написали в файл index.html
:
Hello shell demo
Коли ви закінчите з вашою оболонкою, введіть exit
.
exit # Щоб вийти з оболонки в контейнері
Виконання окремих команд в контейнері
У звичайному вікні команд виведіть змінні оточення в запущеному контейнері:
kubectl exec shell-demo -- env
Експериментуйте з виконанням інших команд. Ось деякі приклади:
kubectl exec shell-demo -- ps aux
kubectl exec shell-demo -- ls /
kubectl exec shell-demo -- cat /proc/1/mounts
Відкриття оболонки, коли в Podʼі є більше одного контейнера
Якщо в Podʼі є більше одного контейнера, використовуйте --container
або -c
для зазначення контейнера в команді kubectl exec
. Наприклад, припустимо, у вас є Pod на ім’я my-pod, і в Podʼі є два контейнери з іменами main-app та helper-app. Наступна команда відкриє оболонку до контейнера main-app.
kubectl exec -i -t my-pod --container main-app -- /bin/bash
Примітка:
Короткі опції-i
і -t
такі ж, як довгі опції --stdin
і --tty
Що далі
- Прочитайте про kubectl exec