Как создавать поды Kubernetes и управлять ими в Linux

Что такое Kubernetes

Kubernetes — самый популярный оркестратор. Мы подготовили небольшой гайд, где напомним, что такое Kubernetes, расскажем, как создавать поды и что с ними делать.

Что такое Kubernetes?

Это платформа с открытым исходным кодом для управления контейнерами от компании Google. В контейнерах хранятся все зависимости ПО: код, среда выполнения, конфигурация и системные библиотеки. 

Контейнеры помогают связать и запустить приложение. Удобнее это делать автоматизированно, что и делает Kubernetes. Он помогает масштабироваться,  обрабатывает ошибки в приложении, предоставляет шаблоны развёртывания и выполняет другие полезные функции. 

Если вы хотите масштабировать методы DevOps на несколько баз кода при растущей команде разработчиков — вам пригодятся контейнеры. Они позволяют масштабировать среду под нужное количество специалистов, из-за чего код работает одинаково на всех компьютерах, где развёртываются контейнеры. 

Их ещё удобно использовать для разработки микросервисов, так как эти сервисы помещаются в контейнеры. Контейнеры микросервисов вместе с использованием надёжной платформы управления очень упрощают работу с кластером и оркестрацию. 

Больше про k8s можете узнать в этом материале.

Поды в Kubernetes 

Pod — основная логическая единица измерения в kubernetes. Это набор из одного или нескольких контейнеров приложений, например, Docker или rkt, которые совместно развёртываются на ноде. 

Поды считаются базовыми строительными блоками kubernetes, потому что все рабочие нагрузки по типу Deployments и ReplicaSets можно выразить в виде подов.

Каждый под запускает и обслуживает единственный экземпляр приложения. Если вы захотите сделать горизонтальное масштабирование, вам нужно будет использовать разные поды: по одному на каждый инстанс приложения.

Создание пода Kubernetes

Способов создания пода — много. В гайде рассмотрим два варианта с использованием образа nginx.

Способ 1

Просто использовать файл конфигурации для создания пода:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  volumes:
  - name: shared-data
    emptyDir: {}
  containers:
  - name: nginx
    image: nginx
    volumeMounts:
    - name: shared-data
      mountPath: /usr/share/nginx/html
  hostNetwork: true
  dnsPolicy: Default

Способ 2 

Создать под с помощью утилиты Minikube, которая позволяет запускать кластер Kubernetes с одной нодой на своем ноутбуке или компьютере. 

Если появятся сложности с установкой Minikube, вам поможет вот эта инструкция.

Чтобы создать под, нужно запустить кластер Kubernetes. Когда вы окажетесь в среде песочницы Kubernetes, нужно проверить подключение к кластеру Kubernetes. Для этого выполним команду kubectl get nodes в командной строке, чтобы увидеть узлы кластера в терминале. Если это сработало, создадим и запустим под.

Чтобы это сделать, выполним команду: 

kubectl run nginx--image=nginx --restart=Never 

Мы получим под с именем nginx, работающий с образом nginx в Docker Hub. А часть —restart=Never, говорит Kubernetes создать один под, а не развёртывание.

Нажимаем Enter и модуль будет создан. Терминал должен выдать pod/nginx created.

Готово! Мы создали под в kubernetes.

Как просмотреть под

Запустите команду kubectl get pods, чтобы увидеть статус вашего пода. Чтобы посмотреть полную конфигурацию пода, запустите в терминале kubectl description pod nginx

Терминал отобразит YAML для пода: имя nginx, его местоположение, ноду, время запуска и текущий статус. Также вы увидите подробную информацию о контейнере nginx вместе с идентификатором контейнера и местонахождением образа.

* YAML — формат перевода данных в последовательность байтов. По концепции он похож на язык разметки, но ориентируется на удобство ввода-вывода типичных структур данных многих языков программирования.

Если вы прокрутите до конца терминала, вы увидите историю событий пода. В нашем случае там будет указано, что под был создан и запущен. В случае с этим образ nginx был успешно загружен и назначен ноде.

Что можно делать с подами в Linux

Указать лимиты памяти для пода

Чтобы это сделать, включите поле resources:requests в манифест ресурсов контейнера вашего пода. Чтобы добавить ограничение памяти, укажите resources:limits

Пример того, как сделать запрос памяти на 100 МБ и поставить лимит в 200 МБ. Файл конфигурации для пода:

apiVersion: v1
kind: Pod
metadata:
  name: memory-demo
  namespace: mem-example
spec:
  containers:
  - name: memory-demo-ctr
    image: polinux/stress
    resources:
      limits:
        memory: "200Mi"
      requests:
        memory: "100Mi"
    command: ["stress"]
    args: ["--vm", "1", "--vm-bytes", "150M", "--vm-hang", "1"]

Назначить под ноде

Прежде чем это сделать, у вас должен быть кластер kubernetes и настроенный для связи с ним kubectl. Лучше пробовать реализовать это в кластере, в котором есть хотя бы две ноды.

Приступим. Перечислим ноды в нашем кластере: 

kubectl get nodes --show-labels

Выбираем одну из нод и добавляем к ней метку: 

kubectl label nodes <your-node-name> disktype=ssd

<your-node-name> — имя выбранной вами ноды. 

Проверяем, чтобы у выбранной ноды была метка disktype=ssd:

kubectl get nodes --show-labels

Создаём под, который назначим конкретной ноде:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  nodeSelector:
    disktype: ssd

Дальше используем файл конфигурации, чтобы создать под, который будет запланирован на ноде:

kubectl apply -f https://k8s.io/examples/pods/pod-nginx.yaml

Проверим, что под работает на нужной ноде:

kubectl get pods --output=wide

Вывод будет таким:

NAME     READY     STATUS    RESTARTS   AGE    IP           NODE
nginx    1/1       Running   0          13s    10.200.0.4   worker0

Ещё можно: 

  • Назначить ресурсы CPU контейнерам и подам; 
  • Настроить поды так, чтобы назначить определённые классы качества обслуживания — Quality of Service;
  • Настроить под для использования Volume в качестве хранилища;
  • Настроить контекст безопасности для пода или контейнера, чтобы определить привилегии и параметры управления доступом;
  • Настроить Liveness, Readiness и Startup Probes.

На этом список не заканчивается. Больше действий и пошаговые инструкции к ним можно посмотреть на сайте kubernetes

Итог

В материале разобрались, что такое поды в kubernetes, как их создавать, и рассмотрели несколько действий с подами в Linux. Но это только вершина айсберга. Чтобы быстро и эффективно разобраться с оркестратором — записывайтесь на наш курс Администрирование Kubernetes. В программе собрали все необходимое знания для работы с Kubernetes.

Добавить комментарий

Спасибо, что поделились