Esta página mostra como sincronizar um artefato OCI do Artifact Registry.
É possível configurar o Config Sync para sincronizar a partir de imagens do OCI usando o Artifact Registry. Para usar esse recurso, você precisa ativar as APIs RootSync e RepoSync.
Como o Artifact Registry é um serviço totalmente gerenciado compatível com
imagens de contêiner e artefatos que não são contêineres, recomendamos que você o use
para seu armazenamento e gerenciamento de imagens de contêiner no Google Cloud. Há
várias ferramentas disponíveis para enviar artefatos ao Artifact Registry. Por exemplo,
é possível
enviar uma imagem do Docker,
enviar um gráfico do Helm ou usar
a
biblioteca go-containerregistry
para trabalhar com os registros de contêiner. Escolha a ferramenta que funciona melhor para você.
Nesta página, mostramos como criar e publicar sua imagem em um
repositório do Artifact Registry com crane
e oras
.
Crie um repositório do Artifact Registry
Nesta seção, você criará um repositório do Artifact Registry. Para saber mais sobre como criar repositórios do Artifact Registry, consulte Criar repositórios.
Ative a API Artifact Registry.
gcloud services enable artifactregistry.googleapis.com --project=PROJECT_ID
Crie um repositório do Artifact Registry:
gcloud artifacts repositories create AR_REPO_NAME \ --repository-format=docker \ --location=AR_REGION \ --description="Config Sync Helm repo" \ --project=PROJECT_ID
Substitua:
PROJECT_ID
: ID do projeto da organização.AR_REPO_NAME
: o ID do repositório.AR_REGION
é o local regional ou multirregional do repositório.
Variáveis usadas nas seguintes seções:
FLEET_HOST_PROJECT_ID
: se você estiver usando a Identidade da carga de trabalho do GKE, será igual aPROJECT_ID
. Se você estiver usando a identidade da carga de trabalho da frota, esse será o ID do projeto da frota em que o cluster está registrado.GSA_NAME
: o nome da conta de serviço personalizada do Google que você quer usar para se conectar ao Artifact Registry.KSA_NAME
: a conta de serviço do Kubernetes do reconciliador.- Para repositórios raiz, se o nome
RootSync
forroot-sync
, adicioneroot-reconciler
. Caso contrário, adicioneroot-reconciler-ROOT_SYNC_NAME
. - Para repositórios de namespace, se o nome
RepoSync
forrepo-sync
, adicionens-reconciler-NAMESPACE
. Caso contrário, adicionens-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH
, em queREPO_SYNC_NAME_LENGTH
é o número de caracteres emREPO_SYNC_NAME
.
- Para repositórios raiz, se o nome
Conceder permissão de leitor
Se a versão do Config Sync for 1.17.2 ou mais recente no cluster, será possível usar a conta de serviço do Kubernetes para autenticar no Artifact Registry. Caso contrário, use a conta de serviço do Google para autenticação.
Usando a conta de serviço do Kubernetes
Conceda o papel do IAM de leitor do Artifact Registry (roles/artifactregistry.reader
)
à conta de serviço do Kubernetes com o
pool de Identidade da carga de trabalho:
gcloud artifacts repositories add-iam-policy-binding AR_REPO_NAME \
--location=AR_REGION \
--member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \
--role=roles/artifactregistry.reader \
--project=PROJECT_ID
Usando a conta de serviço do Google
Conceda o papel do IAM de leitor do Artifact Registry (
roles/artifactregistry.reader
) à conta de serviço do Google:gcloud artifacts repositories add-iam-policy-binding AR_REPO_NAME \ --location=AR_REGION \ --member=serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/artifactregistry.reader \ --project=PROJECT_ID
Crie uma vinculação de política do IAM entre a conta de serviço do Kubernetes e a conta de serviço do Google:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \ GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --project=PROJECT_ID
Enviar uma imagem para o repositório do Artifact Registry
Nesta seção, você vai criar uma imagem OCI e enviá-la para o Artifact Registry.
Crie um arquivo de manifesto
Namespace
:cat <<EOF> test-namespace.yaml apiVersion: v1 kind: Namespace metadata: name: test EOF
Faça login no Artifact Registry:
gcloud auth configure-docker AR_REGION-docker.pkg.dev
Empacote e envie a imagem para o Artifact Registry:
crane
Os comandos nesta seção usam
crane
para interagir com imagens e registros remotos.Empacote o arquivo:
tar -cf test-namespace.tar test-namespace.yaml
Instale a ferramenta
crane
.Envie a imagem para o Artifact Registry:
crane append -f test-namespace.tar -t AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME/test-namespace:v1
oras
Os comandos nesta seção usam
oras
para interagir com imagens e registros remotos.Empacote o arquivo:
tar -czf test-namespace.tar.gz test-namespace.yaml
Instale a ferramenta
oras
.Envie a imagem para o Artifact Registry:
oras push AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME/test-namespace:v1 test-namespace.tar.gz
Configurar o Config Sync para sincronizar usando a imagem
Nesta seção, você vai criar um objeto RootSync
e configurar o Config Sync
para fazer a sincronização com a imagem OCI.
Crie um objeto
RootSync
com um nome exclusivo:cat <<EOF>> ROOT_SYNC_NAME.yaml apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: ROOT_SYNC_NAME namespace: config-management-system spec: sourceFormat: unstructured sourceType: oci oci: image: AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME/test-namespace:v1 dir: . # The k8sserviceaccount auth type is available in version 1.17.2 and # later. Use `gcpserviceaccount` if using an older version. # auth: gcpserviceaccount # gcpServiceAccountEmail: GSA_NAME@PROJECT_ID.iam.gserviceaccount.com auth: k8sserviceaccount EOF
Substitua
ROOT_SYNC_NAME
pelo nome do objetoRootSync
. O nome precisa ser exclusivo no cluster e ter no máximo 26 caracteres. Para ver a lista completa de opções ao configurar objetosRootSync
, consulte os camposRootSync
eRepoSync
.Aplique o objeto
RootSync
:kubectl apply -f ROOT_SYNC_NAME.yaml
Verifique se o Config Sync está sincronizando com a imagem:
nomos status --contexts=$(kubectl config current-context)
O resultado será semelhante a:
Connecting to clusters... *publish-config-registry -------------------- <root>:root-sync-test AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME/test-namespace:v1 SYNCED 05e6a6b77de7a62286387cfea833d45290105fe84383224938d7b3ab151a55a1 Managed resources: NAMESPACE NAME STATUS SOURCEHASH namespace/test Current 05e6a6b
Você sincronizou uma imagem com o cluster com êxito.
A seguir
- Saiba mais sobre como instalar o Config Sync.