Os artefatos do sistema estão no Artifact Registry do cluster de infraestrutura da organização. Quando um administrador da plataforma (PA, na sigla em inglês) cria uma organização em um appliance isolado do Google Distributed Cloud (GDC), todos os artefatos do sistema são replicados do cluster de infraestrutura da organização.
O operador de infraestrutura (IO) precisa enviar novos artefatos do sistema para o cluster de infraestrutura da organização. O envio de novos artefatos do sistema só acontece quando o PA solicita a ativação de recursos opcionais ou quando o sistema mostra bugs ou interrupções que podem ser corrigidos com o patch de novos artefatos.
Antes de começar
Para receber as permissões necessárias para acessar recursos em projetos do Artifact Registry do sistema como administrador, peça ao administrador de segurança para conceder a você os seguintes papéis, dependendo do cluster em que você quer enviar a imagem do contêiner.
Depois de receber as permissões necessárias, siga estas etapas antes de enviar uma imagem para o Artifact Registry do sistema do cluster de infraestrutura:
Faça o download e instale a CLI do Distributed Cloud seguindo as instruções da interface de linha de comando (CLI) gdcloud.
Instale o componente
docker-credential-gdcloud
seguindo as instruções em Instalar componentes:gdcloud components install docker-credential-gdcloud
Faça login com o provedor de identidade configurado:
gdcloud auth login
Exporte o arquivo kubeconfig:
gdcloud clusters get-credentials CLUSTER_NAME
Substitua
CLUSTER_NAME
pelo nome do cluster.Configure o Docker:
gdcloud auth configure-docker
Fazer o download de uma imagem de contêiner de um bucket de armazenamento
Siga as instruções desta seção quando o PA solicitar o download da imagem de um bucket de armazenamento e o upload dela para o Artifact Registry do sistema. O PA precisa fornecer detalhes como os nomes do projeto e do bucket.
Como um IO, você precisa de permissões para fazer o download da imagem do contêiner do bucket de armazenamento:
- Peça ao administrador de segurança para conceder a você o papel Leitor de objetos do bucket do projeto (
project-bucket-object-viewer
) no namespace do projeto.
Para mais detalhes, consulte o runbook IAM R0005.
Você recebe acesso somente leitura ao bucket no projeto e aos objetos nele.
Depois de receber as permissões necessárias, siga estas etapas para baixar a imagem do contêiner do bucket de armazenamento do namespace do projeto do PA:
Pergunte ao PA o nome secreto do bucket. O nome do secret é semelhante ao exemplo a seguir:
object-storage-key-std-user-ID
O nome do secret inclui um valor
ID
exclusivo para acessar o bucket.Copie o nome do secret do bucket.
Receba as credenciais de acesso ao bucket e configure a CLI gdcloud:
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 você copiou na etapa anterior.Faça o download da imagem do contêiner do bucket de armazenamento para sua estação de trabalho:
gdcloud cp s3://BUCKET_NAME/g/CONTAINER_IMAGE_NAME
Substitua:
BUCKET_NAME
: o nome do bucket de armazenamento que tem a imagem do contêiner. O PA fornece esse nome.CONTAINER_IMAGE_NAME
: o nome do arquivo de imagem do contêiner que você quer baixar do bucket de armazenamento.
Envie a imagem para o Artifact Registry do sistema
Siga estas etapas para enviar o arquivo da imagem do contêiner que você tem na sua estação de trabalho para o Artifact Registry do sistema no servidor da API Management:
Abra o console.
Receba o caminho para o endpoint do Artifact Registry do sistema do cluster em que você quer enviar a imagem do contêiner:
export REGISTRY_ENDPOINT=harbor.$(kubectl get configmap dnssuffix -n gpc-system -o jsonpath='{.data.dnsSuffix}')
Carregue, marque e envie a imagem do contêiner para o endpoint do Artifact Registry 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 arquivo de imagem do contêiner no seu sistema de arquivos local. Um valor válido para esse caminho é, por exemplo,oracle_db.tar
.
Extrair artefato do Harbor
Na maioria dos casos, o sistema GDC interage automaticamente com o System Artifact Registry (SAR) para extrair o artefato mais recente do Harbor. Em alguns casos extremos, é possível realizar essa operação manualmente. Siga estas etapas para extrair manualmente a imagem do artefato do Harbor:
Defina os detalhes do artefato que você definiu por aplicativo:
APP_NAME=APP HARBOR_PROJECT=HARBOR_PROJECT_NAME REPOSITORY=REPOSITORY
Substitua:
APP
: o nome do aplicativo.HARBOR_PROJECT_NAME
: o nome do projeto do Harbor.REPOSITORY
: o nome do repositório.
Receba as informações do Harbor:
HARBOR_URL=$(kubectl --kubeconfig=${ADMIN_KUBECONFIG} get harborcluster harbor -n harbor-system -o=jsonpath='{.spec.externalURL}') HARBOR_IP=${HARBOR_URL#https://}
Receba a tag do artefato. Há dois métodos para recuperar a tag:
Método 1: esta é a opção preferida:
- Liste os artefatos no pacote local e receba a tag correspondente:
TAG=$(gdcloud artifacts tree ${BUNDLE_SUB_FOLDER:?} | grep ${HARBOR_PROJECT:?}/${REPOSITORY:?} | cut -d ":" -f2 | grep -v '.sig')
Método 2: use somente se o método 1 não funcionar como esperado:
Liste as tags 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}'
A saída será semelhante ao exemplo a seguir:
{ "tag": "<tag1>", "updated": "<date1>" } { "tag": "<tag2>", "updated": "<date2>" }
Exporte o valor da tag com o horário de atualização mais recente:
TAG=MOST_RECENT_TAG
Substitua
MOST_RECENT_TAG
pela tag com o horário de atualização mais recente.
Faça o download dos artefatos do Harbor:
gdcloud artifacts pull --single-manifest-repo \ ${HARBOR_IP:?}/${HARBOR_PROJECT:?}/${REPOSITORY:?}:${TAG:?} \ ${APP_NAME:?}-${TAG:?}
Se você vir a seguinte mensagem de erro, ignore-a:
tee: '/root/logs/artifacts_pull_--single-manifest-repo_2023.07.13:14.59.24.log': Permission denied
Problemas conhecidos
Há vários problemas conhecidos associados ao envio do artefato do Harbor:
- Talvez seja necessário adicionar o argumento:
--kubeconfig ${INFRA_ORG_KUBECONFIG:?}
. O comando
curl
pode mostrar a seguinte mensagem de erro:certificate signed by unknown authority
. Para minimizar esse erro, use um dos seguintes métodos:- Correção temporária: adicione a flag
--insecure
ao comandogdcloud artifacts pull
. - Correção confiável: confie na CA da infraestrutura da organização. Para mais informações, consulte Erro de extração de imagem.
- Correção temporária: adicione a flag
Talvez seja necessário extrair o conteúdo:
gdcloud artifacts extract ${APP_NAME:?}-${TAG:?} ${APP_NAME:?}-${TAG:?}-extracted