Ответ
Минимальный набор для запуска stateless-приложения обычно включает два основных объекта Kubernetes:
- Deployment: Управляет жизненным циклом подов (создание, обновление, масштабирование). Он гарантирует, что всегда работает заданное количество идентичных реплик.
- Service: Обеспечивает стабильную сетевую конечную точку для доступа к группе подов, управляемых Deployment. Сервис выполняет балансировку нагрузки между ними.
Минимальные манифесты:
deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 2
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: app-container
image: myregistry/my-app:v1.0.0
ports:
- containerPort: 8080
env:
- name: ENV_VAR
value: "production"
service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
selector:
app: my-app
ports:
- port: 80 # Порт, на котором сервис доступен внутри кластера
targetPort: 8080 # Порт контейнера
type: ClusterIP # Тип по умолчанию, доступен только внутри кластера
Для доступа извне кластера потребуется дополнительный объект Ingress (вместе с Ingress Controller, например, nginx-ingress) или изменение типа сервиса на LoadBalancer/NodePort. Для production также почти всегда используются ConfigMap для конфигурации и Secret для чувствительных данных.