Partilhar via


Requisitos do pacote Helm

Helm é um gerenciador de pacotes para Kubernetes que ajuda você a gerenciar aplicativos 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 em qualquer ambiente, o que reduz a complexidade e as duplicações.

Requisitos do 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 Network Function Manager (NFM) para implantar a Função de Rede em Contêiner (CNF). O Network Function Manager (NFM) contém recursos para injetar o local do servidor de registro de contêiner e imagepullsecrets nos valores de leme 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. Neste 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 útil da solicitação NFDVersion fornece os seguintes valores no registryValuesPaths:

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

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

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

Nota

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 é descrito na tabela.

global: 
   imagePullSecrets: [] 
   registryPath: “” 
Name Tipo Description
imagemPullSecrets 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 liberação de helm usando o comando helm install –set.

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

Restrições de imutabilidade

As 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 recente, dev ou estável. 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}}“

Evitar referências ao registo externo

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

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

Recomendações

Dividir a declaração e o uso de CRDs (Custom Resource Definitions) e usar validações manuais são práticas recomendadas. Cada um deles é descrito nas seções a seguir.

Declaração CRD dividida e uso

Recomendamos dividir a declaração e o uso de CRDs em gráficos de leme 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

OU

 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 como 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 de Design de Função de Rede (NFDV).

Uma Versão de Design de Função de Rede (NFDV) deve ser mapeada para um conjunto estático de gráficos e imagens de leme. Os gráficos e imagens só são atualizados através da publicação de uma nova versão de design de função de rede (NFDV).

 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