
Por defecto, todos los recursos del clúster Kubernetes se crean en un espacio de nombres predeterminado. Un pod se ejecutará con solicitudes/límites de CPU y memoria ilimitados. A Espacio de nombres de Kubernetes permite particionar los recursos creados en un grupo de nombres lógicos. Cada espacio de nombres proporciona:
- un alcance único de recursos para evitar colisiones de nombres
- políticasgarantizar una autoridad adecuada a los usuarios de confianza
- capacidad de especificar limitaciones para el consumo de recursos
Esto permite que un clúster Kubernetes comparta recursos por múltiples grupos y proporcione diferentes niveles de QoS a cada grupo. Los recursos creados en un espacio de nombres se ocultan de otros espacios de nombres. Se pueden crear múltiples espacios de nombres, cada uno potencialmente con diferentes restricciones.
Espacio de nombres predeterminado de Kubernetes
Por defecto, cada recurso creado por el usuario en el clúster Kubernetes se ejecuta en un espacio de nombres predeterminado, denominado por defecto.
|
1 2 3 4 |
./kubernetes/grupo/kubectl.sh consiga espacio de nombres NOMBRE ETIQUETAS ESTADO EDAD por defecto Activo 1m kube-sistema Activo 1m |
Cualquier pod, servicio o controlador de replicación se creará en este espacio de nombres. sistema kube está reservado para los recursos creados por el clúster Kubernetes. Puede consultar más detalles sobre el espacio de nombres:
|
1 2 3 4 5 6 7 8 9 10 11 |
./kubernetes/grupo/kubectl.sh describa espacios de nombres por defecto Nombre: por defecto Etiquetas: Estado: Activo No recurso cuota. Recursos Límites Tipo Recursos Min Max Solicitar Límite Límite/Solicitar ---- -------- --- --- ------- ----- ------------- Contenedor cpu - - 100m - - |
Esta descripción muestra la cuota de recursos (si existe), así como los rangos de límite de recursos. Así que vamos a crear un controlador de replicación Couchbase como:
|
1 |
./kubernetes/grupo/kubectl.sh ejecute couchbase --imagen=arungupta/couchbase |
Compruebe el controlador de replicación existente:
|
1 2 3 |
./kubernetes/grupo/kubectl.sh consiga rc CONTROLADOR CONTENEDOR(S) IMAGEN(S) SELECTOR RÉPLICAS EDAD couchbase couchbase arungupta/couchbase ejecute=couchbase 1 5m |
Por defecto, sólo se muestran los recursos del espacio de nombres del usuario. Los recursos de todos los espacios de nombres pueden mostrarse utilizando --all-namespaces opción:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
./kubernetes/grupo/kubectl.sh consiga rc --todos-espacios de nombres NAMESPACE CONTROLADOR CONTENEDOR(S) IMAGEN(S) SELECTOR RÉPLICAS EDAD por defecto couchbase couchbase arungupta/couchbase ejecute=couchbase 1 5m kube-sistema montonero-v11 montonero gcr.io/google_contenedores/montonero:v0.18.4 k8s-aplicación=montonero,versión=v11 1 6m kube-sistema kube-dns-v9 etcd gcr.io/google_contenedores/etcd:2.0.9 k8s-aplicación=kube-dns,versión=v9 1 6m kube2sky gcr.io/google_contenedores/kube2sky:1.11 skydns gcr.io/google_contenedores/skydns:2015-10-13-8c72f8c healthz gcr.io/google_contenedores/exechealthz:1.0 kube-sistema kube-ui-v4 kube-ui gcr.io/google_contenedores/kube-ui:v4 k8s-aplicación=kube-ui,versión=v4 1 6m kube-sistema l7-lb-controlador-v0.5.2 por defecto-http-backend gcr.io/google_contenedores/backend por defecto:1.0 k8s-aplicación=glbc,versión=v0.5.2 1 6m l7-lb-controlador gcr.io/google_contenedores/glbc:0.5.2 kube-sistema control-influxdb-grafana-v2 influxdb gcr.io/google_contenedores/heapster_influxdb:v0.4 k8s-aplicación=afluenciaGrafana,versión=v2 1 6m grafana beta.gcr.io/google_contenedores/heapster_grafana:v2.1.1 |
Como puede ver, el arungupta/couchbase se ejecuta en el por defecto espacio de nombres. Todos los demás recursos se ejecutan en el espacio de nombres sistema kube namespace. Comprobemos el contexto de este controlador de replicación:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
./kubernetes/grupo/kubectl.sh config ver couchbase apiVersion: v1 racimos: - grupo: certificado-autoridad-datos: REDACTED servidor: https://104.197.10.200 nombre: couchbase-en-kubernetes_kubernetes contextos: - contexto: grupo: couchbase-en-kubernetes_kubernetes usuario: couchbase-en-kubernetes_kubernetes nombre: couchbase-en-kubernetes_kubernetes actual-contexto: couchbase-en-kubernetes_kubernetes amable: Configurar preferencias: {} usuarios: - nombre: couchbase-en-kubernetes_kubernetes usuario: cliente-certificado-datos: REDACTED cliente-clave-datos: REDACTED ficha: 1RUrsvA5RDwwRNf0eOvz86elmniOK0oj - nombre: couchbase-en-kubernetes_kubernetes-básico-auth usuario: contraseña: cZ9fZSuzIqq5kdnj nombre de usuario: admin |
Busque contextos.nombre.contexto para ver el contexto existente. Este se manipulará más adelante.
Crear un recurso en un nuevo espacio de nombres de Kubernetes
Primero vamos a crear un nuevo espacio de nombres. Esto puede hacerse utilizando el siguiente archivo de configuración:
|
1 2 3 4 5 6 |
apiVersion: v1 amable: Espacio de nombres metadatos: nombre: desarrollo etiquetas: nombre: desarrollo |
El espacio de nombres se crea como:
|
1 2 |
./kubernetes/grupo/kubectl.sh crear -f myns.yaml espacio de nombres "desarrollo" creado |
A continuación, la consulta de todos los espacios de nombres da:
|
1 2 3 4 5 |
./kubernetes/grupo/kubectl.sh consiga espacio de nombres NOMBRE ETIQUETAS ESTADO EDAD por defecto Activo 9m desarrollo nombre=desarrollo Activo 13s kube-sistema Activo 8m |
Se puede crear un nuevo controlador de replicación en este nuevo espacio de nombres utilizando --namespace opción:
|
1 2 |
./kubernetes/grupo/kubectl.sh --espacio de nombres=desarrollo ejecute couchbase --imagen=arungupta/couchbase controlador de réplica "couchbase" creado |
La lista de recursos en todos los espacios de nombres tiene este aspecto:
|
1 2 3 4 5 6 |
./kubernetes/grupo/kubectl.sh consiga rc --todos-espacios de nombres NAMESPACE CONTROLADOR CONTENEDOR(S) IMAGEN(S) SELECTOR RÉPLICAS EDAD por defecto couchbase couchbase arungupta/couchbase ejecute=couchbase 1 4m desarrollo couchbase couchbase arungupta/couchbase ejecute=couchbase 1 2m kube-sistema montonero-v11 montonero gcr.io/google_contenedores/montonero:v0.18.4 k8s-aplicación=montonero,versión=v11 1 31m . . . |
Como se ve, hay dos controladores de replicación con arungupta/couchbase imagen - una en por defecto y otro en desarrollo espacio de nombres.
Establecer el espacio de nombres de Kubernetes para un recurso existente
Si un recurso ya está creado, se le puede asignar un espacio de nombres. En un recurso creado previamente, se puede establecer un nuevo contexto en el espacio de nombres:
|
1 2 |
./kubernetes/grupo/kubectl.sh config configure-contexto dev --espacio de nombres=desarrollo --grupo=couchbase-en-kubernetes_kubernetes --usuario=couchbase-en-kubernetes_kubernetes contexto "dev" configure. |
Ahora se muestra el contexto:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
./kubernetes/grupo/kubectl.sh config ver couchbase apiVersion: v1 racimos: - grupo: certificado-autoridad-datos: REDACTED servidor: https://104.197.10.200 nombre: couchbase-en-kubernetes_kubernetes contextos: - contexto: grupo: couchbase-en-kubernetes_kubernetes usuario: couchbase-en-kubernetes_kubernetes nombre: couchbase-en-kubernetes_kubernetes - contexto: grupo: couchbase-en-kubernetes_kubernetes espacio de nombres: desarrollo usuario: couchbase-en-kubernetes_kubernetes nombre: dev actual-contexto: couchbase-en-kubernetes_kubernetes amable: Configurar preferencias: {} usuarios: - nombre: couchbase-en-kubernetes_kubernetes usuario: cliente-certificado-datos: REDACTED cliente-clave-datos: REDACTED ficha: 1RUrsvA5RDwwRNf0eOvz86elmniOK0oj - nombre: couchbase-en-kubernetes_kubernetes-básico-auth usuario: contraseña: cZ9fZSuzIqq5kdnj nombre de usuario: admin |
El segundo atributo de contextos.contexto muestra que se ha creado un nuevo contexto. También muestra que el contexto actual sigue siendo couchbase-en-kubernetes_kubernetes. Dado que no se especifica ningún espacio de nombres en ese contexto, pertenece al espacio de nombres por defecto. Cambie el contexto:
|
1 2 |
./kubernetes/grupo/kubectl.sh config utilice-contexto dev conmutado a contexto "dev". |
Consulte la lista de controladores de replicación:
|
1 2 |
./kubernetes/grupo/kubectl.sh consiga rc CONTROLADOR CONTENEDOR(S) IMAGEN(S) SELECTOR RÉPLICAS EDAD |
Obviamente, no hay controladores de replicación ejecutándose en este contexto. Vamos a crear un nuevo controlador de replicación en este nuevo espacio de nombres:
|
1 2 |
./kubernetes/grupo/kubectl.sh ejecute couchbase --imagen=arungupta/couchbase controlador de réplica "couchbase" creado |
Y ver la lista de controladores de replicación en todos los espacios de nombres:
|
1 2 3 4 5 6 |
./kubernetes/grupo/kubectl.sh consiga rc --todos-espacios de nombres NAMESPACE CONTROLADOR CONTENEDOR(S) IMAGEN(S) SELECTOR RÉPLICAS EDAD por defecto couchbase couchbase arungupta/couchbase ejecute=couchbase 1 16m desarrollo couchbase couchbase arungupta/couchbase ejecute=couchbase 1 4s kube-sistema montonero-v11 montonero gcr.io/google_contenedores/montonero:v0.18.4 k8s-aplicación=montonero,versión=v11 1 17m . . . |
Ahora puedes ver dos arungupta/couchbase controladores de replicación que se ejecutan en dos espacios de nombres diferentes.
Eliminar un recurso de Kubernetes en el espacio de nombres
Se puede eliminar un recurso calificando completamente el nombre del recurso:
|
1 2 |
./kubernetes/grupo/kubectl.sh --espacio de nombres=por defecto borrar rc couchbase controlador de réplica "couchbase" suprimido |
Del mismo modo, el otro controlador de replicación se puede eliminar como:
|
1 2 |
./kubernetes/grupo/kubectl.sh --espacio de nombres=desarrollo borrar rc couchbase controlador de réplica "couchbase" suprimido |
Por último, vea la lista de todos los controladores de replicación en todos los espacios de nombres:
|
1 2 3 4 5 |
./kubernetes/grupo/kubectl.sh consiga rc --todos-espacios de nombres NAMESPACE CONTROLADOR CONTENEDOR(S) IMAGEN(S) SELECTOR RÉPLICAS EDAD kube-sistema montonero-v11 montonero gcr.io/google_contenedores/montonero:v0.18.4 k8s-aplicación=montonero,versión=v11 1 3h kube-sistema kube-dns-v9 etcd gcr.io/google_contenedores/etcd:2.0.9 k8s-aplicación=kube-dns,versión=v9 1 3h . . . |
Esto confirma que se han eliminado todos los controladores de replicación creados por el usuario.
Cuota y límite de recursos mediante el espacio de nombres de Kubernetes
A cada espacio de nombres se le puede asignar una cuota de recursos. Por defecto, un pod se ejecutará con solicitudes/límites de CPU y memoria ilimitados. Especificar una cuota permite restringir la cantidad de recursos del clúster que pueden consumir todos los pods de un espacio de nombres. La cuota de recursos puede especificarse utilizando un archivo de configuración:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
apiVersion: v1 amable: Cuota de recursos metadatos: nombre: cuota spec: duro: cpu: "20" memoria: 1Gi vainas: "10" controladores de replicación: "20" resourcequotas: "1" servicios: "5" |
El sistema de cuotas admite los siguientes recursos:
| Recursos | Descripción |
|---|---|
cpu |
Uso total de cpu solicitado |
memoria |
Uso total de memoria solicitada |
vainas |
Número total de pods activos en los que la fase está pendiente o activa. |
servicios |
Número total de servicios |
controladores de replicación |
Número total de controladores de replicación |
resourcequotas |
Número total de cuotas de recursos |
secretos |
Número total de secretos |
reclamaciones persistentes |
Número total de siniestros de volumen persistente |
Esta cuota de recursos puede crearse en un espacio de nombres:
|
1 2 |
./kubernetes/grupo/kubectl.sh --espacio de nombres=desarrollo crear -f cuota.yaml cuota de recursos "cuota" creado |
La cuota creada puede verse como:
|
1 2 3 4 5 6 7 8 9 10 11 |
./kubernetes/grupo/kubectl.sh --espacio de nombres=desarrollo describa cuota Nombre: cuota Espacio de nombres: desarrollo Recursos Usado Duro -------- ---- ---- cpu 0 20 memoria 0 1Gi vainas 0 10 controladores de replicación 0 20 resourcequotas 1 1 servicios 0 5 |
Ahora, si intenta crear el controlador de replicación que funciona:
|
1 2 |
./kubernetes/grupo/kubectl.sh --espacio de nombres=desarrollo ejecute couchbase --imagen=arungupta/couchbase controlador de réplica "couchbase" creado |
Pero describir la cuota de nuevo muestra:
|
1 2 3 4 5 6 7 8 9 10 11 |
./kubernetes/grupo/kubectl.sh --espacio de nombres=desarrollo describa cuota Nombre: cuota Espacio de nombres: desarrollo Recursos Usado Duro -------- ---- ---- cpu 0 20 memoria 0 1Gi vainas 0 10 controladores de replicación 1 20 resourcequotas 1 1 servicios 0 5 |
Esperábamos que se creara un nuevo pod como parte de este controlador de replicación, pero no está ahí. Así que vamos a describir nuestro controlador de replicación:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
./kubernetes/grupo/kubectl.sh --espacio de nombres=desarrollo describa rc Nombre: couchbase Espacio de nombres: desarrollo Imagen(s): arungupta/couchbase Selector: ejecute=couchbase Etiquetas: ejecute=couchbase Réplicas: 0 actual / 1 deseado Vainas Estado: 0 Ejecutar / 0 En espera / 0 Con éxito / 0 Fallido No volúmenes. Eventos: PrimeraVista Última visita Cuenta En SubobjectPath Razón Mensaje ───────── ──────── ───── ──── ───────────── ────── ─────── 1m 24s 4 {replicación-controlador } FailedCreate Error crear: Pod "couchbase-" es prohibido: debe escriba a a no-cero solicitar para memoria desde it es rastreado por cuota. |
Por defecto, el pod consume toda la cpu y memoria disponibles. Si se aplican cuotas de recursos, debe especificarse un valor explícito. Alternativamente se puede especificar un valor por defecto para el pod utilizando el siguiente fichero de configuración:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
apiVersion: v1 amable: LimitRange metadatos: nombre: límites spec: límites: - por defecto: cpu: 200m memoria: 512Mi defaultRequest: cpu: 100m memoria: 256Mi tipo: Contenedor |
Esto restringe la CPU y la memoria que puede consumir un pod. Vamos a aplicar estos límites como:
|
1 2 |
./kubernetes/grupo/kubectl.sh --espacio de nombres=desarrollo crear -f límites.yaml limitrange "límites" creado |
Ahora, al volver a describir el controlador de replicación, se muestra:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
./kubernetes/grupo/kubectl.sh --espacio de nombres=desarrollo describa rc Nombre: couchbase Espacio de nombres: desarrollo Imagen(s): arungupta/couchbase Selector: ejecute=couchbase Etiquetas: ejecute=couchbase Réplicas: 1 actual / 1 deseado Vainas Estado: 1 Ejecutar / 0 En espera / 0 Con éxito / 0 Fallido No volúmenes. Eventos: PrimeraVista Última visita Cuenta En SubobjectPath Razón Mensaje ───────── ──────── ───── ──── ───────────── ────── ─────── 8m 2m 14 {replicación-controlador } FailedCreate Error crear: Pod "couchbase-" es prohibido: debe escriba a a no-cero solicitar para memoria desde it es rastreado por cuota. 2m 2m 1 {replicación-controlador } ÉxitoCrear Creado vaina: couchbase-gzk0l |
Esto muestra la creación exitosa del pod. Y ahora cuando se describe la cuota, muestra valores correctos también:
|
1 2 3 4 5 6 7 8 9 10 11 |
./kubernetes/grupo/kubectl.sh --espacio de nombres=desarrollo describa cuota Nombre: cuota Espacio de nombres: desarrollo Recursos Usado Duro -------- ---- ---- cpu 100m 20 memoria 268435456 1Gi vainas 1 10 controladores de replicación 1 20 resourcequotas 1 1 servicios 0 5 |
Cuota de recursos proporcionan más detalles sobre cómo establecer/actualizar estos valores. La creación de otra cuota da el siguiente error:
|
1 2 |
./kubernetes/grupo/kubectl.sh --espacio de nombres=desarrollo crear -f cuota.yaml Error de servidor: error cuando crear "quota.yaml": Cuota de recursos "cuota" es prohibido: limitado a 1 resourcequotas |
Especificación de límites durante la creación de un pod
Los límites también pueden especificarse durante la creación del pod: Si el límite de memoria para cada pod está restringido a 1g, entonces una definición de pod válida sería:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
apiVersion: v1 amable: Pod metadatos: nombre: couchbase-vaina spec: contenedores: - nombre: couchbase imagen: couchbase puertos: - containerPort: 8091 recursos: límites: cpu: "1" memoria: 512Mi |
Esto se debe a que el pod solicita 0.5G de memoria solamente. Y una definición de pod inválida sería:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
apiVersion: v1 amable: Pod metadatos: nombre: couchbase-vaina spec: contenedores: - nombre: couchbase imagen: couchbase puertos: - containerPort: 8091 recursos: límites: cpu: "1" memoria: 2G |
Esto se debe a que el pod solicita 2G de memoria. La creación de un pod de este tipo da el siguiente error:
|
1 2 |
./kubernetes/grupo/kubectl.sh --espacio de nombres=desarrollo crear -f couchbase-vaina.yaml Error de servidor: error cuando crear "couchbase-pod.yaml": Pod "couchbase-pod" es prohibido: incapaz a admita vaina sin superando cuota para recurso memoria: limitado a 1Gi pero requiere 2805306368 a triunfar |
Espero que puedas aplicar espacios de nombres, cuotas de recursos y límites para compartir tus clusters en distintos entornos.