Esta página explica como criar e atualizar clusters usando imagens extraídas de um espelho do registo, em vez de um registo público, como o gcr.io
. Esta funcionalidade pode ser ativada ou desativada em qualquer altura no ciclo de vida do cluster.
Esta página destina-se a operadores e especialistas em armazenamento que configuram e gerem o desempenho, a utilização e as despesas de armazenamento. Para saber mais sobre as funções comuns e as tarefas de exemplo a que fazemos referência no Google Cloud conteúdo, consulte o artigo Funções e tarefas comuns do utilizador do GKE.
Um espelho de registo é uma cópia local de um registo público que copia ou reflete a estrutura de ficheiros do registo público. Por exemplo, suponha que o caminho para o seu espelho de registo local é 172.18.0.20:5000
. Quando o containerd
encontra um pedido para extrair uma imagem, como
gcr.io/kubernetes-e2e-test-images/nautilus:1.0
, o containerd
tenta extrair
essa imagem, não do gcr.io
, mas do seu registo local no seguinte
caminho: 172.18.0.20:5000/kubernetes-e2e-test-images/nautilus:1.0
. Se a imagem não estiver neste caminho do registo local, a imagem é extraída automaticamente do gcr.io
registo público.
A utilização de uma imagem espelhada do registo oferece as seguintes vantagens:
- Protege o utilizador contra indisponibilidades do registo público.
- Acelera a criação de podcasts.
- Permite-lhe realizar a sua própria análise de vulnerabilidades.
- Evita os limites impostos pelos registos públicos sobre a frequência com que pode emitir comandos para os mesmos.
Antes de começar
- Tem de ter um servidor do Artifact Registry configurado na sua rede.
- Se o servidor de registo executar um certificado TLS privado, tem de ter o ficheiro da autoridade de certificação (AC).
- Se o seu servidor de registo precisar de autenticação, tem de ter as credenciais de início de sessão adequadas ou o ficheiro de configuração do Docker.
- Se estiver a usar um registo do Red Hat Quay, pode ser necessário criar manualmente a estrutura de diretórios do registo local.
- Para usar um espelho do registo, tem de definir o tempo de execução do contentor como containerd.
Certifique-se de que tem espaço suficiente no disco na estação de trabalho do administrador para carregar imagens. O comando de carregamento de imagens,
bmctl push images
, descomprime o ficheiro do pacote de imagens transferido e, em seguida, extrai todos os ficheiros de imagens localmente antes de os carregar. Precisa de, pelo menos, três vezes o tamanho do ficheiro do pacote de imagens transferido no espaço em disco para o carregamento de imagens.Por exemplo, o ficheiro
bmpackages_1.33.0-gke.799.tar.xz
comprimido ocupa aproximadamente 12 GB de espaço no disco, pelo que deve ter, pelo menos, 36 GB de espaço no disco livre antes de transferir o ficheiro.Se estiver a fazer uma atualização ignorada (atualizar duas versões secundárias numa única operação), tem de carregar imagens de ficheiros de pacote de imagens para a versão de destino (
N+2
) e a versão intermédia (N+1
). Com base neste exemplo, precisa de aproximadamente 72 GB de espaço em disco disponível para o carregamento de imagens. Para mais informações sobre a versão intermédia, consulte o artigo Requisito adicional para espelhos de registo.
Transfira todas as imagens necessárias para o Google Distributed Cloud
Transfira a versão mais recente da bmctl
ferramenta e do pacote de imagens na página
Transferências.
Carregue imagens de contentores para o servidor de registo
Quando usa bmctl push images
para carregar imagens de contentores para o servidor do repositório, bmctl
executa os seguintes passos pela ordem indicada:
Descomprima um pacote de imagens transferido como um ficheiro TAR comprimido, como
bmpackages_1.33.100-gke.89.tar.xz
embmpackages_1.33.100-gke.89.tar
.Extraia todas as imagens do ficheiro TAR descomprimido para um diretório denominado
bmpackages_1.33.100-gke.89
.Envie cada ficheiro de imagem para o registo privado especificado.
O
bmctl
usa os valores--username
e--password
para a autenticação básica para enviar as imagens para o seu registo privado.
As secções seguintes ilustram algumas variações comuns do comando bmctl push
images
para carregar imagens para o servidor do repositório.
Autentique-se no seu registo e partilhe o certificado TLS
O comando seguinte inclui as flags --username
e --password
para autenticação do utilizador com o seu servidor de registo. O comando também inclui a flag --cacert
para transmitir o certificado Transport Layer Security (TLS) da AC, que é usado para a comunicação segura com o servidor de registo, incluindo o envio e a obtenção de imagens. Estas flags oferecem segurança básica para o seu servidor de registo.
Se o seu servidor de registo exigir autenticação e não usar as flags --username
e --password
, deve ser-lhe pedido que introduza credenciais quando executar bmctl push images
. Pode escrever a sua palavra-passe ou escolher o ficheiro de configuração do Docker que contém as credenciais.
Para carregar imagens com autenticação e um certificado de AC privado, use um comando como o seguinte:
bmctl push images \
--source IMAGES_TAR_FILE_PATH \
--private-registry REGISTRY_IP:PORT \
--username USERNAME \
--password PASSWORD \
--cacert CERT_PATH
Substitua o seguinte:
IMAGES_TAR_FILE_PATH
: o caminho do ficheiro TAR do pacote de imagens transferido, comobmpackages_1.33.100-gke.89.tar.xz
.REGISTRY_IP:PORT
: o endereço IP e a porta do servidor de registo privado.USERNAME
: o nome de utilizador de um utilizador com autorizações de acesso para carregar imagens para o servidor de registo.PASSWORD
: a palavra-passe do utilizador para autenticação com o servidor de registo.CERT_PATH
: o caminho do ficheiro de certificado da AC, se o servidor de registo usar um certificado TLS privado.
Por exemplo:
bmctl push images \
--source bmpackages_1.33.100-gke.89.tar.xz \
--private-registry 172.18.0.20:5000 \
--username alex --password pa55w0rd \
--cacert /etc/pki/tls/certs/ca-bundle.crt
Carregue imagens sem autenticação ou certificados do utilizador
Se o seu servidor de registo não exigir credenciais, como um nome de utilizador e uma palavra-passe, especifique --need-credential=false
no comando bmctl
. Se o seu servidor de registo usar um certificado TLS público, não precisa de usar a flag --cacert
. Este tipo de comando de carregamento é mais adequado para ambientes de teste, onde a segurança é menos importante do que na produção.
Para carregar imagens sem autenticação ou um certificado de AC privado, use um comando como o seguinte:
bmctl push images \
--source IMAGES_TAR_FILE_PATH \
--private-registry REGISTRY_IP:PORT \
--need-credential=false
Por exemplo:
bmctl push images \
--source bmpackages_1.33.100-gke.89.tar.xz \
--private-registry 172.18.0.20:5000 \
--need-credential=false.
Ajuste o número de discussões
A rotina de carregamento de imagens pode demorar algum tempo devido ao tamanho e à quantidade de imagens de contentores no ficheiro TAR do pacote de imagens. Aumentar o número de threads paralelos faz com que a rotina seja executada mais rapidamente. Pode usar a flag --threads
para alterar o número de threads paralelos que o bmctl push images
usa.
Por predefinição, a rotina de carregamento de imagens usa 4 threads. Se os carregamentos de imagens demorarem demasiado tempo, aumente este valor. Como referência, num ambiente de teste da Google, o carregamento de imagens a partir de uma estação de trabalho com 4 CPUs demora aproximadamente 10 minutos com 8 threads paralelos.
bmctl push images \
--source IMAGES_TAR_FILE_PATH \
--private-registry REGISTRY_IP:PORT \
--cacert CERT_PATH \
--threads NUM_THREADS
Substitua NUM_THREADS
pelo número de threads paralelos usados para processar os carregamentos de imagens. Por predefinição, o bmctl push images
usa quatro
threads paralelos.
O comando seguinte aumenta o número de threads para o carregamento de 4
para 8
para reduzir o tempo de carregamento:
bmctl push images \
--source bmpackages_1.33.100-gke.89.tar.xz \
--private-registry 172.18.0.20:5000 \
--cacert ~/cert.pem \
--threads 8
Carregamento através de proxy
Se precisar de um proxy para carregar as imagens da sua estação de trabalho para o servidor de registo, pode adicionar os detalhes do proxy antes do comando bmctl
:
HTTPS_PROXY=http://PROXY_IP:PORT bmctl push images \
--source=IMAGES_TAR_FILE_PATH \
--private-registry=REGISTRY_IP:PORT \
--cacert=CERT_PATH
Substitua o seguinte:
PROXY_IP:PORT
: o endereço IP e a porta do proxy.IMAGES_TAR_FILE_PATH
: o caminho do ficheiro TAR do pacote de imagens transferido, comobmpackages_1.33.100-gke.89.tar.xz
.REGISTRY_IP:PORT
: o endereço IP e a porta do servidor de registo privado.CERT_PATH
: o caminho do ficheiro de certificado da AC, se o servidor de registo usar um certificado TLS privado.
Introduza o nome de utilizador e a palavra-passe quando lhe for pedido ou selecione um ficheiro de configuração do Docker.
O comando seguinte carrega imagens através de um proxy:
HTTPS_PROXY=http://10.128.0.136:3128 bmctl push images \
--source bmpackages_1.33.100-gke.89.tar.xz \
--private-registry 172.18.0.20:5000 \
--cacert ~/cert.pem
Use o seu próprio espaço de nomes com o bmctl push images
Se quiser usar o seu próprio espaço de nomes no servidor de registo em vez do espaço de nomes raiz, o containerd
pode extrair informações deste espaço de nomes se fornecer o ponto final da API para o seu registo privado no campo registryMirrors.endpoint
do ficheiro de configuração do cluster. Normalmente, o ponto final está no formato
<REGISTRY_IP:PORT>/v2/<NAMESPACE>
. Consulte o guia do utilizador do seu registo privado para ver
detalhes específicos. Para mais informações, consulte o artigo Acerca da utilização de v2
no ponto final do registo.
bmctl push images \
--source=IMAGES_TAR_FILE_PATH \
--private-registry=REGISTRY_IP:PORT/NAMESPACE \
--cacert=CERT_PATH
Substitua NAMESPACE
pelo nome do espaço de nomes no servidor de registo para o qual quer carregar imagens.
Por exemplo, se só tiver acesso a 198.51.20:5000/test-namespace/
, pode usar um comando como o seguinte para carregar todas as imagens no espaço de nomes test-namespace
:
bmctl push images \
--source=./bmpackages_1.33.100-gke.89.tar.xz \
--private-registry=198.51.20:5000/test-namespace \
--username=alex \
--password=pa55w0rd \
--cacert /etc/pki/tls/certs/ca-bundle.crt
Em seguida, no ficheiro de configuração do cluster, pode adicionar o seguinte para fazer com que o containerd
extraia do espaço de nomes test-namespace
:
registryMirrors:
- endpoint: https://198.51.20:5000/v2/test-namespace
Para mais informações sobre o comando bmctl push images
, consulte a bmctl
referência de comandos.
Configure clusters para usar uma imagem espelhada do registo
Pode configurar um espelho do registo para um cluster na criação do cluster ou sempre que atualiza um cluster existente. O método de configuração que usa depende do tipo de cluster e, para clusters de utilizadores, se está a criar um cluster ou a atualizar um cluster. As duas secções seguintes descrevem os dois métodos disponíveis para configurar espelhos de registo.
Use a secção de cabeçalho no ficheiro de configuração do cluster
O Google Distributed Cloud permite-lhe especificar espelhos de registo fora da especificação do cluster, na secção de cabeçalho do ficheiro de configuração do cluster. Para clusters de administrador, híbridos e autónomos, este é o único método suportado para especificar espelhos de registo. Este método aplica-se à criação ou às atualizações de clusters.
Para clusters de utilizadores, recomendamos que use a secção nodeConfig.registryMirrors
no recurso Cluster para especificar e manter
configurações de espelho do registo. Embora possa usar a secção de cabeçalho no ficheiro de configuração do cluster para especificar espelhos de registo quando cria um cluster de utilizador, a especificação não é mantida nas atualizações.
O seguinte ficheiro de configuração do cluster de exemplo especifica que as imagens devem ser obtidas a partir de uma réplica local do registo cujo ponto final é https://198.51.20:5000
. Alguns dos campos apresentados no início deste ficheiro de configuração são descritos nas secções seguintes.
# Sample cluster config with registry mirror:
---
gcrKeyPath: /bmctl/bmctl-workspace/.sa-keys/my-gcp-project-anthos-baremetal-gcr.json
sshPrivateKeyPath: /root/ssh-key/id_rsa
registryMirrors:
- endpoint: https://198.51.20:5000
caCertPath: /root/ca.crt
pullCredentialConfigPath: /root/.docker/config.json
hosts:
- somehost.io
- otherhost.io
---
apiVersion: v1
kind: Namespace
metadata:
name: cluster-admin1
---
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: admin1
namespace: cluster-admin1
spec:
nodeConfig:
containerRuntime: containerd
...
Use a secção nodeConfig.registryMirrors
na especificação do cluster
Este método de criação ou atualização de uma réplica da base de dados de registo aplica-se apenas a clusters de utilizadores. Uma vez que pode partilhar os segredos criados para o cluster de gestão com o cluster de utilizadores, pode usar o nodeConfig.registryMirrors
do cluster de gestão ou híbrido para especificar o espelho do registo na especificação do cluster para o cluster de utilizadores.
Para configurar um cluster de utilizadores para usar o mesmo espelho do registo que o cluster de administrador, siga estes passos:
Obtenha a secção
nodeConfig.registryMirror
, incluindo referências secretas, a partir denodeConfig.registryMirrors
do recurso do cluster de administrador:kubectl get cluster CLUSTER_NAME -n CLUSTER_NAMESPACE \ --kubeconfig ADMIN_KUBECONFIG \ -o yaml
Substitua o seguinte:
CLUSTER_NAME
: o nome do administrador ou do cluster híbrido que gere o cluster de utilizadores.CLUSTER_NAMESPACE
: o nome do espaço de nomes do cluster de gestão.ADMIN_KUBECONFIG
: o caminho do ficheiro kubeconfig do cluster de gestão.
Adicione a configuração
nodeConfig.registryMirrors
do cluster de administrador ao ficheiro de configuração do cluster de utilizador.A secção
registryMirrors
no ficheiro de configuração do cluster de utilizadores deve ter um aspeto semelhante ao seguinte exemplo:--- gcrKeyPath: /bmctl/bmctl-workspace/.sa-keys/my-gcp-project-anthos-baremetal-gcr.json sshPrivateKeyPath: /root/ssh-key/id_rsa --- apiVersion: v1 kind: Namespace metadata: name: cluster-user1 --- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: user1 namespace: cluster-user1 spec: nodeConfig: containerRuntime: containerd registryMirrors: - caCertSecretRef: name: the-secret-created-for-the-admin-cluster namespace: anthos-creds endpoint: https://172.18.0.20:5000 hosts: - somehost.io - otherhost.io pullCredentialSecretRef: name: the-image-pull-creds-created-for-the-admin-cluster namespace: anthos-creds ...
Para fazer alterações subsequentes à configuração do espelho do registo para o cluster de utilizadores, edite o nodeConfig.registryMirrors
no ficheiro de configuração do cluster de utilizadores e aplique as alterações com bmctl update
.
Não pode usar a secção de cabeçalho do ficheiro de configuração do cluster para atualizar a configuração dos espelhos do registo para um cluster de utilizador.
hosts
campo
containerd
verifica a secção hosts
do ficheiro de configuração do cluster para descobrir que anfitriões são duplicados localmente. Estes anfitriões são mapeados para o ponto final do espelho do registo especificado no ficheiro de configuração do cluster (registryMirror.endpoint
). No ficheiro de configuração de exemplo da secção anterior, os registos públicos listados na secção hosts
são somehost.io
e otherhost.io
. Uma vez que estes registos públicos aparecem na secção hosts
, o containerd
verifica primeiro a réplica do registo privado quando encontra pedidos de obtenção de imagens do somehost.io
ou do otherhost.io
.
Por exemplo, suponhamos que containerd
recebe um comando pull para
somehost.io/kubernetes-e2e-test-images/nautilus:1.0
. Como somehost.io
está
listado como um dos anfitriões na secção hosts
do ficheiro de configuração do cluster, containerd
procura a imagem kubernetes-e2e-test-images/nautilus:1.0
no espelho do registo local. Se somehost.io
não estiver listado na secção hosts
, significa que containerd
não sabe que existe uma cópia local de somehost.io
. Nesse caso, o containerd
não verifica a imagem no espelho e extrai a imagem do registo público somehost.io
.
Tenha em atenção que, por predefinição, o Google Distributed Cloud espelha automaticamente as imagens de
gcr.io
, pelo que não precisa de listar gcr.io
como anfitrião na secção hosts
.
Os valores de hosts
e o valor de endpoint
não devem sobrepor-se. Por exemplo, o seguinte exemplo de configuração mostra um anfitrião, europe-docker.pkg.dev
, que corresponde à parte do domínio do valor do ponto final. Neste caso, não tem de especificar um valor de hosts
:
...
registryMirrors:
...
endpoint: https://europe-docker.pkg.dev:5000/v2/cloud-data-fusion-images
hosts:
- europe-docker.pkg.dev
...
gcrKeyPath
campo
Se quiser que o Google Distributed Cloud use automaticamente o Artifact Registry
(gcr.io
) para obter imagens que não aparecem no seu registo local, tem de
especificar o caminho para a chave da conta de serviço do Artifact Registry.
O Google Distributed Cloud não tem um mecanismo para fornecer chaves para outros registos públicos.
Se não planeia usar a funcionalidade em que as imagens são extraídas de gcr.io
quando não aparecem no seu registo local, não precisa de adicionar um
gcrKeyPath
ao ficheiro de configuração do cluster.
caCertPath
campo
Se o seu registo exigir um certificado de segurança da camada de transporte (TLS) privado,
este campo recebe o caminho para o ficheiro do certificado da AC de raiz do servidor. Este ficheiro de certificado deve estar na estação de trabalho do administrador, na máquina que executa os comandos bmctl
. Se o seu registo não exigir um certificado TLS privado, pode deixar o campo caCertPath
em branco.
pullCredentialConfigPath
campo
Se o seu servidor de registo não exigir um ficheiro de configuração do Docker de autenticação, pode deixar o campo pullCredentialConfigPath
em branco. Tenha em atenção que este é o caminho para o ficheiro de configuração na máquina que executa os comandos bmctl
.
Use um espelho de registo com clusters de utilizadores
Os clusters de utilizadores não extraem automaticamente imagens de um espelho do registo se o respetivo cluster de administrador tiver sido configurado para o fazer. Para que os clusters de utilizadores extraiam imagens de um espelho do registo, tem de os configurar individualmente, conforme descrito no artigo Configure clusters to use a registry mirror (Configure clusters to use a registry mirror).
Atualize os pontos finais do espelho do registo, os certificados e as credenciais de obtenção
Para atualizar os pontos finais, os certificados ou as credenciais de obtenção do espelho do registo:
No ficheiro de configuração do cluster, atualize o ponto final, o ficheiro de certificado da AC e o caminho do ficheiro de configuração das credenciais de obtenção.
Aplique as alterações executando o seguinte comando:
bmctl update cluster -c CLUSTER_NAME --kubeconfig=ADMIN_KUBECONFIG
Substitua o seguinte:
CLUSTER_NAME
com o nome do cluster que quer atualizar.ADMIN_KUBECONFIG
com o caminho do ficheiro de configuração do cluster de administrador.
Valide se as imagens são extraídas do espelho do registo
Pode determinar se o containerd
está a extrair imagens do seu registo
local examinando o conteúdo de um ficheiro config.toml
, conforme mostrado nos
passos seguintes:
Inicie sessão num nó e examine o conteúdo do seguinte ficheiro:
/etc/containerd/config.toml
Verifique a secção
plugins."io.containerd.grpc.v1.cri".registry.mirrors
do ficheiroconfig.toml
para ver se o seu servidor de registo está listado no campoendpoint
. Segue-se um excerto de um ficheiroconfig.toml
de exemplo no qual o campoendpoint
aparece a negrito:version = 2 root = "/var/lib/containerd" state = "/run/containerd" ... [plugins."io.containerd.grpc.v1.cri".registry] [plugins."io.containerd.grpc.v1.cri".registry.configs] [plugins."io.containerd.grpc.v1.cri".registry.configs."gcr.io"] [plugins."io.containerd.grpc.v1.cri".registry.configs."privateregistry2.io".tls] ca_file = '/etc/containerd/certs.d/privateregistry2.io/ca.crt' [plugins."io.containerd.grpc.v1.cri".registry.mirrors] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."gcr.io"] endpoint = ["http://privateregistry.io", "https://privateregistry2.io"] ...
Se o seu espelho do registo aparecer no campo
endpoint
, significa que o nó está a obter imagens do seu espelho do registo e não de um registo público.
Resolva problemas de definições de espelho do registo
Pode usar crictl
, a ferramenta de linha de comando da interface de tempo de execução do contentor, para testar as definições do registo transferindo ficheiros de imagem individuais. Cada ficheiro de imagem é etiquetado de forma independente com uma string de versão significativa. Por exemplo, a imagem do controlador da API cluster é etiquetada com a versão de lançamento do Google Distributed Cloud e a imagem do etcd é etiquetada com a versão correspondente do etcd.
Para a versão 1.31.200-gke.59 do Google Distributed Cloud para bare metal,
a imagem do controlador da API do cluster, cluster-api-controller
, e a imagem do etcd,
etcd
, têm as seguintes etiquetas:
cluster-api-controller:1.31.200-gke.59
etcd:v3.4.30-0-gke.1
Extraia uma imagem do espelho do registo
Se o seu repositório espelhado não usar espaços de nomes, use o seguinte comando para extrair uma imagem:
crictl pull REGISTRY_IP:PORT/IMAGE_PATH:IMAGE_TAG
Extraia uma imagem de uma réplica do registo que use espaços de nomes
Se o seu espelho do registo usar espaços de nomes, use o seguinte comando para extrair uma imagem:
crictl pull REGISTRY_IP:PORT/NAMESPACE/IMAGE_PATH:IMAGE_TAG
Acerca da utilização de v2
no ponto final de registo
Quando o registo usa namespaces personalizados, tem de antepor o namespace no ponto final do registo (registryMirror.endpoint
) no ficheiro de configuração do cluster com v2/
. Se não estiver a usar espaços de nomes, não use v2
. Em qualquer dos casos,
não use v2
no valor da flag --private-registry
nem nos comandos de obtenção de imagens:
Sem espaços de nomes
- Válido:
endpoint: https://172.18.0.20:5000
crictl pull 172.18.0.20:5000/anthos-baremetal-release/etcd:v3.4.30-0-gke.1
- Inválido:
endpoint: https://172.18.0.20:5000/v2
crictl pull 172.18.0.20:5000/v2/anthos-baremetal-release/etcd:v3.4.30-0-gke.1
Com espaços de nomes
- Válido:
endpoint: https://172.18.0.21:5000/v2/namespace
crictl 172.18.0.21:5000/namespace/anthos-baremetal-release/etcd:v3.4.30-0-gke.1
- Inválido:
endpoint: https://172.18.0.21:5000/namespace
crictl pull 172.18.0.21:5000/v2/namespace/anthos-baremetal-release/etcd:v3.4.30-0-gke.1