Gli artefatti di sistema esistono in Artifact Registry del cluster di infrastruttura dell'organizzazione. Quando un amministratore della piattaforma (PA) crea un'organizzazione nell'appliance air-gapped Google Distributed Cloud (GDC), tutti gli artefatti di sistema vengono replicati dal cluster dell'infrastruttura dell'organizzazione.
L'operatore dell'infrastruttura (IO) deve trasferire i nuovi artefatti di sistema al cluster dell'infrastruttura dell'organizzazione. Il push di nuovi artefatti di sistema viene eseguito solo quando il PA richiede di attivare funzionalità facoltative o quando il sistema mostra bug o interruzioni che puoi correggere applicando patch ai nuovi artefatti.
Prima di iniziare
Per ottenere le autorizzazioni necessarie per accedere alle risorse nei progetti Artifact Registry di sistema come amministratore, chiedi all'Amministratore sicurezza di concederti i seguenti ruoli a seconda del cluster a cui vuoi eseguire il push dell'immagine container.
Dopo aver ottenuto le autorizzazioni necessarie, segui questi passaggi prima di eseguire il push di un'immagine nel registro Artifact Registry di sistema del cluster di infrastruttura:
Scarica e installa Distributed Cloud CLI seguendo le istruzioni dell'interfaccia a riga di comando (CLI) gdcloud.
Installa il componente
docker-credential-gdcloud
seguendo le istruzioni riportate in Installare i componenti:gdcloud components install docker-credential-gdcloud
Accedi con il provider di identità configurato:
gdcloud auth login
Esporta il file kubeconfig:
gdcloud clusters get-credentials CLUSTER_NAME
Sostituisci
CLUSTER_NAME
con il nome del cluster.Configura Docker:
gdcloud auth configure-docker
Scaricare un'immagine container da un bucket di archiviazione
Segui le istruzioni riportate in questa sezione quando la PA richiede di scaricare l'immagine da un bucket di archiviazione e caricarla nel sistema Artifact Registry. Il PA deve fornire dettagli come i nomi del progetto e del bucket.
In qualità di IO, devi disporre delle autorizzazioni per scaricare l'immagine container dal bucket di archiviazione:
- Chiedi all'Amministratore sicurezza di concederti il ruolo Visualizzatore oggetti bucket progetto (
project-bucket-object-viewer
) nello spazio dei nomi del progetto.
Per maggiori dettagli, consulta il runbook IAM R0005.
Ottieni l'accesso di sola lettura al bucket all'interno del progetto e agli oggetti in quel bucket.
Dopo aver ottenuto le autorizzazioni necessarie, segui questi passaggi per scaricare l'immagine container dal bucket di archiviazione dello spazio dei nomi del progetto PA:
Chiedi al PA il nome secret del bucket. Il nome del secret è simile al seguente esempio:
object-storage-key-std-user-ID
Il nome del secret include un valore
ID
univoco per accedere al bucket.Copia il nome del secret del bucket.
Recupera le credenziali di accesso al bucket e configura gcloud CLI:
SECRET_NAME=SECRET_NAME ACCESS_KEY=$(kubectl get secret ${SECRET_NAME} -n object-storage-access-keys -o=jsonpath='{.data.access-key-id}' | base64 -d) SECRET_KEY=$(kubectl get secret ${SECRET_NAME} -n object-storage-access-keys -o=jsonpath='{.data.secret-access-key}' | base64 -d) S3_ENDPOINT=objectstorage.$(kubectl get configmap dnssuffix -n gpc-system -o jsonpath='{.data.dnsSuffix}') echo "Access Key: ${ACCESS_KEY}" \ && echo "Secret Key: ${SECRET_KEY}" \ && echo "S3 Endpoint: ${S3_ENDPOINT}" gdcloud config set storage/s3_access_key_id ${ACCESS_KEY} gdcloud config set storage/s3_secret_access_key ${SECRET_KEY} gdcloud config set storage/s3_endpoint ${S3_ENDPOINT}
Sostituisci
SECRET_NAME
con il valore che hai copiato nel passaggio precedente.Scarica l'immagine container dal bucket di archiviazione alla tua workstation:
gdcloud cp s3://BUCKET_NAME/g/CONTAINER_IMAGE_NAME
Sostituisci quanto segue:
BUCKET_NAME
: il nome del bucket di archiviazione che contiene l'immagine container. Questo nome viene fornito dall'emittente.CONTAINER_IMAGE_NAME
: il nome del file dell'immagine container che vuoi scaricare dal bucket di archiviazione.
Esegui il push dell'immagine in System Artifact Registry
Per eseguire il push del file dell'immagine container presente nella workstation in Artifact Registry di sistema nel server API Management:
Apri la console.
Ottieni il percorso dell'endpoint System Artifact Registry del cluster in cui vuoi eseguire il push dell'immagine container:
export REGISTRY_ENDPOINT=harbor.$(kubectl get configmap dnssuffix -n gpc-system -o jsonpath='{.data.dnsSuffix}')
Carica, tagga ed esegui il push dell'immagine container nell'endpoint System Artifact Registry del cluster:
docker load --input CONTAINER_IMAGE_PATH docker tag CONTAINER_IMAGE_PATH ${REGISTRY_ENDPOINT}/CONTAINER_IMAGE_PATH docker push ${REGISTRY_ENDPOINT}/CONTAINER_IMAGE_PATH
Sostituisci
CONTAINER_IMAGE_PATH
con il percorso del file immagine del container nel file system locale. Un valore valido per questo percorso è, ad esempio,oracle_db.tar
.
Estrai l'artefatto Pull Harbor
Nella maggior parte dei casi, il sistema GDC interagisce automaticamente con System Artifact Registry (SAR) per estrarre l'artefatto più recente da Harbor. Per alcuni casi limite, puoi eseguire questa operazione manualmente. Segui questi passaggi per estrarre manualmente l'immagine dell'artefatto da Harbor:
Imposta i dettagli dell'artefatto che definisci per ogni applicazione:
APP_NAME=APP HARBOR_PROJECT=HARBOR_PROJECT_NAME REPOSITORY=REPOSITORY
Sostituisci quanto segue:
APP
: il nome dell'applicazione.HARBOR_PROJECT_NAME
: il nome del progetto Harbor.REPOSITORY
: il nome del repository.
Ottieni le informazioni sul porto:
HARBOR_URL=$(kubectl --kubeconfig=${ADMIN_KUBECONFIG} get harborcluster harbor -n harbor-system -o=jsonpath='{.spec.externalURL}') HARBOR_IP=${HARBOR_URL#https://}
Recupera il tag dell'artefatto. Esistono due metodi per recuperare il tag:
Metodo 1: questa è l'opzione preferita:
- Elenca gli artefatti nel bundle locale e recupera il tag corrispondente:
TAG=$(gdcloud artifacts tree ${BUNDLE_SUB_FOLDER:?} | grep ${HARBOR_PROJECT:?}/${REPOSITORY:?} | cut -d ":" -f2 | grep -v '.sig')
Metodo 2: utilizza questo metodo solo se il metodo 1 non funziona come previsto:
Elenca i tag in Harbor e seleziona quello più recente:
ADMIN_PASS=$(kubectl --kubeconfig=${ADMIN_KUBECONFIG} -n harbor-system get secret harbor-admin -o jsonpath="{.data.secret}" | base64 -d) curl -k -X GET \ --header 'Accept: application/json' \ --header "authorization: Basic $(echo -n admin:${ADMIN_PASS:?} | base64)" \ "${HARBOR_URL}/api/v2.0/projects/${HARBOR_PROJECT:?}/repositories/${REPOSITORY:?}/artifacts?with_tag=true" | jq -r '.[] | select(.tags != null) | .tags[] | {tag: .name, updated:.push_time}'
L'output deve essere simile al seguente esempio:
{ "tag": "<tag1>", "updated": "<date1>" } { "tag": "<tag2>", "updated": "<date2>" }
Esporta il valore del tag con l'ora di aggiornamento più recente:
TAG=MOST_RECENT_TAG
Sostituisci
MOST_RECENT_TAG
con il tag con l'ora di aggiornamento più recente.
Scarica gli artefatti da Harbor:
gdcloud artifacts pull --single-manifest-repo \ ${HARBOR_IP:?}/${HARBOR_PROJECT:?}/${REPOSITORY:?}:${TAG:?} \ ${APP_NAME:?}-${TAG:?}
Se visualizzi il seguente messaggio di errore, puoi ignorarlo tranquillamente:
tee: '/root/logs/artifacts_pull_--single-manifest-repo_2023.07.13:14.59.24.log': Permission denied
Problemi noti
Esistono diversi problemi noti associati al recupero dell'artefatto Harbor:
- Potresti dover aggiungere l'argomento:
--kubeconfig ${INFRA_ORG_KUBECONFIG:?}
. Il comando
curl
potrebbe mostrare il seguente messaggio di errore:certificate signed by unknown authority
. Mitiga questo errore utilizzando uno dei seguenti metodi:- Soluzione temporanea: aggiungi il flag
--insecure
al comandogdcloud artifacts pull
. - Correzione affidabile: considera attendibile la CA dell'infrastruttura dell'organizzazione. Per saperne di più, consulta Errore di pull dell'immagine.
- Soluzione temporanea: aggiungi il flag
Potrebbe essere necessario estrarre i contenuti:
gdcloud artifacts extract ${APP_NAME:?}-${TAG:?} ${APP_NAME:?}-${TAG:?}-extracted