Kubernetes (K8s) — это система оркестрации контейнеризированных приложений с открытым исходным кодом, разработанная Google. Она обеспечивает автоматическое развертывание, масштабирование и управление контейнерными приложениями.
Перед развертыванием в K8s нужен оптимизированный Docker-образ:
FROM php:8.2-fpm-alpine
RUN apk add --no-cache \
nginx \
supervisor \
&& docker-php-ext-install opcache pdo_mysql
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
COPY . /var/www/html
RUN composer install --no-dev --optimize-autoloader
COPY docker/nginx.conf /etc/nginx/nginx.conf
COPY docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
EXPOSE 8080
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
apiVersion: apps/v1
kind: Deployment
metadata:
name: php-app
spec:
replicas: 3
selector:
matchLabels:
app: php-app
template:
metadata:
labels:
app: php-app
spec:
containers:
- name: php-app
image: your-registry/php-app:1.0.0
ports:
- containerPort: 8080
envFrom:
- configMapRef:
name: php-app-config
- secretRef:
name: php-app-secrets
resources:
requests:
cpu: "100m"
memory: "256Mi"
limits:
cpu: "500m"
memory: "512Mi"
apiVersion: v1
kind: Service
metadata:
name: php-app-service
spec:
selector:
app: php-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: php-app-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: your-app.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: php-app-service
port:
number: 80
Горизонтальное масштабирование:
env:
- name: SESSION_DRIVER
value: "redis"
Миграции БД:
apiVersion: batch/v1
kind: Job
metadata:
name: php-migrations
spec:
template:
spec:
containers:
- name: migrate
image: your-registry/php-app:1.0.0
command: ["php", "artisan", "migrate", "--force"]
restartPolicy: Never
ConfigMap (configmap.yaml):
apiVersion: v1
kind: ConfigMap
metadata:
name: php-app-config
data:
APP_ENV: "production"
APP_DEBUG: "false"
CACHE_DRIVER: "redis"
Secret (secret.yaml):
apiVersion: v1
kind: Secret
metadata:
name: php-app-secrets
type: Opaque
data:
DB_PASSWORD: base64-encoded-password
APP_KEY: base64-encoded-key
HPA (Horizontal Pod Autoscaler):
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: php-app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
Liveness/Readiness пробы:
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
Пример шага деплоя в GitHub Actions:
- name: Deploy to Kubernetes
run: |
kubectl apply -f k8s/
kubectl rollout status deployment/php-app
Kubernetes предоставляет мощный инструментарий для оркестрации PHP-приложений, обеспечивая масштабируемость, отказоустойчивость и удобство управления. Правильно настроенный кластер K8s позволяет PHP-приложениям работать в продакшене с высокой доступностью и эффективно использовать ресурсы.