Compartilhar via


Requisitos do pacote Helm

O Helm é um gerenciador de pacotes para o Kubernetes que ajuda você a gerenciar aplicativos do Kubernetes. Os pacotes Helm são chamados de gráficos e consistem em alguns arquivos de configuração YAML e alguns modelos que são renderizados em arquivos de manifesto do Kubernetes. Os gráficos são reutilizáveis por qualquer pessoa para qualquer ambiente, o que reduz a complexidade e as duplicatas.

Requisitos de caminho da URL do Registro e imagepullsecrets

Ao desenvolver um pacote helm, é comum manter a URL do servidor de registro do contêiner nos valores. Manter a URL do servidor de registro de contêiner nos valores é útil para mover artefatos entre cada registro de contêiner de ambiente. O Azure Operator Service Manager (AOSM) usa o serviço NFM (Network Function Manager) para implantar CNF (Função de Rede em Contêiner). O Network Function Manager (NFM) contém recursos para injetar o local do servidor de registro de contêiner e imagepullsecrets nos valores de comando durante a implantação da Função de Rede (NF). Um imagePullSecret é um token de autorização, também conhecido como segredo, que armazena credenciais do Docker usadas para acessar um registro. Por exemplo, se você precisar implantar um aplicativo por meio da implantação do Kubernetes, poderá definir uma implantação como o exemplo a seguir:

apiVersion: apps/v1 
kind: Deployment 
metadata: 
  name: nginx-deployment 
  labels: 
    app: nginx 
spec: 
  replicas: 3 
  selector: 
    matchLabels: 
      app: nginx 
  template: 
    metadata: 
      labels: 
        app: nginx 
    spec: 
      {{- if .Values.global.imagePullSecrets }} 
      imagePullSecrets: {{ toYaml .Values.global.imagePullSecrets | nindent 8 }} 
      {{- end }} 
      containers: 
      - name: contosoapp 
        image:{{ .Values.global.registryPath }}/contosoapp:1.14.2 
        ports: 
        - containerPort: 80 

values.schema.json é um arquivo que permite definir facilmente requisitos e restrições de valor em um único local para gráficos Helm. Nesse arquivo, defina registryPath e imagePullSecrets como propriedades necessárias.

{ 
  "$schema": "http://json-schema.org/draft-07/schema#", 
  "title": "StarterSchema", 
  "type": "object", 
  "required": ["global"], 
  "properties": { 
      "global" : {
          "type": "object",
          "properties": {
              “registryPath”: {“type”: “string”}, 
              “imagePullSecrets”: {“type”: “string”}, 
          }
          "required": [ "registryPath", "imagePullSecrets" ], 
      } 
   } 
} 

A carga de solicitação NFDVersion fornece os seguintes valores no registryValuesPaths:

"registryValuesPaths": [ "global.registryPath" ], 
"imagePullSecretsValuesPaths": [ "global.imagePullSecrets" ], 

Durante uma implantação de NF, o NFO (Operador de Função de Rede) define o registryPath para o local correto do servidor do Registro de Contêiner do Azure (ACR). Por exemplo, o NFO executa o seguinte comando equivalente:

$ helm install --set "global.registryPath=<registryURL>" --set "global.imagePullSecrets[0].name=<secretName>" releasename ./releasepackage 

Observação

O registryPath é definido sem qualquer prefixo, como https:// ou oci://. Se um prefixo for necessário no pacote helm, os editores precisarão defini-lo no pacote.

values.yaml é um arquivo que contém os valores padrão para um gráfico Helm. É um arquivo YAML que define os valores padrão para um gráfico. No arquivo values.yaml, dois tipos de variáveis devem estar presentes; imagePullSecrets e registryPath. Cada um está descrito na tabela.

global: 
   imagePullSecrets: [] 
   registryPath: “” 
Nome Digitar Descrição
imagePullSecrets String imagePullSecrets são uma matriz de nomes secretos, que são usados para extrair imagens de contêiner
registryPath String registryPath é o local do AzureContainerRegistry servidor

imagePullSecrets e registryPath devem ser fornecidos na etapa de integração create NFDVersion.

Um NFO em execução no cluster preenche essas duas variáveis (imagePullSecrets e registryPath) durante uma versão helm usando o comando helm install –set.

Para obter mais informações, consulte: pull-image-private-registry

Restrições de imutabilidade

Restrições de imutabilidade impedem alterações em um arquivo ou diretório. Por exemplo, um arquivo imutável não pode ser alterado ou renomeado, e um arquivo que permite operações de acréscimo não pode ser excluído, modificado ou renomeado.

Evite o uso de tags mutáveis

Os usuários devem evitar o uso de tags mutáveis, como mais recentes, dev ou estáveis. Por exemplo, se deployment.yaml usou 'mais recente' para o . Values.image.tag a implantação falharia.

 image: "{{ .Values.global.registryPath }}/{{ .Values.image.repository }}:{{ .Values.image.tag}}“

Evite referências ao registro externo

Os usuários devem evitar o uso de referências a um registro externo. Por exemplo, se deployment.yaml usa um caminho de registro codificado ou referências de registro externas, ele falha na validação.

 image: http://myURL/{{ .Values.image.repository }}:{{ .Values.image.tag}}

Recomendações

Dividir a declaração de CRDs (Definições de Recursos Personalizados) e o uso mais usar validações manuais são práticas recomendadas. Cada um é descrito nas seções a seguir.

Dividir declaração CRD e uso

Recomendamos dividir a declaração e o uso de CRDs em gráficos de comando separados para oferecer suporte a atualizações. Para obter informações detalhadas, consulte: method-2-separate-charts

Validações manuais

Revise as imagens e as especificações de contêiner criadas para garantir que as imagens tenham prefixo de registryURL e que imagePullSecrets sejam preenchidas com secretName.

 helm template --set "global.imagePullSecrets[0].name=<secretName>" --set "global.registry.url=<registryURL>" <release-name> <chart-name> --dry-run

OR

 helm install --set "global.imagePullSecrets[0].name=<secretName>" --set "global.registry.url=<registryURL>" <release-name> <chart-name> --dry-run
 kubectl create secret <secretName> regcred --docker-server=<registryURL> --dockerusername=<regusername> --docker-password=<regpassword>

Repositório de imagens estáticas e tags

Cada gráfico de leme deve conter imagens estáticas, repositório e tags. Os usuários devem definir o repositório de imagens e a tag para valores estáticos. Os valores estáticos podem ser definidos por:

  • Codificando-os na linha da imagem ou,
  • Definir os valores em values.yaml e não expor esses valores na versão NFDV (Network Function Design Version).

Uma versão NFDV (Network Function Design Version) deve ser mapeada para um conjunto estático de gráficos de comando e imagens. Os gráficos e imagens só são atualizados publicando uma nova versão NFDV (Network Function Design Version).

 image: "{{ .Values.global.registryPath }}/contosoapp:1.14.2“

ou

 image: "{{ .Values.global.registryPath }}/{{ .Values.image.repository }}:{{ .Values.image.tag}}“
 
YAML values.yaml
image:
  repository: contosoapp
  tag: 1.14.2