Исследование двух категорий объектов в Kubernetes: модули и сервисы

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

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

a) Создание модуля.
Чтобы создать модуль, вы можете определить его конфигурацию с помощью файла манифеста YAML или JSON и использовать команду kubectl create. Вот пример YAML-манифеста для простого модуля NGINX:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  containers:
    - name: nginx
      image: nginx:latest

b) Масштабирование модулей:
Kubernetes позволяет масштабировать модули по горизонтали, регулируя желаемое количество реплик. Вы можете использовать команду kubectl scaleили изменить поле replicasв файле манифеста модуля. Например:

kubectl scale --replicas=3 deployment/nginx-deployment
  1. Сервисы.
    Сервисы предоставляют согласованную и стабильную конечную точку для доступа к модулям в Kubernetes, позволяя абстрагировать базовые детали сети. Они обеспечивают балансировку нагрузки и обнаружение сервисов внутри кластера. Вот несколько способов работы с сервисами:

a) Создание службы.
Как и модули, службы можно создавать с использованием файла манифеста YAML или JSON. В следующем примере показано базовое определение сервиса для модуля NGINX:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: ClusterIP

b) Предоставление доступа к службам.
Чтобы предоставить доступ к службам за пределами кластера, вы можете изменить тип службы на NodePortили LoadBalancer. Альтернативно вы можете использовать Ingress-контроллер для более продвинутой маршрутизации и завершения SSL. Вот пример предоставления сервиса с использованием типа NodePort:

kubectl expose deployment/nginx-deployment --type=NodePort --port=80

В этой статье мы исследовали две основные категории объектов в Kubernetes: модули и службы. Мы обсудили различные методы создания и управления этими объектами, а также примеры кода, иллюстрирующие каждую концепцию. Используя возможности модулей и сервисов, вы можете эффективно развертывать и масштабировать контейнерные приложения в кластере Kubernetes.