Налаштування Kubernetes для оркестрації веб-застосунку

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування Kubernetes для оркестрації веб-застосунку
Складна
від 1 тижня до 3 місяців
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Налаштування оркестрації Kubernetes для веб-додатку

Kubernetes (k8s) — це стандарт для оркестрації контейнерів. Автоматично перезапускає упали поди, масштабує за навантаженням, управляє конфігурацією та секретами, реалізує rolling updates та rollbacks.

Мінімальний набір маніфестів

# namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: myapp
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-web
  namespace: myapp
spec:
  replicas: 3
  selector:
    matchLabels: { app: myapp-web }
  template:
    metadata:
      labels: { app: myapp-web }
    spec:
      containers:
        - name: web
          image: registry.example.com/myapp:v1.0.0
          ports:
            - containerPort: 8080
          envFrom:
            - configMapRef: { name: myapp-config }
            - secretRef: { name: myapp-secrets }
          resources:
            requests:
              cpu: "100m"
              memory: "256Mi"
            limits:
              cpu: "500m"
              memory: "512Mi"
          readinessProbe:
            httpGet: { path: /health/ready, port: 8080 }
            initialDelaySeconds: 10
            periodSeconds: 5
          livenessProbe:
            httpGet: { path: /health/live, port: 8080 }
            initialDelaySeconds: 30
            periodSeconds: 30
      terminationGracePeriodSeconds: 60
# service.yaml
apiVersion: v1
kind: Service
metadata:
  name: myapp-web
  namespace: myapp
spec:
  selector: { app: myapp-web }
  ports:
    - port: 80
      targetPort: 8080
# ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: myapp-ingress
  namespace: myapp
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod
    nginx.ingress.kubernetes.io/rate-limit: "100"
    nginx.ingress.kubernetes.io/proxy-body-size: "50m"
spec:
  ingressClassName: nginx
  tls:
    - hosts: [example.com]
      secretName: myapp-tls
  rules:
    - host: example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: myapp-web
                port: { number: 80 }

ConfigMap та Secrets

# config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: myapp-config
  namespace: myapp
data:
  APP_ENV: production
  APP_URL: https://example.com
  REDIS_HOST: redis-master

---
apiVersion: v1
kind: Secret
metadata:
  name: myapp-secrets
  namespace: myapp
type: Opaque
data:
  # echo -n "value" | base64
  DB_PASSWORD: c2VjcmV0cGFzcw==
  APP_KEY: YmFzZTY0Oi4uLg==

Horizontal Pod Autoscaler

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: myapp-hpa
  namespace: myapp
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: myapp-web
  minReplicas: 2
  maxReplicas: 20
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 70
    - type: Resource
      resource:
        name: memory
        target:
          type: Utilization
          averageUtilization: 80

Jobs та CronJobs

apiVersion: batch/v1
kind: CronJob
metadata:
  name: cleanup-old-files
  namespace: myapp
spec:
  schedule: "0 2 * * *"
  concurrencyPolicy: Forbid
  jobTemplate:
    spec:
      template:
        spec:
          restartPolicy: OnFailure
          containers:
            - name: cleanup
              image: registry.example.com/myapp:latest
              command: ["php", "artisan", "files:cleanup"]
              envFrom:
                - secretRef: { name: myapp-secrets }

Розгортання через Kustomize

# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

namespace: myapp
images:
  - name: registry.example.com/myapp
    newTag: v1.2.0

resources:
  - namespace.yaml
  - deployment.yaml
  - service.yaml
  - ingress.yaml
  - hpa.yaml
kubectl apply -k ./k8s/production/

# Оновити образ
kustomize edit set image registry.example.com/myapp:v1.3.0
kubectl apply -k .

# Статус
kubectl rollout status deployment/myapp-web -n myapp

# Откат
kubectl rollout undo deployment/myapp-web -n myapp

GitHub Actions розгортання

- name: Update k8s image
  run: |
    kubectl set image deployment/myapp-web \
      web=registry.example.com/myapp:${{ github.sha }} \
      -n myapp

    kubectl rollout status deployment/myapp-web -n myapp --timeout=5m

Лінія часу

Задача Лінія часу
Базові маніфести + розгортання 3–4 дні
Ingress + cert-manager + TLS +1–2 дні
HPA + обмеження ресурсів +1 день
Повний GitOps пайплайн 7–10 днів