Pods

by moiseevrus

Под — это набор контейнеров, совместно использующих сеть, выступающих в качестве базовой единицы развертывания в Kubernetes. Все контейнеры в модуле планируются на одном узле.

Чтобы запустить модуль с использованием образаquay.io/openshiftlabs/simpleservice:0.5.0 контейнера и предоставлением доступа к HTTP API через порт 9876, выполните:

kubectl run sise --image=quay.io/openshiftlabs/simpleservice:0.5.0 --port=9876
Предупреждение: более старые выпуски kubectlбудут создавать ресурс развертывания в результате предоставленного kubectl runпримера, в то время как более новые выпуски создают один ресурс модуля. Примеры команд в этом разделе должны по-прежнему работать (при условии, что вы подставите свое собственное имя модуля), но вам нужно будет запустить kubectl delete deployment siseв конце этого раздела, чтобы очистить.
Проверьте, работает ли модуль:
kubectl get pods

В результате выводится результат, аналогичный следующему:

NAME READY STATUS RESTARTS AGE
sise 1/1 Running 0 1m

Если приведенный выше вывод возвращает более длинное имя модуля, обязательно используйте его в следующих примерах (вместо sise).

Этот образ контейнера включает в себя копию curl, которая предоставляет дополнительный способ проверки того, что основной процесс веб-службы отвечает (по крайней мере, через локальную сеть):

kubectl exec sise -t -- curl -s localhost:9876/info

Этот вызов должен произвести вывод:

{"host": "localhost:9876", "version": "0.5.0", "from": "127.0.0.1"}

Изнутри кластера (например, через kubectl exec) этот модуль также будет напрямую доступен через связанный с ним IP-адрес модуля 172.17.0.3:

kubectl describe pod sise | grep IP:

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

Очистка:

kubectl delete pod,deployment sise
Создание из манифеста

 

Вы также можете создать модуль из файла манифеста. В этом случае pod запускает уже известный simpleserviceобраз вместе с общим контейнером CentOS:
kubectl apply -f https://raw.githubusercontent.com/openshift-evangelists/kbe/main/specs/pods/pod.yaml

Вы можете проверить созданный модуль, используя ту же команду, что и выше:

kubectl get pods

Вывод отражает, что есть один pod, но в нем два контейнера:

NAME                        READY   STATUS    RESTARTS   AGE
twocontainers               2/2     Running   0          36s

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

В этом примере показано, как запустить контейнер оболочки sidecar для доступа и проверки контейнера sise через localhost:

kubectl exec twocontainers -t -- curl -s localhost:9876/info

Определите resourcesатрибут, чтобы влиять на то, сколько ЦП и/или ОЗУ может использовать контейнер в модуле (в этом примере используется 64 МБ ОЗУ и 0,5 ЦП):

kubectl create -f https://raw.githubusercontent.com/openshift-evangelists/kbe/main/specs/pods/constraint-pod.yaml

Подкоманда `describe` отображает больше информации о конкретном поде, чем `get`.

kubectl describe pod constraintpod

Предоставляется довольно много информации, а ограничения ресурсов отображаются в следующих фрагментах:

...
Containers:
sise:
...
Limits:
cpu: 500m
memory: 64Mi
Requests:
cpu: 500m
memory: 64Mi
...

Узнайте больше об ограничениях ресурсов в Kubernetes из документации здесь и здесь .

Чтобы очистить и удалить все оставшиеся модули, запустите:
kubectl delete pod twocontainers
kubectl delete pod constraintpod

Подводя итог, можно сказать, что запустить один или несколько контейнеров (вместе) в Kubernetes просто, однако выполнение этого напрямую, как показано выше, имеет серьезное ограничение: вам нужно вручную позаботиться о том, чтобы они работали в случае сбоя. Лучший способ контролировать модули — использовать развертывания, что дает вам гораздо больший контроль над жизненным циклом, включая развертывание новой версии.

You may also like

Leave a Comment