8.3 KiB
| title | content_type | weight | card | ||||
|---|---|---|---|---|---|---|---|
| Hello Minikube | tutorial | 5 |
|
Este tutorial muestra como ejecutar una aplicación Node.js Hola Mundo en Kubernetes utilizando Minikube y Katacoda. Katacoda provee un entorno de Kubernetes desde el navegador.
{{< note >}} También se puede seguir este tutorial si se ha instalado Minikube localmente. {{< /note >}}
{{% heading "objectives" %}}
- Desplegar una aplicación Hola Mundo en Minikube.
- Ejecutar la aplicación.
- Ver los logs de la aplicación.
{{% heading "prerequisites" %}}
Este tutorial provee una imagen de contenedor construida desde los siguientes archivos:
{{% codenew language="js" file="minikube/server.js" %}}
{{% codenew language="conf" file="minikube/Dockerfile" %}}
Para más información sobre el comando docker build, lea la documentación de Docker .
Crear un clúster Minikube
-
Haz clic en Launch Terminal
{{< kat-button >}}
{{< note >}}Si se tiene instalado Minikube local, ejecutar
minikube start.{{< /note >}} -
Abrir el tablero de Kubernetes dashboard en un navegador:
minikube dashboard -
Solo en el entorno de Katacoda: En la parte superior de la terminal, haz clic en el símbolo + y luego clic en Select port to view on Host 1.
-
Solo en el entorno de Katacoda: Escribir
30000, y hacer clic en Display Port.
Crear un Deployment
Un Pod en Kubernetes es un grupo de uno o más contenedores, asociados con propósitos de administración y redes. El Pod en este tutorial tiene solo un contenedor. Un Deployment en Kubernetes verifica la salud del Pod y reinicia su contenedor si este es eliminado. Los Deployments son la manera recomendada de manejar la creación y escalación.
-
Ejecutar el comando
kubectl createpara crear un Deployment que maneje un Pod. El Pod ejecuta un contenedor basado en la imagen proveida por Docker.kubectl create deployment hello-node --image=registry.k8s.io/echoserver:1.4 -
Ver el Deployment:
kubectl get deploymentsEl resultado es similar a:
NAME READY UP-TO-DATE AVAILABLE AGE hello-node 1/1 1 1 1m -
Ver el Pod:
kubectl get podsEl resultado es similar a:
NAME READY STATUS RESTARTS AGE hello-node-5f76cf6ccf-br9b5 1/1 Running 0 1m -
Ver los eventos del clúster:
kubectl get events -
Ver la configuración
kubectl:kubectl config view{{< note >}} Para más información sobre el comando
kubectl, ver kubectl overview.{{< /note >}}
Crear un Service
Por defecto, el Pod es accedido por su dirección IP interna dentro del clúster de Kubernetes, para hacer que el contenedor hello-node sea accesible desde afuera de la red virtual Kubernetes, se debe exponer el Pod como un
Service de Kubernetes.
-
Exponer el Pod a la red pública de internet utilizando el comando
kubectl expose:kubectl expose deployment hello-node --type=LoadBalancer --port=8080El flag
--type=LoadBalancerindica que se quiere exponer el Service fuera del clúster. -
Ver el Service creado:
kubectl get servicesEl resultado es similar a:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-node LoadBalancer 10.108.144.78 <pending> 8080:30369/TCP 21s kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23mPara los proveedores Cloud que soportan balanceadores de carga, una dirección IP externa será provisionada para acceder al servicio, en Minikube, el tipo
LoadBalancerpermite que el servicio sea accesible a través del comandominikube service. -
Ejecutar el siguiente comando:
minikube service hello-node -
Solo en el entorno de Katacoda: Hacer clic sobre el símbolo +, y luego en Select port to view on Host 1.
-
Solo en el entorno de Katacoda: Anotar el puerto de 5 dígitos ubicado al lado del valor de
8080en el resultado de servicios. Este número de puerto es generado aleatoriamente y puede ser diferente al indicado en el ejemplo. Escribir el número de puerto en el cuadro de texto y hacer clic en Display Port. Usando el ejemplo anterior, usted escribiría30369.Esto abre una ventana de navegador que contiene la aplicación y muestra el mensaje "Hello World".
Habilitar Extensiones
Minikube tiene un conjunto de {{< glossary_tooltip text="Extensiones" term_id="addons" >}} que pueden ser habilitados y desahabilitados en el entorno local de Kubernetes.
-
Listar las extensiones soportadas actualmente:
minikube addons listEl resultado es similar a:
addon-manager: enabled dashboard: enabled default-storageclass: enabled efk: disabled freshpod: disabled gvisor: disabled helm-tiller: disabled ingress: disabled ingress-dns: disabled logviewer: disabled metrics-server: disabled nvidia-driver-installer: disabled nvidia-gpu-device-plugin: disabled registry: disabled registry-creds: disabled storage-provisioner: enabled storage-provisioner-gluster: disabled -
Habilitar una extensión, por ejemplo,
metrics-server:minikube addons enable metrics-serverEl resultado es similar a:
metrics-server was successfully enabled -
Ver el Pod y Service creados:
kubectl get pod,svc -n kube-systemEl resultado es similar a:
NAME READY STATUS RESTARTS AGE pod/coredns-5644d7b6d9-mh9ll 1/1 Running 0 34m pod/coredns-5644d7b6d9-pqd2t 1/1 Running 0 34m pod/metrics-server-67fb648c5 1/1 Running 0 26s pod/etcd-minikube 1/1 Running 0 34m pod/influxdb-grafana-b29w8 2/2 Running 0 26s pod/kube-addon-manager-minikube 1/1 Running 0 34m pod/kube-apiserver-minikube 1/1 Running 0 34m pod/kube-controller-manager-minikube 1/1 Running 0 34m pod/kube-proxy-rnlps 1/1 Running 0 34m pod/kube-scheduler-minikube 1/1 Running 0 34m pod/storage-provisioner 1/1 Running 0 34m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/metrics-server ClusterIP 10.96.241.45 <none> 80/TCP 26s service/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 34m service/monitoring-grafana NodePort 10.99.24.54 <none> 80:30002/TCP 26s service/monitoring-influxdb ClusterIP 10.111.169.94 <none> 8083/TCP,8086/TCP 26s -
Deshabilitar
metrics-server:minikube addons disable metrics-serverEl resultado es similar a:
metrics-server was successfully disabled
Limpieza
Ahora se puede eliminar los recursos creados en el clúster:
kubectl delete service hello-node
kubectl delete deployment hello-node
Opcional, detener la máquina virtual de Minikube:
minikube stop
Opcional, eliminar la máquina virtual de Minikube:
minikube delete
{{% heading "whatsnext" %}}
- Leer más sobre Deployments.
- Leer más sobre Desplegando aplicaciones.
- Leer más sobre Services.