|
| 1 | +--- |
| 2 | +title: Prácticas Recomendadas de Configuración |
| 3 | +content_type: concept |
| 4 | +weight: 10 |
| 5 | +--- |
| 6 | + |
| 7 | +<!-- overview --> |
| 8 | +Este documento destaca y consolida las prácticas recomendadas de configuración que se presentan |
| 9 | +a lo largo de la guía del usuario, la documentación de Introducción y los ejemplos. |
| 10 | + |
| 11 | +Este es un documento vivo. Si se te ocurre algo que no está en esta lista pero que puede ser útil |
| 12 | +a otros, no dudes en crear un _issue_ o enviar un PR. |
| 13 | + |
| 14 | +<!-- body --> |
| 15 | +## Consejos Generales de Configuración |
| 16 | + |
| 17 | +- Al definir configuraciones, especifica la última versión estable de la API. |
| 18 | + |
| 19 | +- Los archivos de configuración deben almacenarse en el control de versiones antes de enviarse al clúster. Este |
| 20 | + le permite revertir rápidamente un cambio de configuración si es necesario. También ayuda a |
| 21 | + la recreación y restauración del clúster. |
| 22 | + |
| 23 | +- Escribe tus archivos de configuración usando YAML en lugar de JSON. Aunque estos formatos se pueden utilizarse |
| 24 | + indistintamente en casi todos los escenarios, YAML tiende a ser más amigable con el usuario. |
| 25 | + |
| 26 | +- Agrupa los objetos relacionados en un solo archivo siempre que tenga sentido. Un archivo suele ser más fácil de |
| 27 | + administrar que varios. Ver el archivo |
| 28 | + [guestbook-all-in-one.yaml](https://github.com/kubernetes/examples/tree/master/guestbook/all-in-one/guestbook-all-in-one.yaml) |
| 29 | + como un ejemplo de esta sintaxis. |
| 30 | + |
| 31 | +- Ten en cuenta también que se pueden llamar muchos comandos `kubectl` en un directorio. Por ejemplo, puedes llamar |
| 32 | + `kubectl apply` en un directorio de archivos de configuración. |
| 33 | + |
| 34 | +- No especifiques valores predeterminados innecesariamente: una configuración simple y mínima hará que los errores sean menos probables. |
| 35 | + |
| 36 | +- Coloca descripciones de objetos en anotaciones, para permitir una mejor introspección. |
| 37 | + |
| 38 | +## "Naked" Pods vs ReplicaSets, Deployments y Jobs {#naked-pods-vs-replicasets-deployments-and-jobs} |
| 39 | + |
| 40 | +- No usar "Naked" Pods (es decir, Pods no vinculados a un [ReplicaSet](/docs/concepts/workloads/controllers/replicaset/) o a un |
| 41 | + [Deployment](/docs/concepts/workloads/controllers/deployment/)) si puedes evitarlo. Los Naked Pods |
| 42 | + no se reprogramará en caso de falla de un nodo. |
| 43 | + |
| 44 | + Un Deployment, que crea un ReplicaSet para garantizar que se alcance la cantidad deseada de Pods está |
| 45 | + siempre disponible y especifica una estrategia para reemplazar los Pods (como |
| 46 | + [RollingUpdate](/docs/concepts/workloads/controllers/deployment/#rolling-update-deployment)), es |
| 47 | + casi siempre preferible a crear Pods directamente, excepto por algunos explícitos |
| 48 | + [`restartPolicy: Never`](/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy) escenarios. |
| 49 | + Un [Job](/docs/concepts/workloads/controllers/job/) también puede ser apropiado. |
| 50 | + |
| 51 | +## Servicios |
| 52 | + |
| 53 | +- Crea un [Service](/docs/concepts/services-networking/service/) antes de tus cargas de trabajo de backend correspondientes |
| 54 | + (Deployments o ReplicaSets) y antes de cualquier carga de trabajo que necesite acceder a él. |
| 55 | + Cuando Kubernetes inicia un contenedor, proporciona variables de entorno que apuntan a todos los _Services_ |
| 56 | + que se estaban ejecutando cuando se inició el contenedor. Por ejemplo, si existe un _Service_ llamado `foo`, |
| 57 | + todos los contenedores obtendrán las siguientes variables en su entorno inicial: |
| 58 | + |
| 59 | + ```shell |
| 60 | + FOO_SERVICE_HOST=<el host en el que se ejecuta el Service> |
| 61 | + FOO_SERVICE_PORT=<el puerto en el que se ejecuta el Service> |
| 62 | + ``` |
| 63 | + |
| 64 | + \* Esto implica un requisito de ordenamiento - cualquier `Service` al que un `Pod` quiera acceder debe ser |
| 65 | + creado antes del `Pod` en sí mismo, de lo contrario, las variables de entorno no se completarán. |
| 66 | + El DNS no tiene esta restricción. |
| 67 | + |
| 68 | +- Un [cluster add-on](/docs/concepts/cluster-administration/addons/) opcional (aunque muy recomendable) |
| 69 | + es un servidor DNS. El servidor DNS observa la API de Kubernetes en busca de nuevos `Servicios` y crea un conjunto |
| 70 | + de registros DNS para cada uno. Si el DNS se ha habilitado en todo el clúster, todos los `Pods` deben ser |
| 71 | + capaces de hacer la resolución de nombres de `Services` automáticamente. |
| 72 | + |
| 73 | +- No especifiques un `hostPort` para un Pod a menos que sea absolutamente necesario. Cuando vinculas un Pod a un |
| 74 | + `hostPort`, limita la cantidad de lugares en los que se puede agendar el Pod, porque cada combinación <`hostIP`, |
| 75 | + `hostPort`, `protocol`> debe ser única. Si no especificas el `hostIP` y |
| 76 | + `protocol` explícitamente, Kubernetes usará `0.0.0.0` como el `hostIP` predeterminado y `TCP` como el |
| 77 | + `protocol` por defecto. |
| 78 | + |
| 79 | + Si solo necesitas acceder al puerto con fines de depuración, puedes utilizar el |
| 80 | + [apiserver proxy](/docs/tasks/access-application-cluster/access-cluster/#manually-constructing-apiserver-proxy-urls) |
| 81 | + o [`kubectl port-forward`](/docs/tasks/access-application-cluster/port-forward-access-application-cluster/). |
| 82 | + |
| 83 | + Si necesitas exponer explícitamente el puerto de un Pod en el nodo, considera usar un |
| 84 | + [NodePort](/docs/concepts/services-networking/service/#type-nodeport) Service antes de recurrir a |
| 85 | + `hostPort`. |
| 86 | + |
| 87 | +- Evita usar `hostNetwork`, por las mismas razones que `hostPort`. |
| 88 | + |
| 89 | +- Usa [headless Services](/docs/concepts/services-networking/service/#headless-services) |
| 90 | + (que tiene un `ClusterIP` de `None`) para el descubrimiento de servicios cuando no necesites |
| 91 | + balanceo de carga `kube-proxy`. |
| 92 | + |
| 93 | +## Usando Labels |
| 94 | + |
| 95 | +- Define y usa [labels](/docs/concepts/overview/working-with-objects/labels/) que identifiquen |
| 96 | + __atributos semánticos__ de tu aplicación o Deployment, como `{ app.kubernetes.io/name: |
| 97 | + MyApp, tier: frontend, phase: test, deployment: v3 }`. Puedes utilizar estas labels para seleccionar los |
| 98 | + Pods apropiados para otros recursos; por ejemplo, un Service que selecciona todo los |
| 99 | + Pods `tier: frontend`, o todos los componentes `phase: test` de `app.kubernetes.io/name: MyApp`. |
| 100 | + Revisa el [libro de visitas](https://github.com/kubernetes/examples/tree/master/guestbook/) |
| 101 | + para ver ejemplos de este enfoque. |
| 102 | + |
| 103 | + Un Service puede hacer que abarque múltiples Deployments omitiendo las labels específicas de la versión de su |
| 104 | + selector. Cuando necesites actualizar un servicio en ejecución sin downtime, usa un |
| 105 | + [Deployment](/docs/concepts/workloads/controllers/deployment/). |
| 106 | + |
| 107 | + Un estado deseado de un objeto se describe mediante una implementación, y si los cambios a esa especificación son |
| 108 | + _aplicados_, el controlador de implementación cambia el estado actual al estado deseado en un |
| 109 | + ritmo controlado. |
| 110 | + |
| 111 | +- Use las [labels comunes de Kubernetes](/docs/concepts/overview/working-with-objects/common-labels/) |
| 112 | + para casos de uso común. Estas labels estandarizadas enriquecen los metadatos de una manera que permite que las herramientas, |
| 113 | + incluyendo `kubectl` y el [dashboard](/docs/tasks/access-application-cluster/web-ui-dashboard), |
| 114 | + trabajen de forma interoperable. |
| 115 | + |
| 116 | +- Puedes manipular las labels para la depuración. Debido a que los controladores de Kubernetes (como ReplicaSet) y |
| 117 | + los Services coinciden con los Pods usando labels de selector, se detendrá la eliminación de las labels relevantes de un Pod |
| 118 | + que sea considerado por un controlador o que un Service sirva tráfico. si quitas |
| 119 | + las labels de un Pod existente, su controlador creará un nuevo Pod para ocupar su lugar. Esto es un |
| 120 | + forma útil de depurar un Pod previamente "vivo" en un entorno de "cuarentena". Para eliminar interactivamente |
| 121 | + o agregar labels, usa [`kubectl label`](/docs/reference/generated/kubectl/kubectl-commands#label). |
| 122 | + |
| 123 | +## Usando kubectl |
| 124 | + |
| 125 | +- Usa `kubectl apply -f <directorio>`. Esto busca la configuración de Kubernetes en todos los `.yaml`, |
| 126 | + `.yml`, y `.json` en `<directorio>` y lo pasa a `apply`. |
| 127 | + |
| 128 | +- Usa selectores de labels para las operaciones `get` y `delete` en lugar de nombres de objetos específicos. Ve las |
| 129 | + secciones en [selectores de labels](/docs/concepts/overview/working-with-objects/labels/#label-selectors) |
| 130 | + y [usar labels de forma eficaz](/docs/concepts/cluster-administration/manage-deployment/#using-labels-effectively). |
| 131 | + |
| 132 | +- Usa `kubectl create deployment` y `kubectl expose` para crear rápidamente un contenedor único |
| 133 | + Deployments y Services. |
| 134 | + Consulta [Usar un Service para Acceder a una Aplicación en un Clúster](/docs/tasks/access-application-cluster/service-access-application-cluster/) |
| 135 | + para un ejemplo. |
0 commit comments