Показаны различия между двумя версиями страницы.
| — |
методология_devops:создание_deployment_service_ingress_в_kubernetes:start [2025/05/31 21:15] (текущий) kirill создано |
||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| + | # Создание Deployment, Service, Ingress в Kubernetes | ||
| + | ## Введение | ||
| + | |||
| + | В Kubernetes для запуска и управления приложениями используются различные абстракции. Три ключевых из них - Deployment, Service и Ingress - обеспечивают масштабирование, | ||
| + | |||
| + | ## 1. Deployment | ||
| + | |||
| + | * **Определение: | ||
| + | * **Основные характеристики: | ||
| + | * **Декларативное обновление: | ||
| + | * **Rollouts и Rollbacks: | ||
| + | * **Масштабирование: | ||
| + | * **Самовосстановление: | ||
| + | * **YAML-манифест Deployment (пример): | ||
| + | ```yaml | ||
| + | apiVersion: apps/v1 | ||
| + | kind: Deployment | ||
| + | metadata: | ||
| + | name: my-app-deployment | ||
| + | labels: | ||
| + | app: my-app | ||
| + | spec: | ||
| + | replicas: 3 | ||
| + | selector: | ||
| + | matchLabels: | ||
| + | app: my-app | ||
| + | template: | ||
| + | metadata: | ||
| + | labels: | ||
| + | app: my-app | ||
| + | spec: | ||
| + | containers: | ||
| + | - name: my-app-container | ||
| + | image: nginx: | ||
| + | ports: | ||
| + | - containerPort: | ||
| + | ``` | ||
| + | * **`apiVersion`: | ||
| + | * **`kind`:** Тип объекта (Deployment). | ||
| + | * **`metadata.name`: | ||
| + | * **`metadata.labels`: | ||
| + | * **`spec.replicas`: | ||
| + | * **`spec.selector.matchLabels`: | ||
| + | * **`spec.template.metadata.labels`: | ||
| + | * **`spec.template.spec.containers`: | ||
| + | * **Управление Deployment: | ||
| + | * **Создание: | ||
| + | * **Просмотр: | ||
| + | * **Просмотр деталей: | ||
| + | * **Масштабирование: | ||
| + | * **Обновление образа: | ||
| + | * **Откат: | ||
| + | * **Просмотр истории обновлений: | ||
| + | |||
| + | ## 2. Service | ||
| + | |||
| + | * **Определение: | ||
| + | * **Типы Service:** | ||
| + | * **ClusterIP (по умолчанию): | ||
| + | * **NodePort: | ||
| + | * **LoadBalancer: | ||
| + | * **ExternalName: | ||
| + | * **YAML-манифест Service (пример - ClusterIP): | ||
| + | ```yaml | ||
| + | apiVersion: v1 | ||
| + | kind: Service | ||
| + | metadata: | ||
| + | name: my-app-service | ||
| + | labels: | ||
| + | app: my-app | ||
| + | spec: | ||
| + | selector: | ||
| + | app: my-app | ||
| + | ports: | ||
| + | - protocol: TCP | ||
| + | port: 80 | ||
| + | targetPort: 80 | ||
| + | ``` | ||
| + | * **`apiVersion`: | ||
| + | * **`kind`:** Тип объекта (Service). | ||
| + | * **`metadata.name`: | ||
| + | * **`metadata.labels`: | ||
| + | * **`spec.selector`: | ||
| + | * **`spec.ports`: | ||
| + | * **`protocol`: | ||
| + | * **`port`:** Порт Service, на котором он принимает входящие соединения. | ||
| + | * **`targetPort`: | ||
| + | * **YAML-манифест Service (пример - NodePort): | ||
| + | ```yaml | ||
| + | apiVersion: v1 | ||
| + | kind: Service | ||
| + | metadata: | ||
| + | name: my-app-nodeport-service | ||
| + | labels: | ||
| + | app: my-app | ||
| + | spec: | ||
| + | type: NodePort | ||
| + | selector: | ||
| + | app: my-app | ||
| + | ports: | ||
| + | - protocol: TCP | ||
| + | port: 80 | ||
| + | targetPort: 80 | ||
| + | nodePort: 30080 | ||
| + | ``` | ||
| + | * **`type: NodePort`: | ||
| + | * **`spec.ports.nodePort`: | ||
| + | * **YAML-манифест Service (пример - LoadBalancer): | ||
| + | ```yaml | ||
| + | apiVersion: v1 | ||
| + | kind: Service | ||
| + | metadata: | ||
| + | name: my-app-loadbalancer-service | ||
| + | labels: | ||
| + | app: my-app | ||
| + | spec: | ||
| + | type: LoadBalancer | ||
| + | selector: | ||
| + | app: my-app | ||
| + | ports: | ||
| + | - protocol: TCP | ||
| + | port: 80 | ||
| + | targetPort: 80 | ||
| + | ``` | ||
| + | * **`type: LoadBalancer`: | ||
| + | * **Управление Service:** | ||
| + | * **Создание: | ||
| + | * **Просмотр: | ||
| + | * **Просмотр деталей: | ||
| + | * **Просмотр endpoints (IP-адреса Pod' | ||
| + | |||
| + | ## 3. Ingress | ||
| + | |||
| + | * **Определение: | ||
| + | * **Требования: | ||
| + | * **Основные характеристики: | ||
| + | * **Маршрутизация на основе хоста: | ||
| + | * **Маршрутизация на основе пути:** Направление трафика на разные сервисы в зависимости от пути в URL-запросе. | ||
| + | * **TLS/SSL Termination: | ||
| + | * **Балансировка нагрузки: | ||
| + | * **YAML-манифест Ingress (пример): | ||
| + | ```yaml | ||
| + | apiVersion: networking.k8s.io/ | ||
| + | kind: Ingress | ||
| + | metadata: | ||
| + | name: my-app-ingress | ||
| + | annotations: | ||
| + | nginx.ingress.kubernetes.io/ | ||
| + | spec: | ||
| + | rules: | ||
| + | - host: my-app.example.com | ||
| + | http: | ||
| + | paths: | ||
| + | - path: / | ||
| + | pathType: Prefix | ||
| + | backend: | ||
| + | service: | ||
| + | name: my-app-service | ||
| + | port: | ||
| + | number: 80 | ||
| + | - host: api.example.com | ||
| + | http: | ||
| + | paths: | ||
| + | - path: /v1 | ||
| + | pathType: Prefix | ||
| + | backend: | ||
| + | service: | ||
| + | name: my-api-service | ||
| + | port: | ||
| + | number: 8080 | ||
| + | ``` | ||
| + | * **`apiVersion`: | ||
| + | * **`kind`:** Тип объекта (Ingress). | ||
| + | * **`metadata.name`: | ||
| + | * **`metadata.annotations`: | ||
| + | * **`spec.rules`: | ||
| + | * **`host`:** Доменное имя, для которого применяется правило. | ||
| + | * **`http.paths`: | ||
| + | * **`path`:** Путь в URL-запросе. | ||
| + | * **`pathType`: | ||
| + | * **`backend.service.name`: | ||
| + | * **`backend.service.port.number`: | ||
| + | * **Управление Ingress:** | ||
| + | * **Создание: | ||
| + | * **Просмотр: | ||
| + | * **Просмотр деталей: | ||
| + | |||
| + | ## Взаимодействие Deployment, Service, Ingress | ||
| + | |||
| + | 1. **Deployment** управляет репликами Pod' | ||
| + | 2. **Service** предоставляет стабильный внутренний IP-адрес и DNS-имя для группы Pod' | ||
| + | 3. **Ingress** обеспечивает внешний доступ к Service' | ||
| + | |||
| + | ## Заключение | ||
| + | |||
| + | Deployment, Service и Ingress являются фундаментальными строительными блоками для развертывания и управления приложениями в Kubernetes. Понимание их назначения и взаимодействия позволяет создавать масштабируемые, | ||