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.
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
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
EOFFaça login no Artifact Registry:
gcloud auth configure-docker
AR_REGION -docker.pkg.devEmpacote e envie a imagem para o Artifact Registry:
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
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
EOFSubstitua
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 .yamlVerifique 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 05e6a6bVocê sincronizou uma imagem com o cluster com êxito.
A seguir
- Saiba mais sobre como instalar o Config Sync.