Ответ
Да, Kubernetes — основной инструмент оркестрации в моей практике. Работал как с managed-сервисами (EKS, GKE, AKS), так и с self-hosted кластерами, развернутыми через kubeadm или RKE.
Ключевые направления работы:
- Жизненный цикл кластера: Развертывание, обновление, масштабирование и устранение неисправностей.
- Безопасность и управление доступом: Глубокая настройка RBAC, Pod Security Policies (или их замен), Network Policies (Calico, Cilium) для сегментации трафика.
- Управление приложениями: Использование Helm для пакетирования и деплоя. Реализация стратегий GitOps с помощью ArgoCD для декларативного управления состоянием кластера.
- Наблюдаемость: Внедрение стека мониторинга на основе Prometheus (часто через prometheus-operator) и Grafana для сбора метрик кластера и приложений. Настройка логирования через Loki или EFK-стек.
Пример: Манифест Deployment с учетом лучших практик — лимиты ресурсов, пробы жизнеспособности и готовности, anti-affinity:
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-deployment
labels:
app: api
spec:
replicas: 3
selector:
matchLabels:
app: api
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
template:
metadata:
labels:
app: api
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- api
topologyKey: kubernetes.io/hostname
containers:
- name: api
image: my-registry/api:v1.2.3
ports:
- containerPort: 8080
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
Также настраивал HorizontalPodAutoscaler, Ingress-контроллеры (Nginx, Traefik) и StatefulSets для stateful-приложений (например, базы данных).