Collegare una distribuzione Cloud Databases a un'applicazione IBM Cloud Kubernetes Service
Il repository Cloud Databases "Hello World" contiene esempi di applicazioni IBM Cloud®, scritte in vari linguaggi di programmazione, che spiegano come collegare un deployment Cloud Databases a un'applicazione IBM Cloud Kubernetes Service.
Ogni Git ramo del repository degli esempi corrisponde a campioni in un particolare linguaggio di programmazione, che utilizza JavaScript o Python Node.js. I file di ogni cartella corrispondono a un database o a una coda di messaggi.
Provare le applicazioni campione
Clonare il rispettivo repo che si vuole utilizzare. Ad esempio, è possibile clonare il repository Node selezionando il ramo Node. Quindi, fare clic su Clona o scarica per ottenere il sito URL da clonare utilizzando SSH o HTTPS. Il comando si presenta come:
git clone -b node git@github.com:IBM-Cloud/clouddatabases-helloworld-kubernetes-examples.git
Oppure, clonare utilizzando HTTPS:
git clone -b node https://github.com/IBM-Cloud/clouddatabases-helloworld-kubernetes-examples.git
Dopo la clonazione del ramo, selezionare la directory appropriata per il database che si desidera provare. Ogni database ha una propria copia di queste istruzioni su come fornire e distribuire un database o una coda di messaggi e un'applicazione su IBM Cloud Kubernetes Service.
In esecuzione su IBM Cloud
-
Se non si dispone già di un account IBM Cloud, registrarsi qui.
-
Scaricare e installare IBM Cloud CLI. Lo strumento IBM Cloud Consente di comunicare con IBM Cloud dalla console o dalla CLI.
-
Installare il plug-in Kubernetes Service E il plug-in CLI del Container Registry
ibmcloud plugin install container-service ibmcloud plugin install container-registryPer verificare la loro installazione, eseguire
ibmcloud plugin listSi riceve una risposta di questo tipo:
Listing installed plug-ins... Plugin Name Version Status container-registry 0.1.382 container-service/kubernetes-service 0.3.34 -
Scaricare e installare la CLI di Kubernetes.
Seguire le istruzioni per scaricare e installare la Kubernetes CLI per la piattaforma in uso.
-
Connettiti a IBM Cloud nell' strumento CLI e segui le istruzioni per effettuare il login.
ibmcloud loginSe disponi di un ID utente federato, utilizza il
ibmcloud login --ssocomando per accedere con il tuo ID Single Sign-On.
Creazione del database
Questo processo crea un'istanza di database standard nel servizio specificato dall'utente, che potrebbe comportare costi aggiuntivi nel piano selezionato.
-
È necessario puntare a un gruppo di risorse, utilizzando il seguente comando:
ibmcloud target -g <RESOURCE_GROUP>
Per ulteriori informazioni, consultare Utilizzo delle risorse e dei gruppi di risorse(risorsa ibmcloud).
-
Il database può essere creato dalla CLI utilizzando il comando
ibmcloud resource service-instance-create. Il comando richiede il nome dell'istanza di servizio, il nome del servizio, il nome del piano e la posizione. -
Il nome del servizio è uno dei Cloud Databases seguenti:
databases-for-elasticsearch,databases-for-mongodb,databases-for-postgresql,databases-for-redis,messages-for-rabbitmq, odatabases-for-mysql.ibmcloud resource service-instance-create <INSTANCE_NAME> <SERVICE_NAME> standard <REGION>
Ricordare il nome dell'istanza del database. Trova il tuo identificativo della regione.
L'esempio precedente prevede un'istanza di Shared Compute. Per ulteriori informazioni, consultare la panoramica dei modelli di hosting.
Configurazione Kubernetes dell'app
-
Creare un Kubernetes Service. Scegliere la posizione e il gruppo di risorse in cui si desidera configurare il cluster. Selezionare il tipo di cluster che si desidera utilizzare. Questo esempio richiede solo il piano lite, che prevede un solo nodo lavoratore. Dopo il provisioning di un cluster, viene fornito un elenco di passaggi per accedere al cluster e impostare le variabili d'ambiente nella scheda Accesso. È inoltre possibile verificare che l'installazione client sia stata eseguita e funzioni normalmente.
-
Assicurarsi di puntare al gruppo di risorse IBM Cloud corretto del proprio Kubernetes Service.
Se il gruppo di risorse ha un nome diverso da
default, usare il comando seguente per indirizzare il gruppo di risorse del cluster:ibmcloud target -g <RESOURCE_GROUP_NAME>Questo esempio utilizza il gruppo di risorse
default. -
Creare il proprio repository privato di immagini in Container Registry per memorizzare l'immagine Docker dell'applicazione. Poiché vogliamo che le immagini siano private, dobbiamo creare uno spazio dei nomi, che crea un URL unico per il repository delle immagini.
ibmcloud cr namespace-add <YOUR_NAMESPACE> -
Aggiungere l'installazione Cloud Databases al cluster.
ibmcloud ks cluster service bind --cluster <YOUR_CLUSTER_NAME> --namespace default --service <INSTANCE_NAME_OR_CRN>Il namespace "predefinito" si riferisce Kubernetes all'istanza e non al namespace dell'archivio immagini creato dall'utente. Allo stesso modo, se il database utilizza endpoint pubblici e privati, l'endpoint pubblico viene utilizzato per impostazione predefinita. Pertanto, se desideri selezionare l'endpoint privato, devi prima creare una chiave di servizio per il tuo database in modo Kubernetes da poterla utilizzare durante il binding al database. Per impostare una chiave di servizio si utilizza il comando:
ibmcloud resource service-key-create <YOUR-PRIVATE-KEY> --instance-name <INSTANCE_NAME_OR_CRN> --service-endpoint privateL'endpoint del servizio privato viene selezionato con
--service-endpoint private. Successivamente, si esegue il binding del database al cluster Kubernetes attraverso l'endpoint privato, utilizzando il comandoibmcloud ks cluster service bind <YOUR_CLUSTER_NAME> default <INSTANCE_NAME_OR_CRN> --key <YOUR-PRIVATE-KEY> -
Verifica che il segreto Kubernetes sia stato creato nel tuo spazio dei nomi del cluster. Kubernetes utilizza i segreti per memorizzare informazioni riservate, come la chiave API IBM Cloud Identity and Access Management (IAM) e la URL che il contenitore utilizza per ottenere l'accesso. Per impostare il cluster come contesto per questa sessione e quindi ottenere la chiave API per accedere all'istanza dell'installazione client, eseguire i seguenti comandi
ibmcloud ks cluster config --cluster <CLUSTER_NAME_OR_ID>Allora
kubectl get secrets --namespace=defaultSalva il nome del segreto generato quando hai effettuato il binding
your_database_nameal tuo Kubernetes servizio. -
Se non l'avete ancora fatto, clonate l'applicazione in una delle lingue disponibili nell'ambiente locale dalla vostra console, usando il seguente comando
git clone -b <LANGUAGE> git@github.com:IBM-Cloud/clouddatabases-helloworld-kubernetes-examples.git -
cdin questa cartella appena creata ecdnella cartella del database. Il codice per la connessione al servizio, la lettura e l'aggiornamento del database si trova inserver.js. Per informazioni sulle funzioni dell'applicazione, vedere Struttura del codice e i commenti al codice. Una cartellapubliccontiene l'html, i fogli di stile e il JavaScript dell'applicazione web. Tuttavia, per far funzionare l'applicazione, dobbiamo prima spingere l'immagine Docker di questa applicazione al nostro Container Registry. -
Creare e inviare l'immagine Docker dell'applicazione al proprio Container Registry. Specificare la regione appropriata e dare un nome al contenitore.
ibmcloud cr build -t <REGION>.icr.io/<NAMESPACE>/<CONTAINER_NAME> .È possibile visualizzare l'immagine nel registro del contenitore usando
ibmcloud cr imagesSi ottiene una risposta simile alla seguente
REPOSITORY TAG DIGEST NAMESPACE CREATED SIZE SECURITY STATUS <region>.icr.io/mynamespace/container_name latest 81c3959ea657 mynamespace 4 hours ago 28 MB No Issues -
Aggiornare il file di configurazione del deployment Kubernetes
clouddb-deployment.yaml.Cambiare il nome
imagecon il nome del repository ottenuto nel passaggio precedente:image: "<REGION>.icr.io/mynamespace/<container_name>" # Edit meOra, in
secretKeyRef, cambiare il nome di<db-secret-name>in modo che corrisponda al nome del segreto che è stato creato quando si è legato il deployment del database al cluster Kubernetes.secretKeyRef: name: <DB-SECRET-NAME> # Edit mePer quanto riguarda la
serviceconfigurazione alla fine del file,nodePortindica la porta da cui si può accedere all'applicazione. È possibile utilizzare porte nell'intervallo 30000 - 32767, ma noi abbiamo scelto la 30081. La porta TCP è impostata su 8080, che è la porta su cui gira l'applicazione Node.js nel contenitore.
Distribuzione della tua Kubernetes app
-
Distribuisci l'applicazione su Kubernetes Service. Quando si distribuisce l'applicazione, questa viene automaticamente legata al cluster Kubernetes.
kubectl apply -f clouddb-deployment.yaml -
Ottenere l'IP dell'applicazione.
ibmcloud ks workers -c <CLUSTER_NAME>Il risultato è qualcosa di simile:
ID Public IP PrivateIP Machine Type State Status Zone Version kube-hou02-pa1a59e9fd92f44af9b4147a27a31db5c4-w1 199.199.99.999 10.76202.188 free normal Ready hou02 1.10.11_1536Ora è possibile accedere all'applicazione dall'IP pubblico dalla porta 30082.
L'applicazione clouddatabases-helloworld mostra il contenuto di un database di esempio. Per dimostrare che l'applicazione è connessa al vostro servizio, aggiungete alcune parole al database. Le parole vengono visualizzate man mano che vengono aggiunte, con le parole aggiunte più di recente visualizzate per prime.
Struttura del codice
| File | Descrizione |
|---|---|
| server.js | Stabilisce una connessione al database utilizzando le credenziali di BINDING (il nome creato nel file di distribuzione di Kubernetes per visualizzare le credenziali) e gestisce le operazioni di creazione e lettura del database. |
| main.js | Gestisce l'input dell'utente per un comando PUT e analizza i risultati di un comando GET per produrre il contenuto del database. |
L'applicazione utilizza le operazioni PUT e GET:
-
PUT
- Prende l'input dell'utente da main.js
- Aggiunge l'input dell'utente al database.
-
GET
- Recupera il contenuto del database.
- Restituisce la risposta del comando del database a main.js