Создание модулей Kubernetes и управление ими в Linux
Создание, просмотр и удаление модулей в Kubernetes
В этом руководстве мы научимся создавать поды Kubernetes и управлять ими. Сначала мы начнем с того, что такое Pod в Kubernetes и как работает Pod. Далее мы кратко рассмотрим типы модулей Kubernetes. А затем мы увидим, как создать новый под и как просмотреть информацию о поде из командной строки. Наконец, мы узнаем, как удалить модуль, когда он больше не нужен.
Что такое Pod в Kubernetes?
В Kubernetes модули — это наименьшие развертываемые вычислительные единицы, которые вы можете создавать и контролировать. Под — это набор из одного или нескольких контейнеров с общим хранилищем и сетевыми ресурсами, а также набор правил запуска контейнеров.
Содержимое модуля всегда размещается, планируется совместно и выполняется в одной и той же среде. Под представляет собой «логический хост» конкретного приложения: он включает в себя один или несколько тесно связанных контейнеров приложений.
С точки зрения Docker, Pod эквивалентен набору контейнеров Docker с общими пространствами имен и томами файловой системы.
Типы модулей Kubernetes
В кластере Kubernetes есть два типа подов.
- POD с одним контейнером. Наиболее частым вариантом использования Kubernetes является подход «один контейнер на под». в этом сценарии рассматривайте Pod как оболочку одного контейнера; Kubernetes поддерживает поды, а не контейнеры напрямую.
- Несколько контейнеров POD: Модуль может инкапсулировать приложение, состоящее из множества тесно связанных контейнеров, которым необходимо совместно использовать ресурсы. Эти контейнеры группируются вместе, образуя единую сервисную единицу, и эти контейнеры будут взаимодействовать друг с другом.
Как работает ПОД?
Каждый модуль предназначен для выполнения одного экземпляра приложения. Вы можете использовать несколько модулей, по одному для каждого экземпляра, если вам необходимо расширить свое приложение по горизонтали. Обычно это называется репликацией в Kubernetes. Ресурс рабочей нагрузки и его контроллер обычно создают реплицированные модули Pod и управляют ими в группе.
Конечная цель Kubernetes — развернуть приложение в виде контейнеров на наборе машин, который в кластере Kubernetes называется рабочим узлом.
Kubernetes не запускает контейнеры непосредственно в узле, а контейнеры инкапсулируются как Pod, который представляет собой отдельный экземпляр приложения.
Кластер Кубернетес
В кластере Kubernetes узел состоит из модулей, а модуль — из контейнеров. Например, у вас есть единственный экземпляр приложения, работающий в одном контейнере, инкапсулированном подом.
Если количество пользователей, обращающихся к приложению, увеличивается, вам необходимо масштабировать ваше приложение. В этом случае вам может потребоваться развернуть дополнительные экземпляры, чтобы разделить нагрузку.
Для масштабирования приложения вам необходимо развернуть дополнительный новый под в узле с тем же приложением. Если нагрузка увеличивается дальше и текущий узел не имеет пропускной способности, вам потребуется дополнительный узел для раскрутки подов с тем же контейнером приложения.
Аналогично, для уменьшения масштаба вам необходимо удалить существующий под.
Надеюсь, вы получили общее представление о подах Kubernetes. Давайте теперь посмотрим, как создавать поды и управлять ими в Kubernetes.
Прежде чем начать, убедитесь, что в вашей системе установлен Kubernetes. По следующим ссылкам приведены инструкции по настройке развертывания кластера Kubernetes с одним узлом и несколькими узлами в Linux.
- Как установить Kubernetes с помощью Minikube в CentOS Linux
- Установить кластер Kubernetes с помощью Kubeadm в RHEL, CentOS, AlmaLinux, Rocky Linux
После установки Kubernetes вы можете приступить к созданию подов.
Обычно вам не нужно создавать поды напрямую, даже одноэлементные поды. Вместо этого создайте их, используя ресурсы рабочей нагрузки, такие как Развертывание или Задание. Развертывание предоставляет декларативные обновления для модулей Pod и ReplicaSets.
Создать развертывание
Создайте образец развертывания, используя существующий образ echoserver. Это простой HTTP-сервер, и мы можем открыть его через порт 8080
, используя опцию --port
.
Образ контейнера — это файл, который обертывает программу и все ее программные зависимости в двоичные данные. Образы контейнеров — это независимые исполняемые пакеты программного обеспечения, которые делают весьма конкретные предположения относительно среды выполнения.
В этой статье мы рассмотрим все демонстрации в кластере с одним узлом.
Вы можете узнать подробности узла, выполнив приведенную ниже команду от имени пользователя root
.
kubectl get nodes
Пример вывода:
NAME STATUS ROLES AGE VERSION
ostechnix Ready Master 25h v1.22.3
Получить информацию об узле
Теперь разверните пример приложения под названием "hello-ostechnix", используя приведенную ниже команду. Вы можете назвать его по своему усмотрению.
kubectl create deployment hello-ostechnix --image=k8s.gcr.io/echoserver:1.10
Пример вывода:
deployment.apps/hello-ostechnix created
[root@ostechnix ~]#
Развертывание создано. Проверьте его, используя команду ниже.
kubectl get deployments
Пример вывода:
NAME READY UP-TO-DATE AVAILABLE AGE
hello-ostechnix 1/1 1 1 85s
Развертывание доступа
Чтобы получить доступ к этому развертыванию как к услуге, вам необходимо представить его как услугу. Используйте приведенную ниже команду, чтобы открыть развертывание на порту 8080
.
kubectl expose deployment hello-ostechnix --type=NodePort --port=8080
Пример вывода:
service/hello-ostechnix exposed
Используйте команду ниже, чтобы получить URL-адрес предоставленной службы.
minikube service hello-ostechnix --url
Пример вывода:
http://192.168.181.131:30525
URL-адрес службы
Скопируйте URL-адрес и вставьте его в свой браузер. В нем будут перечислены сведения о развернутом приложении.
Просмотр сведений о развернутом приложении в браузере
Убедитесь, что порт 30525
разрешен на вашем маршрутизаторе или брандмауэре. Если этот порт заблокирован, вы не сможете просмотреть информацию о модуле в браузере.
Удалить развертывание
Сначала удалите службу hello-ostechnix с помощью команды:
kubectl delete services hello-ostechnix
Пример вывода:
service "hello-ostechnix" deleted
Затем удалите развертывание «hello-ostechnix»:
kubectl delete deployment hello-ostechnix
Пример вывода:
deployment.apps "hello-ostechnix" deleted
После удаления развертывания модуль, связанный с приложением, будет закрыт. Для завершения завершения потребуется несколько секунд.
kubectl get pods
Пример вывода:
NAME READY STATUS RESTARTS AGE
hello-ostechnix-5d4cf4df75-jlwff 1/1 Terminating 0 57m
После завершения развертывания приложение больше не будет доступно.
kubectl get pods
Пример вывода:
No resources found in default namespace.
Запуск модулей с изображениями
Мы можем использовать команду «kubectl run
» для создания и запуска приложения в модуле.
kubectl run <POD name> --image=<image name>
Здесь имя модуля может быть любым, а имя образа должно быть конкретным, которое будет доступно в Docker Hub или любом локальном репозитории.
Давайте создадим Pod с образом Nginx.
kubectl run ostechnix-nginx --image=nginx
Пример вывода:
pod/ostechnix-nginx created
Был создан модуль под названием «ostechnix-nginx». Вы можете проверить статус модуля с помощью приведенной ниже команды.
kubectl get pods
Пример вывода:
NAME READY STATUS RESTARTS AGE
ostechnix-nginx 1/1 Running 0 4m20s
Вы можете получить дополнительную информацию, например, где работает модуль и IP-адрес модуля, используя опцию «wide
».
kubectl get pods -o wide
Пример вывода:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
ostechnix-nginx 1/1 Running 0 38m 172.17.0.6 ostechnix <none> <none>
Полную информацию о POD можно получить с помощью команды «kubectl описать
».
kubectl describe pod ostechnix-nginx
Эта команда предоставит вам полную информацию о POD, такую как сведения о контейнере и его состояниях, а также сведения о событиях, произошедших с момента создания Pod.
Name: ostechnix-nginx
Namespace: default
Priority: 0
Node: ostechnix/192.168.181.131
Start Time: Thu, 03 Feb 2022 01:40:48 -0800
Labels: run=ostechnix-nginx
Annotations: <none>
Status: Running
IP: 172.17.0.6
IPs:
IP: 172.17.0.6
Containers:
ostechnix-nginx:
Container ID: docker://29eeb0392247aef193d6dff0138f8ef132dfb6359d8e67c3a5e4a21d7e259989
Image: nginx
Image ID: docker-pullable://nginx@sha256:2834dc507516af02784808c5f48b7cbe38b8ed5d0f4837f16e78d00deb7e7767
Port: <none>
Host Port: <none>
State: Running
Started: Thu, 03 Feb 2022 01:40:54 -0800
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-ggvk6 (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
kube-api-access-ggvk6:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
ConfigMapOptional: <nil>
DownwardAPI: true
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 7m26s default-scheduler Successfully assigned default/ostechnix-nginx to ostechnix
Normal Pulling 7m24s kubelet Pulling image "nginx"
Normal Pulled 7m20s kubelet Successfully pulled image "nginx" in 4.114836826s
Normal Created 7m20s kubelet Created container ostechnix-nginx
Normal Started 7m20s kubelet Started container ostechnix-nginx
[root@ostechnix ~]#
Отображение полной информации о модуле
После этого вы можете удалить под, используя команду «kubectl delete
».
kubectl delete pod ostechnix-nginx
Пример вывода:
pod "ostechnix-nginx" deleted
Убедитесь, что модуль удален, перечислив доступные модули:
kubectl get pods
No resources found in default namespace.
Удалить модуль
Заключение
В этом руководстве мы рассмотрели концепцию Pod в Kubernetes, простое развертывание приложения и способы запуска Pod. Более подробная информация о создании Pod с файлом определения YAML
будет представлена в наших следующих подробностях.
Ресурс:
- https://kubernetes.io/docs/concepts/workloads/pods/