教程
定制文件制作
制作镜像
把自己的应用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编码,否则会出现中文乱码。
附录
-
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
-
占位符列表
在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