O recurso de aceleração P2P está disponível em clusters ACK Serverless e no Container Service for Kubernetes (ACK) para agilizar o pull de imagens e a implantação de aplicações. Este tópico descreve como utilizar a aceleração P2P em clusters Kubernetes gerenciados, dedicados e serverless do ACK.
Pré-requisitos
Uma instância do Container Registry Enterprise Edition já foi criada. Essa instância deve ser da Advanced Edition. Para mais informações, consulte Criar uma instância da Enterprise Edition.
Uma Virtual Private Cloud (VPC) está configurada, caso o cluster ACK precise acessar uma instância do Container Registry Enterprise Edition via VPC. Para mais detalhes, veja Configurar controle de acesso à VPC. Se o acesso for pela internet, verifique se ele está ativado e se o endereço IP do cluster foi adicionado à lista de permissões. Consulte Configurar controle de acesso à internet para orientações adicionais.
Etapa 1: Conceder permissões de leitura aos recursos do Container Registry
Para clusters Kubernetes serverless, é necessário conceder permissões de leitura dos recursos do Container Registry ao componente P2P.
Em clusters Kubernetes gerenciados ou dedicados, essa concessão não é necessária, pois as permissões são atribuídas por padrão.
-
Crie uma função do RAM.
Ao criar a função do RAM, defina o parâmetro Role Type como Normal Service Role e selecione o Elastic Compute Service (ECS) como serviço confiável. Para mais informações, consulte Criar uma função do RAM para serviços da Alibaba Cloud.
-
Conceda permissões à função do RAM.
Anexe a política AliyunContainerRegistryReadOnlyAccess à função do RAM. Para mais detalhes, veja Gerenciar permissões de uma função do RAM.
Etapa 2: Visualizar o ID da instância do Container Registry Enterprise Edition
Faça login no console do Container Registry.
Na barra de navegação superior, selecione uma região.
No painel de navegação à esquerda, clique em Instances.
Na página Instances, clique na instância da Enterprise Edition que deseja gerenciar.
Visualize o ID da instância do Container Registry no canto superior esquerdo da página Overview.
Etapa 3: Instalar o componente P2P
Faça login no Console de Gerenciamento do Container Service.
No painel de navegação à esquerda, escolha .
Na página App Catalog, pesquise pelo componente ack-acr-acceleration-p2p. Ao encontrá-lo, clique no cartão correspondente.
Na página exibida, clique em Deploy.
No assistente de Deploy, selecione um cluster e um namespace e clique em Next.
-
Na etapa Parameters, defina o parâmetro registryInstances com o ID da instância do Container Registry obtido na Etapa 2.
Caso utilize múltiplas instâncias do Container Registry, separe os IDs por vírgulas (,) ao configurar o parâmetro registryInstances.
NotaPor padrão, o componente P2P utiliza a porta 65001 nos nós. Se essa porta estiver em uso por outro componente, altere-a conforme a necessidade do seu ambiente.
p2p: ... # Port of P2P Agent in host network port: 65001 # Id of ACR registry instances, support multi, e.g. "cri-xxx,cri-yyy" registryInstances: <ACR instance Id> -
Opcional:Defina o parâmetro controller.ramRole com o nome da função do RAM criada na Etapa 1.
NotaO parâmetro controller.ramRole é obrigatório apenas para clusters ACK Serverless. Ignore esta etapa para outros tipos de cluster.
controller: ... # ACK Serverless cluster setting, in order to accessing ACR OpenAPI(Get*, List*) for ECS ramRole: <your ram role name> -
Opcional:Para limitar a largura de banda total de upload e download do componente P2P, configure o parâmetro ratelimit. O valor padrão é 512 MB/s, mas você pode ajustá-lo conforme a capacidade dos nós.
p2p: # Total net rate limit (MBytes/s) for uploading and downloading ratelimit: "512M" No painel Deploy, selecione um cluster e clique em Create.
Etapa 4: Ativar a aceleração P2P
Adicione o rótulo de aceleração P2P a workloads, como pods e Deployments, para habilitar esse recurso. Alternativamente, aplique o rótulo diretamente em um namespace do cluster ACK. Dessa forma, todos os workloads elegíveis nesse namespace terão a aceleração P2P ativada automaticamente, sem necessidade de modificar arquivos YAML individuais. Escolha o método mais adequado ao seu cenário.
O nome do rótulo de aceleração P2P é k8s.aliyun.com/image-accelerate-mode e seu valor é p2p.
-
Adicionar o rótulo de aceleração P2P a um workload
Neste exemplo, aplicamos o rótulo a um Deployment. Execute o comando abaixo para editar o Deployment:
kubectl edit deploy <Deployment name>Inclua o rótulo
k8s.aliyun.com/image-accelerate-mode: p2pno arquivo yaml do Deployment.apiVersion: apps/v1 kind: Deployment metadata: name: test labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: # enable P2P k8s.aliyun.com/image-accelerate-mode: p2p app: nginx spec: # your ACR instacne image pull secret imagePullSecrets: - name: test-registry containers: # your ACR instacne image - image: test-registry-vpc.cn-hangzhou.cr.aliyuncs.com/docker-builder/nginx:latest name: test command: ["sleep", "3600"] -
Adicionar o rótulo de aceleração P2P a um namespace
-
Via console do ACK
Faça login no Console de Gerenciamento do Container Service.
No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, localize o cluster desejado e clique no nome dele ou em Details na coluna Actions.
No painel de navegação à esquerda, clique em Namespaces and Quotas.
Na página Namespace, encontre o namespace alvo e clique em Edit na coluna Actions.
Na seção Label da caixa de diálogo Edit Namespace, defina Variable Key como
k8s.aliyun.com/image-accelerate-modee Variable Value comop2p. Em seguida, clique em OK.
-
Via kubectl
kubectl label namespaces <your-namespace> k8s.aliyun.com/image-accelerate-mode=p2p
-
Verificar a aceleração P2P
Quando a aceleração P2P é ativada para um pod, o componente P2P insere automaticamente informações relevantes no arquivo yaml. Isso inclui anotações específicas, o endereço da imagem acelerada e o Secret necessário para o pull.
A única diferença entre o Secret usado para puxar a imagem acelerada e o da imagem original reside no domínio do repositório. Caso as credenciais do Secret original estejam inválidas, o pull da imagem acelerada também falhará.
Execute o comando abaixo para inspecionar o yaml do pod:
kubectl get po <Pod name> -oyaml
Saída esperada:
apiVersion: v1
kind: Pod
metadata:
annotations:
# inject p2p-annotations automatically
k8s.aliyun.com/image-accelerate-mode: p2p
k8s.aliyun.com/p2p-config: '...'
spec:
containers:
# inject image to p2p endpoint
- image: test-registry-vpc.distributed.cn-hangzhou.cr.aliyuncs.com:65001/docker-builder/nginx:latest
imagePullSecrets:
- name: test-registry
# inject image pull secret for p2p endpoint
- name: acr-credential-test-registry-p2p
A presença das anotações P2P, do endereço da imagem acelerada e do Secret correspondente no arquivo yaml confirma que a aceleração P2P está ativa.