Архитектура Kubernetes
Kubernetes — это система оркестрации контейнеров, автоматизирующая деплой, масштабирование и управление приложениями.
▸Компоненты кластера
Control Plane:
Worker Nodes:
Поды (Pods)
Под — минимальная единица деплоя, содержащая один или более контейнеров.
1apiVersion: v12kind: Pod3metadata:4 name: myapp5 labels:6 app: myapp7spec:8 containers:9 - name: web10 image: nginx:1.2511 ports:12 - containerPort: 8013 resources:14 requests:15 memory: "64Mi"16 cpu: "250m"17 limits:18 memory: "128Mi"19 cpu: "500m"20 - name: sidecar21 image: busybox22 command: ['sh', '-c', 'while true; do echo "sidecar"; sleep 60; done']
Деплойменты (Deployments)
1apiVersion: apps/v12kind: Deployment3metadata:4 name: myapp5spec:6 replicas: 37 selector:8 matchLabels:9 app: myapp10 template:11 metadata:12 labels:13 app: myapp14 spec:15 containers:16 - name: web17 image: myapp:1.018 ports:19 - containerPort: 808020 strategy:21 type: RollingUpdate22 rollingUpdate:23 maxSurge: 124 maxUnavailable: 0
Сервисы (Services)
1# ClusterIP (внутренний доступ)2apiVersion: v13kind: Service4metadata:5 name: myapp-service6spec:7 type: ClusterIP8 selector:9 app: myapp10 ports:11 - port: 8012 targetPort: 80801314---15# NodePort (доступ через ноду)16apiVersion: v117kind: Service18metadata:19 name: myapp-nodeport20spec:21 type: NodePort22 selector:23 app: myapp24 ports:25 - port: 8026 targetPort: 808027 nodePort: 300802829---30# LoadBalancer (внешний балансировщик)31apiVersion: v132kind: Service33metadata:34 name: myapp-lb35spec:36 type: LoadBalancer37 selector:38 app: myapp39 ports:40 - port: 8041 targetPort: 8080
Ингресс (Ingress)
1apiVersion: networking.k8s.io/v12kind: Ingress3metadata:4 name: myapp-ingress5 annotations:6 nginx.ingress.kubernetes.io/rewrite-target: /7spec:8 rules:9 - host: myapp.example.com10 http:11 paths:12 - path: /13 pathType: Prefix14 backend:15 service:16 name: myapp-service17 port:18 number: 80
Конфигурации и секреты
1apiVersion: v12kind: ConfigMap3metadata:4 name: myapp-config5data:6 DATABASE_HOST: "db.example.com"7 LOG_LEVEL: "info"89---10apiVersion: v111kind: Secret12metadata:13 name: myapp-secret14type: Opaque15data:16 DB_PASSWORD: cGFzc3dvcmQxMjM=
Horizontal Pod Autoscaler
1apiVersion: autoscaling/v22kind: HorizontalPodAutoscaler3metadata:4 name: myapp-hpa5spec:6 scaleTargetRef:7 apiVersion: apps/v18 kind: Deployment9 name: myapp10 minReplicas: 211 maxReplicas: 1012 metrics:13 - type: Resource14 resource:15 name: cpu16 target:17 type: Utilization18 averageUtilization: 70
Полезные команды
1# Просмотр подов2kubectl get pods -o wide34# Логи5kubectl logs -f myapp-pod67# Exec8kubectl exec -it myapp-pod -- sh910# Порт-форвардинг11kubectl port-forward svc/myapp-service 8080:801213# Масштабирование14kubectl scale deployment myapp --replicas=5
Заключение
Kubernetes — это стандарт оркестрации контейнеров в продакшн. Понимание подов, сервисов, деплойментов и сетей критично для управления современными microservices-приложениями.