Os artefactos do sistema existem no Artifact Registry do cluster de infraestrutura da organização. Quando um administrador da plataforma (PA) cria uma organização no dispositivo isolado do Google Distributed Cloud (GDC), todos os artefactos do sistema são replicados a partir do cluster de infraestrutura da organização.
O operador de infraestrutura (IO) tem de enviar novos artefactos do sistema para o cluster de infraestrutura da organização. O envio de novos artefactos do sistema só ocorre quando o PA pede para ativar funcionalidades opcionais ou quando o sistema apresenta erros ou indisponibilidades que pode corrigir aplicando patches a novos artefactos.
Antes de começar
Para receber as autorizações necessárias para aceder a recursos em projetos do Artifact Registry do sistema como administrador, peça ao administrador de segurança que lhe conceda as seguintes funções, consoante o cluster para o qual quer enviar a imagem de contentor.
Depois de obter as autorizações necessárias, siga os passos abaixo antes de enviar uma imagem para o Artifact Registry do sistema do cluster de infraestrutura:
Transfira e instale a CLI Distributed Cloud seguindo as instruções da interface de linhas de comando (CLI) gdcloud.
Instale o componente
docker-credential-gdcloud
seguindo as instruções de Instalar componentes:gdcloud components install docker-credential-gdcloud
Inicie sessão com o Fornecedor de identidade configurado:
gdcloud auth login
Exporte o ficheiro kubeconfig:
gdcloud clusters get-credentials CLUSTER_NAME
Substitua
CLUSTER_NAME
pelo nome do cluster.Configure o Docker:
gdcloud auth configure-docker
Transfira uma imagem de contentor de um contentor de armazenamento
Siga as instruções nesta secção quando o PA pedir para transferir a imagem de um contentor de armazenamento e carregá-la no Artifact Registry do sistema. O PA tem de fornecer detalhes como os nomes do projeto e do contentor.
Como IO, precisa de autorizações para transferir a imagem do contentor do contentor de armazenamento:
- Peça ao administrador de segurança para lhe conceder a função de visualizador de objetos do contentor do projeto (
project-bucket-object-viewer
) no espaço de nomes do projeto.
Para mais detalhes, consulte o manual de procedimentos IAM R0005.
Tem acesso só de leitura ao contentor no projeto e aos objetos nesse contentor.
Depois de obter as autorizações necessárias, siga estes passos para transferir a imagem do contentor do contentor de armazenamento do espaço de nomes do projeto de PA:
Peça ao PA o nome secreto do contentor. O nome do Secret tem o seguinte aspeto:
object-storage-key-std-user-ID
O nome do segredo inclui um valor
ID
exclusivo para aceder ao contentor.Copie o nome secreto do contentor.
Obtenha credenciais de acesso ao contentor e configure a CLI gcloud:
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}
Substitua
SECRET_NAME
pelo valor que copiou no passo anterior.Transfira a imagem do contentor do contentor de armazenamento para a sua estação de trabalho:
gdcloud cp s3://BUCKET_NAME/g/CONTAINER_IMAGE_NAME
Substitua o seguinte:
BUCKET_NAME
: o nome do contentor de armazenamento que tem a imagem do contentor. O PA fornece este nome.CONTAINER_IMAGE_NAME
: o nome do ficheiro de imagem do contentor que quer transferir do contentor de armazenamento.
Envie a imagem para o registo de artefactos do sistema
Siga estes passos para enviar o ficheiro da imagem do contentor que tem na sua estação de trabalho para o Artifact Registry do sistema no servidor da API Management:
Abra a consola.
Obtenha o caminho para o ponto final do System Artifact Registry do cluster para o qual quer enviar a imagem do contentor:
export REGISTRY_ENDPOINT=harbor.$(kubectl get configmap dnssuffix -n gpc-system -o jsonpath='{.data.dnsSuffix}')
Carregue, etiquete e envie a imagem do contentor para o ponto final do registo de artefactos do sistema do cluster:
docker load --input CONTAINER_IMAGE_PATH docker tag CONTAINER_IMAGE_PATH ${REGISTRY_ENDPOINT}/CONTAINER_IMAGE_PATH docker push ${REGISTRY_ENDPOINT}/CONTAINER_IMAGE_PATH
Substitua
CONTAINER_IMAGE_PATH
pelo caminho do ficheiro de imagem do contentor no seu sistema de ficheiros local. Um valor válido para este caminho é, por exemplo,oracle_db.tar
.
Extraia o artefacto do Harbor
Na maioria dos casos, o sistema GDC interage automaticamente com o registo de artefactos do sistema (SAR) para extrair o artefacto mais recente do Harbor. Para alguns casos extremos, pode realizar esta operação manualmente. Siga estes passos para extrair manualmente a imagem do artefacto do Harbor:
Defina os detalhes dos artefactos que define por cada aplicação:
APP_NAME=APP HARBOR_PROJECT=HARBOR_PROJECT_NAME REPOSITORY=REPOSITORY
Substitua o seguinte:
APP
: o nome da aplicação.HARBOR_PROJECT_NAME
: o nome do projeto do Harbor.REPOSITORY
: o nome do repositório.
Obtenha as informações do porto:
HARBOR_URL=$(kubectl --kubeconfig=${ADMIN_KUBECONFIG} get harborcluster harbor -n harbor-system -o=jsonpath='{.spec.externalURL}') HARBOR_IP=${HARBOR_URL#https://}
Obtenha a etiqueta de artefacto. Existem dois métodos para obter a etiqueta:
Método 1: esta é a opção preferida:
- Liste os artefactos no pacote local e obtenha a etiqueta correspondente:
TAG=$(gdcloud artifacts tree ${BUNDLE_SUB_FOLDER:?} | grep ${HARBOR_PROJECT:?}/${REPOSITORY:?} | cut -d ":" -f2 | grep -v '.sig')
Método dois: use apenas este método se o método um não funcionar como esperado:
Liste as etiquetas no Harbor e selecione a mais 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}'
O resultado tem de ser semelhante ao seguinte exemplo:
{ "tag": "<tag1>", "updated": "<date1>" } { "tag": "<tag2>", "updated": "<date2>" }
Exporte o valor da etiqueta com a hora de atualização mais recente:
TAG=MOST_RECENT_TAG
Substitua
MOST_RECENT_TAG
pela etiqueta com a hora de atualização mais recente.
Transfira os artefactos do Harbor:
gdcloud artifacts pull --single-manifest-repo \ ${HARBOR_IP:?}/${HARBOR_PROJECT:?}/${REPOSITORY:?}:${TAG:?} \ ${APP_NAME:?}-${TAG:?}
Se vir a seguinte mensagem de erro, pode ignorá-la com segurança:
tee: '/root/logs/artifacts_pull_--single-manifest-repo_2023.07.13:14.59.24.log': Permission denied
Problemas conhecidos
Existem vários problemas conhecidos associados à obtenção do artefacto do Harbor:
- Pode ter de adicionar o argumento:
--kubeconfig ${INFRA_ORG_KUBECONFIG:?}
. O comando
curl
pode apresentar a seguinte mensagem de erro:certificate signed by unknown authority
. Mitigue este erro através de um dos seguintes métodos:- Correção temporária: adicione a flag
--insecure
ao comandogdcloud artifacts pull
. - Correção fiável: confie na AC da infraestrutura da organização. Para mais informações, consulte o artigo Erro de obtenção de imagem.
- Correção temporária: adicione a flag
Pode ter de extrair o conteúdo:
gdcloud artifacts extract ${APP_NAME:?}-${TAG:?} ${APP_NAME:?}-${TAG:?}-extracted