Ответ
В повседневной работе с Kubernetes я постоянно взаимодействую со следующими основными ресурсами:
- Pod: Минимальная единица развёртывания. На практике редко создаю Pod напрямую, вместо этого использую контроллеры.
- Deployment: Основной ресурс для развёртывания stateless-приложений. Он управляет ReplicaSet'ами и обеспечивает стратегические обновления (rolling update) и откаты (rollback).
- Service: Абстракция для доступа к группе Pod'ов.
ClusterIPдля внутреннего доступа,NodePortдля тестирования,LoadBalancerдля облачных провайдеров. - ConfigMap & Secret: Хранение конфигурации. ConfigMap — для несекретных данных (например, флагов функциональности), Secret — для паролей, токенов (хранятся в base64, но лучше использовать внешние секреты, например, из HashiCorp Vault).
- PersistentVolume (PV) / PersistentVolumeClaim (PVC): Для предоставления постоянного хранилища stateful-приложениям (например, базам данных).
Типичный манифест для развёртывания веб-приложения:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
replicas: 3
selector:
matchLabels:
app: web-app
template:
metadata:
labels:
app: web-app
spec:
containers:
- name: app
image: myregistry/web-app:v1.2.0
ports:
- containerPort: 8080
envFrom:
- configMapRef:
name: app-config
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
---
apiVersion: v1
kind: Service
metadata:
name: web-app-service
spec:
selector:
app: web-app
ports:
- port: 80
targetPort: 8080
type: ClusterIP