Ответ
Развертывание Docker-образа в Kubernetes — это стандартная операция, которая обычно выполняется через ресурс Deployment. Он обеспечивает declarative updates, масштабирование и self-healing для ваших подов. Вот пошаговый пример.
1. Подготовка образа Сначала образ должен быть собран и помещен в доступный для кластера реестр (Docker Hub, Google Container Registry, Amazon ECR, приватный Harbor).
docker build -t myregistry.com/myapp:v1.0 .
docker push myregistry.com/myapp:v1.0
2. Создание манифеста Deployment Этот манифест описывает желаемое состояние: 3 реплики пода, использующего наш образ.
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app-container
image: myregistry.com/myapp:v1.0 # Указываем наш Docker-образ
ports:
- containerPort: 8080
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
3. Применение манифеста и проверка
# Применяем конфигурацию
kubectl apply -f deployment.yaml
# Проверяем статус подов
kubectl get pods -l app=my-app
# NAME READY STATUS RESTARTS AGE
# my-app-deployment-7cbbd6f9c6-2jqwx 1/1 Running 0 10s
# my-app-deployment-7cbbd6f9c6-kk9lp 1/1 Running 0 10s
# my-app-deployment-7cbbd6f9c6-xcvbn 1/1 Running 0 10s
# Смотрим статус развертывания
kubectl rollout status deployment/my-app-deployment
4. Обеспечение доступа к приложению (Service) Поды сами по себе эфемерны. Чтобы обеспечить стабильную сетевую точку доступа к ним, создается Service.
# service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80 # Порт, на котором Service доступен внутри кластера
targetPort: 8080 # Порт контейнера, куда перенаправлять трафик
type: LoadBalancer # Для внешнего доступа. Для внутреннего — ClusterIP
Применяем: kubectl apply -f service.yaml. Cloud-провайдер автоматически создаст внешний балансировщик нагрузки.
5. Обновление образа (Rolling Update) Deployment поддерживает плавное обновление без простоя. Чтобы обновить версию образа:
kubectl set image deployment/my-app-deployment my-app-container=myregistry.com/myapp:v2.0
# Или отредактировать манифест и применить заново: kubectl apply -f deployment.yaml
Kubernetes постепенно создаст новые поды с v2.0 и удалит старые с v1.0, контролируя готовность новых подов через readinessProbe.