Configuración del primer clúster en Virtual Private Cloud (VPC)
Cree un clúster de IBM Cloud® Kubernetes Service en Virtual Private Cloud (VPC).
Con los clústeres IBM Cloud Kubernetes Service en VPC, puede crear su clúster en la próxima generación de la plataforma IBM Cloud, en su nube privada virtual. VPC le proporciona la seguridad de un entorno de nube privado con la escalabilidad dinámica de una nube pública. VPC utiliza la versión siguiente de IBM Cloud Kubernetes Service proveedores de infraestructura, con un grupo seleccionado de API v2, CLI y funciones de consola. Solo puede crear clústeres estándares para VPC.
Audiencia
Esta guía de aprendizaje está pensada para los administradores que crean un clúster en IBM Cloud Kubernetes Service en un entorno de VPC por primera vez.
Objetivos
En las lecciones de la guía de aprendizaje puede crear un clústeres de IBM Cloud Kubernetes Service en Virtual Private Cloud (VPC). A continuación, puede desplegar una app y exponer la app públicamente mediante un equilibrador de carga.
Qué obtendrá
En este tutorial, creará los siguientes recursos. Hay pasos opcionales para suprimir estos recursos si no desea conservarlos después de completar la guía de aprendizaje.
- Un clúster de VPC
- Una app Hello World simple desplegada en el clúster
- Un equilibrador de carga de VPC para exponer la app
Requisitos previos
Complete los siguientes pasos de requisito previo para configurar permisos y el entorno de línea de mandatos.
- Permisos
- Si usted es el propietario de la cuenta, ya tiene los permisos necesarios para crear un clúster y puede continuar con el siguiente paso. De lo contrario, solicite al propietario de la cuenta que configure la clave de API y le asigne los permisos de usuario mínimos en IBM Cloud IAM.
- Herramientas de línea de mandatos
- Para obtener un acceso rápido a los recursos desde la línea de mandatos, intente IBM Cloud Shell. De lo contrario, configure el entorno de línea de mandatos local siguiendo los pasos siguientes.
- Instale la CLI de IBM Cloud (
ibmcloud
), el plugin Kubernetes Service (ibmcloud ks
) y el plugin IBM Cloud Container Registry (ibmcloud cr
). - Instale las CLI de Red Hat OpenShift (
oc
) y de Kubernetes (kubectl
). - Para trabajar con VPC, instale el plugin
infrastructure-service
. El prefijo para ejecutar mandatos esibmcloud is
.ibmcloud plugin install infrastructure-service
- Actualice el plugin de Kubernetes Service a la última versión.
ibmcloud plugin update kubernetes-service
- Asegúrese de que la versión de
kubectl
coincide con la versión de Kubernetes del clúster de VPC. Este tutorial crea un clúster que ejecuta la versión 1.32.
Cree un clúster en VPC
Cree un clúster de IBM Cloud Kubernetes Service en el entorno de IBM Cloud Virtual Private Cloud (VPC). Para obtener más información acerca de VPC, consulte Iniciación a Virtual Private Cloud.
- Inicie una sesión en la cuenta, el grupo de recursos y la región de IBM Cloud donde desea crear el entorno de VPC. El VPC debe configurarse en la misma región metropolitana multizona donde desea crear su clúster. En esta guía de aprendizaje
se crea una VPC en
us-south
. Para ver otras regiones admitidas, consulte Áreas metropolitanas multizona para clústeres de VPC. Si tiene un ID federado, incluya la opción--sso
.ibmcloud login -r us-south [-g <resource_group>] [--sso]
- Cree una VPC para el clúster. Para obtener más información, consulte la documentación sobre cómo crear una VPC en la consola o la CLI.
-
Cree una VPC llamada
myvpc
y anote el ID en la salida. Las VPC proporcionan un entorno aislado para que las cargas de trabajo se ejecuten dentro de la nube pública. Puede utilizar la misma VPC para varios clústeres, por ejemplo si desea tener distintos clústeres que alberguen microservicios separados que se tengan que comunicar entre sí. Si desea separar los clústeres, por ejemplo por departamentos, puede crear una VPC para cada clúster.ibmcloud is vpc-create myvpc
-
Cree una subred para la VPC y anote su ID. Tenga en cuenta la siguiente información cuando cree la subred de VPC:
- Zonas: debe tener una subred de VPC para cada zona del clúster. Las zonas disponibles dependen de la región metropolitana en la que haya creado el VPC. Para consultar las zonas de la región, ejecute
ibmcloud is zones
. - Direcciones IP: las subredes de VPC proporcionan direcciones IP privadas para los nodos trabajadores y los servicios de equilibrador de carga en el clúster, por lo tanto asegúrese de crear una subred con suficientes direcciones IP, como por ejemplo 256. Después, ya no puede cambiar el número de direcciones IP que tiene una subred de VPC.
- Pasarelas públicas: no es necesario conectar una pasarela pública para completar esta guía de aprendizaje. Puede mantener los nodos trabajadores aislados del acceso público mediante equilibradores de carga de VPC para exponer las cargas de trabajo de forma segura. Puede conectar una pasarela pública si los nodos trabajadores tienen que acceder a un URL público.
ibmcloud is subnet-create mysubnet1 <vpc_ID> --zone us-south-1 --ipv4-address-count 256
- Zonas: debe tener una subred de VPC para cada zona del clúster. Las zonas disponibles dependen de la región metropolitana en la que haya creado el VPC. Para consultar las zonas de la región, ejecute
-
- Cree un clúster en la VPC en la misma zona que la subred. De forma predeterminada, el clúster se crea con un punto final de servicio en la nube público y privado. Puede utilizar el punto final de servicio en la nube público para acceder al
nodo maestro de Kubernetes, por ejemplo para ejecutar mandatos
kubectl
, desde la máquina local. Los nodos trabajadores pueden comunicarse con el nodo maestro en el punto final de servicio en la nube privado. Para obtener más información sobre las opciones del mandato, consulte la documentación de referencia de la CLIcluster create vpc-gen2
.ibmcloud ks cluster create vpc-gen2 --name myvpc-cluster --zone us-south-1 --version 1.32 --flavor bx2.2x8 --workers 1 --vpc-id <vpc_ID> --subnet-id <vpc_subnet_ID>
- Compruebe el estado del clúster. El clúster puede tardar unos minutos en suministrarse.
- Verifique que el estado (State) del clúster es normal.
ibmcloud ks cluster ls --provider vpc-gen2
- Descargue los archivos de configuración de Kubernetes.
ibmcloud ks cluster config --cluster myvpc-cluster
- Compruebe que los mandatos
kubectl
se ejecutan correctamente con el clúster comprobando la versión del cliente de la CLI de Kubernetes.
Salida de ejemplokubectl version --short
Client Version: 1.32 Server Version: 1.32+IKS
- Verifique que el estado (State) del clúster es normal.
Despliegue una app disponible de forma privada
Cree un despliegue de Kubernetes para desplegar una instancia de una sola app como un pod en el nodo trabajador del clúster de VPC.
-
Clona el código fuente de la aplicación Hello world en tu directorio de inicio de usuario. El repositorio contiene distintas versiones de una app similar en carpetas que empiezan por
Lab
. Cada versión contiene los siguientes archivos:Dockerfile
: las definiciones de compilación para la imagen.app.js
: la app Hello world.package.json
: metadatos sobre la app.
git clone https://github.com/IBM/container-service-getting-started-wt.git
-
Vaya al directorio
Lab 1
.cd 'container-service-getting-started-wt/Lab 1'
-
Utilice un espacio de nombres de registro existente o cree uno, como por ejemplo
vpc-gen2
.ibmcloud cr namespace-list
ibmcloud cr namespace-add vpc-gen2
-
Cree una imagen de Docker que incluya los archivos de aplicación del directorio
Lab 1
.Utilice caracteres alfanuméricos en minúscula o guiones bajos (
_
) solo en el nombre de imagen. No olvide el punto (.
) al final del mandato. El punto indica a Docker que debe buscar el Dockerfile y crear artefactos para crear la imagen dentro del directorio actual.docker build -t us.icr.io/<namespace>/hello-world:1 .
Cuando finalice la compilación, compruebe que aparece el siguiente mensaje de éxito:
=> exporting to image 0.0s => => exporting layers 0.0s => => writing image sha256:3ca1eb1d0998f738b552d4c435329edf731fe59e427555b78ba2fb54f2017906 0.0s => => naming to <region>.icr.io/<namespace>/hello-world:1 0.0s
-
Inicie una sesión en IBM Cloud Container Registry.
ibmcloud cr login
-
Envíe la imagen al espacio de nombres IBM Cloud Container Registry que ha creado. Si tiene que modificar la app en el futuro, repita estos pasos para crear otra versión de la imagen. Nota: Obtenga más información sobre cómo proteger su información personal cuando se trabaja con imágenes de contenedor.
docker push us.icr.io/<namespace>/hello-world:1
-
Cree un despliegue para la app. Los despliegues se utilizan para gestionar pods, lo que incluye instancias contenerizadas de una app. El mandato siguiente despliega la app en un solo pod. Para los efectos de esta guía, el despliegue se denomina despliegue hello-world-deployment, pero puede darle al despliegue cualquier nombre que desee.
kubectl create deployment hello-world-deployment --image=us.icr.io/vpc-gen2/hello-world:1
Salida de ejemplo
deployment.apps/hello-world-deployment created
Obtenga más información sobre cómo proteger su información personal cuando se trabaja recursos de Kubernetes.
-
Facilite el acceso a la app exponiendo el despliegue como un servicio NodePort. Puesto que los nodos trabajadores de VPC están conectados únicamente a una subred privada, al puerto de nodo solo se le asigna a una dirección IP privada y no se expone en la red pública. Otros servicios que se ejecuten en la red privada pueden acceder a la app utilizando la dirección IP privada del servicio NodePort.
kubectl expose deployment/hello-world-deployment --type=NodePort --name=hello-world-service --port=8080 --target-port=8080
Salida de ejemplo
service/hello-world-service exposed
Información sobre las opciones del comando. Parámetro Descripción expose
Exponga un recurso de Kubernetes, como por ejemplo un despliegue, como un servicio de Kubernetes de modo que los usuarios puedan acceder al recurso mediante la dirección IP del servicio. deployment/*<hello-world-deployment>*
El tipo de recurso y el nombre del recurso para exponer con este servicio. --name=*<hello-world-service>*
El nombre del servicio. --type=NodePort
El tipo de servicio a crear. En esta lección, creará un servicio NodePort
. En la lección siguiente, creará un servicioLoadBalancer
.--port=*<8080>*
El puerto en el que el servicio escucha el tráfico de la red externa. --target-port=*<8080>*
El puerto en el que la app escucha y a la que el servicio dirige el tráfico de red de entrada. En este ejemplo, target-port
es el mismo queport
, pero otras app que cree pueden utilizar otro puerto. -
Ahora que ya se ha realizado todo el trabajo de despliegue, puede probar la app desde dentro del clúster. Obtenga los detalles para formar la dirección IP privada que puede utilizar para acceder a la app.
-
Obtenga información acerca del servicio para ver qué NodePort se ha asignado. Los NodePorts se asignan aleatoriamente cuando se generan con el mandato
expose
, pero dentro del rango 30000-32767. En este ejemplo, NodePort es 30872.kubectl describe service hello-world-service
Salida de ejemplo
NAME: hello-world-service Namespace: default Labels: run=hello-world-deployment Selector: run=hello-world-deployment Type: NodePort IP: 10.xxx.xx.xxx Port: <unset> 8080/TCP NodePort: <unset> 30872/TCP Endpoints: 172.30.xxx.xxx:8080 Session Affinity: None No events.
-
Obtenga una lista de los pods que ejecutan su app y anote el nombre del pod.
kubectl get pods
Salida de ejemplo
NAME READY STATUS RESTARTS AGE hello-world-deployment-d99cddb45-lmj2v 1/1 Running 0 2d
-
Describa el pod para averiguar el nodo trabajador en el que se ejecuta el pod. En la salida de ejemplo, el nodo trabajador en el que se ejecuta el pod es 10.xxx.xx.xxx.
kubectl describe pod hello-world-deployment-d99cddb45-lmj2v
Salida de ejemplo
NAME: hello-world-deployment-d99cddb45-lmj2v Namespace: default Priority: 0 PriorityClassName: <none> Node: 10.xxx.xx.xxx/10.xxx.xx.xxx Start Time: Mon, 22 Apr 20122 12:40:48 -0400 Labels: pod-template-hash=d99cddb45 run=hello-world-deployment Annotations: kubernetes.io/psp=ibm-privileged-psp Status: Running IP: 172.30.xxx.xxx ...
-
-
Inicie una sesión en el pod para poder realizar una solicitud a la app desde dentro del clúster.
kubectl exec -it hello-world-deployment-d99cddb45-lmj2v /bin/sh
-
Realice una solicitud al servicio NodePort utilizando la dirección IP privada del nodo trabajador y el puerto de nodo que ha recuperado anteriormente.
wget -O - 10.xxx.xx.xxx:30872
Salida de ejemplo
Connecting to 10.xxx.xx.xxx:30872 (10.xxx.xx.xxx:30872) Hello world from hello-world-deployment-d99cddb45-lmj2v! Your app is up and running in a cluster! - 100% |*****************************************************************************************| 88 0:00:00 ETA
Para cerrar la sesión del pod, escriba
exit
.
Configure un equilibrador de carga para VPC para exponer la app de forma pública
Configure un equilibrador de carga de VPC para exponer la app en la red pública.
Cuando se crea un servicio LoadBalancer
de Kubernetes en el clúster, se crea automáticamente un equilibrador de carga de VPC en la VPC fuera del clúster. El equilibrador de carga es multizona y direcciona las solicitudes de la app
a través de los NodePorts privados que se abren automáticamente en los nodos trabajadores. En el diagrama siguiente se muestra cómo un usuario accede al servicio de una app a través del equilibrador de carga, aunque el nodo trabajador solo
está conectado a una subred privada.
-
Cree un servicio
LoadBalancer
de Kubernetes en el clúster para exponer de forma pública la app hello world.kubectl expose deployment/hello-world-deployment --type=LoadBalancer --name=hw-lb-svc --port=8080 --target-port=8080
Salida de ejemplo
service "hw-lb-svc" exposed
Información sobre las opciones del comando. Parámetro Descripción expose
Exponga un recurso de Kubernetes, como por ejemplo un despliegue, como un servicio de Kubernetes de modo que los usuarios puedan acceder al recurso mediante la dirección IP del servicio. deployment/*<hello-world-deployment>*
El tipo de recurso y el nombre del recurso para exponer con este servicio. --name=*<hello-world-service>*
El nombre del servicio. --type=LoadBalancer
El tipo de servicio Kubernetes que se va a crear. En esta lección, creará un servicio LoadBalancer
.--port=*<8080>*
El puerto en el que el servicio escucha el tráfico de la red externa. --target-port=*<8080>*
El puerto en el que la app escucha y a la que el servicio dirige el tráfico de red de entrada. En este ejemplo, target-port
es el mismo queport
, pero otras app que cree pueden utilizar otro puerto. -
Verifique que el servicio
LoadBalancer
de Kubernetes se ha creado correctamente en el clúster. Cuando se crea el servicioLoadBalancer
de Kubernetes, se crea automáticamente un equilibrador de carga de VPC. El equilibrador de carga de VPC asigna un nombre de host al servicio de Kubernetes LoadBalancer que puede ver en el campo LoadBalancer Ingress de la salida de la CLI. El equilibrador de carga de VPC tarda unos minutos en suministrarse en la VPC. Hasta que el equilibrador de carga VPC esté listo, no podrá acceder al servicio KubernetesLoadBalancer
a través de su nombre de host.kubectl describe service hw-lb-svc
Salida de CLI de ejemplo
NAME: hw-lb-svc Namespace: default Labels: app=hello-world-deployment Annotations: <none> Selector: app=hello-world-deployment Type: LoadBalancer IP: 172.21.xxx.xxx LoadBalancer Ingress: 1234abcd-us-south.lb.appdomain.cloud Port: <unset> 8080/TCP TargetPort: 8080/TCP NodePort: <unset> 32040/TCP Endpoints: Session Affinity: None External Traffic Policy: Cluster Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal EnsuringLoadBalancer 1m service-controller Ensuring load balancer Normal EnsuredLoadBalancer 1m service-controller Ensured load balancer
-
Verifique que el equilibrador de carga de VPC se ha creado correctamente en la VPC. En la salida, verifique que el equilibrador de carga de VPC tiene como estatus de suministro (Provision Status) el valor
active
y como estatus operativo (Operating Status) el valoronline
.El equilibrador de carga de VPC se denomina con el formato
kube-<cluster_ID>-<kubernetes_lb_service_UID>
. Para ver el ID de clúster, ejecuteibmcloud ks cluster get --cluster <cluster_name>
. Para ver el UID del servicioLoadBalancer
de Kubernetes, ejecutekubectl get svc hw-lb-svc -o yaml
y busque el campo metadata.uid en la salida.ibmcloud is load-balancers
En la siguiente salida de CLI de ejemplo, se crea el equilibrador de carga de VPC denominado
kube-bsaucubd07dhl66e4tgg-1f4f408ce6d2485499bcbdec0fa2d306
para el servicioLoadBalancer
de Kubernetes:ID Name Family Subnets Is public Provision status Operating status Resource group r006-d044af9b-92bf-4047-8f77-a7b86efcb923 kube-bsaucubd07dhl66e4tgg-1f4f408ce6d2485499bcbdec0fa2d306 Application mysubnet-us-south-3 true active online default
-
Envíe una solicitud a la app mediante cURL con el nombre de host y el puerto del servicio
LoadBalancer
de ubernetes asignado por el equilibrador de carga de VPC que ha encontrado en el paso 2.curl 1234abcd-us-south.lb.appdomain.cloud:8080
Salida de ejemplo
Hello world from hello-world-deployment-5fd7787c79-sl9hn! Your app is up and running in a cluster!
¿Qué hacer a continuación?
Ahora que tienes un clúster de VPC, aprenda más sobre lo que puede hacer.
- Configuración del almacenamiento en bloque para las apps
- Limitaciones de clúster de VPC
- Acerca de la API v2
¿Necesita ayuda, tiene preguntas o desea escribir comentarios sobre los clústeres de VPC? Intente publicar en el canal de Slack.