应用导入导出
开发模板和部署模板的区别
开发模板
- 源码包上传模板市场或开发应用在 IDE 里上传到模板市场形成
- 仅包含源码,可在我的开发下新建应用时选择
- 开发模板支持通过模板市场导出,导出的是应用源码包,导出的源码包可用于应用 IDE 直接通过本地导入
部署模板(应用模板)
- 应用发布到市场或从其他环境直接导入后形成的
- 应用模板包含应用部署包,可通过应用服务管理直接添加到租户访问运行
- 应用模板默认包含应用自身源码包,租户添加后可根据需要进行定制发布
- 应用模板发布时可勾选不包含源码,不包含源码的应用模板仅可运行,不支持定制
- 应用模板发布新版本,租户应用(未定制)可通用重启进行版本自动升级
- 应用模板发布新版本,租户应用(已定制)可通用租户管理员打开 IDE,高级/立即升级后发布更新
- 定制及升级原理
- 定制应用本身资源会记录引用模板
- 定制修改内容放到定制包中
- 定制应用资源加载先加载引用模板资源,再用定制包内容覆盖
- 所以定制内容优先级高,升级不会被清理(注意升级前定制内容需要提交 git)
- 定制及升级原理
- 应用模板支持通过应用市场导出
- 导出应用模板,迁移到其他环境,租户添加运行
- 导出应用安装包,在 runtime 环境安装运行
- 发布到应用仓库及远程 K8S
基于源码的导入导出
通过 IDE 导出
导出的是自身当前应用的源码,可以携带开发环境数据,导出的数据存储在 service/main/init 目录下
通过 IDE 导入
可选择模板市场的模板导入,也可以使用本机源码包导入
导入处理规则
- 覆盖模式导入:默认导入模式,会清空现有文件,再导入文件
- 追加模式导入:添加 model/.appendMode 文件,表示以追加的方式导入代码,不清空现有文件,直接导入文件
- 将导入源码包中同名文件进行覆盖替换
- 不会进行原有文件的清理
- 即导入源码和本身源码进行合并,同名替换
- zip 文件中的目录必须从 UI2、service 开始
通过模板市场导出
导出的是当前模板的源码包
通过模板市场导入
使用本地源码包上传到模板市场
基于发布后的导入导出
- 发布应用导入导出需要通过应用市场作为中转
- 租户自身发布的运行应用不能直接导出
通过应用市场导出
导出应用模板包
导出的是当前应用模板最新版本的,这个用来导入到其他环境应用市场的(本身应用模板已存在自身环境)
导出应用安装包
- 导出的是用于 runtime 安装的 helm 安装包
- 可选择版本导出
- 可设定是否精简版
- 精简版: 仅包含应用本身镜像
- 非精简版: 包含应用依赖镜像
导出后安装具体参照 runtime 环境安装手册
注:精简版只保留用户自身资源镜像 app-deploy ,其他系统调度、运行的镜像都不包含。当平台发生基础版本变动时,才需要全额导出系统镜像,系统镜像常规包含有 app-init、gateway、tomcat、java-runtime ...
发布到应用仓库
- docker 仓库 helm 仓库在统一通用配置菜单下的控制台 UI 上进行配置。
字段 | 字段说明 | 是否必填/类型 | 备注 |
---|---|---|---|
dockerImagePrefix | docker镜像前缀 | 否、String | 头字符和尾字符都不能有 / 例如:hello1/world |
registryUser | docker仓库用户名 | 是、String | |
registryPasswd | docker仓库密码 | 是、String | |
registryHost | docker仓库主机地址 | 是、String | host地址,例: hub.newdao.local或 hub.newdao.local:8082 |
registryIsHttp | docker仓库地址是否是http | 是、Boolean | |
helmmuseumUrl | helm仓库URL | 是、String | 尾不能加 / 例:http://192.168.0.114:8083 带用户名密码 -u admin:admin http://192.168.0.114:8083 |
- helm 仓库安装教程参考
# 以docker方式安装
docker run -d -it \
-p 8083:8080 \
-e DEBUG=1 \
-e STORAGE=local \
-e STORAGE_LOCAL_ROOTDIR=/charts \
-v $(pwd)/charts:/charts \
--name my-chartmuseum \
ghcr.io/helm/char
# 进入容器对 charts/ 目录给超级权限
chmod -R 777 charts/
- 以 helm 仓库为基础安装一个应用
# 添加helm仓库
helm repo add my_chartmuseum http://192.168.0.114:8083
helm repo list
# 安装导入helm仓库的entry应用
helm install entry my_chartmuseum/entry-system --version 1.1.8 --set persistentVolumeClaim=hello-world-pvc -n newdao-tenant-test
# 列出所有安装的helm应用
helm list
# 卸载已安装的helm应用
helm uninstall entry -n newdao-tenant-test
部署到运程 k8s
- docker 仓库、运程 k8s 在统一通用配置菜单下的控制台 UI 上进行配置。
字段 | 字段说明 | 是否必填/类型 | 备注 |
---|---|---|---|
dockerImagePrefix | docker镜像前嘴 | 否、String | 头字符和尾字符都不能有 / 例如:hello1/world |
registryUser | docker仓库用户名 | 是、String | |
registryPasswd | docker仓库密码 | 是、String | |
registryHost | docker仓库主机地址 | 是、String | 单纯的host地址,例: hub.newdao.local或 hub.newdao.local:8082 |
registryIsHttp | docker仓库地址是否是http | 是、Boolean | |
k8sNamespace | k8s的命名空间 | 是、String | |
k8sPvc | k8s中要指定的pvc | 否、String | 如果pvc为空,那storage-nas-volume会 适配emptyDir挂载 |
kubeApiserver | k8s apiService的地址 | 是、String | 如 https://apiserver.cluster.local:6443 |
kubeCa | k8s apiService的证书 | 是、String | 在master节点的 /etc/kubernetes/pki/apiserver.crt 文件中 |
kubeToken | serviceAccount里面的token | 是、String | 具有相应权限的serviceAccount的token值, serviceAccount创建示例如下方 |
valuesYaml | values.yaml | 否、String | 该优先级是最低 |
kubeToken 制作过程
1.创建 serviceAccount
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: devops-helm
namespace: apps
labels:
app: devops-helm
secrets:
- name: devops-helm-token
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: devops-helm
namespace: apps
labels:
app: devops-helm
subjects:
- kind: ServiceAccount
name: devops-helm
namespace: apps
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: devops-helm
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: devops-helm
namespace: apps
labels:
app: devops-helm
rules:
- verbs:
- get
- list
- watch
- create
- update
- delete
apiGroups:
- ''
- core
- apps
- batch
- extensions
resources:
- namespaces
- pods
- deployments
- configmaps
- secrets
- jobs
- services
- replicasets
- statefulsets
- cronjobs
- daemonsets
---
apiVersion: v1
kind: Secret
metadata:
name: devops-helm-token
namespace: apps
labels:
app: devops-helm
annotations:
kubernetes.io/service-account.name: devops-helm
type: kubernetes.io/service-account-token
2.找到对应的 serviceAccount 并拷贝出相应的 kubeToken
通过应用市场导入
仅用于从其他环境导出的应用模板包进行导入