你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Helm 包要求
Helm 是 Kubernetes 的包管理器,可帮助你管理 Kubernetes 应用程序。 Helm 包称为图表,它们由几个 YAML 配置文件和一些模板组成,这些模板呈现到 Kubernetes 清单文件中。 图表可供任何人用于任何环境,从而降低复杂性和重复项。
注册表 URL 路径和 imagepullsecrets 要求
开发 helm 包时,通常会将容器注册表服务器 URL 保留在值中。 将容器注册表服务器 URL 保留在值中对于在每个环境容器注册表之间移动项目非常有用。 Azure 操作员服务管理器(AOSM)使用网络函数管理器(NFM)服务来部署容器化网络函数(CNF)。 网络函数管理器(NFM)包含用于在网络函数 (NF) 部署期间将容器注册表服务器位置和 imagepullsecret 注入到 helm 值的功能。 imagePullSecret 是一个授权令牌,也称为机密,用于存储用于访问注册表的 Docker 凭据。 例如,如果需要通过 Kubernetes 部署部署应用程序,可以定义如下例所示的部署:
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
是一个文件,可用于在 Helm 图表的单个位置轻松设置值要求和约束。 在此文件中,将 registryPath 和 imagePullSecrets 定义为所需的属性。
{
"$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" ],
}
}
}
NFDVersion 请求有效负载在 registryValuesPaths 中提供以下值:
"registryValuesPaths": [ "global.registryPath" ],
"imagePullSecretsValuesPaths": [ "global.imagePullSecrets" ],
在 NF 部署期间,网络函数操作员(NFO)将 registryPath 设置为正确的Azure 容器注册表(ACR)服务器位置。 例如,NFO 运行以下等效命令:
$ helm install --set "global.registryPath=<registryURL>" --set "global.imagePullSecrets[0].name=<secretName>" releasename ./releasepackage
注意
注册表路径设置时不带任何前缀,例如 https:// 或 oci://。 如果 helm 包中需要前缀,发布者需要在包中定义此前缀。
values.yaml
是一个文件,其中包含 Helm 图表的默认值。 它是一个 YAML 文件,用于定义图表的默认值。 在 values.yaml 文件中,必须存在两种类型的变量:imagePullSecrets 和 registryPath。 表中描述了每个项。
global:
imagePullSecrets: []
registryPath: “”
名称 | Type | 描述 |
---|---|---|
imagePullSecrets | 字符串 | imagePullSecrets 是机密名称数组,用于拉取容器映像 |
registryPath | 字符串 | registryPath 是 AzureContainerRegistry 服务器位置 |
必须在创建 NFDVersion 载入步骤中提供 imagePullSecrets 和 registryPath。
群集中运行的 NFO 使用 helm install –set 命令在 helm 发布期间填充这两个变量(imagePullSecrets 和 registryPath)。
有关详细信息,请参阅: pull-image-private-registry
不可变性限制
不可变性限制可防止更改文件或目录。 例如,无法更改或重命名不可变文件,并且无法删除、修改或重命名允许追加操作的文件。
避免使用可变标记
用户应避免使用可变标记,例如最新、开发或稳定。 例如,如果 deployment.yaml 为 .部署失败的 Values.image.tag。
image: "{{ .Values.global.registryPath }}/{{ .Values.image.repository }}:{{ .Values.image.tag}}“
避免引用外部注册表
用户应避免使用对外部注册表的引用。 例如,如果 deployment.yaml 使用硬编码的注册表路径或外部注册表引用,它将失败验证。
image: http://myURL/{{ .Values.image.repository }}:{{ .Values.image.tag}}
建议
建议使用手动验证来拆分自定义资源定义(CRD)声明和使用。 以下各节将介绍每个内容。
拆分 CRD 声明和用法
建议将 CRD 声明和使用拆分为单独的 helm 图表以支持更新。 有关详细信息,请参阅: method-2-separate-charts
手动验证
查看创建的映像和容器规格,以确保映像具有 registryURL 的前缀,并且 imagePullSecrets 填充了 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>
静态映像存储库和标记
每个 helm 图表应包含静态映像存储库和标记。 用户应将映像存储库和标记设置为静态值。 静态值可以通过以下方式设置:
- 通过在图像行中对它们进行硬编码,或者
- 在 values.yaml 中设置值,而不在网络函数设计版本(NFDV)中公开这些值。
网络函数设计版本 (NFDV) 应映射到静态的一组 helm 图表和图像。 图表和图像只能通过发布新的网络函数设计版本(NFDV)进行更新。
image: "{{ .Values.global.registryPath }}/contosoapp:1.14.2“
或
image: "{{ .Values.global.registryPath }}/{{ .Values.image.repository }}:{{ .Values.image.tag}}“
YAML values.yaml
image:
repository: contosoapp
tag: 1.14.2