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