← Назад к вопросам

Как сделать worker-ноду Kubernetes

2.0 Middle🔥 231 комментариев
#Kubernetes

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Развертывание Worker-ноды Kubernetes

Развертывание worker-ноды (также называемой node или worker) в Kubernetes — это процесс добавления вычислительного ресурса в кластер, который будет выполнять рабочие нагрузки (поды). Существует несколько основных методов, каждый из которых применяется в зависимости от среды (on-premise, облако, виртуализация) и инструментов автоматизации.

1. Основные шаги для добавления worker-ноды

Независимо от метода, общий процесс включает следующие этапы:

  • Подготовка ОС: Установка поддерживаемой ОС (чаще всего Linux-дистрибутивов, таких как Ubuntu, CentOS, RHEL), настройка сетей, отключение swap, настройка параметров ядра и т.д.
  • Установка container runtime: Установка и настройка container runtime, такого как containerd или CRI-O. Docker Engine также может использоваться, но он устарел в пользу этих двух.
  • Установка kubelet, kubeadm и kubectl: Установка основных компонентов Kubernetes: kubelet (агент на ноде), kubeadm (утилита для bootstrap кластера) и kubectl (CLI для управления, обычно только на control-plane).
  • Присоединение к кластеру: Использование команды kubeadm join, сгенерированной на control-plane ноде, для безопасного присоединения ноды к кластеру. Эта команда содержит токен и хэш корневого CA сертификата кластера.

2. Практические методы добавления worker-ноды

Метод 1: Ручное добавление с помощью kubeadm (классический)

Этот метод подходит для on-premise серверов или виртуальных машин.

Шаг 1: Подготовка ноды. Убедитесь, что на новой машине выполнен базовый набор требований (память, CPU, уникальное hostname, открытые порты).

Шаг 2: Установка зависимостей. Пример для Ubuntu 22.04:

# Отключение swap
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

# Установка containerd
sudo apt-get update
sudo apt-get install -y containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl enable containerd

# Установка kubeadm, kubelet, kubectl
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

Шаг 3: Присоединение к кластеру. На control-plane ноде сгенерируйте новую команду join (при необходимости):

# Создание нового токена (если старый истек)
kubeadm token create --print-join-command

Выполните полученную команду (вида kubeadm join ...) на новой worker-ноде с sudo.

Шаг 4: Проверка. На control-plane ноде выполните:

kubectl get nodes

Новая нода должна отображаться со статусом Ready.

Метод 2: Использование инструментов автоматизации (IaC)

Для воспроизводимости и масштабирования используют инструменты инфраструктуры как кода (IaC).

  • Terraform + Cloud-Init: Terraform создает виртуальную машину в облаке (AWS EC2, GCP GCE, Azure VM), а cloud-init скрипт, переданный в user-data, автоматически выполняет все шаги установки и присоединения.
  • Ansible/Puppet/Chef: Эти инструменты конфигурационного менеджмента позволяют описать желаемое состояние ноды в плейбуках/манифестах и применить его к множеству хостов.

Пример фрагмента Terraform для AWS с user_data:

resource "aws_instance" "k8s_worker" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t3.medium"
  key_name      = aws_key_pair.my_key.key_name

  user_data = <<-EOF
              #!/bin/bash
              # Скрипт установки K8s worker
              apt-get update
              apt-get install -y apt-transport-https curl
              curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
              echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list
              apt-get update
              apt-get install -y kubelet kubeadm kubectl
              apt-mark hold kubelet kubeadm kubectl
              # Команда join (в реальности токен должен быть защищен)
              kubeadm join ${var.cluster_endpoint} --token ${var.join_token} \
                        --discovery-token-ca-cert-hash sha256:${var.ca_cert_hash}
              EOF

  tags = {
    Name = "k8s-worker"
  }
}

Метод 3: Использование облачных managed-сервисов

В публичных облаках процесс добавления worker-ноды максимально упрощен:

  • AWS EKS: Добавление ноды через Node Group в консоли AWS или с помощью Terraform модуля aws_eks_node_group. Вы указываете тип инстанса, AMI (часто специальная EKS Optimized AMI) и желаемое количество нод — облако делает всё остальное.
  • GCP GKE: Создание или изменение Node Pool (пула нод) в кластере GKE. Можно указать тип машины, образ, размер диска.
  • Azure AKS: Масштабирование кластера AKS через az aks nodepool add или портал Azure.

Пример для GKE (gcloud CLI):

gcloud container node-pools create worker-pool-2 \
    --cluster=my-cluster \
    --zone=europe-west3-a \
    --num-nodes=3 \
    --machine-type=n1-standard-2 \
    --preemptible

3. Пост-установочная настройка и лучшие практики

После того как нода присоединилась, важно:

  1. Настройка Labels и Taints: Пометьте ноду для планирования специфичных подов.
    kubectl label nodes <node-name> disktype=ssd environment=production
    kubectl taint nodes <node-name> dedicated=special:NoSchedule
    
  2. Развертывание сетевого плагина (CNI): Если он не был установлен автоматически (например, Calico, Cilium, Weave Net), его нужно установить. Без CNI поды не смогут общаться между нодами.
  3. Настройка мониторинга: Убедитесь, что агенты мониторинга (например, Prometheus Node Exporter) запущены на новой ноде.
  4. Проверка работоспособности: Убедитесь, что на ноду можно разместить поды, создав тестовый Pod.

Критические замечания:

  • Безопасность: Команда kubeadm join содержит конфиденциальную информацию. Передавайте ее по защищенным каналам, используйте короткоживущие токены.
  • Согласованность: Все worker-ноды в одном кластере должны иметь одинаковые или совместимые версии container runtime и kubelet. Версия kubelet не должна отличаться от версии control-plane больше, чем на одну минорную версию.
  • Автоматизация: Для продакшена всегда предпочтительна полная автоматизация процесса через IaC и CI/CD пайплайны, чтобы избежать дрейфа конфигурации и обеспечить быстрое масштабирование.

Таким образом, добавление worker-ноды — это стандартизированный процесс, который может варьироваться от простой команды kubeadm join до сложных автоматизированных сценариев развертывания в рамках инфраструктуры предприятия. Выбор метода зависит от масштаба, требований безопасности и используемого стека технологий.

Как сделать worker-ноду Kubernetes | PrepBro