# Explora la vista de Kubernetes


Docker Desktop incluye un servidor y un cliente de Kubernetes independientes, así como integración con la CLI de Docker, lo que te permite el desarrollo y pruebas locales de Kubernetes directamente en tu máquina.

El servidor de Kubernetes se ejecuta como un clúster de uno o varios nodos dentro de contenedores de Docker. Esta configuración ligera te ayuda a explorar las funciones de Kubernetes, probar cargas de trabajo y trabajar con la orquestación de contenedores en paralelo con otras funciones de Docker.

## Activar Kubernetes

Con Docker Desktop versión 4.51 y posteriores, puedes administrar Kubernetes directamente desde la vista **Kubernetes** en el Panel de Docker Desktop.

1. Abre el Panel de Docker Desktop y selecciona la vista **Kubernetes**. 
2. Selecciona **Create cluster** (Crear clúster). 
3. Elige el tipo de clúster:
   - **Kubeadm** crea un clúster de un solo nodo y la versión la define Docker Desktop.
   - **kind** crea un clúster de múltiples nodos y puedes definir la versión y el número de nodos.
   Para obtener información más detallada sobre cada tipo de clúster, consulta [Método de aprovisionamiento del clúster](#metodo-de-aprovisionamiento-del-cluster).
4. Opcional: Selecciona **Show system containers (advanced)** (Mostrar contenedores del sistema (avanzado)) para ver los contenedores internos al utilizar comandos de Docker.
5. Selecciona **Create** (Crear). 

Esto configura las imágenes necesarias para ejecutar el servidor de Kubernetes como contenedores e instala la herramienta de línea de comandos `kubectl` en tu sistema en `/usr/local/bin/kubectl` (Mac) o en `C:\Program Files\Docker\Docker\resources\bin\kubectl.exe` (instalaciones para todos los usuarios) o `%LOCALAPPDATA%\Programs\DockerDesktop\resources\bin\kubectl.exe` (instalaciones por usuario) (Windows). Si instalaste `kubectl` usando Homebrew o mediante algún otro método y experimentas conflictos, elimina `/usr/local/bin/kubectl`.

   > [!NOTE]
   >
   > Docker Desktop para Linux no incluye `kubectl` por defecto. Puedes instalarlo por separado siguiendo la [guía de instalación de Kubernetes](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/). Asegúrate de que el binario de `kubectl` esté instalado en `/usr/local/bin/kubectl`.

Las siguientes acciones también se desencadenan en el backend y en la máquina virtual de Docker Desktop:

- Generación de certificados y configuración del clúster.
- Descarga e instalación de componentes internos de Kubernetes.
- Arranque del clúster.
- Instalación de controladores adicionales para redes y almacenamiento.

Cuando Kubernetes está activado, su estado se muestra en el pie de página del Panel de Docker Desktop y en el menú de Docker.

Puedes comprobar qué versión de Kubernetes estás utilizando con:

```console
$ kubectl version
```

### Método de aprovisionamiento del clúster

Kubernetes en Docker Desktop se puede aprovisionar con los proveedores `kubeadm` o `kind`.

`kubeadm` es el proveedor más antiguo. Admite un clúster de un solo nodo, no permite seleccionar la versión de Kubernetes, es más lento de aprovisionar que `kind` y no es compatible con el aislamiento de contenedores mejorado [Enhanced Container Isolation](/enterprise/security/hardened-desktop/enhanced-container-isolation/) (ECI), lo que significa que si ECI está activado, el clúster funciona pero no está protegido por ECI.

`kind` es el proveedor más reciente. Admite clústeres de múltiples nodos (para una configuración de Kubernetes más realista), te permite elegir la versión de Kubernetes, es más rápido de aprovisionar que `kubeadm` y es compatible con ECI. Cuando ECI está activado, el clúster de Kubernetes se ejecuta en contenedores de Docker sin privilegios, haciéndolo más seguro.

| Característica | `kubeadm` | `kind` |
| :------ | :-----: | :--: |
| Soporte para clústeres de múltiples nodos | No | Sí |
| Selector de versión de Kubernetes | No | Sí |
| Velocidad de aprovisionamiento | ~1 min | ~30 segundos |
| Soportado por ECI | No | Sí |
| Funciona con el almacén de imágenes de containerd | Sí | Sí |
| Funciona con el almacén de imágenes de Docker | Sí | No |

## Vista del panel (Dashboard view)

Cuando un clúster de Kubernetes está activado, la vista **Kubernetes** muestra un panel en vivo que incluye:

- Un selector de espacio de nombres (namespace) en la parte superior.
- Una lista en tiempo real de los recursos (pods, servicios, despliegues) en el espacio de nombres seleccionado.
- Actualizaciones automáticas cuando se crean, eliminan o modifican recursos.

## Verificar la instalación

Confirma que tu clúster está en ejecución:

```console
$ kubectl get nodes
NAME                 STATUS    ROLES            AGE       VERSION
docker-desktop       Ready     control-plane    3h        v1.29.1
```

Si kubectl está apuntando a otro entorno, cambia al contexto de Docker Desktop:

```console
$ kubectl config use-context docker-desktop
```

>[!TIP]
>
> Si no aparece ningún contexto, intenta:
>
> - Ejecutar el comando en el Símbolo del sistema o en PowerShell.
> - Configurar la variable de entorno `KUBECONFIG` para que apunte a tu archivo `.kube/config`.

Para obtener más información sobre `kubectl`, consulta la [documentación de `kubectl`](https://kubernetes.io/docs/reference/kubectl/overview/).

## Editar o detener tu clúster

Cuando Kubernetes está activado:

- Selecciona **Edit cluster** (Editar clúster) para modificar la configuración. Por ejemplo, cambiar entre **kubeadm** y **kind**, o modificar el número de nodos.
- Selecciona **Stop** (Detener) para desactivar el clúster. Se muestra el progreso y la vista **Kubernetes** vuelve a la pantalla **Create cluster**. Esto detiene y elimina los contenedores de Kubernetes, y también elimina el comando `/usr/local/bin/kubectl`.

## Actualizar tu clúster

Los clústeres de Kubernetes no se actualizan automáticamente con las actualizaciones de Docker Desktop. Para actualizar el clúster, debes seleccionar manualmente **Reset cluster** (Restablecer clúster) en la configuración de **Kubernetes**.

## Configurar un registro de imágenes personalizado para las imágenes del plano de control de Kubernetes

Docker Desktop utiliza contenedores para ejecutar el plano de control (control plane) de Kubernetes. Por defecto, Docker Desktop descarga las imágenes de contenedor asociadas desde Docker Hub. Las imágenes descargadas dependen del [método de aprovisionamiento del clúster](#metodo-de-aprovisionamiento-del-cluster).

Por ejemplo, en el modo `kind` se requieren las siguientes imágenes:

```console
docker.io/kindest/node:<tag>
docker.io/envoyproxy/envoy:<tag>
docker.io/docker/desktop-cloud-provider-kind:<tag>
docker.io/docker/desktop-containerd-registry-mirror:<tag>
```

En el modo `kubeadm` se requieren las siguientes imágenes:

```console
docker.io/docker/desktop-kubernetes:<tag>
docker.io/docker/desktop-storage-provisioner:<tag>
docker.io/docker/desktop-vpnkit-controller:<tag>
docker.io/docker/desktop-kubernetes-etcd:<tag>
docker.io/docker/desktop-kubernetes-coredns:<tag>
docker.io/docker/desktop-kubernetes-pause:<tag>
docker.io/docker/desktop-kubernetes-apiserver:<tag>
docker.io/docker/desktop-kubernetes-controller-manager:<tag>
docker.io/docker/desktop-kubernetes-scheduler:<tag>
docker.io/docker/desktop-kubernetes-proxy:<tag>
```

Las etiquetas de las imágenes son seleccionadas automáticamente por Docker Desktop según diversos factores, incluida la versión de Kubernetes que se esté utilizando. Las etiquetas varían para cada imagen y pueden cambiar entre las versiones de Docker Desktop. Para mantenerte informado, consulta las notas de publicación de Docker Desktop.

> [!NOTE]
>
> En las versiones de Docker Desktop 4.44 o posteriores, puedes ejecutar `docker desktop kubernetes images list` para listar las imágenes de Kubernetes utilizadas por la versión instalada actualmente de Docker Desktop.
> Para obtener más información, consulta la [CLI de Docker Desktop](/reference/cli/docker/desktop/kubernetes/images).

Para adaptarse a escenarios donde no se permite el acceso a Docker Hub, los administradores pueden configurar Docker Desktop para descargar las imágenes enumeradas anteriormente desde un registro diferente (por ejemplo, un espejo) utilizando la configuración [KubernetesImagesRepository](/enterprise/security/hardened-desktop/settings-management/configure-json-file/#kubernetes) de la siguiente manera.

El nombre de una imagen se puede dividir en los componentes `[registry[:port]/][namespace/]repository[:tag]`. La configuración `KubernetesImagesRepository` permite a los usuarios anular la parte `[registry[:port]/][namespace]` del nombre de la imagen.

Por ejemplo, si Kubernetes en Docker Desktop está configurado en modo `kind` y `KubernetesImagesRepository` está configurado como `my-registry:5000/kind-images`, entonces Docker Desktop descargará las imágenes de:

```console
my-registry:5000/kind-images/node:<tag>
my-registry:5000/kind-images/envoy:<tag>
my-registry:5000/kind-images/desktop-cloud-provider-kind:<tag>
my-registry:5000/kind-images/desktop-containerd-registry-mirror:<tag>
```

Estas imágenes deben clonarse/duplicarse a partir de sus respectivas imágenes en Docker Hub. Las etiquetas también deben coincidir con las que espera Docker Desktop.

El enfoque recomendado para configurar esto es el siguiente:

1. Inicia Kubernetes utilizando el método de aprovisionamiento de clúster deseado: `kubeadm` o `kind`.
2. Una vez que Kubernetes se haya iniciado, utiliza:
   - (Docker Desktop versión 4.44 o posterior) `docker desktop kubernetes images list` para listar las etiquetas de imagen que descargará la instalación actual de Docker Desktop.
   - `docker ps` para ver las imágenes de contenedor utilizadas por Docker Desktop para el plano de control de Kubernetes.
3. Clona o duplica esas imágenes (con las etiquetas correspondientes) en tu registro personalizado.
4. Detén el clúster de Kubernetes.
5. Configura la opción `KubernetesImagesRepository` para que apunte a tu registro personalizado.
6. Reinicia Docker Desktop.
7. Verify that the Kubernetes cluster is using the custom registry images using the `docker ps` command.

> [!NOTE]
>
> La configuración `KubernetesImagesRepository` solo se aplica a las imágenes del plano de control utilizadas por Docker Desktop para configurar el clúster de Kubernetes. No tiene ningún efecto sobre otros pods de Kubernetes.

> [!NOTE]
>
> En las versiones de Docker Desktop 4.43 o anteriores, cuando utilizas `KubernetesImagesRepository` y tienes activado [Enhanced Container Isolation (ECI)](/enterprise/security/hardened-desktop/enhanced-container-isolation/), añade las siguientes imágenes a la [lista de imágenes de montaje de socket Docker de ECI](/enterprise/security/hardened-desktop/settings-management/configure-json-file/#enhanced-container-isolation):
>
> `[imagesRepository]/desktop-cloud-provider-kind:`
> `[imagesRepository]/desktop-containerd-registry-mirror:`
>
> Estos contenedores montan el socket de Docker, por lo que debes añadir las imágenes a la lista de imágenes de ECI. De lo contrario, ECI bloqueará el montaje y Kubernetes no se se iniciará.

## Resolución de problemas

- Si Kubernetes no se inicia, asegúrate de que Docker Desktop se esté ejecutando con suficientes recursos asignados. Comprueba **Settings** > **Resources**.
- Si los comandos de `kubectl` devuelven errores, confirma que el contexto esté configurado en `docker-desktop`:
   ```console
   $ kubectl config use-context docker-desktop
   ```
   Luego puedes intentar comprobar los logs de los contenedores del sistema de Kubernetes si has activado esa configuración.
- Si experimentas problemas con el clúster después de una actualización, restablece tu clúster de Kubernetes. Restablecer un clúster de Kubernetes puede ayudar a resolver problemas al devolver el clúster a un estado limpio, eliminando malas configuraciones, datos dañados o recursos bloqueados que puedan estar causando problemas. Si el problema persiste, es posible que debas limpiar y purgar los datos, y luego reiniciar Docker Desktop.

