教程

定制文件制作

制作镜像

把自己的应用Docker容器化,推荐使用Dockerfile的形式把自己的应用制作成Docker镜像,具体的镜像制作方式方法可以参考Docker官网的文档

编写YAML文件

您可以通过编写YAML文件创建应用,iManager支持创建的实例类型包括Service, Deployment, Statefulset, Job, PersistentVolumeClaim, ServiceAccount, ConfigMap。

YAML编写规则可参考: https://kubernetes.io/docs/concepts/

此外,您可通过配置Service、Deployment和StatefulSet的labels和annotation属性来控制应用的界面展示。支持配置的参数参见本页附录

提示:
编写YAML文件时使用utf-8编码,否则会出现中文乱码。

附录

  1. YAML中的属性配置。

    Service支持的annotation属性:

    名称 描述
    addressReg 服务地址格式,默认展示为http://${SERVICE_IP}:${NODE_PORT}格式
    showPorts 服务暴露多个端口时,服务地址对应的targetPort

    Service支持的labels属性:

    名称 描述
    entrance 服务地址是否作为访问入口,默认为false,配置为true时该服务地址作为应用访问入口
    entrance-port 服务暴露多个端口时,访问入口地址对应targetPort,仅在entrance为true时生效

    示例:

    apiVersion: v1
    kind: Service
    metadata:
     name: mysql
     labels:
       entrance: "true"
       entrance-port: "3306"
     annotations:
       addressReg: "jdbc:mysql://mysql:3306"
       showPorts: "[3306]"
    spec:
     ports:
     - port: 3306
     selector:
       app: mysql
     type: NodePort

    Deployment和StatefulSet支持的annotation属性:

    名称 描述
    scale 是否支持伸缩,默认为支持,配置为unscalable时不展示伸缩按钮
    console 是否支持命令行,默认为支持,配置为noconsole时不展示命令行按钮
    description 服务列表中的描述信息
    accountInfo 账户信息,支持html格式
    topoProperty 拓扑图信息,json格式的字符串

    {
      name: 该服务Deployment/StatefulSet名称
      isPivot: 是否作为中心点
      index: 排序编号,“1”为正北方向,按顺时针递增(不填时默认名称的字典序顺时针排列)
      parents: [{
        name: 该服务箭头所指服务的Deployment/StatefulSet名称
         description: 两服务的关系描述
        }]
    }

    示例:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
     labels:
      app: mysql
     name: mysql
     annotations:
      scale: unscalable
      console: noconsole
      description: MySQL数据库
      accountInfo: "<p>用户/密码:</p><p> root/supermap</p>"
      topoProperty: "{'name':'mysql','isPivot':'false','index':1,'parents':[{'name':'phpmyadmin','description':'数据库管理UI'}]}"
    spec:
     selector:
      matchLabels:
          app: mysql
     template:
      metadata:
          labels:
            app: mysql
      spec:
          containers:
          - env:
            - name: MYSQL_ROOT_PASSWORD
              value: supermap
            image: registry.ispeco.com/supermap/mysql:5.7.12
            name: mysql
            imagePullPolicy: Always
          restartPolicy: Always

    PersistentVolumeClaim中的属性:

    名称 描述
    storageClassName storageClass名称,固定为appset-storage-class-${GROUP_TYPE}。

    示例:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    labels:
       type: mysql
    name: pvc-nfs-mysql-data-${appsetId}
    spec:
    storageClassName: appset-storage-class-${GROUP_TYPE}
    accessModes:
      - ReadWriteMany
    resources:
      requests:
         storage: 1Gi
  2. 占位符列表

    在YAML文件中使用以下占位符,在应用创建过程中会被真实值替换:

    名称 描述
    ${appsetId}

    应用的id

    示例:PersistentVolumeClaim名称

    name: pvc-nfs-mysql-data-${appsetId}

    ${SERVICE_IP}

    服务地址ip

    示例:为Service添加annotation:

    addressReg: “jdbc:mysql://${SERVICE_IP}:8080”

    ${SERVICE_NAME}

    服务名称

    示例:为Service添加annotation:

    addressReg: “jdbc:mysql://${SERVICE_NAME}:8080”

    ${NODE_PORT}

    服务的nodePort

    示例:为Service添加annotation:

    addressReg: “jdbc:mysql://127.0.0.1:${NODE_PORT}”

    ${TARGET_PORT}

    服务的targetPort

    示例:为Service添加annotation:

    addressReg: “jdbc:mysql://127.0.0.1:${TARGET_PORT}”

    ${IMAGE_PULL_POLICY}

    镜像拉取策略

    示例:imagePullPolicy: ${IMAGE_PULL_POLICY}

    ${IMAGE_PULL_SECRET}

    镜像拉取Secret

    示例:imagePullSecrets:
               - name: ”${IMAGE_PULL_SECRET}”

    ${REGISTRY_URL}

    镜像仓库地址

    示例:image: ${REGISTRY_URL}supermap/mysql:5.7.12

    ${GIS_APP_LIMIT_CPU}

    CPU限制

    示例:cpu: ${GIS_APP_LIMIT_CPU}

    ${GROUP_TYPE}

    应用所属分组类型

    示例:storageClassName: appset-storage-class-${GROUP_TYPE}

    ${NAMESPACE}

    应用所属命名空间

    示例:namespace: ${NAMESPACE}

    ${custom_node_port_*}

    用户自定义的外部端口,配在Service的nodePort参数中,在创建该站点时,可在界面上自定义该外部端口。占位符中的*号根据端口不同需替换成不同的名称。

    示例:nodePort: ${custom_node_port_mysql}

注意:
在YAML文件中配置命名空间时,勿写入固定值,请使用上表中的占位符。

以下用MySQL服务作为一个完整示例:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
    labels:
       type: mysql
    #pvc名称,${appsetId}在创建过程中会被替换
    name: pvc-nfs-mysql-data-${appsetId}
spec:
   #storageClass名称,固定为appset-storage-class-${GROUP_TYPE}。${GROUP_TYPE}在创建过程中会被替换。
   storageClassName: appset-storage-class-${GROUP_TYPE}
   accessModes:
      - ReadWriteMany
   resources:
      requests:
         storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:
    labels:
       type: mysql
    name: mysql-server
    annotations:
       #服务地址,${SERVICE_IP}和${NODE_PORT}在创建过程中会被替换
       addressReg: "jdbc:mysql://${SERVICE_IP}:${NODE_PORT}"
       #服务地址对应的targetPort为3306
       showPorts: "[3306]"
spec:
   ports:
   - port: 3307
     targetPort: 3306
     nodePort: ${custom_node_port_mysql}
   selector:
      app: mysql-server
   type: NodePort
---
apiVersion: v1
kind: Service
metadata:
    labels:
      type: mysql
      #将phpMyAdmin服务地址作为访问入口
      entrance: "true"
      #访问入口地址对应的targetPort为80
      entrance-port: "80"
    name: phpmyadmin
spec:
   ports:
   - port: 89
     targetPort: 80
   selector:
      app: phpmyadmin
   type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
   labels:
      app: mysql-server
   name: mysql-server
   annotations:
      #不支持伸缩
      scale: unscalable
      #MySQL描述信息
      description: MySQL数据库
      #MySQL账户信息
      accountInfo: "<p>用户/密码:</p><p> supermap/supermap</p><p> root/supermap</p>"
      #拓扑图信息
      topoProperty: "{'name':'mysql-server','isPivot':'false','index':1,'parents':[{'name':'phpmyadmin','description':'数据库管理UI'}]}"
spec:
   replicas: 1
   selector:
      matchLabels:
          app: mysql-server
   template:
      metadata:
          labels:
            app: mysql-server
      spec:
         #镜像拉取Secret,${IMAGE_PULL_SECRET}在创建过程中会被替换
         imagePullSecrets:
          - name: "${IMAGE_PULL_SECRET}"
         containers:
          - env:
            - name: MYSQL_DATABASE
              value: supermap
            - name: MYSQL_PASSWORD
              value: supermap
            - name: MYSQL_ROOT_PASSWORD
              value: supermap
            - name: MYSQL_USER
              value: supermap
            #${REGISTRY_URL}在创建过程中会被替换
            image: ${REGISTRY_URL}supermap/mysql:5.7.12
            name: mysql-server
            #镜像拉取策略,${IMAGE_PULL_POLICY}在创建过程中会被替换
            imagePullPolicy: ${IMAGE_PULL_POLICY}
            #cpu资源限制,${GIS_APP_LIMIT_CPU}在创建过程中会被替换
            resources:
                limits:
                   cpu: ${GIS_APP_LIMIT_CPU}
                requests:
                   cpu: 300m
            volumeMounts:
              - mountPath: /var/lib/mysql
                name: mysql-volume
         restartPolicy: Always
         volumes:
            - name: mysql-volume
              persistentVolumeClaim:
                 claimName: pvc-nfs-mysql-data-${appsetId}
---
apiVersion: apps/v1
kind: Deployment
metadata:
    labels:
      app: phpmyadmin
    name: phpmyadmin
    annotations:
       #不支持伸缩
       scale: unscalable
       #不显示命令行
       console: noconsole
       #phpMyAdmin描述信息
       description: MySQL的WEB客户端
       #拓扑图信息
       topoProperty: "{'name':'phpmyadmin','isPivot':'false','index':2,'parents':[]}"
       #初始账户信息
       accountInfo: "<p>用户/密码:</p><p> supermap/supermap</p><p> root/supermap</p>"
spec:
   replicas: 1
   selector:
      matchLabels:
          app: phpmyadmin
   template:
      metadata:
          labels:
            app: phpmyadmin
      spec:
         containers:
         - env:
           - name: PMA_HOST
             value: mysql-server
           - name: PMA_PORT
             value: "3307"
           image: ${REGISTRY_URL}supermap/phpmyadmin:4.6
           name: phpmyadmin
           imagePullPolicy: ${IMAGE_PULL_POLICY}
           ports:
             - containerPort: 80
         restartPolicy: Always

diyservicelist

diymysql

diytopo