Планирование с использованием селекторов узлов (Node Selectors)

KubernetesBeginner
Практиковаться сейчас

Введение

В этом лабораторном занятии мы начнем с создания простого развертывания (deployment), а затем присвоим ему селекторы узлов (Node Selectors). Затем перейдем к более сложным сценариям, где будем использовать различные селекторы для планирования пода (pod) на определенных узлах.

Запустите кластер Minikube

Перед созданием ресурсов вам нужен работающий кластер Kubernetes. Minikube - это легковесная среда Kubernetes, которая запускается на вашем локальном компьютере.

  1. Перейдите в рабочую директорию:

    Откройте терминал и перейдите в папку проекта по умолчанию:

    cd /home/labex/project
    
  2. Запустите Minikube:

    Запустите Minikube для инициализации кластера Kubernetes:

    minikube start
    
    • Эта команда настраивает однокузловой кластер Kubernetes на вашем локальном компьютере.
    • В зависимости от производительности вашей системы Minikube может потребовать несколько минут для запуска.
  3. Проверьте, что Minikube запущен:

    Проверьте статус кластера Minikube:

    minikube status
    
    • Проверьте, чтобы компоненты, такие как kubelet и apiserver, были перечислены как Running (работающие).
    • Если кластер не запущен, запустите команду minikube start снова.

Если у вас возникли проблемы при запуске Minikube, используйте команду minikube delete для сброса среды при необходимости.

Создание простого развертывания (Deployment)

На этом шаге мы создадим простое развертывание с одним подом (pod).

  1. Создайте файл с именем simple-deployment.yaml со следующим содержимым:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: simple-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: simple-app
  template:
    metadata:
      labels:
        app: simple-app
    spec:
      containers:
        - name: simple-container
          image: nginx:latest
  1. Используйте kubectl для создания развертывания:
kubectl apply -f simple-deployment.yaml
  1. Проверьте, что развертывание было создано:
kubectl get deployments

Назначение селекторов узлов (Node Selectors) развертыванию (Deployment)

На этом шаге мы назначим селектор узла (Node Selector) для развертывания, которое мы создали на шаге 1.

  1. Создайте узлы с меткой (label):
kubectl label nodes minikube disk=ssd
  1. Отредактируйте файл node-selector-deployment.yaml и добавьте поле nodeSelector в раздел spec.template.spec:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: selector-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: selector-app
  template:
    metadata:
      labels:
        app: selector-app
    spec:
      nodeSelector:
        disk: ssd
      containers:
        - name: selector-container
          image: nginx:latest
  1. Используйте kubectl для применения изменений:
kubectl apply -f node-selector-deployment.yaml
  1. Проверьте, что под (pod) был запланирован на узле с меткой disk=ssd:
kubectl get pods -o wide | grep selector-deployment

Использование различных селекторов узлов (Node Selectors)

На этом шаге мы будем использовать различные селекторы узлов (Node Selectors) для планирования подов (pods) на определенных узлах на основе меток (labels), назначенных этим узлам.

  1. Создайте три узла с разными метками:
kubectl label nodes minikube resigon=labex
kubectl label nodes minikube gpu=true
  1. Создайте файл с именем multi-selector-deployment.yaml со следующим содержимым:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: multi-selector-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: multi-selector-app
  template:
    metadata:
      labels:
        app: multi-selector-app
    spec:
      containers:
        - name: multi-selector-container
          image: nginx:latest
      nodeSelector:
        resigon: labex
        gpu: "true"
  1. Примените изменения:
kubectl apply -f multi-selector-deployment.yaml
  1. Проверьте, что поды были запланированы на узлах с соответствующими метками:
kubectl get pods -o wide | grep multi-selector-deployment

Резюме

В этом практическом занятии (лабораторной работе) мы научились планировать поды (pods) на определенных узлах с использованием селекторов узлов (Node Selectors) и афинитета узлов (Node Affinity). Мы начали с простого развертывания (deployment), а затем перешли к более сложным сценариям, где использовали различные селекторы и правила афинитета для планирования подов на определенных узлах на основе меток (labels), назначенных этим узлам.

Поздравляем! Вы успешно завершили это практическое занятие.