Questo tutorial descrive come caricare un'applicazione containerizzata in un ambiente con air gap di Google Distributed Cloud (GDC) e come eseguirla su un cluster Kubernetes condiviso. Un carico di lavoro containerizzato viene eseguito su un cluster Kubernetes condiviso all'interno di uno spazio dei nomi del progetto. I cluster condivisi sono logicamente separati dai progetti e tra loro per fornire diversi domini di errore e garanzie di isolamento. Tuttavia, devi assicurarti che il cluster condiviso sia collegato a un progetto per consentire la gestione dei carichi di lavoro containerizzati all'interno di un progetto.
Questo flusso di lavoro è destinato agli sviluppatori di applicazioni all'interno del gruppo di operatori di applicazioni responsabili della creazione di carichi di lavoro delle applicazioni per la propria organizzazione. Per ulteriori informazioni, consulta la sezione Pubblico della documentazione di GDC con air gap.
Uno dei maggiori ostacoli per il deployment di un'app containerizzata è trasferire il file binario dell'app al data center con air gap. Collabora con il team di infrastruttura e gli amministratori per trasferire l'applicazione alla tua workstation o implementare questo tutorial direttamente sul server di integrazione continua e distribuzione continua (CI/CD).
Questo tutorial utilizza un'app server web di esempio disponibile in Artifact Registry. Google Cloud
Obiettivi
- Crea un registro Harbor gestito.
- Esegui il push di un'immagine container nel registro Harbor gestito.
- Crea un cluster Kubernetes condiviso.
- Esegui il deployment dell'app container di esempio nel cluster.
Costi
Poiché GDC è progettato per essere eseguito in un data center con air gap, i processi e le informazioni di fatturazione sono limitati solo al deployment di GDC e non sono gestiti da altri prodotti Google.
Per generare una stima dei costi in base all'utilizzo previsto, utilizza il calcolatore prezzi.
Utilizza la dashboard Costo previsto per prevedere i costi futuri degli SKU per le tue fatture.
Per monitorare il consumo di spazio di archiviazione e di calcolo, utilizza le dashboard di utilizzo della fatturazione.
Prima di iniziare
Per completare le attività descritte in questo documento, devi richiedere le autorizzazioni necessarie e preparare l'ambiente.
Richiedi ruoli IAM
Devi disporre di ruoli specifici per ottenere le autorizzazioni necessarie per completare il flusso di lavoro di questo tutorial. Devi richiedere ruoli con ambito limitato al tuo progetto e alla tua organizzazione.
Ruoli organizzazione
Per creare, eliminare, modificare o visualizzare un cluster Kubernetes condiviso, chiedi all'amministratore IAM dell'organizzazione di concederti il ruolo Amministratore del cluster utente (user-cluster-admin). Questo ruolo non è associato a uno spazio dei nomi.
Se non hai le autorizzazioni per creare un cluster condiviso, chiedi all'amministratore della piattaforma di crearne uno per te.
Ruoli progetto
Chiedi all'amministratore IAM del progetto di concederti i seguenti ruoli nello spazio dei nomi del progetto in base all'attività da eseguire:
Amministratore dello spazio dei nomi (
namepspace-admin): crea, elimina, modifica e visualizza le risorse del progetto. Questo ruolo è necessario per eseguire il deployment dei carichi di lavoro containerizzati nel progetto.Amministratore dell'istanza Harbor (
harbor-instance-admin): crea, elimina, modifica e visualizza le risorse Harbor, incluse le istanze Harbor.Visualizzatore dell'istanza Harbor (
harbor-instance-viewer): visualizza e seleziona un'istanza Harbor.Creatore di progetti Harbor (
harbor-project-creator): crea e visualizza i progetti Harbor.
Prepara l'ambiente
Per completare questo documento, devi disporre delle seguenti risorse:
Assicurati di avere un progetto per gestire i deployment containerizzati. Crea un progetto se non ne hai uno.
Imposta lo spazio dei nomi del progetto come variabile di ambiente:
export NAMESPACE=PROJECT_NAMESPACEAccedi al server API di gestione zonale e genera il relativo file kubeconfig con un' identità utente. Imposta il percorso kubeconfig come variabile di ambiente:
export MANAGEMENT_API_SERVER=MANAGEMENT_API_SERVER_KUBECONFIG_PATH
Crea un registro Harbor gestito
GDC con air gap fornisce Harbor as a Service, un servizio completamente gestito che ti consente di archiviare e gestire le immagini container utilizzando Harbor.
Per utilizzare Harbor as a Service, devi prima creare un'istanza del registro Harbor e un progetto Harbor.
Crea un'istanza del registro Harbor
Per creare un'istanza del registro container Harbor:
Console
Nel menu di navigazione, seleziona Harbor Container Registry dalla sezione CI/CD.
Seleziona la zona in cui creare l'istanza Harbor. Un'istanza Harbor è una risorsa di zona e deve essere creata manualmente in ogni zona per garantire l'alta affidabilità.
Fai clic su Crea istanza.
Inserisci il nome dell'istanza e accetta i Termini di servizio gestiti di Harbor.
Fai clic su Crea istanza.
Verifica che la nuova istanza Harbor sia presente nella sezione Istanza Harbor.
Fai clic sul link esterno Vai all'istanza Harbor e prendi nota dell'URL dell'istanza. Ad esempio, il formato dell'URL dell'istanza è simile a
harbor-1.org-1.zone1.google.gdc.test. L'URL dell'istanza non deve includere il prefissohttps://.Imposta l'URL dell'istanza come variabile da utilizzare più avanti nel tutorial:
export INSTANCE_URL=INSTANCE_URLSostituisci INSTANCE_URL con l'URL dell'istanza del registro Harbor.
Ad esempio:
export INSTANCE_URL=harbor-1.org-1.zone1.google.gdc.test
gdcloud
Crea la nuova istanza del registro container Harbor:
gdcloud harbor instances create INSTANCE_NAME \ --project=PROJECT \Sostituisci quanto segue:
INSTANCE_NAME: il nome dell'istanza Harbor.PROJECT: il nome del progetto GDC.
Elenca l'URL dell'istanza:
gdcloud harbor instances describe INSTANCE_NAME \ --project=PROJECTL'output è simile al seguente:
# Several lines of code are omitted here. status: url: https://harbor-1.org-1.zone1.google.gdc.testImposta l'URL dell'istanza come variabile da utilizzare più avanti nel tutorial:
export INSTANCE_URL=INSTANCE_URLSostituisci INSTANCE_URL con l'URL dell'istanza del registro Harbor. Assicurati che l'URL dell'istanza non includa il prefisso
https://.Ad esempio:
export INSTANCE_URL=harbor-1.org-1.zone1.google.gdc.test
Crea un progetto Harbor nel registro
Devi creare un progetto Harbor all'interno dell'istanza del registro Harbor per gestire le immagini container:
Console
Fai clic su Crea un progetto Harbor dalla pagina Container Registry Harbor.
Inserisci il nome del progetto.
Fai clic su Crea.
Imposta il nome del progetto Harbor come variabile da utilizzare più avanti nel tutorial:
export HARBOR_PROJECT=HARBOR_PROJECT
gdcloud
Crea il nuovo progetto Harbor:
gdcloud harbor harbor-projects create HARBOR_PROJECT \ --project=PROJECT \ --instance=INSTANCE_NAMESostituisci quanto segue:
HARBOR_PROJECT: il nome del progetto Harbor da creare.PROJECT: il nome del progetto GDC.INSTANCE_NAME: il nome dell'istanza Harbor.
Imposta il nome del progetto Harbor come variabile da utilizzare più avanti nel tutorial:
export HARBOR_PROJECT=HARBOR_PROJECT
Configura Docker
Per utilizzare Docker nel registro Harbor:
Configura Docker in modo che consideri attendibile Harbor as a Service. Per ulteriori informazioni, consulta Configurare Docker in modo che consideri attendibile la CA root di Harbor.
Configura l'autenticazione Docker in Harbor. Per ulteriori informazioni, consulta Configurare l'autenticazione Docker per le istanze del registro Harbor.
Crea un secret di pull delle immagini Kubernetes
Poiché utilizzi un progetto Harbor privato, devi creare un secret di pull delle immagini Kubernetes.
Aggiungi un account robot del progetto Harbor da utilizzare come account di servizio.
Dalla console Harbor, seleziona il progetto Harbor.
Fai clic su Account robot.
Seleziona Nuovo account robot.
Assegna un nome al nuovo account robot e definisci eventuali impostazioni aggiuntive.
Fai clic su Aggiungi.
Il nome e il secret dell'account robot vengono visualizzati nella schermata di conferma. Mantieni aperta questa schermata per riferimento nel passaggio successivo.
Per ulteriori informazioni, consulta la documentazione di Harbor: https://goharbor.io/docs/2.8.0/working-with-projects/project-configuration/create-robot-accounts/#add-a-robot-account.
In una nuova finestra del terminale, accedi a Docker con l'account robot del progetto Harbor e il token secret:
docker login ${INSTANCE_URL}Quando richiesto, inserisci il nome del progetto robot per il Nome utente e il token secret per la Password forniti nel passaggio precedente dalla schermata di conferma della console Harbor.
Imposta un nome arbitrario per il secret di pull delle immagini:
export SECRET=SECRETCrea il secret necessario per il pull delle immagini:
kubectl create secret docker-registry ${SECRET} \ --from-file=.dockerconfigjson=DOCKER_CONFIG \ -n ${NAMESPACE}Sostituisci
DOCKER_CONFIGcon il percorso del file.docker/config.json.Verifica che il secret esista nello spazio dei nomi del progetto GDC:
kubectl get secrets -n ${NAMESPACE}L'output è simile al seguente:
NAME TYPE DATA AGE my-secret kubernetes.io/dockerconfigjson 1 23s
Esegui il push dell'immagine container nel registro Harbor gestito
Per questo tutorial, scaricherai ed eseguirai il push dell'immagine del server web nginx nel registro Harbor gestito e la utilizzerai per eseguire il deployment di un'app server web nginx di esempio in un cluster Kubernetes condiviso. L'app server web nginx è disponibile nel repository pubblico Docker Hub.
Esegui il pull dell'immagine
nginxda Docker Hub alla tua workstation locale utilizzando una rete esterna:docker pull nginxTagga l'immagine locale con il nome del repository:
docker tag nginx ${INSTANCE_URL}/${HARBOR_PROJECT}/nginx:1.25Esegui il push dell'immagine container
nginxnel registro Harbor gestito:docker push ${INSTANCE_URL}/${HARBOR_PROJECT}/nginx:1.25
Crea un cluster Kubernetes
Ora che l'immagine container nginx è archiviata nel registro Harbor gestito e puoi accedervi, crea un cluster Kubernetes condiviso per eseguire il server web nginx.
Console
Nel menu di navigazione, seleziona Kubernetes Engine > Cluster.
Fai clic su Crea cluster.
Nel campo Nome, specifica un nome per il cluster.
Seleziona la zona in cui creare il cluster Kubernetes. Un cluster Kubernetes è una risorsa di zona e deve essere creato manualmente in ogni zona per garantire l'alta affidabilità.
Fai clic su Collega progetto e seleziona un progetto da collegare al cluster. Quindi, fai clic su Salva.
Fai clic su Crea.
Attendi la creazione del cluster. Quando il cluster è disponibile per l'uso, lo stato
READYviene visualizzato accanto al nome del cluster.
API
Crea una risorsa personalizzata
Clustere salvala come file YAML, ad esempiocluster.yaml:apiVersion: cluster.gdc.goog/v1 kind: Cluster metadata: name: CLUSTER_NAME namespace: platformSostituisci il valore
CLUSTER_NAMEcon il nome del cluster.Applica la risorsa personalizzata all'istanza GDC:
kubectl create -f cluster.yaml --kubeconfig ${MANAGEMENT_API_SERVER}Collega un progetto al cluster Kubernetes utilizzando la console GDC. Al momento non puoi collegare un progetto al cluster utilizzando l'API.
Per ulteriori informazioni sulla creazione di un cluster Kubernetes condiviso, consulta Creare un cluster condiviso. Per ulteriori informazioni sulle opzioni di configurazione del cluster disponibili, consulta Configurazioni del cluster Kubernetes.
Esegui il deployment dell'app container di esempio
Ora puoi eseguire il deployment dell'immagine container nginx nel cluster Kubernetes.
Kubernetes rappresenta le applicazioni come risorse Pod, che sono unità scalabili che contengono uno o più container. Il pod è l'unità di deployment più piccola in Kubernetes. In genere, esegui il deployment dei pod come un insieme di repliche che possono essere scalate e distribuite insieme nel cluster. Un modo per eseguire il deployment di un insieme di repliche è tramite un Deployment Kubernetes.
In questa sezione, creerai un Deployment Kubernetes per eseguire l'app container nginx nel cluster. Questo deployment ha repliche o pod. Un pod Deployment include solamente un container: l'immagine container nginx. Creerai anche una risorsa Service che fornisce un modo stabile per i client di inviare richieste ai pod del Deployment.
Esegui il deployment del server web nginx nel cluster Kubernetes:
Accedi al cluster Kubernetes e genera il relativo file kubeconfig con un'identità utente. Imposta il percorso kubeconfig come variabile di ambiente:
export KUBECONFIG=CLUSTER_KUBECONFIG_PATHCrea ed esegui il deployment delle risorse personalizzate
DeploymenteServicedi 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 che i pod siano stati creati dal deployment:
kubectl get pods -l app=nginx -n ${NAMESPACE}L'output è simile al seguente:
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 policy di rete per consentire tutto il traffico di rete allo spazio dei nomi:
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 EOFEsporta l'indirizzo IP per il servizio
nginx:export IP=`kubectl --kubeconfig=${KUBECONFIG} get service nginx-service \ -n ${NAMESPACE} -o jsonpath='{.status.loadBalancer.ingress[*].ip}'`Verifica l'indirizzo IP del server
nginxutilizzandocurl:curl http://$IP
Libera spazio
Per evitare addebiti sul tuo account GDC per le risorse utilizzate in questo tutorial, devi eliminare le risorse che hai creato.
Elimina l'immagine container
Per eliminare l'immagine container dall'ambiente GDC con air gap, elimina l'istanza Harbor che contiene l'immagine oppure mantieni l'istanza Harbor ed elimina la singola immagine container.
Per eliminare l'immagine container dal registro Harbor gestito, utilizza la console GDC:
Nel menu di navigazione, seleziona Harbor Container Registry dalla sezione CI/CD.
Fai clic sul link esterno Vai all'istanza Harbor.
Elimina l'immagine container utilizzando l'interfaccia utente di Harbor. Per ulteriori informazioni, consulta Eliminare le istanze del registro Harbor .
Elimina l'app container
Per eliminare le singole risorse:
Elimina l'oggetto
Serviceper l'app container:kubectl delete service nginx-service -n ${NAMESPACE}Elimina l'oggetto
Deploymentper l'app container:kubectl delete deployment nginx-deployment -n ${NAMESPACE}Se hai creato un cluster Kubernetes di test esclusivamente per questo tutorial, eliminalo:
kubectl delete clusters.cluster.gdc.goog/USER_CLUSTER_NAME \ -n platform --kubeconfig ${MANAGEMENT_API_SERVER}Questa operazione elimina le risorse che compongono il cluster Kubernetes, come le istanze di Compute, i dischi e le risorse di rete:
Passaggi successivi
Esplora la gerarchia delle risorse e i dettagli relativi all'isolamento delle risorse.
Scopri di più sull'architettura del cluster.
Leggi la documentazione relativa ai container Kubernetes per GDC per informazioni su come gestire i container di cui hai eseguito il deployment nei cluster Kubernetes.
Scopri come gestire i cluster Kubernetes dopo il deployment dei carichi di lavoro containerizzati.
Esplora le best practice per la configurazione dei carichi di lavoro containerizzati e di altre risorse di servizio.