Estoy buscando implementar una instancia de Redis en el clúster de Kubernetes.
En el sitio web oficial de Kubernetes aquí , usan la siguiente configuración de yaml, por ejemplo:
apiVersion: apps/v1 kind: Deployment metadata: name: redis-master labels: app: redis spec: selector: matchLabels: app: redis role: master tier: backend replicas: 1 template: metadata: labels: app: redis role: master tier: backend spec: containers: - name: master image: k8s.gcr.io/redis:e2e # or just image: redis resources: requests: cpu: 100m memory: 100Mi ports: - containerPort: 6379¿Son 100 millones de CPU y 100 millones de memoria una buena cifra a la que apuntar cuando se usa una instancia de Redis para fines de almacenamiento en caché? ¿Cuál debe ser el límite establecido?
No hay una respuesta adecuada a su pregunta. Todo depende de tus necesidades en este escenario.
Debe considerar los recursos en su nodo, sus solicitudes/límites de recursos , utilizará HPA o VPA , está en un entorno local o en un entorno de nube, cuántos pods se implementarán en este nodo, qué almacenará en caché, etc.
En su Deployment , establece solo requests para que redis pod siempre haya asignado al menos CPU: 100m y RAM: 100Mi . Como no se especificaron limits , podría usar más y más recursos hasta que se produzcan algunos errores debido a la falta de recursos (por ejemplo, puede terminate pods sin requests específicas). Tenga en cuenta que otros pods que se implementaron con Kubernetes también tienen algunas requests / limits específicos como kube-proxy o kube-dns , etc.
Para verificar el uso actual de recursos de sus nodos, puede usar los comandos:
$ kubectl top nodes NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% gke-cluster-1-default-pool-55c97a92-m2bb 61m 6% 718Mi 25% gke-cluster-1-default-pool-55c97a92-s907 108m 11% 748Mi 26% Si va a describe el nodo usando kubectl describe node <NodeName> , puede verificar los recursos totales del nodo en la sección Capacity y los recursos que Kubernetes ya usa en Allocatable . Por lo tanto, Capacity - Allocatable es el valor de sus recursos gratuitos en este momento específico (puede cambiar debido a requests / limits ).
Además, puede consultar el artículo con Redis Request/limits .
El pod de Redis se puede implementar con esas requests: 100m and 100Mi . Como no hay limits establecidos, el pod de Redis podría usar más y más recursos, lo que puede causar la terminación de otros pods. Si este nodo se dedicará solo al pod de Redis , puede usar los recursos máximos disponibles, valor de Capacity - Allocatable . Ahora, puede establecer un límite a la mitad de los node resources y luego cambiarlo según los resultados. Si el pod alcanzó limits , puede cambiarlo a valores más altos, si es el contrario, puede cambiar a valores más bajos.
Depende de tu escenario. Si redis se usa mucho y debe almacenar mucho en caché, posiblemente 100 m de memoria sea demasiado menos.
Posiblemente puedas usar algunas herramientas para monitorear tu redis y ver lo que realmente necesita.
kubectl top podsle muestra el uso actual del pod. Hazle una prueba de estrés y verás cuánto necesita. Mejor si tiene algo como Prometheus u otras herramientas de monitoreo, que también pueden brindarle estadísticas sobre desalojos y otros comportamientos.
Además, optaría por los gráficos de redis helm de bitnami. Le permite configurar su redis de una manera fácil configurando valores o un archivo de valores personalizados. Esos también están probados en producción.