GCP: GKE, Cloud Run, Cloud SQL, BigQuery
На GKE Autopilot пришёл алерт: pod disruption budget violation — деплоймент откатился, потому что Autopilot начал эвикцию нод для пересборки под новую конфигурацию, а PodDisruptionBudget с maxUnavailable: 0 заблокировал процесс. Это не баг Autopilot — нормальное поведение при неправильно настроенном PDB. За пять лет работы с Google Cloud Platform мы научились предвидеть такие сценарии и настраивать кластеры так, чтобы деплои проходили без сбоев. Ниже разберём ключевые сервисы Google Cloud и покажем, как избежать типичных ошибок. Если нужно спроектировать или оптимизировать инфраструктуру под ключ — закажите аудит, мы оценим проект и предложим решения. Наши инженеры имеют сертификации GCP и опыт миграции более 50 проектов.
GKE Autopilot: что это меняет в практике
GKE Autopilot — режим, где Google управляет нодами полностью. Нет node pools, управления ёмкостью, kubectl cordon. Поды описывают ресурсы — Autopilot обеспечивает их. (Подробнее о Kubernetes — платформе для оркестрации контейнеров.)
Что это значит практически: requests и limits должны быть выставлены на каждый контейнер без исключений. В стандартном GKE можно полениться и оставить без requests — поды поднимутся. В Autopilot — нет. Минимальный request: cpu: 250m, memory: 512Mi. Billing идёт за requests, не за actual usage.
Autopilot автоматически выставляет securityContext ограничения. Контейнеры не могут работать с privileged: true или монтировать hostPath. Для инструментов вроде Falco или Datadog Agent это проблема — нужны DaemonSets с привилегиями. В Autopilot они просто не работают. Стандартный GKE здесь гибче.
| Параметр | GKE Autopilot | GKE Standard |
|---|---|---|
| Управление нодами | Полностью автоматическое | Ручное (node pools, upgrades) |
| Минимальные ресурсы pod'а | CPU 250m, RAM 512Mi | Нет обязательных requests |
| Security context | Запрещён privileged / hostPath | Полный контроль |
| GPU workloads | Не поддерживается | Поддерживается |
| Цена (наценка) | ~10% к стоимости ресурсов | Только стоимость инстансов |
| Кому подходит | Команды без platform-инженеров | Кастомные конфигурации, GPU, системные daemonsets |
Выбор между Autopilot и Standard: Autopilot удобен для команд без выделенного platform-инженера — меньше операционной нагрузки, нет патчинга нод, автоматический bin-packing. Standard нужен, когда требуются кастомные конфигурации нод, GPU workloads или специфические системные daemonsets.
Почему Workload Identity обязателен для GKE?
Классическая проблема GCP — Service Account JSON-ключи в Kubernetes Secrets. Ключ создали, засунули в kubectl create secret generic sa-key --from-file=key.json, ротацию никто не настроил. Ключ живёт годами, доступ есть у любого, кто может читать Secrets в namespace. Workload Identity решает это правильно: исключает долгоживущие ключи и снижает риск утечки credentials в 5 раз по сравнению с JSON-ключами (по данным документации GCP).
Чтобы настроить Workload Identity, выполните три шага:
- Свяжите Kubernetes ServiceAccount с GCP Service Account через IAM policy:
gcloud iam service-accounts add-iam-policy-binding \ [email protected] \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:project.svc.id.goog[namespace/ksa-name]" - Добавьте аннотацию к ServiceAccount:
apiVersion: v1 kind: ServiceAccount metadata: name: ksa-name annotations: iam.gke.io/gcp-service-account: [email protected] - Запустите под с этим KSA — токены GCP Service Account отдаются через metadata server. Никаких JSON-ключей, ротация автоматическая. На Autopilot Workload Identity обязателен.
Когда стоит выбрать Cloud Run для serverless?
Cloud Run запускает контейнеры без управления инфраструктурой. Отличие от Lambda — полноценный контейнер, любой runtime, до 32 ГБ RAM и 8 vCPU. Масштабирование от нуля до нескольких тысяч параллельных экземпляров. Cloud Run построен на Kubernetes и Knative.
Cloud Run подходит для: API с непредсказуемым трафиком, webhook-обработчиков, background jobs через Pub/Sub триггеры, preview-окружений для PR-ревью. Проблема холодного старта решается через min-instances: 1 — один экземпляр всегда тёплый, не биллится во время простоя (только за RAM в idle). Для latency-sensitive API с SLA < 200ms это обязательно — время ответа снижается в 3–5 раз по сравнению с холодным запуском.
Cloud Run Jobs — для batch-задач. Запускается по расписанию через Cloud Scheduler, обрабатывает задачи параллельно через task-count и parallelism, платишь только за время выполнения.
Cloud SQL: управляемые базы данных
Cloud SQL поддерживает PostgreSQL, MySQL, SQL Server. HA-конфигурация через standby реплику в другой зоне — failover автоматический, около 60 секунд. Connection pooling критично для Cloud Run и Cloud Functions. Cloud SQL Auth Proxy — sidecar или отдельный контейнер, который устанавливает защищённое соединение через IAM, без открытых портов и SSL-сертификатов вручную. Для Cloud Run: Auth Proxy запускается как sidecar (--dependency в cloud run deploy), приложение коннектится на localhost:5432.
# Cloud Run service YAML с Auth Proxy sidecar containers: - name: app image: gcr.io/project/app:latest env: - name: DB_HOST value: "127.0.0.1" - name: cloud-sql-proxy image: gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.11 args: - "--structured-logs" - "--port=5432" - "project:region:instance-name" Read Replicas в Cloud SQL — для read-heavy нагрузок. Промо-акции с резким ростом read-запросов, аналитика на production данных без нагрузки на master. Cross-region replica — для DR-сценариев.
BigQuery: аналитика без управления инфраструктурой
BigQuery — serverless аналитическое хранилище Google Cloud. Запросы по терабайтам данных выполняются за секунды. Billing: $5 за терабайт обработанных данных (или flat-rate через capacity reservations). Основная ошибка новичков — SELECT * по большим таблицам. BigQuery — колоночное хранилище: SELECT * сканирует все колонки, SELECT id, name, created_at — только три. Разница в стоимости кратная — правильный запрос экономит до 80% бюджета.
Partitioning по временной колонке (DATE, TIMESTAMP) — обязательно для event-таблиц. Запрос с WHERE date = DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY) сканирует только одну партицию, а не всю историю. Clustering по часто используемым в WHERE/JOIN колонкам — дополнительное снижение объёма сканирования. BigQuery ML позволяет обучать модели прямо в SQL — logistic regression, k-means, time series forecasting — без экспорта данных.
Типичные ошибки при работе с BigQuery
- SELECT * без необходимости — платите за все колонки. - Отсутствие партиционирования — сканирование всей таблицы. - Использование LIMIT без фильтрации — всё равно полный scan. - JOIN больших таблиц без кластеризации — высокая стоимость.Что входит в услугу
- Аудит текущей GCP-инфраструктуры: IAM, сети, затраты, с выявлением экономии до 40%.
- Архитектурная документация (HLD/LLD).
- Развёртывание GKE кластеров с Workload Identity, Autoscaling, NetworkPolicies.
- Настройка Cloud Run + Cloud SQL Auth Proxy.
- Оптимизация BigQuery: партиционирование, кластеризация, materialized views — снижение стоимости запросов в 5–20 раз.
- CI/CD pipelines (GitLab CI, GitHub Actions, Cloud Build).
- Мониторинг и алертинг (Cloud Monitoring, Grafana).
- Обучение команды (workshop по GCP).
- Сопровождение после внедрения (две недели).
Типичные сроки
| Задача | Сроки |
|---|---|
| GKE кластер (Standard) с Workload Identity | 1–2 недели |
| GKE Autopilot миграция существующего приложения | 1–2 недели |
| Cloud Run + Cloud SQL с Auth Proxy | 3–5 дней |
| BigQuery DWH с партиционированием и оптимизацией | 1–3 недели |
| GCP IAM аудит и least privilege | 3–5 дней |
Стоимость рассчитывается индивидуально после аудита текущей инфраструктуры и требований. Свяжитесь с нами — оценим ваш проект и предложим оптимальное решение под ключ. Закажите консультацию и получите детальный план оптимизации вашей GCP-инфраструктуры с прогнозом экономии до 40%.







