Un clúster compartido en Google Distributed Cloud (GDC) aislado te permite ejecutar aplicaciones en contenedores en dominios del fallo aislados de tu organización. Después de adjuntar uno a un proyecto, puedes gestionar esas cargas de trabajo en un espacio de nombres específico. En este tutorial, configurarás un registro de Harbor gestionado, enviarás una imagen de NGINX de ejemplo desde Docker Hub y desplegarás el servidor web.
Este flujo de trabajo está dirigido a los desarrolladores del grupo de operadores de aplicaciones que crean cargas de trabajo para su organización. Para obtener más información, consulta la documentación de Audiencias para GDC aislado.
Objetivos
- Crea un registro de Harbor gestionado.
- Envía una imagen de contenedor al registro de Harbor gestionado.
- Crea un clúster de Kubernetes compartido.
- Despliega la aplicación de contenedor de ejemplo en el clúster.
Costes
Como GDC está diseñado para ejecutarse en un centro de datos aislado, los procesos y la información de facturación se limitan únicamente al despliegue de GDC y no se gestionan con otros productos de Google.
Para generar una estimación de costes basada en el uso previsto, utiliza la calculadora de precios.
Usa el panel de control de costes previstos para anticipar los costes futuros de los SKUs de tus facturas.
Para hacer un seguimiento del consumo de almacenamiento y computación, usa los paneles de control de uso de facturación.
Antes de empezar
Para completar las tareas de este documento, debes solicitar los permisos necesarios y preparar tu entorno.
Colabora con tu equipo de infraestructura y tus administradores para transferir el binario de tu aplicación a tu estación de trabajo aislada o sigue este tutorial directamente en tu servidor de integración y entrega continuas (CI/CD).
Solicitar roles de gestión de identidades y accesos
Debes tener roles específicos para obtener los permisos que necesitas para completar este flujo de trabajo del tutorial. Debes solicitar roles que se apliquen a tu proyecto y a tu organización.
Roles de la organización
Para crear, eliminar, editar o ver un clúster de Kubernetes compartido, pide al administrador de la organización de gestión de identidades y accesos que te asigne el rol Administrador de clústeres de usuarios (user-cluster-admin). Este rol no está vinculado a un espacio de nombres.
Si no tienes permisos para crear un clúster compartido, pide al administrador de tu plataforma que cree uno.
Roles de proyecto
Pide al administrador de proyectos de gestión de identidades y accesos que te asigne los siguientes roles en el espacio de nombres de tu proyecto en función de la tarea que quieras realizar:
Administrador de espacio de nombres (
namepspace-admin): puede crear, eliminar, editar y ver recursos de proyectos. Este rol es necesario para desplegar cargas de trabajo de contenedores en tu proyecto.Administrador de instancias de Harbor (
harbor-instance-admin): crea, elimina, edita y consulta recursos de Harbor, incluidas las instancias de Harbor.Visor de instancias de Harbor (
harbor-instance-viewer): permite ver y seleccionar una instancia de Harbor.Creador de proyectos de Harbor (
harbor-project-creator): crea y consulta proyectos de Harbor.
Prepara tu entorno
Para completar este documento, debes tener los siguientes recursos:
Asegúrate de que tienes un proyecto para gestionar tus despliegues en contenedores. Crea un proyecto si no tienes ninguno.
Define el espacio de nombres de tu proyecto como una variable de entorno:
export NAMESPACE=PROJECT_NAMESPACEInicia sesión en el servidor de la API de gestión de zonas y genera su archivo kubeconfig con una identidad de usuario. Define la ruta de kubeconfig como una variable de entorno:
export MANAGEMENT_API_SERVER=MANAGEMENT_API_SERVER_KUBECONFIG_PATH
Crear un registro de Harbor gestionado
GDC aislado ofrece Harbor as a Service, un servicio totalmente gestionado que te permite almacenar y gestionar imágenes de contenedor con Harbor.
Para usar Harbor as a Service, primero debes crear una instancia de registro de Harbor y un proyecto de Harbor.
Crear instancia de registro de Harbor
Para crear una instancia de Container Registry de Harbor, sigue estos pasos:
Consola
En el menú de navegación, selecciona Harbor Container Registry en la sección CI/CD.
Selecciona la zona en la que quieras crear tu instancia de Harbor. Una instancia de Harbor es un recurso de zona y debe crearse manualmente en cada zona para garantizar una alta disponibilidad.
Haz clic en Crear instancia.
Introduce el nombre de la instancia y acepta los Términos del Servicio de Harbor Managed.
Haz clic en Crear instancia.
Confirma que la nueva instancia de Harbor aparece en la sección Instancia de Harbor.
Haz clic en el enlace externo Ir a la instancia de Harbor y anota la URL de la instancia. Por ejemplo, el formato de la URL de la instancia es similar a
harbor-1.org-1.zone1.google.gdc.test. La URL de la instancia no debe incluir el prefijohttps://.Define la URL de la instancia como una variable para usarla más adelante en el tutorial:
export INSTANCE_URL=INSTANCE_URLSustituye INSTANCE_URL por la URL de la instancia de registro de Harbor.
Por ejemplo:
export INSTANCE_URL=harbor-1.org-1.zone1.google.gdc.test
gdcloud
Crea la nueva instancia de Container Registry de Harbor:
gdcloud harbor instances create INSTANCE_NAME \ --project=PROJECTHaz los cambios siguientes:
INSTANCE_NAME: el nombre de la instancia de Harbor.PROJECT: el nombre del proyecto de GDC.
Indica la URL de la instancia:
gdcloud harbor instances describe INSTANCE_NAME \ --project=PROJECTEl resultado es similar al siguiente:
# Several lines of code are omitted here. status: url: https://harbor-1.org-1.zone1.google.gdc.testDefine la URL de la instancia como una variable para usarla más adelante en el tutorial:
export INSTANCE_URL=INSTANCE_URLSustituye INSTANCE_URL por la URL de la instancia de registro de Harbor. Asegúrate de que la URL de la instancia no incluya el prefijo
https://.Por ejemplo:
export INSTANCE_URL=harbor-1.org-1.zone1.google.gdc.test
Crear un proyecto de Harbor en el registro
Debes crear un proyecto de Harbor en la instancia de registro de Harbor para gestionar tus imágenes de contenedor:
Consola
En la página Harbor Container Registry, haz clic en Create A Harbor Project (Crear un proyecto de Harbor).
Introduce el nombre del proyecto.
Haz clic en Crear.
Define el nombre del proyecto de Harbor como una variable para usarlo más adelante en el tutorial:
export HARBOR_PROJECT=HARBOR_PROJECT
gdcloud
Crea el proyecto de Harbor:
gdcloud harbor harbor-projects create HARBOR_PROJECT \ --project=PROJECT \ --instance=INSTANCE_NAMEHaz los cambios siguientes:
HARBOR_PROJECT: el nombre del proyecto de Harbor que se va a crear.PROJECT: el nombre del proyecto de GDC.INSTANCE_NAME: el nombre de la instancia de Harbor.
Define el nombre del proyecto de Harbor como una variable para usarlo más adelante en el tutorial:
export HARBOR_PROJECT=HARBOR_PROJECT
Configurar Docker
No es necesario que configures la confianza en los nodos de tu clúster, ya que GDC los configura para que confíen en tu instancia de registro de Harbor automáticamente. Para obtener más información, consulta Confianza de los nodos de clúster para las instancias de registro de Harbor.
Para usar Docker en tu estación de trabajo con tu registro de Harbor, sigue estos pasos:
Configura Docker para que confíe en Harbor as a Service. Para obtener más información, consulta Configurar Docker para que confíe en la CA raíz de Harbor.
Configura la autenticación de Docker en Harbor. Para obtener más información, consulta Configurar la autenticación de Docker en instancias de registro de Harbor.
Crear un secreto de extracción de imágenes de Kubernetes
Como usas un proyecto privado de Harbor, debes crear un secreto de extracción de imágenes de Kubernetes.
Añade una cuenta de robot de proyecto de Harbor para que sirva como tu cuenta de servicio.
En la consola de Harbor, selecciona tu proyecto de Harbor.
Haz clic en Robot Accounts (Cuentas de robot).
Selecciona New Robot Account (Nueva cuenta de robot).
Asigna un nombre a la nueva cuenta de robot y define los ajustes adicionales.
Haz clic en Añadir.
El nombre y el secreto de la cuenta de robot se muestran en la pantalla de confirmación. Mantén esta pantalla abierta para consultarla en el siguiente paso.
Para obtener más información, consulta la documentación de Harbor: https://goharbor.io/docs/2.8.0/working-with-projects/project-configuration/create-robot-accounts/#add-a-robot-account.
En una nueva ventana de la terminal, inicia sesión en Docker con tu cuenta de robot del proyecto de Harbor y el token secreto:
docker login ${INSTANCE_URL}Cuando se te solicite, introduce el nombre del proyecto de robot en Nombre de usuario y el token secreto en Contraseña que se proporcionaron en el paso anterior en la pantalla de éxito de la consola de Harbor.
Asigna un nombre arbitrario al secreto de extracción de imágenes:
export SECRET=SECRETCrea el secreto necesario para extraer la imagen:
kubectl create secret docker-registry ${SECRET} \ --from-file=.dockerconfigjson=DOCKER_CONFIG \ -n ${NAMESPACE}Sustituye
DOCKER_CONFIGpor la ruta al archivo.docker/config.json.Confirma que tu secreto existe en el espacio de nombres de tu proyecto de GDC:
kubectl get secrets -n ${NAMESPACE}El resultado debería ser similar al siguiente:
NAME TYPE DATA AGE my-secret kubernetes.io/dockerconfigjson 1 23s
Enviar una imagen de contenedor a un registro de Harbor gestionado
En este tutorial, descargarás y enviarás la imagen del servidor web nginx al registro de Harbor gestionado, y la usarás para desplegar una aplicación de servidor web nginx de ejemplo en un clúster de Kubernetes compartido. La aplicación de servidor web nginx está disponible en el repositorio público de Docker Hub.
Extrae la imagen
nginxde Docker Hub a tu estación de trabajo local mediante una red externa:docker pull nginxEtiqueta la imagen local con el nombre del repositorio:
docker tag nginx ${INSTANCE_URL}/${HARBOR_PROJECT}/nginx:1.25Envía la imagen de contenedor de
nginxa tu registro de Harbor gestionado:docker push ${INSTANCE_URL}/${HARBOR_PROJECT}/nginx:1.25
Crear un clúster de Kubernetes
Ahora que tienes la imagen de contenedor de nginx almacenada en el registro de Harbor gestionado y puedes acceder a ella, crea un clúster de Kubernetes compartido para ejecutar el servidor web nginx.
Consola
En el menú de navegación, selecciona Kubernetes Engine > Clústeres.
Haz clic en Crear clúster.
En el campo Nombre, especifica un nombre para el clúster.
Selecciona la zona en la que quieres crear el clúster de Kubernetes. Un clúster de Kubernetes es un recurso de zona y debe crearse manualmente en cada zona para garantizar una alta disponibilidad.
Haz clic en Adjuntar proyecto y selecciona el proyecto que quieras adjuntar a tu clúster. A continuación, haz clic en Guardar.
Haz clic en Crear.
Espera a que se cree el clúster. Cuando el clúster esté disponible para su uso, aparecerá el estado
READYjunto al nombre del clúster.
API
Crea un recurso personalizado de
Clustery guárdalo como un archivo YAML, comocluster.yaml:apiVersion: cluster.gdc.goog/v1 kind: Cluster metadata: name: CLUSTER_NAME namespace: platformSustituye el valor
CLUSTER_NAMEpor el nombre del clúster.Aplica el recurso personalizado a tu instancia de GDC:
kubectl create -f cluster.yaml --kubeconfig ${MANAGEMENT_API_SERVER}Asigna un proyecto a tu clúster de Kubernetes mediante la consola de GDC. Por el momento, no puedes adjuntar un proyecto al clúster mediante la API.
Para obtener más información sobre cómo crear un clúster de Kubernetes compartido, consulta Crear un clúster compartido. Para obtener más información sobre las opciones de configuración de clústeres disponibles, consulta Configuraciones de clústeres de Kubernetes.
Desplegar la aplicación de contenedor de muestra
Ya puedes desplegar la imagen de contenedor de nginx en tu clúster de Kubernetes.
Kubernetes representa las aplicaciones como recursos de Pod, que son unidades escalables que contienen uno o varios contenedores. El pod es la unidad desplegable más pequeña de Kubernetes. Normalmente, los pods se despliegan como un conjunto de réplicas que se pueden escalar y distribuir juntas en el clúster. Una forma de desplegar un conjunto de réplicas es mediante un Deployment de Kubernetes.
En esta sección, crearás un Deployment de Kubernetes para ejecutar la aplicación de contenedor nginx en tu clúster. Este despliegue tiene réplicas o pods. Un pod de Deployment contiene solo un contenedor: la imagen de contenedor de nginx. También creas un recurso Service que proporciona una forma estable para que los clientes envíen solicitudes a los pods de tu Deployment.
Despliega el servidor web nginx en tu clúster de Kubernetes:
Inicia sesión en el clúster de Kubernetes y genera su archivo kubeconfig con una identidad de usuario. Define la ruta de kubeconfig como una variable de entorno:
export KUBECONFIG=CLUSTER_KUBECONFIG_PATHCrea y despliega los recursos personalizados
DeploymentyServicede Kubernetes:kubectl --kubeconfig ${KUBECONFIG} -n ${NAMESPACE} \ create -f - <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: ${INSTANCE_URL}/${HARBOR_PROJECT}/nginx:1.25 ports: - containerPort: 80 imagePullSecrets: - name: ${SECRET} --- apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - port: 80 protocol: TCP type: LoadBalancer EOFVerifica que el despliegue haya creado los pods:
kubectl get pods -l app=nginx -n ${NAMESPACE}El resultado debería ser similar al siguiente:
NAME READY STATUS RESTARTS AGE nginx-deployment-1882529037-6p4mt 1/1 Running 0 1h nginx-deployment-1882529037-p29za 1/1 Running 0 1h nginx-deployment-1882529037-s0cmt 1/1 Running 0 1hCrea una política de red para permitir todo el tráfico de red al espacio de nombres:
kubectl --kubeconfig ${KUBECONFIG} -n ${NAMESPACE} \ create -f - <<EOF apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: annotations: name: allow-all spec: ingress: - from: - ipBlock: cidr: 0.0.0.0/0 podSelector: {} policyTypes: - Ingress EOFExporta la dirección IP del servicio
nginx:export IP=`kubectl --kubeconfig=${KUBECONFIG} get service nginx-service \ -n ${NAMESPACE} -o jsonpath='{.status.loadBalancer.ingress[*].ip}'`Prueba la dirección IP del servidor de
nginxconcurl:curl http://$IP
Limpieza
Para evitar que se apliquen cargos a tu cuenta de GDC por los recursos usados en este tutorial, debes eliminar los recursos que has creado.
Eliminar la imagen de contenedor
Para eliminar la imagen de contenedor de tu entorno aislado de GDC, elimina la instancia de Harbor que contiene la imagen o conserva la instancia de Harbor y elimina la imagen de contenedor individual.
Para eliminar la imagen de contenedor del registro de Harbor gestionado, usa la consola de GDC:
En el menú de navegación, selecciona Harbor Container Registry en la sección CI/CD.
Haz clic en el enlace externo Ir a la instancia de Harbor.
Elimina la imagen de contenedor con la interfaz de usuario de Harbor. Para obtener más información, consulta Eliminar instancias de registro de Harbor.
Eliminar la aplicación contenedora
Para eliminar la aplicación de contenedor desplegada, puedes eliminar el proyecto de GDC que contiene los recursos o conservar el proyecto de GDC y eliminar los recursos individuales.
Para eliminar los recursos individuales, sigue estos pasos:
Elimina el objeto
Servicede tu aplicación de contenedor:kubectl delete service nginx-service -n ${NAMESPACE}Elimina el objeto
Deploymentde tu aplicación de contenedor:kubectl delete deployment nginx-deployment -n ${NAMESPACE}Si has creado un clúster de Kubernetes de prueba solo para este tutorial, elimínalo:
kubectl delete clusters.cluster.gdc.goog/USER_CLUSTER_NAME \ -n platform --kubeconfig ${MANAGEMENT_API_SERVER}De esta forma, se eliminan los recursos que componen el clúster de Kubernetes, como las instancias de computación, los discos y los recursos de red:
Siguientes pasos
Consulta la jerarquía de recursos y los detalles sobre el aislamiento de recursos.
Consulta información sobre la arquitectura de clústeres.
Consulta la documentación sobre contenedores de Kubernetes para GDC para obtener información sobre cómo gestionar los contenedores desplegados en tus clústeres de Kubernetes.
Consulta cómo gestionar tus clústeres de Kubernetes después de desplegar las cargas de trabajo de tus contenedores.
Consulta las prácticas recomendadas para configurar tus cargas de trabajo de contenedores y otros recursos de servicio.