Поиск по сайту:

Создание модулей 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/

Статьи по данной тематике