Loading...
Усі статті
Platform · 7 min read

Platform Engineering: побудова вашої внутрішньої платформи розробника

Дізнайтеся, як проєктувати й будувати Internal Developer Platform (IDP), що прискорює продуктивність розробників, стандартизує інфраструктуру і знижує когнітивне навантаження у вашій інженерній організації.

Підйом Platform Engineering

Platform engineering постало як природна еволюція DevOps. Хоча DevOps зруйнував силоси між розробкою та операціями, багато організацій виявили, що вимагати від кожного розробника опанування Kubernetes, Terraform і CI/CD-конвеєрів створює іншу проблему: когнітивне перевантаження.

Platform engineering вирішує це шляхом побудови Internal Developer Platform (IDP) — self-service шару, що абстрагує складність інфраструктури та дозволяє розробникам зосередитися на написанні коду. За даними Gartner, до 2026 року 80% організацій з software engineering матимуть платформенні команди як внутрішні провайдери повторно використовуваних сервісів, компонентів та інструментів.

Що робить хорошу Internal Developer Platform

Добре спроєктована IDP надає п'ять основних можливостей:

  • Provisioning інфраструктури — Розробники запитують середовища через портал чи CLI, а не через Jira-тікети
  • Управління конфігурацією застосунків — Стандартизовані конфігурації розгортання з розумними defaults
  • Управління середовищами — Узгоджені dev, staging та продакшн середовища
  • Інтеграція спостережуваності — Вбудовані logging, метрики й трейсинг з першого дня
  • Запобіжники безпеки — Policy-as-code, що дотримуються прозоро, а не як блокери

Ключовий принцип — golden paths — упереджені, але гнучкі workflows, що роблять правильне справою легкою.

Архітектура сучасної IDP

Типова Internal Developer Platform складається з цих шарів:

┌─────────────────────────────────────────────────┐
│              Developer Interface                 │
│   (Portal UI / CLI / API / IDE Plugins)         │
├─────────────────────────────────────────────────┤
│            Service Catalog & Docs                │
│   (Backstage / Port / Cortex)                   │
├─────────────────────────────────────────────────┤
│           Orchestration Layer                    │
│   (Crossplane / Terraform / Pulumi)             │
├─────────────────────────────────────────────────┤
│         Infrastructure Resources                 │
│   (Kubernetes / Cloud Services / Databases)      │
└─────────────────────────────────────────────────┘

Кожен шар служить чіткій меті: шар інтерфейсу надає self-service доступ, каталог організовує те, що ви маєте, шар оркестрації провізіонить те, що вам потрібно, а шар інфраструктури запускає ваші навантаження.

Крок 1: Почніть з каталогу сервісів за допомогою Backstage

Backstage від Spotify став де-факто стандартом для порталів розробників. Він надає єдиний вид усіх сервісів, документації та інфраструктури у вашій організації.

Встановіть Backstage однією командою:

npx @backstage/create-app@latest
cd my-backstage-app
yarn dev

Визначте свої сервіси за допомогою файлів catalog-info.yaml, що зберігаються поряд з кодом застосунку:

# catalog-info.yaml
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
  name: payment-service
  description: Handles payment processing and billing
  annotations:
    github.com/project-slug: myorg/payment-service
    backstage.io/techdocs-ref: dir:.
    pagerduty.com/service-id: P1234ABC
  tags:
    - python
    - grpc
    - tier-1
spec:
  type: service
  lifecycle: production
  owner: team-payments
  system: billing-platform
  dependsOn:
    - component:user-service
    - resource:payments-db
  providesApis:
    - payments-api

Цей єдиний файл дає вашій організації видимість власності сервісів, залежностей, посилань на документацію та on-call інформації.

Крок 2: Впровадьте self-service інфраструктуру за допомогою Crossplane

Crossplane розширює Kubernetes, щоб провізіоніти і керувати хмарною інфраструктурою через стандартні Kubernetes-маніфести. Це означає, що розробники використовують ті ж kubectl-workflows, які вже знають.

Визначте повторно використовувану композицію інфраструктури для бази даних:

# composition.yaml
apiVersion: apiextensions.crossplane.io/v1
kind: Composition
metadata:
  name: postgres-standard
  labels:
    provider: aws
    database: postgresql
spec:
  compositeTypeRef:
    apiVersion: database.platform.io/v1alpha1
    kind: PostgreSQLInstance
  resources:
    - name: rds-instance
      base:
        apiVersion: rds.aws.upbound.io/v1beta1
        kind: Instance
        spec:
          forProvider:
            region: us-east-1
            instanceClass: db.t3.medium
            engine: postgres
            engineVersion: "15"
            allocatedStorage: 20
            publiclyAccessible: false
            storageEncrypted: true
            skipFinalSnapshot: false
            masterUsername: admin
          providerConfigRef:
            name: aws-provider
      patches:
        - fromFieldPath: "spec.parameters.storageGB"
          toFieldPath: "spec.forProvider.allocatedStorage"
        - fromFieldPath: "spec.parameters.size"
          toFieldPath: "spec.forProvider.instanceClass"
          transforms:
            - type: map
              map:
                small: db.t3.micro
                medium: db.t3.medium
                large: db.r6g.large

Тепер розробники запитують базу даних простим claim:

# database-claim.yaml
apiVersion: database.platform.io/v1alpha1
kind: PostgreSQLInstance
metadata:
  name: my-app-db
  namespace: team-payments
spec:
  parameters:
    storageGB: 50
    size: medium
  compositionSelector:
    matchLabels:
      provider: aws
      database: postgresql

Жодного доступу до cloud console. Жодної експертизи Terraform. Платформенна команда визначає запобіжники, а розробники самі обслуговують себе в їхніх межах.

Крок 3: Створіть Software Templates для нових сервісів

Backstage Software Templates дозволяють розробникам скаффолдити нові сервіси з вбудованими найкращими практиками вашої організації. Ось шаблон, що створює новий мікросервіс з попередньо налаштованими CI/CD, моніторингом і документацією:

# template.yaml
apiVersion: scaffolder.backstage.io/v1beta3
kind: Template
metadata:
  name: microservice-template
  title: Production Microservice
  description: Creates a new microservice with CI/CD, monitoring, and docs
spec:
  owner: platform-team
  type: service
  parameters:
    - title: Service Details
      required:
        - name
        - owner
        - language
      properties:
        name:
          title: Service Name
          type: string
          pattern: '^[a-z][a-z0-9-]*$'
        owner:
          title: Owner Team
          type: string
          ui:field: OwnerPicker
        language:
          title: Language
          type: string
          enum: [go, python, typescript]
  steps:
    - id: fetch-template
      name: Fetch Template
      action: fetch:template
      input:
        url: ./skeleton
        values:
          name: ${{ parameters.name }}
          owner: ${{ parameters.owner }}
    - id: publish
      name: Create Repository
      action: publish:github
      input:
        repoUrl: github.com?owner=myorg&repo=${{ parameters.name }}
        defaultBranch: main
    - id: register
      name: Register in Catalog
      action: catalog:register
      input:
        repoContentsUrl: ${{ steps.publish.output.repoContentsUrl }}
        catalogInfoPath: /catalog-info.yaml

Коли розробник натискає "Create" у порталі Backstage, він отримує повністю функціональний репозиторій з Dockerfile, Helm-чартами, GitHub Actions workflows, Prometheus metrics endpoints і реєстрацією в каталозі — все менш ніж за 60 секунд.

Крок 4: Забезпечте політики за допомогою Open Policy Agent

Ваша платформа повинна робити безпеку й комплаєнс автоматичними. Використовуйте Open Policy Agent (OPA) з Gatekeeper, щоб забезпечувати організаційні політики на рівні Kubernetes admission:

# policy: require resource limits on all containers
package kubernetes.admission

deny[msg] {
  container := input.review.object.spec.containers[_]
  not container.resources.limits.memory
  msg := sprintf("Container '%v' must have memory limits set", [container.name])
}

deny[msg] {
  container := input.review.object.spec.containers[_]
  not container.resources.limits.cpu
  msg := sprintf("Container '%v' must have CPU limits set", [container.name])
}

deny[msg] {
  input.review.object.spec.containers[_].securityContext.runAsRoot == true
  msg := "Containers must not run as root"
}

Ці політики невидимі для розробників, коли вони слідують golden paths — порушення з'являються лише тоді, коли хтось відхиляється від стандартних шаблонів, а повідомлення про помилки направляють їх назад.

Крок 5: Вимірюйте впровадження платформи та задоволення розробників

Будувати платформу без вимірювання її впливу — це летіти наосліп. Відстежуйте ці метрики:

  • Time to first deploy — Скільки часу від "у мене є ідея" до запуску в продакшн
  • Частота розгортань на команду — Чи команди постачають швидше після впровадження платформи
  • Self-service ratio — Відсоток запитів інфраструктури, виконаних без тікета
  • Developer NPS — Регулярні опитування, що вимірюють задоволення розробників платформою
  • Mean time to onboard — Як швидко нові інженери стають продуктивними

Використовуйте вбудований плагін TechInsights від Backstage або побудуйте кастомні дашборди з Prometheus та Grafana, щоб відстежувати ці метрики з часом.

Поширені помилки, яких слід уникати

Будувати занадто багато занадто рано. Починайте з найболючіших workflows — зазвичай це provisioning середовища і CI/CD — і розширюйте звідти. Мінімальна платформа, якою розробники насправді користуються, перемагає вичерпну, яку вони ігнорують.

Розглядати її як суто інфраструктурний проєкт. Platform engineering фундаментально про досвід розробника. Якщо ваша платформенна команда ніколи не говорить з розробниками, ви будуєте не те.

Робити платформу обов'язковою. Golden paths повинні бути привабливими, а не нав'язаними мандатами. Якщо розробники активно уникають вашої платформи, це фідбек, який вам потрібно почути.

Ігнорування документації. Кожен шаблон, кожен API, кожен workflow потребує чіткої документації. Функція TechDocs у Backstage дозволяє вам писати документацію як Markdown поряд з вашим кодом.

Рекомендований стек інструментів

ШарРекомендовані інструменти
ПорталBackstage, Port, Cortex
ІнфраструктураCrossplane, Terraform, Pulumi
ОркестраціяArgo Workflows, Tekton
ПолітикиOPA/Gatekeeper, Kyverno
СекретиHashiCorp Vault, External Secrets Operator
СпостережуваністьPrometheus, Grafana, OpenTelemetry
GitOpsArgoCD, Flux

Висновок

Platform engineering — це не побудова чергового інструмента, це побудова продукту для ваших розробників. Найуспішніші платформенні команди працюють як внутрішні стартапи: вони говорять зі своїми користувачами, ітерують на основі фідбеку і невпинно вимірюють результати.

У DevOpsVibe ми допомагаємо організаціям проєктувати і впроваджувати Internal Developer Platforms, адаптовані до їхньої інженерної культури і технологічного стека. Чи ви починаєте з нуля, чи масштабуєте існуючу платформу, наша команда має практичний досвід з Backstage, Crossplane і повним cloud-native екосистемою. Зв'яжіться з нами, щоб прискорити вашу подорож в platform engineering.

у категорії
platform-engineeringidpdeveloper-experiencebackstagekuberneteskubernetesself-service
працювати з нами

Хочете, щоб наша команда допомогла з вашою інфраструктурою?

talk to an engineerFree 30-min discovery callBook
close