Guía de inicio rápido

En esta guía de inicio rápido, debes implementar una aplicación en contenedores sencilla del servidor web en un clúster de Google Kubernetes Engine (GKE). Aprenderás a crear un clúster y a implementar la aplicación en el clúster para que los usuarios puedan acceder a él.

En esta guía de inicio rápido, se supone que tienes conocimientos básicos de Kubernetes.

Puedes seguir los pasos que se enumeran en esta página o probar esta guía de inicio rápido como un lab de capacitación de Google Cloud.

Probar con un lab

Antes de comenzar

Sigue los pasos que se indican a continuación para habilitar la API de Kubernetes Engine:
  1. Consulta la página de Kubernetes Engine en Google Cloud Console.
  2. Crea o selecciona un proyecto.
  3. Espera a que la API y los servicios relacionados se habiliten. Esto puede tardar varios minutos.
  4. Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Descubre cómo confirmar que tienes habilitada la facturación en un proyecto.

Requisitos de cuota

Para completar esta guía de inicio rápido, necesitas una cuota disponible para lo siguiente:

  • 1 CPU de Compute Engine en la región del clúster
  • 1 Dirección IP en uso

Para verificar tu cuota disponible, usa Cloud Console.

Elige una shell

Para completar esta guía de inicio rápido, puedes usar Cloud Shell o tu shell local.

Cloud Shell es un entorno de shell que se usa para administrar recursos alojados en Google Cloud. Cloud Shell ya viene instalado en la herramienta de línea de comandos de gcloud y la herramienta de línea de comandos de kubectl. La herramienta de gcloud proporciona la interfaz de línea de comandos principal para Google Cloud, y kubectl proporciona la interfaz de línea de comandos principal a fin de ejecutar comandos en clústeres de Kubernetes.

Si prefieres usar tu shell local, debes instalar las herramientas gcloud y kubectl en tu entorno.

Cloud Shell

Para iniciar Cloud Shell, sigue estos pasos:

  1. Ve a Google Cloud Console

    Google Cloud Console

  2. Desde la esquina superior derecha de la consola, haz clic en el botón Activar Cloud Shell: .

Se abrirá una sesión de Cloud Shell dentro de un marco en la parte inferior de la consola. Usa esta shell para ejecutar los comandos de gcloud y kubectl.

Shell local

Si deseas instalar gcloud y kubectl, sigue los siguientes pasos:

  1. Instala el SDK de Cloud, que incluye la herramienta de línea de comandos de gcloud.
  2. Luego de instalar el SDK de Cloud, instala la herramienta de línea de comandos de kubectl mediante la ejecución del comando siguiente:

    gcloud components install kubectl

Establece la configuración predeterminada para la herramienta gcloud

Usa la herramienta de gcloud para establecer dos opciones de configuración predeterminadas: el proyecto predeterminado y la zona de procesamiento.

Tu proyecto cuenta con un ID del proyecto, que es su identificador único. Cuando creas un proyecto por primera vez, puedes usar el ID del proyecto generado de forma automática o crear el tuyo propio.

La zona de procesamiento es una ubicación en la región en la que se encuentran los clústeres y sus recursos. Por ejemplo, us-west1-a es una zona en la región us-west.

Establecer esta configuración predeterminada simplifica la ejecución de los comandos de gcloud, ya que gcloud requiere que especifiques el proyecto y la zona de procesamiento en la que deseas trabajar. También puedes especificar esta configuración o anular la configuración predeterminada con marcas, como --project, --zone y --cluster, en los comandos de gcloud.

Cuando creas tus recursos de GKE luego de configurar tu proyecto y zona de procesamiento predeterminados, estos se crean de forma automática en ese proyecto y esa zona.

Configura un proyecto predeterminado

Ejecuta el siguiente comando y reemplaza project-id por el ID del proyecto:

gcloud config set project project-id

Configura una zona de procesamiento predeterminada

Ejecuta el siguiente comando y reemplaza compute-zone por la zona de procesamiento, como us-west1-a:

gcloud config set compute/zone compute-zone

Crea un clúster de GKE

Un clúster consta de al menos una máquina de plano de control del clúster y varias máquinas trabajadoras llamadas nodos. Los nodos son instancias de máquinas virtuales (VM) de Compute Engine que ejecutan los procesos de Kubernetes necesarios para que sean parte del clúster. Las aplicaciones se implementan en los clústeres y, luego, se ejecutan en los nodos.

El siguiente comando crea un clúster de un nodo. Reemplaza cluster-name por el nombre del clúster:

gcloud container clusters create cluster-name --num-nodes=1

Obtén las credenciales de autenticación para el clúster

Después de crear el clúster, debes obtener credenciales de autenticación para interactuar con él:

gcloud container clusters get-credentials cluster-name

Este comando configura kubectl para usar el clúster que creaste.

Implementa una aplicación en el clúster

Una vez creado el clúster, puedes implementar una aplicación en contenedores en él. Para esta guía de inicio rápido, puedes implementar nuestra aplicación web de ejemplo, hello-app.

GKE utiliza los objetos de Kubernetes para crear y administrar los recursos de tus clústeres. Kubernetes proporciona el objeto Implementación a fin de implementar aplicaciones sin estado como servidores web. Los objetos de Servicio definen las reglas y el balanceo de cargas para acceder a tu aplicación desde Internet.

Crea la Implementación

Si deseas ejecutar hello-app en tu clúster, debes ejecutar el comando siguiente:

kubectl create deployment hello-server --image=gcr.io/google-samples/hello-app:1.0

Con este comando de Kubernetes, kubectl create deployment, se crea un Deployment llamado hello-server. El pod del Deployment ejecuta la imagen del contenedor hello-app.

En el comando anterior, se ilustra lo siguiente:

  • --image especifica la imagen de contenedor para implementar. En este caso, el comando obtiene la imagen de ejemplo de un depósito de Container Registry, gcr.io/google-samples/hello-app. :1.0 indica la versión específica de la imagen que se desea obtener. Si no especificas una versión, se usa la versión más reciente.

Cómo exponer Deployment

Luego de implementar la aplicación, debes exponerla en Internet para que los usuarios puedan acceder a ella. Para exponer tu aplicación, puedes crear un Servicio, un recurso de Kubernetes que expone tu aplicación al tráfico externo.

Para exponer tu aplicación, debes ejecutar el comando siguiente kubectl expose:

kubectl expose deployment hello-server --type LoadBalancer \
  --port 80 --target-port 8080

Cuando pasas la marca --type LoadBalancer, se crea un balanceador de cargas de Compute Engine para el contenedor. La marca --port inicializa el puerto público 80 a Internet y la marca --target-port direcciona el tráfico al puerto 8080 de la aplicación.

Los balanceadores de cargas se facturan según los precios de los balanceadores de cargas de Compute Engine.

Inspecciona y visualiza la aplicación

  1. Para inspeccionar los pods en ejecución, usa kubectl get pods:

    kubectl get pods

    Deberías ver un pod hello-server en ejecución en el clúster.

  2. Inspecciona el servicio hello-server mediante kubectl get service:

    kubectl get service hello-server

    Copia la dirección IP externa del Servicio de la columna EXTERNAL-IP que aparece en el resultado del comando.

  3. Para ver la aplicación desde tu navegador web, usa la dirección IP externa con el puerto expuesto:

    http://external-ip/

Acabas de implementar una aplicación web en contenedores en GKE.

Realiza una limpieza

Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que usaste en esta guía de inicio rápido:

  1. Borra el Servicio de la aplicación mediante la ejecución de kubectl delete:

    kubectl delete service hello-server

    Este comando borra el balanceador de cargas de Compute Engine que creaste al momento de exponer la implementación.

  2. Si deseas borrar tu clúster, ejecuta gcloud container clusters delete:

    gcloud container clusters delete cluster-name

Revisión del código hello-app (opcional)

hello-app es una aplicación de servidor web simple que consta de dos archivos: main.go y un Dockerfile.

hello-app se empaqueta como imagen de contenedor de Docker. Las imágenes de contenedor se almacenan en cualquier registro de imágenes de Docker, como Container Registry. hello-app se aloja en un depósito de Container Registry llamado gcr.io/google-samples/hello-app.

main.go

main.go es una implementación de servidor web escrita en el lenguaje de programación Go. El servidor responde a cualquier solicitud HTTP con el mensaje “Hello, world!”.

package main

import (
	"fmt"
	"log"
	"net/http"
	"os"
)

func main() {
	// register hello function to handle all requests
	mux := http.NewServeMux()
	mux.HandleFunc("/", hello)

	// use PORT environment variable, or default to 8080
	port := os.Getenv("PORT")
	if port == "" {
		port = "8080"
	}

	// start the web server on port and accept requests
	log.Printf("Server listening on port %s", port)
	log.Fatal(http.ListenAndServe(":"+port, mux))
}

// hello responds to the request with a plain-text "Hello, world" message.
func hello(w http.ResponseWriter, r *http.Request) {
	log.Printf("Serving request: %s", r.URL.Path)
	host, _ := os.Hostname()
	fmt.Fprintf(w, "Hello, world!\n")
	fmt.Fprintf(w, "Version: 1.0.0\n")
	fmt.Fprintf(w, "Hostname: %s\n", host)
}

Dockerfile

Dockerfile describe la imagen que quieres que Docker compile, incluidos todos sus recursos y dependencias, y especifica qué puerto de red debe exponer la app. Para obtener más información sobre cómo funciona este archivo, consulta la referencia de Dockerfile en la documentación de Docker.

FROM golang:1.8-alpine
ADD . /go/src/hello-app
RUN go install hello-app

FROM alpine:latest
COPY --from=0 /go/bin/hello-app .
ENV PORT 8080
CMD ["./hello-app"]

Próximos pasos