更新时间:2022-05-16 GMT+08:00
分享

模板包说明

您可以通过如下两种方法准备模板包:

自定义模板包

  1. 根据需求自定义设置模板包内容。

    制作模板包的方法,请参见https://helm.sh/docs/chart_template_guide/getting_started/

  2. 按照模板包规范的要求设置模板包目录结构和命名模板包。

使用Kubernetes官方模板包

  1. 访问https://github.com/helm/charts,获取需要的社区模板包。
  2. 登录Linux机器。
  3. 上传1中获取到的模板包。
  4. 执行如下命令,压缩模板包。

    • Linux机器没有安装Helm客户端,则执行如下命令。

      tar pzcf {name}-{version}.tgz {name}/

      其中,

      {name}替换为实际的模板包名。

      {version}实际的模板包版本号。

      {name}和{version}必须与模板包中Chart.yaml中所写的name和version相同。

    • 若Linux机器已安装Helm客户端,则执行如下命令。

      helm package {name}/

      其中,将{name}替换为实际的模板包名。

  5. 按照模板包规范的要求设置模板包目录结构和命名模板包。

模板包规范

以下以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" . }}
分享:

    相关文档

    相关产品

close