Урок 2.3: Настройка среды разработки

Введение

Прежде чем создавать свой первый оператор, вам нужна полноценная среда разработки. Этот урок охватывает настройку всего необходимого: Go, kubebuilder, кластера kind и вашей IDE. Мы проверим, что всё работает вместе.

Теория: настройка среды разработки

Правильная среда разработки критически важна для эффективной разработки и тестирования операторов.

Основные концепции

Локальная разработка:

  • Запуск операторов локально (вне кластера)
  • Подключение к удалённому или локальному кластеру Kubernetes
  • Более быстрые итерации, чем сборка/развёртывание образов
  • Более простая отладка

Кластер kind:

  • Kubernetes в Docker
  • Идеален для локальной разработки и тестирования
  • Не требует облачных ресурсов
  • Быстрое создание/удаление кластера

Рабочий процесс разработки:

  1. Пишете код локально
  2. Запускаете оператор локально (go run)
  3. Тестируете на кластере kind
  4. Быстро итерируете
  5. Собираете образ, когда готовы

Почему это важно:

  • Скорость: локальная разработка быстрее сборки контейнеров
  • Отладка: локальные процессы проще отлаживать
  • Стоимость: облачные ресурсы для разработки не нужны
  • Изоляция: тестирование без влияния на продакшен

Настройка хорошей среды разработки ускоряет создание операторов.

Компоненты среды разработки

Ваша среда разработки операторов состоит из:

graph TB
    subgraph "Development Machine"
        GO[Go 1.21+]
        KB[Kubebuilder]
        KUBECTL[kubectl]
        KIND[kind]
        DOCKER[Docker/Podman]
        IDE[IDE/Editor]
    end
    
    subgraph "Kubernetes Cluster"
        KIND_CLUSTER[Kind Cluster]
        API[API Server]
    end
    
    GO --> KB
    KB --> KUBECTL
    KUBECTL --> KIND
    KIND --> DOCKER
    KIND --> KIND_CLUSTER
    KIND_CLUSTER --> API
    
    style GO fill:#90EE90
    style KB fill:#FFB6C1
    style KIND_CLUSTER fill:#FFE4B5

Процесс настройки

Настройка следует такому процессу:

sequenceDiagram
    participant Dev as Developer
    participant Script as Setup Script
    participant Go as Go
    participant KB as Kubebuilder
    participant Kind as kind
    participant Cluster as Cluster
    
    Dev->>Script: Run setup script
    Script->>Go: Check/Install Go
    Go-->>Script: Go ready
    Script->>KB: Check/Install kubebuilder
    KB-->>Script: kubebuilder ready
    Script->>Kind: Check/Install kind
    Kind-->>Script: kind ready
    Script->>Cluster: Create cluster
    Cluster-->>Script: Cluster ready
    Script-->>Dev: Environment ready

Необходимые инструменты

1. Go 1.21+

Go — это язык программирования для операторов kubebuilder.

Установка:

  • Скачайте с golang.org
  • Или используйте менеджер пакетов: brew install go (macOS)

Проверка:

go version
# Should show: go version go1.21.x or higher

2. Kubebuilder

CLI Kubebuilder для генерации каркаса и кодогенерации.

Установка:

# macOS/Linux
curl -L -o kubebuilder https://go.kubebuilder.io/dl/latest/$(go env GOOS)/$(go env GOARCH)
chmod +x kubebuilder
sudo mv kubebuilder /usr/local/bin/

Проверка:

kubebuilder version

3. kubectl

Инструмент командной строки Kubernetes.

Установка:

  • Уже рассмотрена в настройке Модуля 1
  • Проверьте: kubectl version --client

4. kind

Kubernetes в Docker для локальных кластеров.

Установка:

go install sigs.k8s.io/kind@latest

Проверка:

kind version

5. Docker или Podman

Среда выполнения контейнеров для kind.

Установка:

Проверка:

docker --version
# or
podman --version

Использование скрипта настройки

Мы предоставляем скрипт настройки, который проверяет и устанавливает всё необходимое:

# Run the setup script
./scripts/setup-dev-environment.sh

Скрипт:

  1. Проверяет каждый инструмент
  2. Устанавливает недостающие инструменты
  3. Проверяет установки
  4. Сообщает о статусе

Настройка кластера kind

После настройки инструментов создайте кластер kind:

# Use the provided script
./scripts/setup-kind-cluster.sh

Или вручную:

kind create cluster --name k8s-operators-course
kubectl cluster-info --context kind-k8s-operators-course

Рабочий процесс разработки

Вот как вы будете разрабатывать операторы:

graph LR
    DEV[Write Code] --> GEN[Generate Code]
    GEN --> TEST[Test Locally]
    TEST --> DEPLOY[Deploy to Cluster]
    DEPLOY --> OBSERVE[Observe Behavior]
    OBSERVE --> DEV
    
    style DEV fill:#90EE90
    style TEST fill:#FFB6C1
  1. Пишете код: определяете типы API, реализуете контроллер
  2. Генерируете код: запускаете make generate и make manifests
  3. Тестируете локально: запускаете оператор через make run
  4. Развёртываете в кластер: применяете CRD, создаёте пользовательские ресурсы
  5. Наблюдаете: смотрите логи, проверяете ресурсы, подтверждаете поведение

Настройка локальной разработки

Для локальной разработки вы будете запускать оператор на своей машине:

graph TB
    subgraph "Your Machine"
        CODE[Operator Code]
        RUN[make run]
    end
    
    subgraph "Kind Cluster"
        API[API Server]
        CR[Custom Resources]
        RESOURCES[Resources]
    end
    
    CODE --> RUN
    RUN -->|Connects to| API
    RUN -->|Watches| CR
    RUN -->|Creates| RESOURCES
    
    style RUN fill:#FFB6C1
    style API fill:#90EE90

Оператор запускается локально, но подключается к вашему кластеру kind.

Настройка IDE

VS Code

Рекомендуемые расширения:

  • Расширение Go
  • Расширение Kubernetes
  • Расширение YAML

GoLand

Встроенная поддержка:

  • Разработки на Go
  • Ресурсов Kubernetes
  • Отладки

Чек-лист проверки среды

Перед началом Модуля 2 убедитесь:

  • Go 1.21+ установлен и работает
  • kubebuilder установлен и находится в PATH
  • kubectl настроен и работает
  • kind установлен
  • Docker/Podman запущен
  • Кластер kind создан и доступен
  • Контекст kubectl указывает на кластер kind

Устранение неполадок

kubebuilder не найден

# Add to PATH
export PATH=$PATH:/usr/local/bin
# Or reinstall

Проблемы с кластером kind

# Delete and recreate
kind delete cluster --name k8s-operators-course
./scripts/setup-kind-cluster.sh

Проблемы с Go-модулями

# Enable Go modules
export GO111MODULE=on

Ключевые выводы

  • Полноценная среда разработки включает: Go, kubebuilder, kubectl, kind, Docker/Podman
  • Используйте предоставленные скрипты настройки для простой установки
  • Кластер kind предоставляет локальный Kubernetes для тестирования
  • Локальная разработка: оператор запускается на вашей машине и подключается к кластеру
  • Проверьте все инструменты перед началом разработки операторов

Связанная лабораторная работа

Источники

Официальная документация

Дополнительное чтение

Смежные темы

Дальнейшие шаги

Теперь, когда ваша среда готова, давайте создадим ваш первый оператор!