Показаны различия между двумя версиями страницы.
— |
методология_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. Понимание их назначения и взаимодействия позволяет создавать масштабируемые, |