Под — это набор контейнеров, совместно использующих сеть, выступающих в качестве базовой единицы развертывания в Kubernetes. Все контейнеры в модуле планируются на одном узле.
Чтобы запустить модуль с использованием образаquay.io/openshiftlabs/simpleservice:0.5.0
контейнера и предоставлением доступа к HTTP API через порт 9876, выполните:
Предупреждение: более старые выпускиkubectl
будут создавать ресурс развертывания в результате предоставленногоkubectl run
примера, в то время как более новые выпуски создают один ресурс модуля. Примеры команд в этом разделе должны по-прежнему работать (при условии, что вы подставите свое собственное имя модуля), но вам нужно будет запуститьkubectl delete deployment sise
в конце этого раздела, чтобы очистить.
В результате выводится результат, аналогичный следующему:
NAME READY STATUS RESTARTS AGE
sise 1/1 Running 0 1m
Если приведенный выше вывод возвращает более длинное имя модуля, обязательно используйте его в следующих примерах (вместо sise
).
Этот образ контейнера включает в себя копию curl
, которая предоставляет дополнительный способ проверки того, что основной процесс веб-службы отвечает (по крайней мере, через локальную сеть):
Этот вызов должен произвести вывод:
{"host": "localhost:9876", "version": "0.5.0", "from": "127.0.0.1"}
Изнутри кластера (например, через kubectl exec
) этот модуль также будет напрямую доступен через связанный с ним IP-адрес модуля 172.17.0.3:
API прокси-сервера kubernetes предоставляет дополнительную возможность для внешних подключений к модулям внутри кластера с помощью curl:
export K8S_API="https://$(kubectl config get-clusters | tail -n 1)"
export API_TOKEN="$(kubectl config view -o jsonpath={.users[-1].user.token})"
export NAMESPACE="default"
export PODNAME="sise"
curl -s -k -H"Authorization: Bearer $API_TOKEN" $K8S_API/api/v1/namespaces/$NAMESPACE/pods/$PODNAME/proxy/info
Очистка:
simpleservice
образ вместе с общим контейнером CentOS:Вы можете проверить созданный модуль, используя ту же команду, что и выше:
Вывод отражает, что есть один pod, но в нем два контейнера:
NAME READY STATUS RESTARTS AGE
twocontainers 2/2 Running 0 36s
Контейнеры, которые совместно используют модуль, могут взаимодействовать с помощью локальной сети.
В этом примере показано, как запустить контейнер оболочки sidecar для доступа и проверки контейнера sise через localhost:
Определите resources
атрибут, чтобы влиять на то, сколько ЦП и/или ОЗУ может использовать контейнер в модуле (в этом примере используется 64 МБ ОЗУ и 0,5 ЦП):
Подкоманда `describe` отображает больше информации о конкретном поде, чем `get`.
Предоставляется довольно много информации, а ограничения ресурсов отображаются в следующих фрагментах:
...
Containers:
sise:
...
Limits:
cpu: 500m
memory: 64Mi
Requests:
cpu: 500m
memory: 64Mi
...
Узнайте больше об ограничениях ресурсов в Kubernetes из документации здесь и здесь .
Подводя итог, можно сказать, что запустить один или несколько контейнеров (вместе) в Kubernetes просто, однако выполнение этого напрямую, как показано выше, имеет серьезное ограничение: вам нужно вручную позаботиться о том, чтобы они работали в случае сбоя. Лучший способ контролировать модули — использовать развертывания, что дает вам гораздо больший контроль над жизненным циклом, включая развертывание новой версии.