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