模板包说明
您可以通过如下两种方法准备模板包:
自定义模板包
- 根据需求自定义设置模板包内容。
制作模板包的方法,请参见https://helm.sh/docs/chart_template_guide/getting_started/。
- 按照模板包规范的要求设置模板包目录结构和命名模板包。
使用Kubernetes官方模板包
- 访问https://github.com/helm/charts,获取需要的社区模板包。
- 登录Linux机器。
- 上传1中获取到的模板包。
- 执行如下命令,压缩模板包。
- 按照模板包规范的要求设置模板包目录结构和命名模板包。
模板包规范
以下以redis为例,在准备redis模板包时根据模板包规范制作模板包。
- 命名要求
模板包命名格式为:工作负载名称-主版本号.次版本号.修订号.tgz,如redis-0.4.2.tgz。
模板包的版本号需遵循语义化版本规则。
- 主版本号、次版本号为必选,修订号为可选。
- 版本号的长度不能超过64个字符。
- 主版本号、次版本号的数值为整数,均需要≥0,且≤99。
- 修订号由数字、大小写英文字母及连接符组成,即[0-9A-Za-z-]。
- 目录结构
模板包的目录结构如下所示:
redis/ templates/ values.yaml README.md Chart.yaml .helmignore
目录说明如表1所示,带*的为必选项:表1 模板包目录说明 参数
参数说明
* templates
用于存放所有的template(模板)文件。
* values.yaml
用于描述template文件所需的配置参数。
须知:定义template文件配置参数时,请注意此处定义的“镜像地址”务必和容器镜像仓库中对应的镜像地址保持一致。否则创建工作负载会异常,提示镜像拉取失败。
镜像地址获取方法如下:进入容器镜像服务控制台。在“我的镜像 > 自有镜像”中,单击已上传镜像的名称,在“镜像版本”页签的“下载指令”栏中即可获取镜像地址,单击
按钮即可复制该指令。
README.md
一个markdown文件,包括:
- 描述Chart提供的工作负载或服务。
- 运行Chart的前提。
- 解释values.yaml文件中的配置。
- 安装和配置Chart的相关信息。
* Chart.yaml
模板的基本信息说明。
.helmignore
设定在工作负载安装时不需要读取templates的某些文件或数据。
- IEF支持的资源在IEF中使用Helm模板不支持选择集群和NameSpace(铂金版集群只有一个固定的命名空间,其名称为项目ID),其他支持操作的资源如下所示。
表2 支持操作的资源 Kubernetes资源
说明
Namespace
目前铂金版只支持projectID作为namespace,不支持自选namespace能力,因此在chart中不必填写namespace,IEF会自动将chart部署到项目ID所对应的namespace空间中。如填写namespace字段,则务必填写正确的namespace值为所在项目ID。
项目ID获取方式请参见获取项目ID。
Deployment
无状态工作负载,容器应用的一种。
创建后可以在控制台“边缘应用 > 容器应用”中查看。
Job
任务,容器应用的一种。
创建后可以在控制台“边缘应用 > 容器应用”中查看。
Configmap
配置项。
创建后可以在控制台“边缘应用 > 应用配置 > 配置项”中查看。
Secret
密钥。
创建后可以在控制台“边缘应用 > 应用配置 > 密钥”中查看。
Cronjob
定时任务。
Cronjob不支持在控制台显示。
Pod
容器组。
Pod不支持在控制台显示。
Daemonset
守护进程。
不支持在控制台显示。
Service
服务。
Service与原生Kubernetes用法不完全兼容,服务类型只支持ClusterIP类型,服务端口必须进行命名,而且名称只允许是{protocol}-{suffix}这种格式,其中{protocol}可以是tcp、http等,IEF根据在端口上定义的协议来提供对应的路由能力。例如“name:http-0”和“name:tcp-0”是合法的端口名,“name:http2forecast”是非法的端口名。
其他定义字段具体情况请参见创建服务。
模板示例
如下是一个部署nginx应用的模板,将文件打包成“.tgz”格式就可以上传到我的模板,然后就可以在IEF控制台部署。
nginx/ templates/ nginx-deployment.yaml nginx-service.yaml nginx-configmap.yaml values.yaml Chart.yaml
各文件的具体内容如下所示。
- Chart.yaml
name: nginx # 名称要与压缩包名称保持统一 version: 1.0 # 版本号要与压缩包版本号保持统一 deprecated: true sources: - https://github.com/kubernetes/contrib/tree/master/ingress/controllers/nginx description: Chart for nginx nginx 1.0
- values.yaml
nginx: replicaCount: 1 image: repository: swr.cn-south-1.myhuaweicloud.com/group/nginx tag: "latest" pullPolicy: IfNotPresent service: type: ClusterIP targetPort: 30009 monitoring: false resources: limits: cpu: 0.5 memory: 0.5Gi requests: cpu: 0.05 memory: 0.05Gi configmap: proxy_connect_timeout: "30" proxy_read_timeout: "600" proxy_send_imeout: "600" hsts_include_subdomains: "false" body_size: "64m" server_name_hash_bucket_size: "256" enable_vts_status: "false"
- templates/nginx-deployment.yaml
apiVersion: extensions/v1beta1 kind: Deployment metadata: namespace: e78acc02d9d141eda5ca8e88fa35f6f8 name: {{ template "nginx.fullname" . }} labels: kubernetes.io/role: edge chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" spec: replicas: {{ .Values.nginx.replicaCount }} selector: matchLabels: app: {{ template "nginx.fullname" . }} version: v1 template: metadata: labels: version: v1 app: {{ template "nginx.fullname" . }} spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: edgecloud.huawei.com/node_id # key值必须为edgecloud.huawei.com/node_id operator: In values: - {node_id} # 此处取值为边缘节点ID containers: - name: {{ .Chart.Name }} image: "{{ .Values.nginx.image.repository }}:{{ .Values.nginx.image.tag }}" imagePullPolicy: {{ .Values.nginx.image.pullPolicy }} ports: - containerPort: 80 hostPort: 8080 protocol: TCP resources: {{ toYaml .Values.nginx.resources | indent 10 }} imagePullSecrets: - name: default-secret
- templates/nginx-service.yaml
apiVersion: v1 kind: Service metadata: name: {{ template "nginx.fullname" . }} labels: chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" spec: type: {{ .Values.nginx.service.type | quote }} ports: - port: 80 name: http-nginx targetPort: {{ .Values.nginx.service.targetPort }} protocol: TCP selector: app: {{ template "nginx.fullname" . }}
- templates/nginx-configmap.yaml
apiVersion: v1 data: proxy-connect-timeout: {{ .Values.nginx.configmap.proxy_connect_timeout | quote }} proxy-read-timeout: {{ .Values.nginx.configmap.proxy_read_timeout | quote }} proxy-send-imeout: {{ .Values.nginx.configmap.proxy_send_imeout | quote }} hsts-include-subdomains: {{ .Values.nginx.configmap.hsts_include_subdomains | quote }} body-size: {{ .Values.nginx.configmap.body_size | quote }} server-name-hash-bucket-size: {{ .Values.nginx.configmap.server_name_hash_bucket_size | quote }} enable-vts-status: {{ .Values.nginx.configmap.enable_vts_status | quote }} kind: ConfigMap metadata: name: {{ template "nginx.fullname" . }}
