Devi completare il processo di migrazione della configurazione per ogni applicazione Cloud Foundry di cui esegui la migrazione a Cloud Run. La migrazione della configurazione prevede quanto segue:
- Conversione di un
manifest.yaml
di Cloud Foundry in Cloud Runservice.yaml
. - Collegamento di qualsiasi servizio di supporto all'applicazione per il deployment in Cloud Run.
- Deployment dell'applicazione in un servizio Cloud Run.
Converti manifest.yaml
in service.yaml
Devi convertire un manifest di Cloud Foundry e/o i flag dell'interfaccia a riga di comando cf
nell'equivalente YAML di definizione del servizio Cloud Run.
Cloud Run richiede che ogni applicazione abbia il proprio file YAML di servizio separato. Per eseguire la migrazione di un'applicazione dal manifest di Cloud Foundry a un file YAML di servizio:
Raccogli le proprietà elencate nella tabella seguente per la tua applicazione. Le proprietà che non vengono modificate a livello di applicazione potrebbero essere state sostituite dalle configurazioni globali della piattaforma Cloud Foundry. Consulta la documentazione fornita dagli amministratori della tua piattaforma per ottenere i valori effettivi.
Proprietà dell'applicazione cf
flag v6 dell'interfaccia a riga di comandoDescrizione name
NAME
argomentoIl nome univoco dell'applicazione in Cloud Foundry. command
-c
Un comando che verrà eseguito in /bin/sh
o/bin/bash
disk_quota
-k
La quantità di disco che verrà assegnata all'applicazione.
Le unità valide sono:
M
,MB
,G
er B
Probabilmente predefinito: 1G
docker.image
--docker-image
,-o
L'immagine che contiene l'applicazione da eseguire. health-check-http-endpoint
N/A L'endpoint utilizzato per determinare l'integrità HTTP se il tipo di controllo di integrità è HTTP. Predefinito:
/
health-check-invocation-timeout
N/A Tempo in secondi tra una singola porta e i controlli di integrità basati su HTTP. Predefinito: 1
health-check-type
--health-check-type
,-u
Tipo di controllo di integrità da eseguire sull'applicazione. I valori validi sono: port
,http
,none
,process
.Predefinito:
port
instances
-i
Numero di istanze dell'app che verranno eseguite da Cloud Foundry. Predefinito: 1
memory
-m
Il limite di memoria per istanza per l'applicazione. Le unità valide sono:
M
,MB
,G
oGB
Probabilmente predefinito: 1G
timeout
-t
Numero di secondi consentiti tra l'avvio dell'app e il primo controllo di integrità. Probabile valore predefinito: 60
Raccogli le seguenti informazioni per il tuo progetto Google Cloud e la configurazione di Cloud Run:
Proprietà Descrizione project_number
Il numero del progetto Google Cloud in cui vuoi eseguire il deployment. region
La regione in cui vuoi eseguire il deployment dell'app. vpc-access-connector
Il nome del connettore VPC su cui l'amministratore della piattaforma vuole utilizzare le applicazioni. vpc-access-egress
Il nome del traffico VPC in uscita su cui l'amministratore della piattaforma vuole utilizzare le applicazioni. custom-audiences
Segmenti di pubblico personalizzati che possono eseguire l'autenticazione nella tua applicazione. serviceAccountName
L'identità che verrà utilizzata dalla tua applicazione in Google Cloud. image
L'immagine dell'applicazione prodotta nel passaggio precedente. Compila il seguente modello in un file
service.yaml
nella directory principale del progetto
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
# Set this to be the name of your app
name: "APP_NAME"
# Set this to be the project number of the project you're deploying to.
namespace: "PROJECT_NUMBER"
labels:
# Set this to be the region you're deploying in.
cloud.googleapis.com/location: REGION
migrated-from: cloud-foundry
annotations:
run.googleapis.com/ingress: internal-and-cloud-load-balancing
spec:
template:
metadata:
annotations:
# Set to the greater of 1 or the `instances` attribute.
autoscaling.knative.dev/minScale: '1'
# Set to the greater of 1 or the `instances` attribute.
autoscaling.knative.dev/maxScale: '1'
run.googleapis.com/cpu-throttling: CPU_ALLOCATION
run.googleapis.com/startup-cpu-boost: 'true'
# Set to true if you rely on sticky sessions. These will be turned
# on in Cloud Foundry if the server sends a JSESSIONID cookie back
# on responses.
run.googleapis.com/sessionAffinity: 'false'
run.googleapis.com/execution-environment: gen2
# Set the following values to match what your platform administrator recommends.
run.googleapis.com/vpc-access-connector: ADMINISTRATOR_PROVIDED
run.googleapis.com/vpc-access-egress: ADMINISTRATOR_PROVIDED
run.googleapis.com/custom-audiences: ADMINISTRATOR_PROVIDED
spec:
# CF doesn't limit, but CR has a max of 1000.
containerConcurrency: 1000
# Default value for gorouter in PCF.
timeoutSeconds: 900
# Set the following value to match what your platform administrator recommends.
serviceAccountName: ADMINISTRATOR_PROVIDED
containers:
- name: user-container
# Set the following value to either:
# - The image you built for your application in the last section of the guide.
# - The docker.image attribute of your app's configuration if it's a Docker app.
image: IMAGE
# Set `command` based on the following rules:
# - If your app has no `command` attribute: null.
# - If your app has a docker.image attribute: ['/bin/sh', '-c']
# - Otherwise: ['/bin/bash', '-c']
command: null
# Set `args` based on the following rules:
# - If your app has no `command` attribute: null.
# - If your app has a `command` attribute: ['value of command']
args: null
ports:
# Set name based on the following rules:
# - If your app is HTTP/2 or gRPC: "h2c"
# - Else: "http1"
- name: HTTP1_OR_H2C
containerPort: 8080
env:
# For each key/value pair in your space's running environment variable groups,
# which can be retried by running `cf running-environment-variable-group`,
# add the following:
- name: KEY
value: VALUE
# For each key/value pair in your manifest's `env` map, add the following:
- name: KEY
value: VALUE
# Populate MEMORY_LIMIT with the amount of memory supplied to this instance
# in MiB with 'M' as a suffix.
- name: MEMORY_LIMIT
value: '0M'
# Set the following values in the JSON below:
# - `application_name` and `name` to match metadata.name in this file.
# - `application_uris` and `uris` to be the URI you want to assign the app on the
# load balancer.
# - `limits.disk` to be the amount (in MiB) of disk assigned to your app.
# The amount will be in the `disk_quota` attribute of the CF manifest, or a
# default value for your cluster, typically 1GiB.
# - `limits.mem` to be the amount (in MiB) of memory assigned to your app.
# The amount will be in your `memory` attribute of the CF manifest, or a
# default value for your cluster, typically 1GiB.
# - `space_name` to be the value of metadata.space in this file.
- name: VCAP_APPLICATION
value: |-
{
"application_id": "00000000-0000-0000-0000-000000000000",
"application_name": "app-name",
"application_uris": [],
"limits": {
"disk": 1024,
"mem": 256
},
"name": "app-name",
"process_id": "00000000-0000-0000-0000-000000000000",
"process_type": "web",
"space_name": "none",
"uris": []
}
resources:
limits:
# Set memory limit to be the sum of the memory and disk assigned to your app in CF.
#
# Disk amount will be in the `disk_quota` attribute of the CF manifest, or a
# default value for your cluster, typically 1GiB.
#
# Memory will be in your `memory` attribute of the CF manifest, or a
# default value for your cluster, typically 1GiB.
memory: MEMORY_LIMIT
# Set cpu according to the following calculation:
#
# 1. Take the amount of memory in your `memory` attribute of the CF
# manifest, or a default value for your cluster, typically 1GiB.
# 2. Divide that by the total amount of memory on the underlying BOSH VM.
# 3. Multiply that by the total number of CPUs on the BOSH VM.
# 4. Find the nearest valid value based on the rules in:
# https://cloud.google.com/run/docs/configuring/cpu#setting
cpu: CPU_LIMIT
# If `health-check-type` is "process" or "none", delete the startupProbe section.
startupProbe:
# If `health-check-type` is "port" or blank, delete the httpGet section.
httpGet:
# Set to be the value of `health-check-http-endpoint` or / if blank.
path: CHECK_PATH
port: 8080
# If `health-check-type` is "http", delete the tcpSocket section.
tcpSocket:
port: 8080
# Set to the value of `health-check-invocation-timeout` or 1
timeoutSeconds: 1
# Set failure threshold to be the following calculation:
#
# 1. Take the `timeout` from the CF manifest, use 60 if unset.
# 2. Divide by 2.
# 3. Round up to the nearest integer.
failureThreshold: 1
successThreshold: 1
periodSeconds: 2
# If `health-check-type` is "process" or "none", delete the livenessProbe section.
livenessProbe:
# If `health-check-type` is "port" or blank, delete the httpGet section.
httpGet:
# Set to be the value of `health-check-http-endpoint` or / if blank.
path: CHECK_PATH
port: 8080
# If `health-check-type` is "http", delete the tcpSocket section.
tcpSocket:
port: 8080
# Set to the value of `health-check-invocation-timeout` or 1.
timeoutSeconds: 1
failureThreshold: 1
successThreshold: 1
periodSeconds: 30
traffic:
- percent: 100
latestRevision: true
Allega eventuali servizi di supporto
Devi creare una variabile di ambiente VCAP_SERVICES
per consentire l'inserimento e l'individuazione dei servizi da parte dell'applicazione Cloud Foundry, ad esempio Spring o Steeltoe. Devi eseguire questa operazione per ogni applicazione di cui esegui la migrazione. Per ulteriori informazioni, consulta la documentazione per Cloud Foundry VCAP_SERVICE.
Se la tua applicazione è già in esecuzione in Cloud Foundry e vuoi collegarla agli stessi servizi in Cloud Run, puoi utilizzare la tua variabile di ambiente esistente. In caso contrario, dovrai
creare un nuovo VCAP_SERVICES
.
Per configurare la variabile di ambiente VCAP_SERVICES
:
Per un
VCAP_SERVICES
esistente:- Prova a recuperare la variabile di ambiente
VCAP_SERVICES
eseguendocf env APP_NAME
. - Se il problema persiste:
- Connettiti alla tua applicazione in Cloud Foundry:
cf ssh APP_NAME
- Esegui il comando
env
e recupera l'output diVCAP_SERVICES
. - Esci dalla sessione SSH eseguendo
exit
.
- Connettiti alla tua applicazione in Cloud Foundry:
- Salva il valore
VCAP_SERVICES
in un nuovo file denominatovcap.json
.
- Prova a recuperare la variabile di ambiente
Se vuoi aggiungere servizi o connetterti a servizi diversi rispetto a Cloud Foundry, crea un nuovo
VCAP_SERVICES
:- In un editor di testo, crea una mappa JSON vuota
{}
- Per ogni servizio che vuoi aggiungere:
- Consulta la documentazione relativa alla libreria utilizzata dall'app per analizzare
VCAP_SERVICES
il tipo che vuoi aggiungere per capire come rileva l'associazione. - Aggiungi alla mappa una chiave con il nome del fornitore di servizi se non ne esiste già una, di solito del tipo
mysql
,postgresql
oelasticsearch
. Imposta il valore in un array vuoto: Aggiungi un oggetto all'array con le seguenti proprietà:
Metadati che di solito non vengono utilizzati per rilevare/associare i servizi:
binding_name
, una stringa che rappresenta la risorsa che concede all'applicazione le autorizzazioni per il servizio. Potrebbe essere il nome utente di un database, una regola firewall, il nome di un account di servizio o altro.instance_name
, una stringa che rappresenta il nome del servizio di supporto. Potrebbe essere il nome del database, un valore casuale o un valore sentinel per un servizio globale.name
:binding_name
, se esistente; altrimentiinstance_name
. In genere questo valore non è importante.label
, il valore della chiave nella mappaVCAP_SERVICES
in questa associazione è nidificata.plan
, il nome del piano di servizio. Alcuni esempi sono: "fornito dall'utente", "alta disponibilità".
Valori spesso utilizzati per scoprire/associare i servizi:
tags
Un elenco di tag per aiutare le librerie a trovare servizi compatibili. Spesso include il nome comune del servizio, ad esempiomysql
per MySQL e MariaDB,redis
per Redis o Cloud Memorystore opostgres
per i database compatibili con Postgres.credentials
Un oggetto contenente le credenziali utilizzate dalla libreria client per eseguire la connessione. La maggior parte delle librerie client si basa su un campouri
contenente l'URI standard o il formato JDBC del servizio.
Salva i contenuti come
vcap.json
.
- In un editor di testo, crea una mappa JSON vuota
Collega le credenziali alla tua risorsa Cloud Run
Per allegare le credenziali:
Crea un secret per archiviare i contenuti della tua variabile di ambiente
VCAP_SERVICES
e prendi nota dell'output della versione tramite il comando:gcloud secrets create APP_NAME-vcap \ --replication-policy="automatic" \ --data-file=vcap.json
Concedi all'account di servizio dell'applicazione l'autorizzazione a leggere il secret:
gcloud secrets add-iam-policy-binding APP_NAME-vcap \ --member="serviceaccount:app-service-account" \ --role="roles/secretmanager.secretAccessor"
Aggiungi la seguente variabile di ambiente all'applicazione
service.yaml
nelspec.template.spec.containers[0].env array
:- name: VCAP_SERVICES valueFrom: secretKeyRef: key: Version output by step 1 name: APP_NAME-vcap
Modelli per i servizi di supporto comuni
Le seguenti sezioni forniscono informazioni sui servizi di supporto di uso comune
MySQL
In genere, le librerie MySQL prevedono il tag mysql
. È comune includere le seguenti chiavi in credentials
:
- Modello
uri
:mysql://username:password@host:port/dbname
. La documentazione di MySQL può aiutarti a creare una stringa URI. In genere la porta è3306
. username
Il nome utente per la connessione, richiesto da alcune librerie anche se incluso inuri
password
La password di connessione, richiesta da alcune librerie anche se inclusa inuri
Redis
In genere, le librerie Redis prevedono il tag redis
. È pratica comune includere le seguenti chiavi in credentials
:
uri
Modello:redis://:password@host:port/dbunumber
.
La documentazione relativa all'URI IANA Redis può aiutarti a creare una stringa URI. In genere la porta è 6379
.
RabbitMQ
In genere, le librerie RabbitMQ prevedono il tag rabbitmq
e le seguenti chiavi in credentials
:
uri
Modello:amqp://username:password@host:port/vhost?query
.
La documentazione di RabbitMQ può aiutarti
a creare una stringa URI. In genere la porta è 5672
.
Servizi forniti dall'utente
I servizi forniti dall'utente sono un tipo speciale di servizio in Cloud Foundry che ti consente di inserire qualsiasi credenziale. L'etichetta è sempre user-provided
. I tag sono i valori trasferiti a cf create-user-provided-service
tramite il flag -t
, mentre le credenziali sono i contenuti del flag -p
.
Deployment dell'applicazione
Per eseguire il deployment dell'applicazione Cloud Foundry completamente migrata in un servizio Cloud Run:
Se non lo hai già fatto, configura il tuo ambiente Cloud Run.
Esegui il comando
gcloud run services replace service.yaml
Attendi qualche istante fino al completamento del deployment. In caso di esito positivo, la riga di comando mostra l'URL del servizio.
Per visitare il servizio di cui hai eseguito il deployment, apri l'URL del servizio in un browser web.
Complimenti! Hai appena eseguito la migrazione della tua applicazione Cloud Foundry a Cloud Run