Лабораторная 2.2: CLI Kubebuilder и структура проекта
Связанный урок: Урок 2.2: Основы Kubebuilder
Навигация: ← Предыдущая лабораторная: Паттерн оператора | Обзор модуля | Следующая лабораторная: Среда разработки →
Цели
- Установить и проверить kubebuilder
- Разобраться в командах CLI kubebuilder
- Изучить структуру проекта kubebuilder
- Понять кодогенерацию
Предварительные требования
- Установленный Go 1.21+
- Понимание операторов из Урока 2.1
Упражнение 1: установка Kubebuilder
Задача 1.1: проверьте, установлен ли Kubebuilder
# Check kubebuilder version
kubebuilder version
Если не установлен, переходите к установке.
Задача 1.2: установите Kubebuilder
# Download kubebuilder
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/
# Verify installation
kubebuilder version
Задача 1.3: проверьте установку
# Check kubebuilder is in PATH
which kubebuilder
# Check version
kubebuilder version
# List available commands
kubebuilder --help
Упражнение 2: изучение команд Kubebuilder
Задача 2.1: инициализируйте тестовый проект
# Create a test directory
mkdir -p /tmp/kubebuilder-test
cd /tmp/kubebuilder-test
# Initialize project
kubebuilder init --domain example.com --repo github.com/example/test-operator
Обратите внимание:
- Какие файлы были созданы?
- Какие каталоги были созданы?
- Что находится в Makefile?
Задача 2.2: изучите структуру проекта
# List all files
find . -type f | head -20
# Examine main.go
cat ./cmd/main.go
# Examine Makefile
cat Makefile | head -30
# Check go.mod
cat go.mod
Вопросы:
- Каково назначение
main.go? - Какие цели (targets) Makefile доступны?
- Какие зависимости есть в
go.mod?
Задача 2.3: создайте API
# Create an API
kubebuilder create api --group test --version v1 --kind TestResource
При запросах:
- Create Resource [y/n]: y
- Create Controller [y/n]: y
Обратите внимание:
- Какие новые файлы были созданы?
- Какие каталоги были добавлены?
- Что находится в каталоге API?
Упражнение 3: понимание сгенерированного кода
Задача 3.1: изучите типы API
# Look at generated types
cat api/v1/testresource_types.go
Ключевые наблюдения:
- Структура Spec
- Структура Status
- Маркеры kubebuilder (комментарии, начинающиеся с
// +kubebuilder:)
Задача 3.2: изучите контроллер
# Look at generated controller
cat internal/controller/testresource_controller.go
Ключевые наблюдения:
- Каркас функции Reconcile
- Маркеры RBAC
- Функция SetupWithManager
Задача 3.3: сгенерируйте код
# Generate code
make generate
# Generate manifests
make manifests
Обратите внимание:
- Какие файлы были сгенерированы?
- Проверьте каталог
config/crd/bases/ - Проверьте каталог
config/rbac/
Упражнение 4: изучение сгенерированных манифестов
Задача 4.1: изучите CRD
# List generated CRDs
ls -la config/crd/bases/
# Examine CRD YAML
cat config/crd/bases/test.example.com_testresources.yaml | head -50
Вопросы:
- Какая группа API используется?
- Как называется ресурс?
- Какая валидация включена?
Задача 4.2: изучите RBAC
# List RBAC files
ls -la config/rbac/
# Examine role
cat config/rbac/role.yaml
Вопросы:
- Какие разрешения предоставлены?
- Как определяются разрешения?
Упражнение 5: понимание процесса кодогенерации
Задача 5.1: измените типы
Отредактируйте api/v1/testresource_types.go и добавьте поле:
// TestResourceSpec defines the desired state of TestResource
type TestResourceSpec struct {
// Message is a test message
Message string `json:"message,omitempty"`
}
Задача 5.2: перегенерируйте
# Regenerate code
make generate
make manifests
# Check CRD was updated
cat config/crd/bases/test.example.com_testresources.yaml | grep -A 5 message
Наблюдение: схема CRD была обновлена автоматически!
Упражнение 6: изучение целей Makefile
Задача 6.1: перечислите доступные цели
# List all Makefile targets
make help
Задача 6.2: разберитесь в ключевых целях
Важные цели:
make generate— генерирует кодmake manifests— генерирует манифестыmake install— устанавливает CRDmake run— запускает оператор локальноmake docker-build— собирает образ контейнера
Задача 6.3: попробуйте некоторые цели
# Generate everything
make generate manifests
# Check what was created
ls -la config/crd/bases/
ls -la config/rbac/
Упражнение 7: глубокое погружение в структуру проекта
Задача 7.1: составьте карту структуры
Составьте мысленную карту проекта:
project-root/
├── api/ # API type definitions
│ └── v1/ # API version
├── internal/controller/ # Controller implementations
├── config/ # Generated manifests
│ ├── crd/ # CRD definitions
│ ├── rbac/ # RBAC rules
│ └── manager/ # Manager deployment
├── main.go # Entry point
├── Makefile # Build targets
└── go.mod # Go dependencies
Задача 7.2: разберитесь в каждом компоненте
Для каждого каталога поймите его назначение:
- api/: определения типов вашего пользовательского ресурса
- internal/controller/: ваша логика согласования
- config/crd/: сгенерированные YAML-файлы CRD
- config/rbac/: сгенерированные манифесты RBAC
- main.go: настраивает и запускает менеджер
Очистка
# Remove test project
cd ~
rm -rf /tmp/kubebuilder-test
Итоги лабораторной
В этой лабораторной вы:
- Установили и проверили kubebuilder
- Изучили команды CLI kubebuilder
- Создали тестовый проект
- Изучили структуру сгенерированного кода
- Разобрались в процессе кодогенерации
- Изучили структуру проекта
Ключевые уроки
- Kubebuilder предоставляет каркас для проектов операторов
kubebuilder initсоздаёт структуру проектаkubebuilder create apiгенерирует типы API и контроллерmake generateиmake manifestsгенерируют код и YAML- Структура проекта стандартизирована и организована
- Маркеры kubebuilder управляют кодогенерацией
Дальнейшие шаги
Теперь, когда вы понимаете kubebuilder, давайте настроим вашу полноценную среду разработки!