diff --git a/.vuepress/config-sidebar.js b/.vuepress/config-sidebar.js index cc89284..2c210d2 100644 --- a/.vuepress/config-sidebar.js +++ b/.vuepress/config-sidebar.js @@ -521,6 +521,76 @@ let sidebar = { // 'spring-cloud/cloud-eureka' ] }, + { + title: 'Spring Blade', + collapsable: true, + children: [ + ['k8s-practice/spring-blade/', '介绍'], + { + title: '准备', + collapsable: true, + path: '/learning/k8s-practice/spring-blade/prepare/prepare', + children: [ + 'k8s-practice/spring-blade/prepare/prepare', + 'k8s-practice/spring-blade/prepare/build' + ] + }, + { + title: '部署', + collapsable: true, + path: '/learning/k8s-practice/spring-blade/deploy/', + children: [ + 'k8s-practice/spring-blade/deploy/', + { + title: '部署 Nacos', + collapsable: true, + path: '/learning/k8s-practice/spring-blade/deploy/nacos', + children: [ + 'k8s-practice/spring-blade/deploy/nacos', + 'k8s-practice/spring-blade/deploy/nacos-mysql', + 'k8s-practice/spring-blade/deploy/nacos-install', + 'k8s-practice/spring-blade/deploy/nacos-config', + ] + }, + { + title: '部署其他基础软件', + collapsable: true, + path: '/learning/k8s-practice/spring-blade/deploy/m', + children: [ + 'k8s-practice/spring-blade/deploy/m', + 'k8s-practice/spring-blade/deploy/m-redis', + 'k8s-practice/spring-blade/deploy/m-sentinel', + 'k8s-practice/spring-blade/deploy/m-saber-db', + 'k8s-practice/spring-blade/deploy/m-gateway', + 'k8s-practice/spring-blade/deploy/m-swagger', + ] + }, + { + title: '部署微服务层', + collapsable: true, + path: '/learning/k8s-practice/spring-blade/deploy/blade-svc', + children: [ + 'k8s-practice/spring-blade/deploy/blade-svc', + 'k8s-practice/spring-blade/deploy/blade-admin', + 'k8s-practice/spring-blade/deploy/blade-others', + ] + }, + 'k8s-practice/spring-blade/deploy/saber-web', + 'k8s-practice/spring-blade/deploy/validate', + ], + }, + { + title: '导入导出', + collapsable: true, + path: '/learning/k8s-practice/spring-blade/import/index', + children: [ + 'k8s-practice/spring-blade/import/', + 'k8s-practice/spring-blade/import/export', + 'k8s-practice/spring-blade/import/import', + ] + }, + ] + }, { title: 'Open Capacity Platform', collapsable: true, @@ -530,7 +600,7 @@ let sidebar = { collapsable: false, path: '/learning/k8s-practice/ocp/', children: [ - ['k8s-practice/ocp/', 'OCP介绍'], + ['k8s-practice/ocp/', 'OCP 介绍'], 'k8s-practice/ocp/prepare', 'k8s-practice/ocp/build', ] diff --git a/.vuepress/config.js b/.vuepress/config.js index 33c2507..31c8686 100644 --- a/.vuepress/config.js +++ b/.vuepress/config.js @@ -127,7 +127,7 @@ module.exports = { // { text: 'DevOps', link: '/devops/' } ], displayAllHeaders: false, - sidebarDepth: 2, + sidebarDepth: 5, serviceWorker: { updatePopup: true }, diff --git a/learning/k8s-practice/spring-blade/deploy/blade-admin.assets/image-20210504130036681.png b/learning/k8s-practice/spring-blade/deploy/blade-admin.assets/image-20210504130036681.png new file mode 100644 index 0000000..e17f470 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/blade-admin.assets/image-20210504130036681.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/blade-admin.assets/image-20210504130950532.png b/learning/k8s-practice/spring-blade/deploy/blade-admin.assets/image-20210504130950532.png new file mode 100644 index 0000000..e0116a3 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/blade-admin.assets/image-20210504130950532.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/blade-admin.assets/image-20210504131902305.png b/learning/k8s-practice/spring-blade/deploy/blade-admin.assets/image-20210504131902305.png new file mode 100644 index 0000000..06bab62 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/blade-admin.assets/image-20210504131902305.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/blade-admin.assets/image-20210504131945818.png b/learning/k8s-practice/spring-blade/deploy/blade-admin.assets/image-20210504131945818.png new file mode 100644 index 0000000..f1acf61 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/blade-admin.assets/image-20210504131945818.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/blade-admin.assets/image-20210504132242261.png b/learning/k8s-practice/spring-blade/deploy/blade-admin.assets/image-20210504132242261.png new file mode 100644 index 0000000..94b13f1 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/blade-admin.assets/image-20210504132242261.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/blade-admin.md b/learning/k8s-practice/spring-blade/deploy/blade-admin.md new file mode 100644 index 0000000..0b0c2a0 --- /dev/null +++ b/learning/k8s-practice/spring-blade/deploy/blade-admin.md @@ -0,0 +1,138 @@ +--- +layout: LearningLayout +description: Kubernetes教程_使用Kuboard在Kubernetes上部署Spring_Cloud微服务平台SpringBlade +meta: + - name: keywords + content: Kubernetes教程,K8S教程,Kubernetes微服务,Kubernetes Spring Cloud +--- + +# 部署 blade-admin + + + +::: tip 前提条件 + +部署 ***blade-admin*** 之前,请确保: +* 您的环境已经满足 [环境准备](../prepare/prepare.html) 中的要求 +* 您已经完成了: + * [部署 nacos-mysql](./nacos-mysql.html) + * [部署 nacos](./nacos.html) + * [导入配置到 nacos](./nacos-config.html) + * [部署 redis](./m-redis.html) + * [部署 sentinel](./m-sentinel.html) + * [部署 saber-db](./m-saber-db.html) + * [部署接口网关](./m-gateway.html) + ::: + + + +本文将按照如下步骤完成 `blade-admin` 的创建: + +* 创建 Deployment +* 验证部署结果 +* 验证 blade-admin 已成功注册到 nacos + + + + +## 创建 Deployment + +按照如下步骤创建 `blade-admin` Deployment: + +* 在 Kuboard 界面进入名称空间 `spring-blade` 之后,点击菜单 ***名称空间*** -> ***spring-blade*** -> ***常用操作*** -> ***创建工作负载*** ,如下图所示: + + 并填写表单: + + | 字段名称 | 字段值 | 备注 | + | ------------ | ------------- | -------------------------------------------- | + | 工作负载类型 | `Deployment` | | + | 工作负载分层 | `中间件` | 填写后将自动添加 `k8s.kuboard.cn/layer` 标签 | + | 工作负载名称 | `blade-admin` | 填写后将自动添加 `k8s.kuboard.cn/name` 标签 | + | 副本数 | `1` | | + + ![image-20210504130036681](./blade-admin.assets/image-20210504130036681.png) + + + +* 切换到 ***容器信息*** 标签,如下图所示: + + 点击左侧的 ***添加工作容器*** 按钮,添加一个工作容器,并填写表单: + + | 字段名称 | 字段值 | 备注 | + | ----------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | + | 名称 | `blade-admin` | | + | 容器镜像 | `从其他镜像仓库加载镜像(不使用用户名密码)` | | + | 容器镜像-->镜像仓库 | `swr.cn-east-2.myhuaweicloud.com` | | + | 容器镜像-->镜像路径 | `blade/blade-admin` | | + | 容器镜像-->镜像标签 | `3.0.3` | | + | 镜像拉取策略 | `始终拉取新镜像(Always)` | | + | 命令参数
| 参数
`--spring.profiles.active=${PROFILE} --spring.cloud.nacos.config.server-addr=${NACOS_SERVER_ADDR} --spring.cloud.nacos.discovery.server-addr=${NACOS_SERVER_ADDR} --spring.cloud.sentinel.transport.dashboard=${SENTINEL_DASHBOARD_ADDR} --server.port=80`
| 通过启动参数指定:
  • spring的 profile
  • Nacos配置中心地址
  • Nacos服务发现地址
  • Sentinel地址
  • 服务端口
  • | + | 环境变量 | `配置字典引用` `blade-config` | 点击 ***+ 配置*** 按钮,可以添加一个配置字典的条目;此配置将 `blade-config` 配置字典中的每一个条目都映射成容器中的一个变量及变量值 | + | 资源请求/限制 | 内存资源请求:`200Mi`
    内存资源限制:`2048Mi` | | + | 容器端口 | `server ` `80` | | + | 健康检查-->容器启动检查探针 | 探测方式: `HTTP请求`
    HTTP请求端口: `80`
    HTTP请求路径: `/actuator/health`
    不健康阈值: `20` | | + | 健康检查-->容器存活检查探针 | 探测方式: `HTTP请求`
    HTTP请求端口: `80`
    HTTP请求路径: `/actuator/health` | | + | 健康检查-->容器就绪检查探针 | 探测方式: `HTTP请求`
    HTTP请求端口: `80`
    HTTP请求路径: `/actuator/health` | | + + ![image-20210504130950532](./blade-admin.assets/image-20210504130950532.png) + + + +* 点击 ***保存*** 按钮,完成 `blade-admin` Deployment 的创建 + + + +## 验证部署结果 + +按照下面的步骤,可以验证 `blade-admin` 是否已经成功启动: + +* 在上面的步骤中,完成 Deployment 的保存以后,将会进入该 Deployment 的详情页面,如下图所示: + + ![image-20210504131902305](./blade-admin.assets/image-20210504131902305.png) + + + +* 点击上图中的 ***追踪日志*** 按钮,可以看到 blade-admin 的日志信息,如下图所示,日志将提示: + + ``` + ---[BLADE-ADMIN]---启动完成,当前使用的端口:[80],环境变量:[test]--- + ``` + + ![image-20210504131945818](./blade-admin.assets/image-20210504131945818.png) + + + +## 验证 blade-admin 已成功注册到 nacos + +按照下面的步骤,可以验证 `blade-admin` 是否已经成功注册到 nacos 服务注册中心: + +* 切换到 `nacos` StatefulSet 的详情页,如下图所示: + + ![image-20210502205924106](./nacos-install.assets/image-20210502205924106.png) + + +* 点击上图中,容器端口 `8848` 后面对应的绿色图标,如下图所示: + + 修改 ***访问路径*** 字段为 `/nacos`; + + ![image-20210502210356041](./nacos-install.assets/image-20210502210356041.png) + + + +* 在上图中修改 ***访问路径*** 字段后,点击 ***在浏览器窗口打开*** 按钮,将会打开一个新的窗口,如下图所示: + + 填写登录信息: + + 用户名:`nacos` + + 密码: `nacos` + + ![image-20210502210647992](./nacos-install.assets/image-20210502210647992.png) + +* 在上图中点击 ***提交*** 按钮,完成 nacos 登录,并切换到 ***服务管理*** --> ***服务列表*** 菜单项, 如下图所示: + + ![image-20210504132242261](./blade-admin.assets/image-20210504132242261.png) + +* 至此,我们可以认为 blade-admin 已经部署成功。 + + 下一步,请 [部署其他微服务](./blade-others.html) diff --git a/learning/k8s-practice/spring-blade/deploy/blade-others.assets/image-20210504151541106.png b/learning/k8s-practice/spring-blade/deploy/blade-others.assets/image-20210504151541106.png new file mode 100644 index 0000000..b9be072 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/blade-others.assets/image-20210504151541106.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/blade-others.assets/image-20210504152141789.png b/learning/k8s-practice/spring-blade/deploy/blade-others.assets/image-20210504152141789.png new file mode 100644 index 0000000..13ce6c1 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/blade-others.assets/image-20210504152141789.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/blade-others.assets/image-20210504152544113.png b/learning/k8s-practice/spring-blade/deploy/blade-others.assets/image-20210504152544113.png new file mode 100644 index 0000000..43ea2f7 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/blade-others.assets/image-20210504152544113.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/blade-others.assets/image-20210504153517902.png b/learning/k8s-practice/spring-blade/deploy/blade-others.assets/image-20210504153517902.png new file mode 100644 index 0000000..3eb5444 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/blade-others.assets/image-20210504153517902.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/blade-others.assets/image-20210504153651845.png b/learning/k8s-practice/spring-blade/deploy/blade-others.assets/image-20210504153651845.png new file mode 100644 index 0000000..85e80c2 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/blade-others.assets/image-20210504153651845.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/blade-others.assets/image-20210504154255962.png b/learning/k8s-practice/spring-blade/deploy/blade-others.assets/image-20210504154255962.png new file mode 100644 index 0000000..5b75530 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/blade-others.assets/image-20210504154255962.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/blade-others.assets/image-20210504161052418.png b/learning/k8s-practice/spring-blade/deploy/blade-others.assets/image-20210504161052418.png new file mode 100644 index 0000000..2d03a6d Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/blade-others.assets/image-20210504161052418.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/blade-others.md b/learning/k8s-practice/spring-blade/deploy/blade-others.md new file mode 100644 index 0000000..df9ad24 --- /dev/null +++ b/learning/k8s-practice/spring-blade/deploy/blade-others.md @@ -0,0 +1,130 @@ +--- +layout: LearningLayout +description: Kubernetes教程_使用Kuboard在Kubernetes上部署Spring_Cloud微服务平台SpringBlade +meta: + - name: keywords + content: Kubernetes教程,K8S教程,Kubernetes微服务,Kubernetes Spring Cloud +--- + +# 部署其他微服务 + + + +::: tip 前提条件 + +部署其他微服务之前,请确保您: +* 您的环境已经满足 [环境准备](../prepare/prepare.html) 中的要求 +* 您已经完成了: + * [部署 blade-admin](./blade-admin.html) + +::: + +除了已经完成部署的 `blade-admin`,还剩下 8个微服务尚未部署: + +`blade-auth`、`blade-desk`、`blade-develop`、`blade-log`、`blade-report`、`blade-resource`、`blade-system`、`blade-user` + +由于每一个微服务在 K8S 中的部署信息大同小异,本文将按照如下步骤完成其他 8 个微服务的部署: + +* 复制并部署 `blade-auth` +* 验证 `blade-auth` 的部署结果 +* 验证 `blade-auth` 已成功注册到 nacos +* 复制并部署其他 7 个微服务 + + + +## 复制并部署 blade-auth + +* 在 Kuboard 中导航到菜单 ***名称空间*** --> ***spring-blade*** --> ***工作负载***,如下图所示: + + ![image-20210504151541106](./blade-others.assets/image-20210504151541106.png) + +* 点击上图中 `blade-admin` 所对应的 ***复制*** 按钮,如下图所示: + + 填写表单: + + | 字段名 | 字段值 | 备注 | + | -------- | ------------ | ------------------------ | + | 名称空间 | spring-blade | 目标工作负载所在名称空间 | + | 名称 | blade-auth | 目标工作负载名称 | + + ![image-20210504152141789](./blade-others.assets/image-20210504152141789.png) + +* 点击上图中的 ***确定*** 按钮,将跳转到工作负载创建页面,然后,切换到 ***容器信息*** 标签页,如下图所示: + + 修改如下两个字段: + + | 字段名 | 字段值 | 备注 | + | ------------ | ------------------ | ---------------------- | + | 工作容器名称 | `blade-auth` | 原为 blade-admin | + | 镜像路径 | `blade/blade-auth` | 原为 blade/blade-admin | + + ![image-20210504152544113](./blade-others.assets/image-20210504152544113.png) + +* 点击 ***保存*** 按钮,创建 `blade-auth` Deployment + +## 验证 blade-auth 的部署结果 + +* 在完成 `blade-auth` Deployment 的保存以后,将跳转到 `blade-auth` 的工作负载详情页,如下图所示: + + ![image-20210504153517902](./blade-others.assets/image-20210504153517902.png) + +* 点击上图中的 ***追踪日志*** 按钮,可以看到 blade-auth 的日志信息,如下图所示,日志将提示: + + ``` + ---[BLADE-AUTH]---启动完成,当前使用的端口:[80],环境变量:[test]--- + ``` + + ![image-20210504153651845](./blade-others.assets/image-20210504153651845.png) + +## 验证 blade-auth 已成功注册到 nacos + +按照下面的步骤,可以验证 `blade-auth` 是否已经成功注册到 nacos 服务注册中心: + +* 切换到 `nacos` StatefulSet 的详情页,如下图所示: + + ![image-20210502205924106](./nacos-install.assets/image-20210502205924106.png) + + +* 点击上图中,容器端口 `8848` 后面对应的绿色图标,如下图所示: + + 修改 ***访问路径*** 字段为 `/nacos`; + + ![image-20210502210356041](./nacos-install.assets/image-20210502210356041.png) + + + +* 在上图中修改 ***访问路径*** 字段后,点击 ***在浏览器窗口打开*** 按钮,将会打开一个新的窗口,如下图所示: + + 填写登录信息: + + 用户名:`nacos` + + 密码: `nacos` + + ![image-20210502210647992](./nacos-install.assets/image-20210502210647992.png) + +* 在上图中点击 ***提交*** 按钮,完成 nacos 登录,并切换到 ***服务管理*** --> ***服务列表*** 菜单项, 如下图所示: + + ![image-20210504154255962](./blade-others.assets/image-20210504154255962.png) + +* 至此,我们可以认为 blade-auth 已经部署成功。 + + + +## 复制并部署其他 7 个微服务 + +重复前面的步骤: + +* 复制并部署 `blade-xxx` +* 验证 `blade-xxx` 的部署结果 +* 验证 `blade-xxx` 已成功注册到 nacos + +完成其余 7 个微服务的部署:`blade-desk`、`blade-develop`、`blade-log`、`blade-report`、`blade-resource`、`blade-system`、`blade-user` + +完成所有微服务的部署以后,nacos 的服务列表界面如下图所示: + +![image-20210504161052418](./blade-others.assets/image-20210504161052418.png) + +至此,我们完成了所有微服务的部署。 + +接下来,请 [部署 saber-web](./saber-web.html) \ No newline at end of file diff --git a/learning/k8s-practice/spring-blade/deploy/blade-svc.md b/learning/k8s-practice/spring-blade/deploy/blade-svc.md new file mode 100644 index 0000000..72d6f94 --- /dev/null +++ b/learning/k8s-practice/spring-blade/deploy/blade-svc.md @@ -0,0 +1,25 @@ +--- +layout: LearningLayout +description: Kubernetes教程_使用Kuboard在Kubernetes上部署Spring_Cloud微服务平台SpringBlade +meta: + - name: keywords + content: Kubernetes教程,K8S教程,Kubernetes微服务,Kubernetes Spring Cloud +--- + +# 部署所有的微服务 + + + +SpringBlade 所需要部署的微服务有 9 个之多,包括有: + +* blade-admin +* blade-auth +* blade-desk +* blade-develop +* blade-log +* blade-report +* blade-resource +* blade-system +* blade-user + +每一个微服务在 K8S 里的部署参数相差不大,鉴于这个特点,在部署微服务时,我们将先 [部署其中一个微服务 blade-admin](./blade-admin.html),然后再利用 Kuboard 中的 ***复制工作负载*** 的功能,从 `blade-admin` 复制以 [部署其余 8 个微服务工作负载](./blade-others.html)。 \ No newline at end of file diff --git a/learning/k8s-practice/spring-blade/deploy/index.md b/learning/k8s-practice/spring-blade/deploy/index.md new file mode 100644 index 0000000..640f198 --- /dev/null +++ b/learning/k8s-practice/spring-blade/deploy/index.md @@ -0,0 +1,46 @@ +--- +layout: LearningLayout +description: Kubernetes教程_使用Kuboard在Kubernetes上部署Spring_Cloud微服务平台SpringBlade +meta: + - name: keywords + content: Kubernetes教程,K8S教程,Kubernetes微服务,Kubernetes Spring Cloud +--- + +# 部署 SpringBlade + + + +本系列文档部署的 SpringBlade 为其开源版本 [SpringBlade v3.0.3](https://gitee.com/smallc/SpringBlade/tree/v3.0.2/),开始部署前,请确保您的环境已就绪,具体要求请参考 [环境准备](../prepare/prepare.html) + +本系列文档提供两种部署方式: + +## 逐步部署 + +逐步部署时,您可以按照文档的顺序一个一个地完成 SpringBlade 各组件的部署,这个过程中,您将熟悉如何使用 Kuboard 在 Kubernetes 上部署 Spring 微服务应用程序。 + +SpringBlade 的组件较多,根据其依赖关系,本系列文档按照如下顺序完成 SpringBlade 的部署: + +* 部署配置管理及微服务注册中心 Nacos + * [Nacos 介绍](./nacos.html) + * [部署 nacos-mysql](./nacos-mysql.html) + * [部署 nacos](./nacos-install.html) + * [导入配置到 nacos](./nacos-config.html) +* 部署其他的基础软件 + * [部署 redis](./m-redis.html) + * [部署 sentinel](./m-sentinel.html) + * [部署 saber-db](./m-saber-db.html) + * [部署 api-gateway](./m-gateway.html) + * [部署 swagger](./m-swagger.html) +* 部署微服务应用 + * [部署 blade-admin](./blade-admin.html) + * [部署其他微服务](./blade-others.html) +* [部署 saber-web](./saber-web.html) +* [验证 SpringBlade 部署结果](./validate.html) + + + +## 一键导入 + +一键导入时,您可以下载一个事先准备好的 yaml 文件,并通过 Kuboard 界面一次性导入 SpringBlade 的所有组件,快速完成 SpringBlade 应用的部署。熟悉这种部署方式,可以帮助您快速地在一个新的环境中部署好您的微服务应用程序。 + +具体操作请参考 [导入 yaml](../import/import.html) diff --git a/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503210239238.png b/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503210239238.png new file mode 100644 index 0000000..bf94c55 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503210239238.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503211458752.png b/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503211458752.png new file mode 100644 index 0000000..187180e Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503211458752.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503212043808.png b/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503212043808.png new file mode 100644 index 0000000..94a3e60 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503212043808.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503212224742.png b/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503212224742.png new file mode 100644 index 0000000..94a3e60 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503212224742.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503213137804.png b/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503213137804.png new file mode 100644 index 0000000..1f57691 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503213137804.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503214928838.png b/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503214928838.png new file mode 100644 index 0000000..c09a1f4 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503214928838.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503215150342.png b/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503215150342.png new file mode 100644 index 0000000..38caf7e Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503215150342.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503215741162.png b/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503215741162.png new file mode 100644 index 0000000..06652bd Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503215741162.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503220054714.png b/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503220054714.png new file mode 100644 index 0000000..99ac111 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503220054714.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503220711880.png b/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503220711880.png new file mode 100644 index 0000000..dc15ccf Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503220711880.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503220918194.png b/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503220918194.png new file mode 100644 index 0000000..3257f17 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210503220918194.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210504132838786.png b/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210504132838786.png new file mode 100644 index 0000000..622795d Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-gateway.assets/image-20210504132838786.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-gateway.md b/learning/k8s-practice/spring-blade/deploy/m-gateway.md new file mode 100644 index 0000000..882acaf --- /dev/null +++ b/learning/k8s-practice/spring-blade/deploy/m-gateway.md @@ -0,0 +1,164 @@ +--- +layout: LearningLayout +description: Kubernetes教程_使用Kuboard在Kubernetes上部署Spring_Cloud微服务平台SpringBlade +meta: + - name: keywords + content: Kubernetes教程,K8S教程,Kubernetes微服务,Kubernetes Spring Cloud +--- + +# 部署接口网关 + + + +::: tip 前提条件 + +部署接口网关之前,请确保: +* 您的环境已经满足 [环境准备](../prepare/prepare.html) 中的要求; +* 已经完成了 [nacos 的部署](./nacos.html); + +::: + + + +本文将按照如下步骤完成 `api-gateway` 的创建: + +* 创建配置字典 `blade-config` +* 创建 Deployment +* 验证部署结果 +* 验证 blade-gateway 已经成功注册到 nacos + + + +## 创建配置字典 blade-config + +* 导航到菜单项 ***名称空间*** --> ***spring-blade*** --> ***配置中心*** --> ***配置字典*** + + ![image-20210503211458752](./m-gateway.assets/image-20210503211458752.png) + +* 点击上图中的 ***创建 ConfigMap*** 按钮,结果如下图所示: + + 填写表单: + + | 字段名 | 字段值 | 备注 | + | ------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | + | 名称 | `blade-config` | | + | 数据
    | `PROFILE` = `test`
    `NACOS_SERVER_ADDR` = `nacos-0.nacos:8848`
    `SENTINEL_DASHBOARD_ADDR` = `sentinel-0.sentinel:8858`
    | 这些参数将作为环境变量注入到 `blade-gateway` 以及 `blade-admin` 等微服务组件中,作为应用启动参数的一部分 | + + ![image-20210504132838786](./m-gateway.assets/image-20210504132838786.png) + +* 点击 ***保存*** 按钮,完成配置字典 `blade-config` 的创建。 + + +## 创建 Deployment + +按照如下步骤创建 `blade-gateway` Deployment: + +* 在 Kuboard 界面进入名称空间 `spring-blade` 之后,点击菜单 ***名称空间*** -> ***spring-blade*** -> ***常用操作*** -> ***创建工作负载*** ,如下图所示: + + 并填写表单: + + | 字段名称 | 字段值 | 备注 | + | ------------ | --------------- | -------------------------------------------- | + | 工作负载类型 | `Deployment` | | + | 工作负载分层 | `API网关层` | 填写后将自动添加 `k8s.kuboard.cn/layer` 标签 | + | 工作负载名称 | `blade-gateway` | 填写后将自动添加 `k8s.kuboard.cn/name` 标签 | + | 副本数 | `1` | | + + ![image-20210503210239238](./m-gateway.assets/image-20210503210239238.png) + + + +* 切换到 ***容器信息*** 标签,如下图所示: + + 点击左侧的 ***添加工作容器*** 按钮,添加一个工作容器,并填写表单: + + | 字段名称 | 字段值 | 备注 | + | ----------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | + | 名称 | `blade-gateway` | | + | 容器镜像 | `从其他镜像仓库加载镜像(不使用用户名密码)` | | + | 容器镜像-->镜像仓库 | `swr.cn-east-2.myhuaweicloud.com` | | + | 容器镜像-->镜像路径 | `blade/blade-gateway` | | + | 容器镜像-->镜像标签 | `3.0.3` | | + | 镜像拉取策略 | `始终拉取新镜像(Always)` | | + | 命令参数
    | 参数
    `--spring.profiles.active=${PROFILE} --spring.cloud.nacos.config.server-addr=${NACOS_SERVER_ADDR} --spring.cloud.nacos.discovery.server-addr=${NACOS_SERVER_ADDR} --spring.cloud.sentinel.transport.dashboard=${SENTINEL_DASHBOARD_ADDR} --server.port=80`
    | 通过启动参数指定:
  • spring的 profile
  • Nacos配置中心地址
  • Nacos服务发现地址
  • Sentinel地址
  • 服务端口
  • | + | 环境变量 | `配置字典引用` `blade-config` | 点击 ***+ 配置*** 按钮,可以添加一个配置字典的条目;此配置将 `blade-config` 配置字典中的每一个条目都映射成容器中的一个变量及变量值 | + | 资源请求/限制 | 内存资源请求:`200Mi`
    内存资源限制:`2048Mi` | | + | 容器端口 | `server ` `80` | | + | 健康检查-->容器启动检查探针 | 探测方式: `HTTP请求`
    HTTP请求端口: `80`
    HTTP请求路径: `/actuator/health`
    初始延迟:`30`
    不健康阈值: `20` | | + | 健康检查-->容器存活检查探针 | 探测方式: `HTTP请求`
    HTTP请求端口: `80`
    HTTP请求路径: `/actuator/health` | | + | 健康检查-->容器就绪检查探针 | 探测方式: `HTTP请求`
    HTTP请求端口: `80`
    HTTP请求路径: `/actuator/health` | | + + ![image-20210503214928838](./m-gateway.assets/image-20210503214928838.png) + + + + +* 切换到 ***服务/应用路由*** 标签页,如下图所示: + + 并填写表单: + + | 字段名称 | 字段值 | 备注 | + | ------------------------------------ | ----------------------------------------------------------- | ------------------------------------------------------------ | + | 服务类型 | `ClusterIP` | ClusterIP,以便 `saber-web` 的 nginx 可以将 api 请求反向代理到 `http://blade-gateway:80` | + | 端口
    | `server` `TCP ` `80` `80`
    | 将容器的 `80` 端口映射到 Service 的 `80` 端口 | + + ![image-20210503220054714](./m-gateway.assets/image-20210503220054714.png) + + + +* 点击 ***保存*** 按钮,完成 `blade-gateway` Deployment 的创建 + + + +## 验证部署结果 + +按照下面的步骤,可以验证 `blade-gateway` 是否已经成功启动: + +* 在上面的步骤中,完成 Deployment 的保存以后,将会进入该 Deployment 的详情页面,如下图所示: + + ![image-20210503215741162](./m-gateway.assets/image-20210503215741162.png) + + + +* 点击上图中的 ***追踪日志*** 按钮,可以看到 blade-gateway 的日志信息,如下图所示,日志将提示: + + ``` + ---[BLADE-GATEWAY]---启动完成,当前使用的端口:[80],环境变量:[k8s]--- + ``` + + ![image-20210503220711880](./m-gateway.assets/image-20210503220711880.png) + +## 验证 blade-gateway 已经成功注册到 nacos + +按照下面的步骤,可以验证 `blade-gateway` 是否已经成功注册到 nacos 服务注册中心: + +* 切换到 `nacos` StatefulSet 的详情页,如下图所示: + + ![image-20210502205924106](./nacos-install.assets/image-20210502205924106.png) + + +* 点击上图中,容器端口 `8848` 后面对应的绿色图标,如下图所示: + + 修改 ***访问路径*** 字段为 `/nacos`; + + ![image-20210502210356041](./nacos-install.assets/image-20210502210356041.png) + + + +* 在上图中修改 ***访问路径*** 字段后,点击 ***在浏览器窗口打开*** 按钮,将会打开一个新的窗口,如下图所示: + + 填写登录信息: + + 用户名:`nacos` + + 密码: `nacos` + + ![image-20210502210647992](./nacos-install.assets/image-20210502210647992.png) + +* 在上图中点击 ***提交*** 按钮,完成 nacos 登录,并切换到 ***服务管理*** --> ***服务列表*** 菜单项, 如下图所示: + + ![image-20210503220918194](./m-gateway.assets/image-20210503220918194.png) + + 服务列表中出现 `blade-gateway`,则我们可以认为 blade-gateway 已经部署成功。 + + 下一步,请 [部署 swagger](./m-swagger.html) diff --git a/learning/k8s-practice/spring-blade/deploy/m-redis.assets/image-20210501192537254.png b/learning/k8s-practice/spring-blade/deploy/m-redis.assets/image-20210501192537254.png new file mode 100644 index 0000000..5126475 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-redis.assets/image-20210501192537254.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-redis.assets/image-20210503091044671.png b/learning/k8s-practice/spring-blade/deploy/m-redis.assets/image-20210503091044671.png new file mode 100644 index 0000000..b11da38 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-redis.assets/image-20210503091044671.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-redis.assets/image-20210503092613363.png b/learning/k8s-practice/spring-blade/deploy/m-redis.assets/image-20210503092613363.png new file mode 100644 index 0000000..57118e4 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-redis.assets/image-20210503092613363.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-redis.assets/image-20210503093400995.png b/learning/k8s-practice/spring-blade/deploy/m-redis.assets/image-20210503093400995.png new file mode 100644 index 0000000..0878510 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-redis.assets/image-20210503093400995.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-redis.assets/image-20210503093716733.png b/learning/k8s-practice/spring-blade/deploy/m-redis.assets/image-20210503093716733.png new file mode 100644 index 0000000..bc52290 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-redis.assets/image-20210503093716733.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-redis.assets/image-20210503094429786.png b/learning/k8s-practice/spring-blade/deploy/m-redis.assets/image-20210503094429786.png new file mode 100644 index 0000000..b64e5ec Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-redis.assets/image-20210503094429786.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-redis.assets/image-20210503094542907.png b/learning/k8s-practice/spring-blade/deploy/m-redis.assets/image-20210503094542907.png new file mode 100644 index 0000000..df76c5d Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-redis.assets/image-20210503094542907.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-redis.assets/image-20210503094931571.png b/learning/k8s-practice/spring-blade/deploy/m-redis.assets/image-20210503094931571.png new file mode 100644 index 0000000..8d33d33 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-redis.assets/image-20210503094931571.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-redis.md b/learning/k8s-practice/spring-blade/deploy/m-redis.md new file mode 100644 index 0000000..a443d11 --- /dev/null +++ b/learning/k8s-practice/spring-blade/deploy/m-redis.md @@ -0,0 +1,143 @@ +--- +layout: LearningLayout +description: Kubernetes教程_使用Kuboard在Kubernetes上部署Spring_Cloud微服务平台SpringBlade +meta: + - name: keywords + content: Kubernetes教程,K8S教程,Kubernetes微服务,Kubernetes Spring Cloud +--- + +# 部署 redis + + + +::: tip 前提条件 + +* 部署 `redis` 之前,请确保您的环境已经满足 [环境准备](../prepare/prepare.html) 中的要求; +* `redis` 的部署并不依赖于 `nacos`,您也可以先部署 `redis` 再部署 `nacos`。 + +::: + +## 创建 StatefulSet + +按照如下步骤创建 `redis` StatefulSet: + +* 在 Kuboard 界面进入名称空间 `spring-blade` 之后,点击菜单 ***名称空间*** -> ***spring-blade*** -> ***常用操作*** -> ***创建工作负载*** ,如下图所示: + + 并填写表单: + + | 字段名称 | 字段值 | 备注 | + | ------------ | ------------- | -------------------------------------------- | + | 工作负载类型 | `StatefulSet` | | + | 工作负载分层 | `持久层` | 填写后将自动添加 `k8s.kuboard.cn/layer` 标签 | + | 工作负载名称 | `redis` | 填写后将自动添加 `k8s.kuboard.cn/name` 标签 | + | 副本数 | `1` | | + + ![image-20210503091044671](./m-redis.assets/image-20210503091044671.png) + + + +* 切换到 ***容器信息*** 标签,如下图所示: + + 点击左侧的 ***添加工作容器*** 按钮,添加一个工作容器,并填写表单: + + | 字段名称 | 字段值 | 备注 | + | --------------------------- | ------------------------------------------------------------ | ---- | + | 名称 | `redis` | | + | 容器镜像 | `从其他镜像仓库加载镜像(不使用用户名密码)` | | + | 容器镜像-->镜像仓库 | `swr.cn-east-2.myhuaweicloud.com` | | + | 容器镜像-->镜像路径 | `blade/redis` | | + | 容器镜像-->镜像标签 | `5.0.2-alpine` | | + | 镜像拉取策略 | `始终拉取新镜像(Always)` | | + | 命令参数 | 命令 `redis-server --appendonly yes` | | + | 资源请求/限制 | 内存资源请求:`100Mi`
    内存资源限制:`1024Mi` | | + | 容器端口 | `TCP`
    `redis`
    `6379` | | + | 健康检查-->容器启动检查探针 | 探测方式: `TCP连接`
    TCP端口: `6379`
    不健康阈值:`20` | | + | 健康检查-->容器存活检查探针 | 探测方式: `TCP连接`
    TCP端口: `6379` | | + | 健康检查-->容器就绪检查探针 | 探测方式: `TCP连接`
    TCP端口: `6379` | | + + ![image-20210503092613363](./m-redis.assets/image-20210503092613363.png) + +* 切换到 ***存储挂载*** 标签页,并点击其中的 ***添加存储卷声明模板*** 按钮,如下图所示: + + 填写表单: + + | 字段名称 | 字段值 | 备注 | + | --------------------- | ------------------ | ------------------------------------------------------------ | + | 名称 | `data` | | + | 存储类 | `cephfs-raspberry` | * 下拉选择,根据您集群环境的不同,此参数的值可以
    不一样,但是对应的存储类必须为有效的存储类,并
    能够动态提供存储卷 | + | 分配模式 | `动态分配` | | + | 读写模式 | `可被多节点读写` | | + | 总量 | `2Gi` | | + | redis容器中的挂载类型 | `读写` | | + | redis容器中的挂载路径 | `/data` | | + + > * 要完成这一步骤,您必须有一个有效的存储类,关于存储类的介绍请参考 [StorageClass](/learning/k8s-intermediate/persistent/storage-class.html) + > * 如果您的集群中尚未配置存储类,请参考如下三种存储类配置中的任意一种: + > * [使用 CephFS 作为存储类](/learning/k8s-intermediate/persistent/ceph/k8s-config.html) + > * [使用 CephFS 作为存储类 - Rook](/learning/k8s-intermediate/persistent/ceph/rook-config.html) + > * [使用 NFS 作为存储类](/learning/k8s-intermediate/persistent/nfs.html) + + ![image-20210503093400995](./m-redis.assets/image-20210503093400995.png) + + + +* 切换到 ***高级设置*** 标签页,如下图所示: + + 并填写表单: + + | 字段名称 | 字段值 | 备注 | + | -------------- | --------------------------- | ------------------------------------------------------------ | + | 容器组管理策略 | `Parallel` | 不按容器组的序号顺序更新容器组。(此为测试环境,mysql 只部署
    一个副本,不考虑主从的情况,否则此参数不能选择 `Parallel`) | + | 历史版本数量 | `10` | | + | 更新策略 | `滚动更新(RollingUpdate)` | | + | 分割点 | `0` | 从序号为 `0` 的容器组开始更新 StatefulSet 中的所有容器组 | + + ![image-20210501192537254](./m-redis.assets/image-20210501192537254.png) + + + +* 切换到 ***服务/应用路由*** 标签页,如下图所示: + + 并填写表单: + + | 字段名称 | 字段值 | 备注 | + | -------- | ------------------------------------------ | ------------------------------------------------- | + | 服务类型 | `Headless` | 无头 Service,专用于 StatefulSet | + | 端口 | `redis`
    `TCP`
    `6379`
    `6379` | 将容器的 `6379` 端口映射到 Service 的 `6379` 端口 | + + ![image-20210503093716733](./m-redis.assets/image-20210503093716733.png) + + + +* 点击 ***保存*** 按钮,完成 `redis` StatefulSet 的创建 + + + +## 验证部署结果 + +* 在上面的步骤中,完成 StatefulSet 的保存以后,将会进入该 StatefulSet 的详情页面,如下图所示: + * 启动过程中,会看到一个 `FailedSchedule` 事件,是因为 StatefulSet ***存储卷声明模板*** 指定的 ***存储卷声明*** 尚未成功创建和绑定,只要对应的存储类是没有问题的,稍等片刻即可; + + ![image-20210503094542907](./m-redis.assets/image-20210503094542907.png) + + + +* 点击上图中的 ***追踪日志*** 按钮,可以看到 redis 的日志信息,如下图所示,日志将提示: + + ``` + Ready to accept connections + ``` + + ![image-20210503094429786](./m-redis.assets/image-20210503094429786.png) + +* 点击上图中的 ***sh*** 按钮,可以进入 redis 容器的命令行终端界面,如下图所示: + 执行命令: + ```sh + redis-cli + PING + ``` + ![image-20210503094931571](./m-redis.assets/image-20210503094931571.png) + + 如果打印出 `PONG`,我们可以认为 Redis 已经部署成功。 + + 下一步,请 [部署 sentinel](./m-sentinel.html) diff --git a/learning/k8s-practice/spring-blade/deploy/m-saber-db.assets/image-20210503194614214.png b/learning/k8s-practice/spring-blade/deploy/m-saber-db.assets/image-20210503194614214.png new file mode 100644 index 0000000..47e2296 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-saber-db.assets/image-20210503194614214.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-saber-db.assets/image-20210503200618642.png b/learning/k8s-practice/spring-blade/deploy/m-saber-db.assets/image-20210503200618642.png new file mode 100644 index 0000000..46cb3dc Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-saber-db.assets/image-20210503200618642.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-saber-db.assets/image-20210503200837429.png b/learning/k8s-practice/spring-blade/deploy/m-saber-db.assets/image-20210503200837429.png new file mode 100644 index 0000000..ead380f Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-saber-db.assets/image-20210503200837429.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-saber-db.assets/image-20210503202925230.png b/learning/k8s-practice/spring-blade/deploy/m-saber-db.assets/image-20210503202925230.png new file mode 100644 index 0000000..1e1e256 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-saber-db.assets/image-20210503202925230.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-saber-db.assets/image-20210503203333701.png b/learning/k8s-practice/spring-blade/deploy/m-saber-db.assets/image-20210503203333701.png new file mode 100644 index 0000000..c8d759a Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-saber-db.assets/image-20210503203333701.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-saber-db.assets/image-20210503203854913.png b/learning/k8s-practice/spring-blade/deploy/m-saber-db.assets/image-20210503203854913.png new file mode 100644 index 0000000..30785de Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-saber-db.assets/image-20210503203854913.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-saber-db.assets/image-20210503204714644.png b/learning/k8s-practice/spring-blade/deploy/m-saber-db.assets/image-20210503204714644.png new file mode 100644 index 0000000..0424601 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-saber-db.assets/image-20210503204714644.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-saber-db.md b/learning/k8s-practice/spring-blade/deploy/m-saber-db.md new file mode 100644 index 0000000..b4e1941 --- /dev/null +++ b/learning/k8s-practice/spring-blade/deploy/m-saber-db.md @@ -0,0 +1,139 @@ +--- +layout: LearningLayout +description: Kubernetes教程_使用Kuboard在Kubernetes上部署Spring_Cloud微服务平台SpringBlade +meta: + - name: keywords + content: Kubernetes教程,K8S教程,Kubernetes微服务,Kubernetes Spring Cloud +--- + +# 部署 saber-db + + + +::: tip 前提条件 + +* 部署 `saber-db` 之前,请确保您的环境已经满足 [环境准备](../prepare/prepare.html) 中的要求; +* `saber-db` 的部署并不依赖于 `nacos`、`redis`、`sentinel`,您也可以先部署 `saber-db` 再部署 `nacos`、`redis`、`sentinel`。 + +::: + +## 创建 StatefulSet + +按照如下步骤创建 `saber-db` StatefulSet: + +* 在 Kuboard 界面进入名称空间 `spring-blade` 之后,点击菜单 ***名称空间*** -> ***spring-blade*** -> ***常用操作*** -> ***创建工作负载*** ,如下图所示: + + 并填写表单: + + | 字段名称 | 字段值 | 备注 | + | ------------ | ------------- | -------------------------------------------- | + | 工作负载类型 | `StatefulSet` | | + | 工作负载分层 | `持久层` | 填写后将自动添加 `k8s.kuboard.cn/layer` 标签 | + | 工作负载名称 | `saber-db` | 填写后将自动添加 `k8s.kuboard.cn/name` 标签 | + | 副本数 | `1` | | + + ![image-20210503194614214](./m-saber-db.assets/image-20210503194614214.png) + + + +* 切换到 ***容器信息*** 标签,如下图所示: + + 点击左侧的 ***添加工作容器*** 按钮,添加一个工作容器,并填写表单: + + | 字段名称 | 字段值 | 备注 | + | --------------------------- | ------------------------------------------------------------ | --------------------------------------------- | + | 名称 | `saber-db` | | + | 容器镜像 | `从其他镜像仓库加载镜像(不使用用户名密码)` | | + | 容器镜像-->镜像仓库 | `swr.cn-east-2.myhuaweicloud.com` | | + | 容器镜像-->镜像路径 | `blade/saber-db` | | + | 容器镜像-->镜像标签 | `3.0.3` | | + | 镜像拉取策略 | `始终拉取新镜像(Always)` | | + | 环境变量 | `MYSQL_ALLOW_EMPTY_PASSWORD`=`1`
    `MYSQL_ROOT_PASSWORD`=`root` | 类型为 `值`,点击 ***名值对*** 按钮可添加一组 | + | 资源请求/限制 | 内存资源请求:`200Mi`
    内存资源限制:`2048Mi` | | + | 容器端口 | `mysql`
    `3306` | | + | 健康检查-->容器启动检查探针 | 探测方式: `命令行`
    执行命令: `mysql -uroot -proot -e 'select 1'`
    初始延迟:`30`
    不健康阈值:`20` | | + | 健康检查-->容器存活检查探针 | 探测方式: `命令行`
    执行命令: `mysqladmin -uroot -proot ping` | | + | 健康检查-->容器就绪检查探针 | 探测方式: `命令行`
    执行命令: `mysql -uroot -proot -e 'select 1'`
    | | + + ![image-20210503204714644](./m-saber-db.assets/image-20210503204714644.png) + +* 切换到 ***存储挂载*** 标签页,并点击其中的 ***添加存储卷声明模板*** 按钮,如下图所示: + + 填写表单: + + | 字段名称 | 字段值 | 备注 | + | --------------------- | ------------------ | ------------------------------------------------------------ | + | 名称 | `data` | | + | 存储类 | `cephfs-raspberry` | * 下拉选择,根据您集群环境的不同,此参数的值可以
    不一样,但是对应的存储类必须为有效的存储类,并
    能够动态提供存储卷 | + | 分配模式 | `动态分配` | | + | 读写模式 | `可被多节点读写` | | + | 总量 | `2Gi` | | + | mysql 容器中的挂载类型 | `读写` | | + | mysql 容器中的挂载路径 | `/var/lib/mysql` | | + + > * 要完成这一步骤,您必须有一个有效的存储类,关于存储类的介绍请参考 [StorageClass](/learning/k8s-intermediate/persistent/storage-class.html) + > * 如果您的集群中尚未配置存储类,请参考如下三种存储类配置中的任意一种: + > * [使用 CephFS 作为存储类](/learning/k8s-intermediate/persistent/ceph/k8s-config.html) + > * [使用 CephFS 作为存储类 - Rook](/learning/k8s-intermediate/persistent/ceph/rook-config.html) + > * [使用 NFS 作为存储类](/learning/k8s-intermediate/persistent/nfs.html) + + ![image-20210503200618642](./m-saber-db.assets/image-20210503200618642.png) + + + +* 切换到 ***高级设置*** 标签页,如下图所示: + + 并填写表单: + + | 字段名称 | 字段值 | 备注 | + | -------------- | --------------------------- | ------------------------------------------------------------ | + | 容器组管理策略 | `Parallel` | 不按容器组的序号顺序更新容器组。(此为测试环境,mysql 只部署
    一个副本,不考虑主从的情况,否则此参数不能选择 `Parallel`) | + | 历史版本数量 | `10` | | + | 更新策略 | `滚动更新(RollingUpdate)` | | + | 分割点 | `0` | 从序号为 `0` 的容器组开始更新 StatefulSet 中的所有容器组 | + + ![image-20210501192537254](./m-redis.assets/image-20210501192537254.png) + + + +* 切换到 ***服务/应用路由*** 标签页,如下图所示: + + 并填写表单: + + | 字段名称 | 字段值 | 备注 | + | -------- | ------------------------------------------ | ------------------------------------------------- | + | 服务类型 | `Headless` | 无头 Service,专用于 StatefulSet | + | 端口 | `mysql`
    `TCP`
    `3306`
    `3306` | 将容器的 `3306` 端口映射到 Service 的 `3306` 端口 | + + ![image-20210503200837429](./m-saber-db.assets/image-20210503200837429.png) + + + +* 点击 ***保存*** 按钮,完成 `saber-db` StatefulSet 的创建 + + + +## 验证部署结果 + +* 在上面的步骤中,完成 StatefulSet 的保存以后,将会进入该 StatefulSet 的详情页面,如下图所示: + * 启动过程中,会看到一个 `FailedSchedule` 事件,是因为 StatefulSet ***存储卷声明模板*** 指定的 ***存储卷声明*** 尚未成功创建和绑定,只要对应的存储类是没有问题的,稍等片刻即可; + * `Unhealthy` 事件,启动过程中尝试校验,但是未能成功,继续等候,待数据库初始化成功以后,***容器启动检查探针*** 和 ***容器就绪检查探针成功*** 就可以执行成功,容器组进入就绪状态,如下图所示: + + ![image-20210503202925230](./m-saber-db.assets/image-20210503202925230.png) + + + +* 点击上图中的 ***sh*** 按钮,可以进入 saber-db 容器的命令行终端界面,如下图所示: + 执行命令: + + ```sh + mysql -uroot -proot + show databases; + use blade; + show tables; + ``` + ![image-20210503203333701](./m-saber-db.assets/image-20210503203333701.png) + + 如果能够显示数据库 `blade` 中的表结构,则我们可以认为 `saber-db` 部署成功。 + + 下一步,请 [部署接口网关](./m-gateway.html) diff --git a/learning/k8s-practice/spring-blade/deploy/m-sentinel.assets/image-20210503191147261.png b/learning/k8s-practice/spring-blade/deploy/m-sentinel.assets/image-20210503191147261.png new file mode 100644 index 0000000..d17ee5a Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-sentinel.assets/image-20210503191147261.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-sentinel.assets/image-20210503192601281.png b/learning/k8s-practice/spring-blade/deploy/m-sentinel.assets/image-20210503192601281.png new file mode 100644 index 0000000..4ce6fb1 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-sentinel.assets/image-20210503192601281.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-sentinel.assets/image-20210503192716871.png b/learning/k8s-practice/spring-blade/deploy/m-sentinel.assets/image-20210503192716871.png new file mode 100644 index 0000000..000b9c2 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-sentinel.assets/image-20210503192716871.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-sentinel.assets/image-20210503193100317.png b/learning/k8s-practice/spring-blade/deploy/m-sentinel.assets/image-20210503193100317.png new file mode 100644 index 0000000..4301fb4 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-sentinel.assets/image-20210503193100317.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-sentinel.assets/image-20210503193251271.png b/learning/k8s-practice/spring-blade/deploy/m-sentinel.assets/image-20210503193251271.png new file mode 100644 index 0000000..864f232 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-sentinel.assets/image-20210503193251271.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-sentinel.assets/image-20210503193935702.png b/learning/k8s-practice/spring-blade/deploy/m-sentinel.assets/image-20210503193935702.png new file mode 100644 index 0000000..0960b32 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-sentinel.assets/image-20210503193935702.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-sentinel.assets/image-20210503194048357.png b/learning/k8s-practice/spring-blade/deploy/m-sentinel.assets/image-20210503194048357.png new file mode 100644 index 0000000..da13a74 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-sentinel.assets/image-20210503194048357.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-sentinel.md b/learning/k8s-practice/spring-blade/deploy/m-sentinel.md new file mode 100644 index 0000000..9894d72 --- /dev/null +++ b/learning/k8s-practice/spring-blade/deploy/m-sentinel.md @@ -0,0 +1,124 @@ +--- +layout: LearningLayout +description: Kubernetes教程_使用Kuboard在Kubernetes上部署Spring_Cloud微服务平台SpringBlade +meta: + - name: keywords + content: Kubernetes教程,K8S教程,Kubernetes微服务,Kubernetes Spring Cloud +--- + +# 部署 sentinel + + + +::: tip 前提条件 + +* 部署 `sentinel` 之前,请确保您的环境已经满足 [环境准备](../prepare/prepare.html) 中的要求; +* `sentinel` 的部署并不依赖于 `nacos`、`redis`,您也可以先部署 `sentinel` 再部署 `nacos`、`redis`。 + +::: + +## 创建 StatefulSet + +按照如下步骤创建 `sentinel` StatefulSet: + +* 在 Kuboard 界面进入名称空间 `spring-blade` 之后,点击菜单 ***名称空间*** -> ***spring-blade*** -> ***常用操作*** -> ***创建工作负载*** ,如下图所示: + + 并填写表单: + + | 字段名称 | 字段值 | 备注 | + | ------------ | ------------- | -------------------------------------------- | + | 工作负载类型 | `StatefulSet` | | + | 工作负载分层 | `持久层` | 填写后将自动添加 `k8s.kuboard.cn/layer` 标签 | + | 工作负载名称 | `sentinel` | 填写后将自动添加 `k8s.kuboard.cn/name` 标签 | + | 副本数 | `1` | | + + ![image-20210503191147261](./m-sentinel.assets/image-20210503191147261.png) + +* 切换到 ***容器信息*** 标签,如下图所示: + + 点击左侧的 ***添加工作容器*** 按钮,添加一个工作容器,并填写表单: + + | 字段名称 | 字段值 | 备注 | + | --------------------------- | ------------------------------------------------------------ | ---- | + | 名称 | `sentinel` | | + | 容器镜像 | `从其他镜像仓库加载镜像(不使用用户名密码)` | | + | 容器镜像-->镜像仓库 | `swr.cn-east-2.myhuaweicloud.com` | | + | 容器镜像-->镜像路径 | `blade/sentinel-dashboard` | | + | 容器镜像-->镜像标签 | `1.8.0` | | + | 镜像拉取策略 | `始终拉取新镜像(Always)` | | + | 资源请求/限制 | 内存资源请求:`100Mi`
    内存资源限制:`1024Mi` | | + | 容器端口 | `TCP`
    `web`
    `8858` | | + | 健康检查-->容器启动检查探针 | 探测方式: `HTTP请求`
    HTTP请求端口: `8858`
    HTTP请求路径:`/`
    不健康阈值:`20` | | + | 健康检查-->容器存活检查探针 | 探测方式: `HTTP请求`
    HTTP请求端口: `8858`
    HTTP请求路径:`/` | | + | 健康检查-->容器就绪检查探针 | 探测方式: `TCP连接`
    HTTP请求端口: `8858`
    HTTP请求路径:`/` | | + + ![image-20210503193100317](./m-sentinel.assets/image-20210503193100317.png) + + + + +* 切换到 ***高级设置*** 标签页,如下图所示: + + 并填写表单: + + | 字段名称 | 字段值 | 备注 | + | -------------- | --------------------------- | ------------------------------------------------------------ | + | 容器组管理策略 | `Parallel` | 不按容器组的序号顺序更新容器组。(此为测试环境,mysql 只部署
    一个副本,不考虑主从的情况,否则此参数不能选择 `Parallel`) | + | 历史版本数量 | `10` | | + | 更新策略 | `滚动更新(RollingUpdate)` | | + | 分割点 | `0` | 从序号为 `0` 的容器组开始更新 StatefulSet 中的所有容器组 | + + ![image-20210501192537254](./m-redis.assets/image-20210501192537254.png) + + + +* 切换到 ***服务/应用路由*** 标签页,如下图所示: + + 并填写表单: + + | 字段名称 | 字段值 | 备注 | + | -------- | ---------------------------------------------------------- | ------------------------------------------------- | + | 服务类型 | `NodePort` | NodePort,可将端口映射到任意节点的指定节点端口 | + | 端口 | `sentinel`
    `TCP`
    `8858`
    `32100`
    `8858` | 将容器的 `8858` 端口映射到 Service 的 `8858` 端口 | + + ![image-20210503193251271](./m-sentinel.assets/image-20210503193251271.png) + + + +* 点击 ***保存*** 按钮,完成 `sentinel` StatefulSet 的创建 + + + +## 验证部署结果 + +* 在上面的步骤中,完成 StatefulSet 的保存以后,将会进入该 StatefulSet 的详情页面,如下图所示: + + ![image-20210503192601281](./m-sentinel.assets/image-20210503192601281.png) + + + +* 点击上图中的 ***追踪日志*** 按钮,可以看到 sentinel 的日志信息,如下图所示,日志将提示: + + ``` + Started DashboardApplication in 6.317 seconds (JVM running for 7.225) + ``` + + ![image-20210503192716871](./m-sentinel.assets/image-20210503192716871.png) + +* 在浏览器中输入地址 `http://任意节点IP:32100` ,并打开该页面,如下图所示: + + 使用默认用户名密码完成登录: + + 用户名: `sentinel` + + 密码: `sentinel` + + ![image-20210503193935702](./m-sentinel.assets/image-20210503193935702.png) + +* 登录成功后,界面显示如下: + + ![image-20210503194048357](./m-sentinel.assets/image-20210503194048357.png) + +* 至此,我们可以认为 sentinel 已部署成功。 + + 下一步,请 [部署 saber-db](./m-saber-db.html) \ No newline at end of file diff --git a/learning/k8s-practice/spring-blade/deploy/m-swagger.assets/image-20210503223531766.png b/learning/k8s-practice/spring-blade/deploy/m-swagger.assets/image-20210503223531766.png new file mode 100644 index 0000000..935a0b3 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-swagger.assets/image-20210503223531766.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-swagger.assets/image-20210503224351929.png b/learning/k8s-practice/spring-blade/deploy/m-swagger.assets/image-20210503224351929.png new file mode 100644 index 0000000..08086f8 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-swagger.assets/image-20210503224351929.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-swagger.assets/image-20210503224838823.png b/learning/k8s-practice/spring-blade/deploy/m-swagger.assets/image-20210503224838823.png new file mode 100644 index 0000000..f9b6dab Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-swagger.assets/image-20210503224838823.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-swagger.assets/image-20210503224954790.png b/learning/k8s-practice/spring-blade/deploy/m-swagger.assets/image-20210503224954790.png new file mode 100644 index 0000000..c1f0d98 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/m-swagger.assets/image-20210503224954790.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/m-swagger.md b/learning/k8s-practice/spring-blade/deploy/m-swagger.md new file mode 100644 index 0000000..ef43c84 --- /dev/null +++ b/learning/k8s-practice/spring-blade/deploy/m-swagger.md @@ -0,0 +1,100 @@ +--- +layout: LearningLayout +description: Kubernetes教程_使用Kuboard在Kubernetes上部署Spring_Cloud微服务平台SpringBlade +meta: + - name: keywords + content: Kubernetes教程,K8S教程,Kubernetes微服务,Kubernetes Spring Cloud +--- + +# 部署 swagger + + + +::: tip 前提条件 + +部署 swagger 之前,请确保: +* 您的环境已经满足 [环境准备](../prepare/prepare.html) 中的要求 +* 已经完成了 [部署 nacos](./nacos.html) +* 已经完成了 [部署接口网关](./gateway.html) + +::: + + + +本文将按照如下步骤完成 `swagger` 的创建: + +* 创建 Deployment +* 验证部署结果 + + + + +## 创建 Deployment + +按照如下步骤创建 `swagger` Deployment: + +* 在 Kuboard 界面进入名称空间 `spring-blade` 之后,点击菜单 ***名称空间*** -> ***spring-blade*** -> ***常用操作*** -> ***创建工作负载*** ,如下图所示: + + 并填写表单: + + | 字段名称 | 字段值 | 备注 | + | ------------ | ------------ | -------------------------------------------- | + | 工作负载类型 | `Deployment` | | + | 工作负载分层 | `中间件` | 填写后将自动添加 `k8s.kuboard.cn/layer` 标签 | + | 工作负载名称 | `swagger` | 填写后将自动添加 `k8s.kuboard.cn/name` 标签 | + | 副本数 | `1` | | + + ![image-20210503223531766](./m-swagger.assets/image-20210503223531766.png) + + + +* 切换到 ***容器信息*** 标签,如下图所示: + + 点击左侧的 ***添加工作容器*** 按钮,添加一个工作容器,并填写表单: + + | 字段名称 | 字段值 | 备注 | + | ----------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | + | 名称 | `swagger` | | + | 容器镜像 | `从其他镜像仓库加载镜像(不使用用户名密码)` | | + | 容器镜像-->镜像仓库 | `swr.cn-east-2.myhuaweicloud.com` | | + | 容器镜像-->镜像路径 | `blade/swagger` | | + | 容器镜像-->镜像标签 | `3.0.3` | | + | 镜像拉取策略 | `始终拉取新镜像(Always)` | | + | 命令参数
    | 参数
    `--spring.profiles.active=${PROFILE} --spring.cloud.nacos.config.server-addr=${NACOS_SERVER_ADDR} --spring.cloud.nacos.discovery.server-addr=${NACOS_SERVER_ADDR} --spring.cloud.sentinel.transport.dashboard=${SENTINEL_DASHBOARD_ADDR} --server.port=80`
    | 通过启动参数指定:
  • spring的 profile
  • Nacos配置中心地址
  • Nacos服务发现地址
  • Sentinel地址
  • 服务端口
  • | + | 环境变量 | `配置字典引用` `blade-config` | 点击 ***+ 配置*** 按钮,可以添加一个配置字典的条目;此配置将 `blade-config` 配置字典中的每一个条目都映射成容器中的一个变量及变量值 | + | 资源请求/限制 | 内存资源请求:`200Mi`
    内存资源限制:`2048Mi` | | + | 容器端口 | `server ` `80` | | + | 健康检查-->容器启动检查探针 | 探测方式: `HTTP请求`
    HTTP请求端口: `80`
    HTTP请求路径: `/actuator/health`
    初始延迟:`30`
    不健康阈值: `20` | | + | 健康检查-->容器存活检查探针 | 探测方式: `HTTP请求`
    HTTP请求端口: `80`
    HTTP请求路径: `/actuator/health` | | + | 健康检查-->容器就绪检查探针 | 探测方式: `HTTP请求`
    HTTP请求端口: `80`
    HTTP请求路径: `/actuator/health` | | + + ![image-20210503224351929](./m-swagger.assets/image-20210503224351929.png) + + + + +* 点击 ***保存*** 按钮,完成 `swagger` Deployment 的创建 + + + +## 验证部署结果 + +按照下面的步骤,可以验证 `swagger` 是否已经成功启动: + +* 在上面的步骤中,完成 Deployment 的保存以后,将会进入该 Deployment 的详情页面,如下图所示: + + ![image-20210503224838823](./m-swagger.assets/image-20210503224838823.png) + + + +* 点击上图中的 ***追踪日志*** 按钮,可以看到 swagger 的日志信息,如下图所示,日志将提示: + + ``` + ---[BLADE-SWAGGER]---启动完成,当前使用的端口:[80],环境变量:[k8s]--- + ``` + + ![image-20210503224954790](./m-swagger.assets/image-20210503224954790.png) + +* 至此,我们可以认为 swagger 已经部署成功。 + + 下一步,请 [部署所有的微服务](./blade-svc.html) diff --git a/learning/k8s-practice/spring-blade/deploy/m.md b/learning/k8s-practice/spring-blade/deploy/m.md new file mode 100644 index 0000000..962070c --- /dev/null +++ b/learning/k8s-practice/spring-blade/deploy/m.md @@ -0,0 +1,19 @@ +--- +layout: LearningLayout +description: Kubernetes教程_使用Kuboard在Kubernetes上部署Spring_Cloud微服务平台SpringBlade +meta: + - name: keywords + content: Kubernetes教程,K8S教程,Kubernetes微服务,Kubernetes Spring Cloud +--- + +# 部署其他基础软件 + + + +nacos 是 SpringBlade 应用中需要最先部署的应用,除此之外,如下基础软件也建议在部署微服务组件之前完成: + + * [部署 redis](./m-redis.html) + * [部署 sentinel](./m-sentinel.html) + * [部署 saber-db](./m-saber-db.html) + * [部署 api-gateway](./m-gateway.html) + * [部署 swagger](./m-swagger.html) diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-config.assets/image-20210502211147897.png b/learning/k8s-practice/spring-blade/deploy/nacos-config.assets/image-20210502211147897.png new file mode 100644 index 0000000..829d82a Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/nacos-config.assets/image-20210502211147897.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-config.assets/image-20210502221927378.png b/learning/k8s-practice/spring-blade/deploy/nacos-config.assets/image-20210502221927378.png new file mode 100644 index 0000000..061c9d7 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/nacos-config.assets/image-20210502221927378.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-config.assets/image-20210502222927450.png b/learning/k8s-practice/spring-blade/deploy/nacos-config.assets/image-20210502222927450.png new file mode 100644 index 0000000..7f2ab82 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/nacos-config.assets/image-20210502222927450.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-config.assets/image-20210502223150396.png b/learning/k8s-practice/spring-blade/deploy/nacos-config.assets/image-20210502223150396.png new file mode 100644 index 0000000..6144b3d Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/nacos-config.assets/image-20210502223150396.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-config.md b/learning/k8s-practice/spring-blade/deploy/nacos-config.md new file mode 100644 index 0000000..e77c7d6 --- /dev/null +++ b/learning/k8s-practice/spring-blade/deploy/nacos-config.md @@ -0,0 +1,75 @@ +--- +layout: LearningLayout +description: Kubernetes教程_使用Kuboard在Kubernetes上部署Spring_Cloud微服务平台SpringBlade +meta: + - name: keywords + content: Kubernetes教程,K8S教程,Kubernetes微服务,Kubernetes Spring Cloud +--- + +# 导入配置到 nacos + + + +::: tip 前提条件 + +导入配置到 nacos 之前,请确保您已完成: +* [部署 nacos-mysql](./nacos-mysql.html) +* [部署 nacos](./nacos-install.html) + +::: + +SpringBlade 使用 nacos 作为微服务配置中心,按照本文描述的步骤,可以将 SpringBlade 的微服务配置文件导入到 nacos 配置中心。 + +## 导入配置文件 + +* 依据 [部署 nacos](./nacos-install.html#验证部署结果) 中描述的方式登录 Nacos 界面,如下图所示: + + ![image-20210502211147897](./nacos-config.assets/image-20210502211147897.png) + +* 点击上图中红色箭头指向的按钮,结果如下图所示: + + 填写表单: + + | 字段名 | 字段值 | 备注 | + | -------- | ------------------------------------------------------------ | ------------------------------------------------------------ | + | Data ID | `blade.yaml` | | + | Group | `DEFAULT_GROUP` | | + | 配置格式 | `YAML` | | + | 配置内容
    | 链接 https://gitee.com/smallc/SpringBlade/raw/v3.0.3/doc/nacos/blade.yaml 中的内容 | 在浏览器打开该链接,并将其内容复制粘贴到 ***配置内容*** 字段 | + + ![image-20210502221927378](./nacos-config.assets/image-20210502221927378.png) + +* 点击 ***发布*** 按钮,并重复上述过程,添加一个新的配置 ***blade-test.yaml*** + + 表单如下: + + | 字段名 | 字段值 | 备注 | + | -------- | ------------------------------------------------------------ | ------------------------------------------------------------ | + | Data ID | `blade-test.yaml` |
    此处为 `blade-test.yaml` 不要写错
    | + | Group | `DEFAULT_GROUP` | | + | 配置格式 | `YAML` | | + | 配置内容
    | 链接 https://gitee.com/smallc/SpringBlade/raw/v3.0.3/doc/nacos/blade-k8s.yaml | 在浏览器打开该链接,并将其内容复制粘贴到 ***配置内容*** 字段;
    此处使用 `blade-k8s.yaml` 文件中的内容,不要弄错
    | + + + +## 验证配置存储 + +* 在 Kuboard 中切换到 StatefulSet `nacos_mysql` 的详情页,如下图所示: + + ![image-20210502223150396](./nacos-config.assets/image-20210502223150396.png) + +* 点击上图中的 ***sh*** 按钮,打开终端界面,如下图所示: + + 在终端界面中执行如下命令,可以看到前面步骤中向 nacos 添加的配置信息被存到了 `nacos_test` 数据库中的 `config_info` 表中。 + + ``` sh + mysql + use nacos_test; + select data_id, group_id, gmt_create from config_info; + ``` + + ![image-20210502222927450](./nacos-config.assets/image-20210502222927450.png) + +* 至此,我们可以认为 nacos 的配置导入成功。 + + 下一步,请 [部署 redis](./redis.html) \ No newline at end of file diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210501191649020.png b/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210501191649020.png new file mode 100644 index 0000000..2a4a3e1 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210501191649020.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210501222929233.png b/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210501222929233.png new file mode 100644 index 0000000..8a1dbc7 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210501222929233.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502165610161.png b/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502165610161.png new file mode 100644 index 0000000..8953b93 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502165610161.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502170037521.png b/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502170037521.png new file mode 100644 index 0000000..061d8b8 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502170037521.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502170212388.png b/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502170212388.png new file mode 100644 index 0000000..0bdcc19 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502170212388.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502171300961.png b/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502171300961.png new file mode 100644 index 0000000..acbe223 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502171300961.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502171521627.png b/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502171521627.png new file mode 100644 index 0000000..9a51c73 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502171521627.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502171857250.png b/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502171857250.png new file mode 100644 index 0000000..e4d1bf2 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502171857250.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502174047675.png b/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502174047675.png new file mode 100644 index 0000000..8bb10dd Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502174047675.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502194959055.png b/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502194959055.png new file mode 100644 index 0000000..45a0fff Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502194959055.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502200325168.png b/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502200325168.png new file mode 100644 index 0000000..b539c20 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502200325168.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502201519030.png b/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502201519030.png new file mode 100644 index 0000000..dd92196 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502201519030.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502205924106.png b/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502205924106.png new file mode 100644 index 0000000..adcdfba Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502205924106.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502210356041.png b/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502210356041.png new file mode 100644 index 0000000..f249329 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502210356041.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502210647992.png b/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502210647992.png new file mode 100644 index 0000000..3591805 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502210647992.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502211147897.png b/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502211147897.png new file mode 100644 index 0000000..829d82a Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/nacos-install.assets/image-20210502211147897.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-install.md b/learning/k8s-practice/spring-blade/deploy/nacos-install.md new file mode 100644 index 0000000..268dd1f --- /dev/null +++ b/learning/k8s-practice/spring-blade/deploy/nacos-install.md @@ -0,0 +1,223 @@ +--- +layout: LearningLayout +description: Kubernetes教程_使用Kuboard在Kubernetes上部署Spring_Cloud微服务平台SpringBlade +meta: + - name: keywords + content: Kubernetes教程,K8S教程,Kubernetes微服务,Kubernetes Spring Cloud +--- + +# 部署 nacos + + + +::: tip 前提条件 + +部署 nacos 之前,请确保 +* 您的环境已经满足 [环境准备](../prepare/prepare.html) 中的要求; +* 您已经完成了 [部署 nacos-mysql](./nacos-mysql.html); + +::: + +## 创建 StatefulSet + +按照如下步骤创建 `nacos-mysql` StatefulSet: + +* 在 Kuboard 界面进入名称空间 `spring-blade` 之后,点击菜单 ***名称空间*** -> ***spring-blade*** -> ***常用操作*** -> ***创建工作负载*** ,如下图所示: + + 并填写表单: + + | 字段名称 | 字段值 | 备注 | + | ------------ | ------------- | -------------------------------------------- | + | 工作负载类型 | `StatefulSet` | | + | 工作负载分层 | `持久层` | 填写后将自动添加 `k8s.kuboard.cn/layer` 标签 | + | 工作负载名称 | `nacos` | 填写后将自动添加 `k8s.kuboard.cn/name` 标签 | + | 副本数 | `1` | | + + ![image-20210502165610161](./nacos-install.assets/image-20210502165610161.png) + +* 切换到 ***容器信息*** 标签,如下图所示: + + 点击左侧的 ***添加工作容器*** 按钮,添加一个工作容器,并填写表单: + + | 字段名称 | 字段值 | 备注 | + | ------------------- | ------------------------------------------------------------ | --------------------------------------------------- | + | 名称 | `nacos` | | + | 容器镜像 | `从其他镜像仓库加载镜像(不使用用户名密码)` | | + | 容器镜像-->镜像仓库 | `swr.cn-east-2.myhuaweicloud.com` | | + | 容器镜像-->镜像路径 | `blade/nacos-server` | | + | 容器镜像-->镜像标签 | `2.0.0` | | + | 镜像拉取策略 | `始终拉取新镜像(Always)` | | + | 环境变量 | `MODE` = `standalone`
    `PREFER_HOST_MODE` = `hostname`
    `SPRING_DATASOURCE_PLATFORM` = `mysql`
    `MYSQL_SERVICE_HOST` = `nacos-mysql-0.nacos-mysql`
    `MYSQL_SERVICE_DB_NAME` = `nacos_test`
    `MYSQL_SERVICE_PORT` = `3306`
    `MYSQL_SERVICE_USER` = `nacos`
    `MYSQL_SERVICE_PASSWORD` = `nacos` | 类型为 `值`,点击 ***名值对***
    按钮可添加一组 | + | 资源请求/限制 | 内存资源请求:`200Mi`
    内存资源限制:`2048Mi` | | + | 容器端口 | `client` `8848`
    `client-rpc` `9848`
    `raft-rpc` `9849` | | + + ![image-20210502170037521](./nacos-install.assets/image-20210502170037521.png) + + 点击 ***容器启动检查探针*** 的 ***启用*** 按钮: + + 并填写表单: + + | 字段名称 | 字段值 | 备注 | + | -------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | + | 探针类型 | `HTTP请求` | | + | HttpGet | 端口 `8848`
    路径`/nacos/v1/ns/instance/list?serviceName=nacos`
    | | + | 初始延迟(秒) | `30` | | + | 不健康阈值 | `20` | 执行探测频率 * 不健康阈值 = 10 * 20 = 200秒,容器创建 200 秒后,HttpGet `http://${podIP}:8848/nacos/v1/ns/instance/list?serviceName=nacos` 如果仍未执行成功,kubelet 将认为该容器启动失败,并强制重启该容器。 | + + ![image-20210502170212388](./nacos-install.assets/image-20210502170212388.png) + + 按照同样的方式,启用 ***容器存活检查探针*** ,表单内容如下所示: + + | 字段名称 | 字段值 | 备注 | + | ---------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | + | 探针类型探针类型 | `HTTP请求` | | + | HttpGetCommand | 端口 `8848`
    路径 `/nacos/v1/ns/instance/list?serviceName=nacos`
    | | + | 初始延迟(秒) | `30` | | + | 不健康阈值 | `3` | 连续3此失败后,kubelet 将认为该容器已经不健康,并强制重启该容器 | + + 按照同样的方式,启用 ***容器就绪检查探针*** ,表单内容如下所示: + + | 字段名称 | 字段值 | 备注 | + | ---------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | + | 探针类型探针类型 | `HTTP请求` | | + | HttpGetCommand | 端口 `8848`
    路径 `/nacos/v1/ns/instance/list?serviceName=nacos`
    | | + | 初始延迟(秒) | `30` | | + | 健康阈值 | `2` | 探针连续执行成功 2 次以后,kubelet 认为该容器已就绪,并将其添加到对应 Service (如果有)的 Endpoint 中,Service 此时可以分发流量到该容器 | + | 不健康阈值 | `3` | 探针连续执行失败 3 此以后,kubelet 认为该容器已经不健康,并强制重启该容器 | + + 完成 ***健康检查*** 的设置以后,界面截图如下所示: + + ![image-20210502171300961](./nacos-install.assets/image-20210502171300961.png) + +* 切换到 ***存储挂载*** 标签页,如下图所示: + ![image-20210501191649020](./nacos-install.assets/image-20210501191649020.png) + 点击上图中 ***添加存储卷声明模板*** 按钮,如下图所示: + + 填写表单: + + | 字段名称 | 字段值 | 备注 | + | --------------------- | ------------------ | ------------------------------------------------------------ | + | 名称 | `logs` | | + | 存储类 | `cephfs-raspberry` | * 下拉选择,根据您集群环境的不同,此参数的值可以
    不一样,但是对应的存储类必须为有效的存储类,并
    能够动态提供存储卷 | + | 分配模式 | `动态分配` | | + | 读写模式 | `可被多节点读写` | | + | 总量 | `2Gi` | | + | nacos容器中的挂载类型 | `读写` | | + | nacos容器中的挂载路径 | `/home/nacos/logs` | Nacos 存储日志的位置。StatefuSet 的 ***存储卷声明模板*** 会为每个容器组分配一个存储卷声明,以便存在多个 nacos 副本时,每个副本的日志文件不会产生冲突。 | + + > * 要完成这一步骤,您必须有一个有效的存储类,关于存储类的介绍请参考 [StorageClass](/learning/k8s-intermediate/persistent/storage-class.html) + > * 如果您的集群中尚未配置存储类,请参考如下三种存储类配置中的任意一种: + > * [使用 CephFS 作为存储类](/learning/k8s-intermediate/persistent/ceph/k8s-config.html) + > * [使用 CephFS 作为存储类 - Rook](/learning/k8s-intermediate/persistent/ceph/rook-config.html) + > * [使用 NFS 作为存储类](/learning/k8s-intermediate/persistent/nfs.html) + + ![image-20210502171521627](./nacos-install.assets/image-20210502171521627.png) + + 点击上图中 ***添加数据卷*** 按钮,如下图所示: + + ![image-20210502171857250](./nacos-install.assets/image-20210502171857250.png) + + 在上图中切换到 ***配置字典*** 标签页,并点击 ***创建*** 按钮,如下图所示: + + 填写表单: + + | 字段名称 | 字段值 | 备注 | + | -------- | ------------------------------------------------------------ | -------------------------------------------------------- | + | 名称 | nacos-config | 配置字典的名称 | + | 数据 | `custom.properties`
    #spring.security.enabled=false
    #management.security=false
    #security.basic.enabled=false
    #nacos.security.ignore.urls=/**
    #management.metrics.export.elastic.host=http://localhost:9200
    # metrics for prometheus
    management.endpoints.web.exposure.include=*

    # metrics for elastic search
    #management.metrics.export.elastic.enabled=false
    #management.metrics.export.elastic.host=http://localhost:9200

    # metrics for influx
    #management.metrics.export.influx.enabled=false
    #management.metrics.export.influx.db=springboot
    #management.metrics.export.influx.uri=http://localhost:8086
    #management.metrics.export.influx.auto-create-db=true
    #management.metrics.export.influx.consistency=one
    #management.metrics.export.influx.compressed=true
    | nacos的配置文件内容作为
    `custom.properties` 的取值 | + + ![image-20210502174047675](./nacos-install.assets/image-20210502174047675.png) + + 点击上图中的 ***保存*** 按钮,将完成配置字典 `nacos-config` 的创建,您也可以在菜单 ***名称空间*** -> ***spring-blade*** -> ***配置中心*** -> ***配置字典*** 中管理刚才创建的配置字典。 + + 完成配置字典 `nacos-config` 的创建后,该对话框将关闭,我们继续完善 StatefulSet 的数据卷配置,如下图所示: + + 填写表单: + + | 字段名称 | 字段值 | 备注 | + | ----------------------- | -------------------------------------- | ------------------ | + | 名称 | `volume-6aidn` | 自动生成的名称即可 | + | 数据卷类型 | `配置字典` | | + | | | | + | 分配模式 | `动态分配` | | + | 读写模式 | `可被多节点读写` | | + | 总量 | `2Gi` | | + | nacos容器中的挂载类型 | `只读` | | + | nacos容器中的挂载路径 | `/home/nacos/init.d/custom.properties` | | + | nacos容器中的挂载子路径 | `custom.properties` | | + + ![image-20210502201519030](./nacos-install.assets/image-20210502201519030.png) + + + +* 切换到 ***高级设置*** 标签页,如下图所示 + + 并填写表单: + + | 字段名称 | 字段值 | 备注 | + | -------------- | --------------------------- | ------------------------------------------------------------ | + | 容器组管理策略 | `Parallel` | 不按容器组的序号顺序更新容器组。(此为测试环境,mysql 只部署
    一个副本,不考虑主从的情况,否则此参数不能选择 `Parallel`) | + | 历史版本数量 | `10` | | + | 更新策略 | `滚动更新(RollingUpdate)` | | + | 分割点 | `0` | 从序号为 `0` 的容器组开始更新 StatefulSet 中的所有容器组 | + + ![image-20210502194959055](./nacos-install.assets/image-20210502194959055.png) + +* 切换到 ***服务/应用路由*** 标签页,如下图所示: + + 并填写表单: + + | 字段名称 | 字段值 | 备注 | + | -------- | ------------------------------------------------------------ | ------------------------------------------------------------ | + | 服务类型 | `NodePort` | `NodePort` 类型的Service,可以将容器端口映射到集群中任意节点的节点端口 | + | 端口 | 端口名称: `nacos-client`
    协 议:`TCP`
    服务端口: `8848`
    节点端口: `32000`
    容器端口: `8848`
    | 将容器的 `8848` 端口映射到 Service 的 `8848` 端口以及任意节点的 `32000` 端口 | + | 会话保持 | `ClientIP`
    timeoutSeconds:`10800` | | + + ![image-20210502200325168](./nacos-install.assets/image-20210502200325168.png) + +* 点击 ***保存*** 按钮,依据界面提示完成保存操作 + +## 验证部署结果 + +* 在上面的步骤中,完成 StatefulSet 的保存以后,将会进入该 StatefulSet 的详情页,如下图所示: + * 启动过程中,会看到两个 `FailedSchedule` 事件,是因为 StatefulSet ***存储卷声明模板*** 指定的 ***存储卷声明*** 尚未成功创建和绑定,只要对应的存储类是没有问题的,稍等片刻即可; + + ![image-20210502205924106](./nacos-install.assets/image-20210502205924106.png) + + + +* 点击上图中,容器端口 `8848` 后面对应的绿色图标,如下图所示: + + 修改 ***访问路径*** 字段为 `/nacos`; + + ![image-20210502210356041](./nacos-install.assets/image-20210502210356041.png) + + + +* 在上图中修改 ***访问路径*** 字段后,点击 ***在浏览器窗口打开*** 按钮,将会打开一个新的窗口,如下图所示: + + 填写登录信息: + + 用户名:`nacos` + + 密码: `nacos` + + ![image-20210502210647992](./nacos-install.assets/image-20210502210647992.png) + +* 在上图中点击 ***提交*** 按钮,完成 nacos 登录,如下图所示: + + ![image-20210502211147897](./nacos-install.assets/image-20210502211147897.png) + + ::: warning KuboardProxy 的使用 + + * 在本例中,我们使用 KuboardProxy 访问 Nacos 的界面,然而,这种访问方式在绝大多数情况下是可以满足使用要求的(尤其是接口调用测试时),但并不是完美的,因为少部分应用可能会使用绝对路径来加载静态资源。例如 Nacos 就从路径 `/nacos/console-ui/public/icons/icon-font.woff` 加载一些图标,但是 KuboardProxy 必须把应用重新指向了一个比较长的相对路径才能工作;在缺失 `icon-font.woff` 静态资源的情况下,Nacos 界面中的部分图标不能正常显示(例如上图红色箭头指向的按钮中,原本有一个加号图标),但是所有的应用功能仍然能够正常操作。 + + * 按照本文描述的 Nacos 部署方式,您也可以用下面的地址访问 Nacos 界面: + + `http://任意节点IP地址:32000/nacos` + + ::: + +* 至此,我们可以认为 `nacos` 部署成功。 + + 下一步,请 [导入配置到 nacos](./nacos-config.html) \ No newline at end of file diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501181648619.png b/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501181648619.png new file mode 100644 index 0000000..2558957 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501181648619.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501182754535.png b/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501182754535.png new file mode 100644 index 0000000..e82f080 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501182754535.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501183908989.png b/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501183908989.png new file mode 100644 index 0000000..030f44f Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501183908989.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501184519436.png b/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501184519436.png new file mode 100644 index 0000000..5ae15e7 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501184519436.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501191122507.png b/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501191122507.png new file mode 100644 index 0000000..2dbf87d Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501191122507.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501191649020.png b/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501191649020.png new file mode 100644 index 0000000..2a4a3e1 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501191649020.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501191830399.png b/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501191830399.png new file mode 100644 index 0000000..46a17fa Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501191830399.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501192537254.png b/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501192537254.png new file mode 100644 index 0000000..5126475 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501192537254.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501193259832.png b/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501193259832.png new file mode 100644 index 0000000..c165760 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501193259832.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501193803996.png b/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501193803996.png new file mode 100644 index 0000000..3679cca Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501193803996.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501194542057.png b/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501194542057.png new file mode 100644 index 0000000..2d2cd8a Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/nacos-mysql.assets/image-20210501194542057.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/nacos-mysql.md b/learning/k8s-practice/spring-blade/deploy/nacos-mysql.md new file mode 100644 index 0000000..ea47990 --- /dev/null +++ b/learning/k8s-practice/spring-blade/deploy/nacos-mysql.md @@ -0,0 +1,178 @@ +--- +layout: LearningLayout +description: Kubernetes教程_使用Kuboard在Kubernetes上部署Spring_Cloud微服务平台SpringBlade +meta: + - name: keywords + content: Kubernetes教程,K8S教程,Kubernetes微服务,Kubernetes Spring Cloud +--- + +# 部署 nacos-mysql + + + +::: tip 前提条件 + +部署 nacos-mysql 之前,请确保您的环境已经满足 [环境准备](../prepare/prepare.html) 中的要求。 + +::: + +## 创建 StatefulSet + +按照如下步骤创建 `nacos-mysql` StatefulSet: + +* 在 Kuboard 界面进入名称空间 `spring-blade` 之后,点击菜单 ***名称空间*** -> ***spring-blade*** -> ***常用操作*** -> ***创建工作负载*** ,如下图所示: + + 并填写表单: + + | 字段名称 | 字段值 | 备注 | + | ------------ | ----------- | -------------------------------------------- | + | 工作负载类型 | `StatefulSet` | | + | 工作负载分层 | `持久层` | 填写后将自动添加 `k8s.kuboard.cn/layer` 标签 | + | 工作负载名称 | `nacos-mysql` | 填写后将自动添加 `k8s.kuboard.cn/name` 标签 | + | 副本数 | `1` | | + + ![image-20210501181648619](./nacos-mysql.assets/image-20210501181648619.png) + +* 切换到 ***容器信息*** 标签,如下图所示: + + 点击左侧的 ***添加工作容器*** 按钮,添加一个工作容器,并填写表单: + + | 字段名称 | 字段值 | 备注 | + | ------------------- | ------------------------------------------------------------ | ---- | + | 名称 | `mysql` | | + | 容器镜像 | `从其他镜像仓库加载镜像(不使用用户名密码)` | | + | 容器镜像-->镜像仓库 | `swr.cn-east-2.myhuaweicloud.com` | | + | 容器镜像-->镜像路径 | `blade/nacos-mysql` | | + | 容器镜像-->镜像标签 | `5.7` | | + | 镜像拉取策略 | `始终拉取新镜像(Always)` | | + | 环境变量 | `MYSQL_ALLOW_EMPTY_PASSWORD`=`1`
    `MYSQL_DATABASE`=`nacos_test`
    `MYSQL_USER`=`nacos`
    `MYSQL_PASSWORD`=`nacos` | 类型为 `值`,点击 ***名值对*** 按钮可添加一组 | + | 资源请求/限制 | 内存资源请求:`100Mi`
    内存资源限制:`1000Mi` | | + | 容器端口 | `mysql`
    `3306` | | + + ![image-20210501182754535](./nacos-mysql.assets/image-20210501182754535.png) + + 启用 ***健康检查*** ,如下图所示: + + ![image-20210501183908989](./nacos-mysql.assets/image-20210501183908989.png) + + 点击 ***容器启动检查探针*** 的 ***启用*** 按钮,如下图所示: + + 并填写表单: + + | 字段名称 | 字段值 | 备注 | + | -------------- | ---------------------------------- | ------------------------------------------------------------ | + | 探针类型 | `命令行` | | + | Command | `mysql -h 127.0.0.1 -e 'select 1'` | | + | 初始延迟(秒) | `30` | | + | 不健康阈值 | `20` | 执行探测频率 * 不健康阈值 = 10 * 20 = 200秒,
    容器创建 200 秒后,Command
    `mysql -h 127.0.0.1 -e 'select 1'`
    如果仍未执行成功,kubelet 将认为该容器启动失败,
    并强制重启该容器。 | + + ![image-20210501184519436](./nacos-mysql.assets/image-20210501184519436.png) + + 按照同样的方式,启用 ***容器存活检查探针*** ,表单内容如下所示: + + | 字段名称 | 字段值 | 备注 | + | -------------- | ----------------- | ------------------------------------------------------------ | + | 探针类型 | `命令行` | | + | Command | `mysqladmin ping` | | + | 初始延迟(秒) | `30` | | + | 不健康阈值 | `3` | 连续3此失败后,kubelet 将认为该容器已经不健康,并强制重启该容器 | + + 按照同样的方式,启用 ***容器就绪检查探针*** ,表单内容如下所示: + + | 字段名称 | 字段值 | 备注 | + | -------------- | ---------------------------------- | ------------------------------------------------------------ | + | 探针类型 | `命令行` | | + | Command | `mysql -h 127.0.0.1 -e 'select 1'` | | + | 初始延迟(秒) | `30` | | + | 健康阈值 | `2` | 探针连续执行成功 2 次以后,kubelet 认为该容器已就绪,并将其添加到对应 Service (如果有)的 Endpoint 中,Service 此时可以分发流量到该容器 | + | 不健康阈值 | `3` | 探针连续执行失败 3 此以后,kubelet 认为该容器已经不健康,并强制重启该容器 | + + 完成 ***健康检查*** 的设置以后,界面截图如下所示: + + ![image-20210501191122507](./nacos-mysql.assets/image-20210501191122507.png) + + + +* 切换到 ***存储挂载*** 标签页,如下图所示: + ![image-20210501191649020](./nacos-mysql.assets/image-20210501191649020.png) + 点击上图中 ***添加存储卷声明模板*** 按钮,如下图所示: + + 填写表单: + + | 字段名称 | 字段值 | 备注 | + | ---------------------- | ------------------ | ------------------------------------------------------------ | + | 名称 | `data` | | + | 存储类 | `cephfs-raspberry` | * 下拉选择,根据您集群环境的不同,此参数的值可以
    不一样,但是对应的存储类必须为有效的存储类,并
    能够动态提供存储卷 | + | 分配模式 | `动态分配` | | + | 读写模式 | `可被多节点读写` | | + | 总量 | `2Gi` | | + | mysql 容器中的挂载类型 | `读写` | | + | mysql 容器中的挂载路径 | `/var/lib/mysql` | | + + > * 要完成这一步骤,您必须有一个有效的存储类,关于存储类的介绍请参考 [StorageClass](/learning/k8s-intermediate/persistent/storage-class.html) + > * 如果您的集群中尚未配置存储类,请参考如下三种存储类配置中的任意一种: + > * [使用 CephFS 作为存储类](/learning/k8s-intermediate/persistent/ceph/k8s-config.html) + > * [使用 CephFS 作为存储类 - Rook](/learning/k8s-intermediate/persistent/ceph/rook-config.html) + > * [使用 NFS 作为存储类](/learning/k8s-intermediate/persistent/nfs.html) + + ![image-20210501191830399](./nacos-mysql.assets/image-20210501191830399.png) + +* 切换到 ***高级设置*** 标签页,如下图所示: + + 并填写表单: + + | 字段名称 | 字段值 | 备注 | + | -------------- | --------------------------- | ------------------------------------------------------------ | + | 容器组管理策略 | `Parallel` | 不按容器组的序号顺序更新容器组。(此为测试环境,mysql 只部署
    一个副本,不考虑主从的情况,否则此参数不能选择 `Parallel`) | + | 历史版本数量 | `10` | | + | 更新策略 | `滚动更新(RollingUpdate)` | | + | 分割点 | `0` | 从序号为 `0` 的容器组开始更新 StatefulSet 中的所有容器组 | + + ![image-20210501192537254](./nacos-mysql.assets/image-20210501192537254.png) + +* 切换到 ***服务/应用路由*** 标签页,如下图所示: + + 并填写表单: + + | 字段名称 | 字段值 | 备注 | + | -------- | ------------------------------------------ | ------------------------------------------------- | + | 服务类型 | `Headless` | 无头 Service,专用于 StatefulSet | + | 端口 | `mysql`
    `TCP`
    `3306`
    `3306` | 将容器的 `3306` 端口映射到 Service 的 `3306` 端口 | + + ![image-20210501193259832](./nacos-mysql.assets/image-20210501193259832.png) + +* 点击 ***保存*** 按钮,依据界面提示完成保存操作 + + + +## 验证部署结果 + +* 完成保存后,并等候一定的时间,界面显示如下: + + 从界面中我们可以看到多个失败事件: + + * `FailedSchedule`,原因是容器组所需要的存储卷声明尚未成功绑定,待存储类动态提供存储卷之后,容器组就立刻进入 ***已调度*** 的状态; + * `Unhealthy`,点击 ***追踪日志*** 的按钮,可以看到,此 mysql 容器在第一次启动时会执行数据初始化的工作,因此启动过程耗时较长,图中显示,整个启动过程中,kubelet 执行了 2 次失败的 `Startup probe failed` ***容器启动检查探针***,只要这个次数在前面定义的 ***容器启动检查探针*** --> ***不健康阈值*** 的范围之内,kubelet 仍将继续等待该容器的启动,否则 kublet 将强制重启该容器。 + > 在截图中,***容器启动检查探针*** 只失败了两次(实际执行了三次,第三次执行结果为成功,并为生成事件,但是变更了容器的状态),容器就成功启动了; + > 在您的安装过程中,依据容器启动的时间长短,***容器启动检查探针*** 失败的次数可能所有不同。 + + ![image-20210501193803996](./nacos-mysql.assets/image-20210501193803996.png) + +* 点击上图中的 ***bash*** 按钮,界面显示如下: + + 下图显示的内容为进入 ***bash*** 界面之后执行了如下指令的结果: + + ```sh + mysql + show databases; + show tables; + ``` + + + + ![image-20210501194542057](./nacos-mysql.assets/image-20210501194542057.png) + +* 至此,我们可以认为 `nacos-mysql` 部署成功。 + + 下一步,请 [部署 nacos](./nacos-install.html) + diff --git a/learning/k8s-practice/spring-blade/deploy/nacos.md b/learning/k8s-practice/spring-blade/deploy/nacos.md new file mode 100644 index 0000000..a8cfcd3 --- /dev/null +++ b/learning/k8s-practice/spring-blade/deploy/nacos.md @@ -0,0 +1,33 @@ +--- +layout: LearningLayout +description: Kubernetes教程_使用Kuboard在Kubernetes上部署Spring_Cloud微服务平台SpringBlade +meta: + - name: keywords + content: Kubernetes教程,K8S教程,Kubernetes微服务,Kubernetes Spring Cloud +--- + +# Nacos 介绍 + + + +在 Spring Blade 中,Nacos 被用于: +* 服务发现 +* 微服务配置信息管理 + +Nacos 是 Spring Blade 中一个非常重要的基础软件,也是部署 Spring Blade 时首先要部署的一个软件。 + +本文描述了如何在 K8S 上部署以 mysql 数据库作为后端存储的单机版 nacos,未来将进一步提供 nacos 集群版的部署文档。 + +部署 nacos 时,需要用到如下两个镜像,这两个镜像均来自于 nacos 官方发布到 docker hub 的镜像,为了给大家提供更快速的国内下载速度,将其推送到华为的镜像仓库,供大家测试使用。 + +| 镜像标签 | 镜像来源 | 来源链接 | +| ---------------------------------------------------------- | -------------------------- | ------------------------------------------- | +| `swr.cn-east-2.myhuaweicloud.com/blade/nacos-server:2.0.0` | `nacos/nacos-server:2.0.0` | [nacos/nacos-server](https://hub.docker.com/r/nacos/nacos-server) | +| `swr.cn-east-2.myhuaweicloud.com/blade/nacos-mysql:5.7` | `nacos/nacos-mysql:5.7` | [nacos/nacos-mysql](https://hub.docker.com/r/nacos/nacos-mysql) | + + +部署 Nacos 的步骤主要有: + +* [部署 nacos-mysql](./nacos-mysql.html) +* [部署 nacos](./nacos-install.html) +* [导入配置到 nacos](./nacos-config.html) diff --git a/learning/k8s-practice/spring-blade/deploy/saber-web.assets/image-20210504164702272.png b/learning/k8s-practice/spring-blade/deploy/saber-web.assets/image-20210504164702272.png new file mode 100644 index 0000000..dfdb784 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/saber-web.assets/image-20210504164702272.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/saber-web.assets/image-20210504165016350.png b/learning/k8s-practice/spring-blade/deploy/saber-web.assets/image-20210504165016350.png new file mode 100644 index 0000000..5a03bc9 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/saber-web.assets/image-20210504165016350.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/saber-web.assets/image-20210504165344035.png b/learning/k8s-practice/spring-blade/deploy/saber-web.assets/image-20210504165344035.png new file mode 100644 index 0000000..e485191 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/saber-web.assets/image-20210504165344035.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/saber-web.assets/image-20210504170857914.png b/learning/k8s-practice/spring-blade/deploy/saber-web.assets/image-20210504170857914.png new file mode 100644 index 0000000..ddc2533 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/saber-web.assets/image-20210504170857914.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/saber-web.assets/image-20210504171020607.png b/learning/k8s-practice/spring-blade/deploy/saber-web.assets/image-20210504171020607.png new file mode 100644 index 0000000..bb7ecb9 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/saber-web.assets/image-20210504171020607.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/saber-web.assets/image-20210504171215281.png b/learning/k8s-practice/spring-blade/deploy/saber-web.assets/image-20210504171215281.png new file mode 100644 index 0000000..596d8e9 Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/saber-web.assets/image-20210504171215281.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/saber-web.md b/learning/k8s-practice/spring-blade/deploy/saber-web.md new file mode 100644 index 0000000..0d93856 --- /dev/null +++ b/learning/k8s-practice/spring-blade/deploy/saber-web.md @@ -0,0 +1,101 @@ +--- +layout: LearningLayout +description: Kubernetes教程_使用Kuboard在Kubernetes上部署Spring_Cloud微服务平台SpringBlade +meta: + - name: keywords + content: Kubernetes教程,K8S教程,Kubernetes微服务,Kubernetes Spring Cloud +--- + +# 部署 saber-web + + + +::: tip 前提条件 + +部署 saber-web 之前,请确保: + +* 您的环境已经满足 [环境准备](../prepare/prepare.html) 中的要求 +* 您已经完成了: + * [部署所有的微服务](./blade-svc.html) + +::: + + +## 创建 Deployment + +按照如下步骤创建 `saber-web` Deployment: + +* 在 Kuboard 界面进入名称空间 `spring-blade` 之后,点击菜单 ***名称空间*** -> ***spring-blade*** -> ***常用操作*** -> ***创建工作负载*** ,如下图所示: + + 并填写表单: + + | 字段名称 | 字段值 | 备注 | + | ------------ | ------------- | -------------------------------------------- | + | 工作负载类型 | `Deployment` | | + | 工作负载分层 | `持久层` | 填写后将自动添加 `k8s.kuboard.cn/layer` 标签 | + | 工作负载名称 | `saber-web` | 填写后将自动添加 `k8s.kuboard.cn/name` 标签 | + | 副本数 | `1` | | + + ![image-20210504164702272](./saber-web.assets/image-20210504164702272.png) + + + +* 切换到 ***容器信息*** 标签,如下图所示: + + 点击左侧的 ***添加工作容器*** 按钮,添加一个工作容器,并填写表单: + + | 字段名称 | 字段值 | 备注 | + | --------------------------- | ------------------------------------------------------------ | ---- | + | 名称 | `saber-web` | | + | 容器镜像 | `从其他镜像仓库加载镜像(不使用用户名密码)` | | + | 容器镜像-->镜像仓库 | `swr.cn-east-2.myhuaweicloud.com` | | + | 容器镜像-->镜像路径 | `blade/saber-web` | | + | 容器镜像-->镜像标签 | `3.0.3` | | + | 镜像拉取策略 | `始终拉取新镜像(Always)` | | + | 资源请求/限制 | 内存资源请求:`100Mi`
    内存资源限制:`1024Mi` | | + | 容器端口 | `web`
    `80` | | + | 健康检查-->容器启动检查探针 | 探测方式: `HTTP请求`
    httpGet端口: `80`
    httpGet路径:`/`
    不健康阈值:`20` | | + | 健康检查-->容器存活检查探针 | 探测方式: `HTTP请求`
    httpGet端口: `80`
    httpGet路径:`/` | | + | 健康检查-->容器就绪检查探针 | 探测方式: `HTTP请求`
    httpGet端口: `80`
    httpGet路径:`/` | | + + ![image-20210504165016350](./saber-web.assets/image-20210504165016350.png) + + + + +* 切换到 ***服务/应用路由*** 标签页,如下图所示: + + 并填写表单: + + | 字段名称 | 字段值 | 备注 | + | -------- | ------------------------------------------------- | ---------------------------------------------------- | + | 服务类型 | `NodePort` | NodePort,可以将容器端口映射到所有节点的指定节点端口 | + | 端口 | `web`
    `TCP`
    `80`
    `32102`
    `80` | 将容器的 `80` 端口映射到节点的 `32102` 端口 | + + ![image-20210504165344035](./saber-web.assets/image-20210504165344035.png) + + + +* 点击 ***保存*** 按钮,完成 `saber-web` Deployment 的创建 + + + +## 验证部署结果 + +* 在上面的步骤中,完成 Deployment 的保存以后,将会进入该 Deployment 的详情页面,如下图所示: + + ![image-20210504171020607](./saber-web.assets/image-20210504171020607.png) + + > 如果通过 KuboardProxy 打开 `80` 端口对应的网页,将会因为部分资源必须从根路径加载的问题导致页面不能正常显示。 + +* 在浏览器中打开地址 `http://任意节点IP:32102`,如下图所示: + + ![image-20210504170857914](./saber-web.assets/image-20210504170857914.png) + +* 输入验证码后,点击登录,如下图所示: + + ![image-20210504171215281](./saber-web.assets/image-20210504171215281.png) + +* 至此,我们可以认为 `saber-web` 已成功部署 + + 下一步,请 [验证 SpringBlade 部署结果](./saber-web.html) \ No newline at end of file diff --git a/learning/k8s-practice/spring-blade/deploy/validate.assets/image-20210504170735122.png b/learning/k8s-practice/spring-blade/deploy/validate.assets/image-20210504170735122.png new file mode 100644 index 0000000..6a0572e Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/validate.assets/image-20210504170735122.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/validate.assets/image-20210504172154216.png b/learning/k8s-practice/spring-blade/deploy/validate.assets/image-20210504172154216.png new file mode 100644 index 0000000..83e115b Binary files /dev/null and b/learning/k8s-practice/spring-blade/deploy/validate.assets/image-20210504172154216.png differ diff --git a/learning/k8s-practice/spring-blade/deploy/validate.md b/learning/k8s-practice/spring-blade/deploy/validate.md new file mode 100644 index 0000000..a5c8a85 --- /dev/null +++ b/learning/k8s-practice/spring-blade/deploy/validate.md @@ -0,0 +1,51 @@ +--- +layout: LearningLayout +description: Kubernetes教程_使用Kuboard在Kubernetes上部署Spring_Cloud微服务平台SpringBlade +meta: + - name: keywords + content: Kubernetes教程,K8S教程,Kubernetes微服务,Kubernetes Spring Cloud +--- + +# 验证 SpringBlade 部署结果 + + + +::: tip 前提条件 + +验证 SpringBlade 部署结果之前,请确保您已经完成了 [部署 saber-web](./saber-web.html) + +::: + +## 验证 saber-web 的各项功能 + +* 在浏览器打开 `http://任意节点IP:32102`,完成登录后,可以尝试点击 saber-web 的各项功能菜单,检验 saber-web 的各项功能是否正常 + + [参考此处了解如何登录](./saber-web.html#验证部署结果) + + ::: tip saber-web路由 + + 导航到 ***系统管理*** --> ***菜单管理*** 菜单项,部分菜单的路由地址以 `http://localhost` 开头,这类菜单项会因为路由地址的问题不能正常打开。 + + 本文档不对此类路由问题做进一步探讨。如何解决,请到 [SpringBlade](https://gitee.com/smallc/SpringBlade) 的社群中进行讨论。 + + ::: + + ![image-20210504172154216](./validate.assets/image-20210504172154216.png) + +## 验证 sentinel + +* 在 saber-web 界面中,多次(例如,30次)刷新 ***系统管理*** 下的菜单项 + +* 在浏览器打开 `http://任意节点IP:32100`,并登录 sentinel,切换到 ***blade-system*** 菜单项,如下图所示: + + Sentinel 的默认用户名密码如下: + + 用户名: `sentinel` + + 密 码: `sentinel` + + ![image-20210504170735122](./validate.assets/image-20210504170735122.png) + + + +下一步,请 [导入导出 SpringBlade 部署文件](../import/) \ No newline at end of file diff --git a/learning/k8s-practice/spring-blade/import/export.md b/learning/k8s-practice/spring-blade/import/export.md new file mode 100644 index 0000000..b775d92 --- /dev/null +++ b/learning/k8s-practice/spring-blade/import/export.md @@ -0,0 +1,11 @@ +--- +layout: LearningLayout +description: Kubernetes教程_使用Kuboard在Kubernetes上部署Spring_Cloud微服务平台SpringBlade +meta: + - name: keywords + content: Kubernetes教程,K8S教程,Kubernetes微服务,Kubernetes Spring Cloud +--- + +# 导出 yaml + + diff --git a/learning/k8s-practice/spring-blade/import/import.md b/learning/k8s-practice/spring-blade/import/import.md new file mode 100644 index 0000000..98dd4dc --- /dev/null +++ b/learning/k8s-practice/spring-blade/import/import.md @@ -0,0 +1,11 @@ +--- +layout: LearningLayout +description: Kubernetes教程_使用Kuboard在Kubernetes上部署Spring_Cloud微服务平台SpringBlade +meta: + - name: keywords + content: Kubernetes教程,K8S教程,Kubernetes微服务,Kubernetes Spring Cloud +--- + +# 导入 yaml + + diff --git a/learning/k8s-practice/spring-blade/import/index.md b/learning/k8s-practice/spring-blade/import/index.md new file mode 100644 index 0000000..ff7c0a7 --- /dev/null +++ b/learning/k8s-practice/spring-blade/import/index.md @@ -0,0 +1,15 @@ +--- +layout: LearningLayout +description: Kubernetes教程_使用Kuboard在Kubernetes上部署Spring_Cloud微服务平台SpringBlade +meta: + - name: keywords + content: Kubernetes教程,K8S教程,Kubernetes微服务,Kubernetes Spring Cloud +--- + +# 导入导出 + + + +复杂的微服务系统可能存在上百个微服务工作负载,导致对微服务系统的维护工作也变得极为复杂。重新部署一套系统时,可能会碰到诸多繁琐且容易出错的重复性工作。 + +在 Kuboard 中,您可以将某一个名称空间下的所有微服务相关的对象导出到一个 YAML 文件中,然后在其他的名称空间(或者集群)中导入该 YAML 文件,快速完成微服务系统的部署工作。 diff --git a/learning/k8s-practice/spring-blade/index.assets/SpringBlade.png b/learning/k8s-practice/spring-blade/index.assets/SpringBlade.png new file mode 100644 index 0000000..c9afd50 Binary files /dev/null and b/learning/k8s-practice/spring-blade/index.assets/SpringBlade.png differ diff --git a/learning/k8s-practice/spring-blade/index.assets/image-20210501144136997.png b/learning/k8s-practice/spring-blade/index.assets/image-20210501144136997.png new file mode 100644 index 0000000..2093eed Binary files /dev/null and b/learning/k8s-practice/spring-blade/index.assets/image-20210501144136997.png differ diff --git a/learning/k8s-practice/spring-blade/index.assets/springblade-framework.png b/learning/k8s-practice/spring-blade/index.assets/springblade-framework.png new file mode 100644 index 0000000..8c1e8e1 Binary files /dev/null and b/learning/k8s-practice/spring-blade/index.assets/springblade-framework.png differ diff --git a/learning/k8s-practice/spring-blade/index.md b/learning/k8s-practice/spring-blade/index.md new file mode 100644 index 0000000..1aadfd9 --- /dev/null +++ b/learning/k8s-practice/spring-blade/index.md @@ -0,0 +1,200 @@ +--- +layout: LearningLayout +description: Kubernetes教程_使用Kuboard在Kubernetes上部署Spring_Cloud微服务平台SpringBlade +meta: + - name: keywords + content: Kubernetes教程,K8S教程,Kubernetes微服务,Kubernetes Spring Cloud +--- + +# 在Kubernetes上部署SpringCloud + + + +## 在 K8S 上部署 SpringBlade + +本系列文章将描述如何使用 Kuboard v3 在 Kubernetes 上部署 SpringBlade 应用的如下组件: + +**展现层:** `saber-web` + +**API网关层:** `blade-gateway` + +**中间件层:** `blade-swagger`、`sentinel`、`blade-redis`、`nacos` + +**微服务层:** `blade-admin`、`blade-auth`、`blade-desk`、`blade-develop`、`blade-log`、`blade-report`、`blade-resource`、`blade-system`、`blade-user` + +**持久层:** `nacos-mysql`、`saber-db` + + + +本系列文章中所使用的镜像都是基于 SpringBlade v3.0.3 版本进行构建。 + + + +![image-20210501144136997](./index.assets/image-20210501144136997.png) + + + +本系列文章的目录如下: + + + + + +::: tip SpringBlade 答疑 + +- 官网地址:[https://bladex.vip](https://bladex.vip/) +- 问答社区:[https://sns.bladex.vip](https://sns.bladex.vip/) +- 会员计划:[SpringBlade会员计划](https://gitee.com/smallc/SpringBlade/wikis/SpringBlade会员计划) +- 交流一群:`477853168`(满) +- 交流二群:`751253339`(满) +- 交流三群:`784729540`(满) +- 交流四群:`1034621754`(满) +- 交流五群:`946350912` + +::: + + + +## SpringBlade 微服务开发平台介绍 + + + +[![star](https://gitee.com/smallc/SpringBlade/badge/star.svg?theme=white)](https://gitee.com/smallc/SpringBlade/stargazers) + +[![fork](https://gitee.com/smallc/SpringBlade/badge/fork.svg?theme=white)](https://gitee.com/smallc/SpringBlade/members) + +[![Fork me on Gitee](https://gitee.com/smallc/SpringBlade/widgets/widget_6.svg)](https://gitee.com/smallc/SpringBlade) + + + +- 采用前后端分离的模式,前端开源两个框架:[Sword](https://gitee.com/smallc/Sword) (基于 React、Ant Design)、[Saber](https://gitee.com/smallc/Saber) (基于 Vue、Element-UI) +- 后端采用SpringCloud全家桶,并同时对其基础组件做了高度的封装,单独开源出一个框架:[BladeTool](https://github.com/chillzhuang/blade-tool) +- [BladeTool](https://github.com/chillzhuang/blade-tool)已推送至Maven中央库,直接引入即可,减少了工程的臃肿,也可更注重于业务开发 +- 集成Sentinel从流量控制、熔断降级、系统负载等多个维度保护服务的稳定性。 +- 注册中心、配置中心选型Nacos,为工程瘦身的同时加强各模块之间的联动。 +- 使用Traefik进行反向代理,监听后台变化自动化应用新的配置文件。 +- 极简封装了多租户底层,用更少的代码换来拓展性更强的SaaS多租户系统。 +- 借鉴OAuth2,实现了多终端认证系统,可控制子系统的token权限互相隔离。 +- 借鉴Security,封装了Secure模块,采用JWT做Token认证,可拓展集成Redis等细颗粒度控制方案。 +- 稳定生产了三年,经历了从 Camden -> Hoxton -> 2020 的技术架构,也经历了从fat jar -> docker -> k8s + jenkins的部署架构。 +- 项目分包明确,规范微服务的开发模式,使包与包之间的分工清晰。 + + + +* 架构图 + + ![img](./index.assets/springblade-framework.png) + + + +* 趋势图 + + Stargazers over time + + + +* 项目地址 + * 后端Gitee地址:[https://gitee.com/smallc/SpringBlade](https://gitee.com/smallc/SpringBlade) + * 后端Github地址:[https://github.com/chillzhuang/SpringBlade](https://github.com/chillzhuang/SpringBlade) + * 后端SpringBoot版:[https://gitee.com/smallc/SpringBlade/tree/boot/](https://gitee.com/smallc/SpringBlade/tree/boot/) + * 前端框架Sword(基于React):[https://gitee.com/smallc/Sword](https://gitee.com/smallc/Sword) + * 前端框架Saber(基于Vue):[https://gitee.com/smallc/Saber](https://gitee.com/smallc/Saber) + * 核心框架项目地址:[https://github.com/chillzhuang/blade-tool](https://github.com/chillzhuang/blade-tool) + +* 开源协议 + Apache Licence 2.0 ([英文原文](http://www.apache.org/licenses/LICENSE-2.0.html)) + Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。 + 需要满足的条件如下: + * 需要给代码的用户一份Apache Licence + * 如果你修改了代码,需要在被修改的文件中说明。 + * 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。 + * 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。 + Apache Licence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。 + +* 用户权益 + * 允许免费用于学习、毕设、公司项目、私活等。 + * 对未经过授权和不遵循 Apache 2.0 协议二次开源或者商业化我们将追究到底。 + * 参考请注明:参考自 SpringBlade:https://gitee.com/smallc/SpringBlade 。另请遵循 Apache 2.0 协议。 + * `注意`:若禁止条款被发现有权追讨 **19999** 的授权费。 + +* 界面 + + [BladeX](https://bladex.vip/#/vip) 工作流一览 + + + + + + + + + + + + + +
    + + #### [Sword](https://gitee.com/smallc/Sword) 界面一览 + + + + + + + + + + + + + + + + + + + + + +
    + +* [Saber](https://gitee.com/smallc/Saber) 界面一览 + + + + + + + + + + + + + +
    + +* 监控界面一览 + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/learning/k8s-practice/spring-blade/prepare/build.md b/learning/k8s-practice/spring-blade/prepare/build.md new file mode 100644 index 0000000..d8c5fc1 --- /dev/null +++ b/learning/k8s-practice/spring-blade/prepare/build.md @@ -0,0 +1,13 @@ +--- +layout: LearningLayout +description: Kubernetes教程_使用Kuboard在Kubernetes上部署Spring_Cloud微服务平台SpringBlade +meta: + - name: keywords + content: Kubernetes教程,K8S教程,Kubernetes微服务,Kubernetes Spring Cloud +--- + +# 构建 SpringBlade 容器镜像 + + + +正在撰写,预计5月10日前提供此文档。 diff --git a/learning/k8s-practice/spring-blade/prepare/prepare.assets/image-20210501171012263.png b/learning/k8s-practice/spring-blade/prepare/prepare.assets/image-20210501171012263.png new file mode 100644 index 0000000..70db560 Binary files /dev/null and b/learning/k8s-practice/spring-blade/prepare/prepare.assets/image-20210501171012263.png differ diff --git a/learning/k8s-practice/spring-blade/prepare/prepare.assets/image-20210501171137417.png b/learning/k8s-practice/spring-blade/prepare/prepare.assets/image-20210501171137417.png new file mode 100644 index 0000000..081a563 Binary files /dev/null and b/learning/k8s-practice/spring-blade/prepare/prepare.assets/image-20210501171137417.png differ diff --git a/learning/k8s-practice/spring-blade/prepare/prepare.assets/image-20210501171255896.png b/learning/k8s-practice/spring-blade/prepare/prepare.assets/image-20210501171255896.png new file mode 100644 index 0000000..b92c393 Binary files /dev/null and b/learning/k8s-practice/spring-blade/prepare/prepare.assets/image-20210501171255896.png differ diff --git a/learning/k8s-practice/spring-blade/prepare/prepare.assets/image-20210501171419961.png b/learning/k8s-practice/spring-blade/prepare/prepare.assets/image-20210501171419961.png new file mode 100644 index 0000000..cfc42fa Binary files /dev/null and b/learning/k8s-practice/spring-blade/prepare/prepare.assets/image-20210501171419961.png differ diff --git a/learning/k8s-practice/spring-blade/prepare/prepare.md b/learning/k8s-practice/spring-blade/prepare/prepare.md new file mode 100644 index 0000000..4502b38 --- /dev/null +++ b/learning/k8s-practice/spring-blade/prepare/prepare.md @@ -0,0 +1,89 @@ +--- +layout: LearningLayout +description: Kubernetes教程_使用Kuboard在Kubernetes上部署Spring_Cloud微服务平台SpringBlade +meta: + - name: keywords + content: Kubernetes教程,K8S教程,Kubernetes微服务,Kubernetes Spring Cloud +--- + +# 环境准备 + + + +按照本系列文档在 Kubernetes 上部署 SpringBlade 时,需要准备如下内容:`Kubernetes`、`Kuboard`、`docker 镜像`、`Kubernetes 名称空间`。 + +## Kubernetes + +* 版本不低于 `v1.16.0`; + * [使用kubeadm安装kubernetes](/install/install-k8s.html) +* 可用的总内存不低于 10GiB; +* 有效的存储类 + * 关于存储类的介绍请参考 [StorageClass](/learning/k8s-intermediate/persistent/storage-class.html) + * 如果您的集群中尚未配置存储类,请参考如下三种存储类配置中的任意一种: + * [使用 CephFS 作为存储类](/learning/k8s-intermediate/persistent/ceph/k8s-config.html) + * [使用 CephFS 作为存储类 - Rook](/learning/k8s-intermediate/persistent/ceph/rook-config.html) + * [使用 NFS 作为存储类](/learning/k8s-intermediate/persistent/nfs.html) + +## Kuboard + +* 版本不低于 `v3.1.1.5` + * 请参考 [安装 Kubernetes 多集群管理工具 - Kuboard v3](/install/v3/install.html) + +## docker 镜像 + +本系列文档中所用到的镜像已经被提前发布到一个公共镜像仓库,标签如下: + +如果您想要自己构建这些镜像,请参考文档 [构建 SpringBlade 容器镜像](./build.html) + +```sh +swr.cn-east-2.myhuaweicloud.com/blade/blade-admin:3.0.3 +swr.cn-east-2.myhuaweicloud.com/blade/blade-auth:3.0.3 +swr.cn-east-2.myhuaweicloud.com/blade/blade-desk:3.0.3 +swr.cn-east-2.myhuaweicloud.com/blade/blade-develop:3.0.3 +swr.cn-east-2.myhuaweicloud.com/blade/blade-gateway:3.0.3 +swr.cn-east-2.myhuaweicloud.com/blade/blade-log:3.0.3 +swr.cn-east-2.myhuaweicloud.com/blade/blade-report:3.0.3 +swr.cn-east-2.myhuaweicloud.com/blade/blade-resource:3.0.3 +swr.cn-east-2.myhuaweicloud.com/blade/blade-swagger:3.0.3 +swr.cn-east-2.myhuaweicloud.com/blade/blade-system:3.0.3 +swr.cn-east-2.myhuaweicloud.com/blade/blade-user:3.0.3 +swr.cn-east-2.myhuaweicloud.com/blade/blade-web:3.0.3 +swr.cn-east-2.myhuaweicloud.com/blade/saber-db:3.0.3 +swr.cn-east-2.myhuaweicloud.com/blade/sentinel-dashboard:1.8.0 # 同 bladex/sentinel-dashboard:1.8.0 +swr.cn-east-2.myhuaweicloud.com/blade/redis:5.0.2-alpine # 同 redis:5.0.2-alpine +swr.cn-east-2.myhuaweicloud.com/blade/nacos-server:2.0.0 # 同 nacos/nacos-server:2.0.0 +swr.cn-east-2.myhuaweicloud.com/blade/nacos-mysql:5.7 # 同 nacos/nacos-mysql:5.7 +``` + +## Kubernetes 名称空间 + +创建一个 Kubernetes 名称空间用于部署 SpringBlade,例如 `spring-blade`。 + +创建名称空间的步骤如下: + +* 打开 Kuboard 首页,如下图所示: + + > 假设您已经导入了至少一个 Kubernetes 集群到 Kuboard + + ![image-20210501171012263](./prepare.assets/image-20210501171012263.png) + +* 点击其中的一个 `已就绪` 状态的集群,如下图所示: + + ![image-20210501171137417](./prepare.assets/image-20210501171137417.png) + +* 点击上图中 `编辑名称空间列表` 的按钮,结果如下图所示: + + ![image-20210501171255896](./prepare.assets/image-20210501171255896.png) + +* 点击上图中的 `创 建` 按钮,结果如下图所示: + + ![image-20210501171419961](./prepare.assets/image-20210501171419961.png) + +* 在上图中输入名称空间的名称 `spring-blade`,并点击 `保存` 按钮,完成名称空间的创建。 + + +::: tip 开始部署 + +至此,您已经做好了所有准备,可以使用 Kuboard 在 Kubernetes 上 [部署 SpringBlade](../deploy/index.html) 了 + +::: diff --git a/package.json b/package.json index 56afa9b..eb6a987 100644 --- a/package.json +++ b/package.json @@ -4,31 +4,30 @@ "docs:build": "vuepress build ." }, "dependencies": { - "@vssue/api-github-v4": "^1.4.0", - "@vssue/vuepress-plugin-vssue": "^1.4.6", - "@vuepress/plugin-active-header-links": "^1.7.1", - "@vuepress/plugin-back-to-top": "^1.7.1", - "@vuepress/plugin-google-analytics": "^1.7.1", - "@vuepress/plugin-medium-zoom": "^1.7.1", - "@vuepress/plugin-nprogress": "^1.7.1", + "@vssue/api-github-v4": "^1.4.7", + "@vssue/vuepress-plugin-vssue": "^1.4.8", + "@vuepress/plugin-active-header-links": "^1.8.2", + "@vuepress/plugin-back-to-top": "^1.8.2", + "@vuepress/plugin-google-analytics": "^1.8.2", + "@vuepress/plugin-medium-zoom": "^1.8.2", + "@vuepress/plugin-nprogress": "^1.8.2", "animated-number-vue": "^1.0.0", "aos": "^2.3.4", "axios": "^0.19.2", "babel-plugin-component": "^1.1.1", - "bootstrap": "^4.5.0", - "bootstrap-vue": "^2.15.0", + "bootstrap": "^4.6.0", + "bootstrap-vue": "^2.21.2", "date-fns": "^1.30.1", "esm": "^3.2.25", - "nodemon": "^2.0.4", - "reduce-css-calc": "^2.1.7", - "vue2-animate": "^2.1.3", - "vuepress": "^1.7.1", + "reduce-css-calc": "^2.1.8", + "vue2-animate": "^2.1.4", + "vuepress": "^1.8.2", "vuepress-plugin-baidu-autopush": "^1.0.1", "vuepress-plugin-code-copy": "^1.0.6", - "vuepress-plugin-code-switcher": "^1.0.3", - "vuepress-plugin-named-chunks": "^1.1.3", + "vuepress-plugin-code-switcher": "^1.1.0", + "vuepress-plugin-named-chunks": "^1.1.4", "vuepress-plugin-reading-progress": "^1.0.10", - "vuepress-plugin-seo": "^0.1.3", + "vuepress-plugin-seo": "^0.1.4", "vuepress-plugin-sitemap": "^2.3.1" } } diff --git a/support/change-log/v3.0.x.md b/support/change-log/v3.0.x.md index 78ac324..1385dae 100644 --- a/support/change-log/v3.0.x.md +++ b/support/change-log/v3.0.x.md @@ -36,15 +36,25 @@ description: 本文描述了Kuboard_v3.x的版本变更说明 * 工作负载编辑器 * 根据 K8S 版本支持情况显示 `spec.template.spec.containers[*].startupProbe` * 增加探针用途说明 + * 增加 hostPort 字段的说明 + * 配置字典选择器,可以快速创建配置字典 + * 密文选择器,可以快速创建密文 * 工作负载详情页 * 可以显示容器的环境变量 * 可以显示容器的数据卷挂载情况 + * 可以显示 starupProbe + +* 密文、配置字典 + * 可以保留 value 为空的条目 * 套件安装 * 增加 StorageClass 类型的参数,避免因为存储类参数填写错误导致的套件安装失败 * 资源监控套件不能离线安装的问题 +* KuboardProxy + * 只使用 Cookie 中的 Token,避免与应用的 `Authorization` HTTP Header 产生冲突 + **问题修正** * 工作负载编辑器 @@ -56,6 +66,7 @@ description: 本文描述了Kuboard_v3.x的版本变更说明 * v1.20 及以上版本,删除 Ingress 失败的问题 * 导入工作负载 * 部分情况下不能导入工作负载的问题 + * 部分情况下,创建 Service 失败的问题 ## v3.1.1.4 diff --git a/yarn.lock b/yarn.lock index 9699cee..fbc2b42 100644 --- a/yarn.lock +++ b/yarn.lock @@ -850,14 +850,14 @@ resolved "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" integrity sha1-K1o6s/kYzKSKjHVMCBaOPwPrphs= -"@nuxt/opencollective@^0.3.0": - version "0.3.0" - resolved "https://registry.npm.taobao.org/@nuxt/opencollective/download/@nuxt/opencollective-0.3.0.tgz#11d8944dcf2d526e31660bb69570be03f8fb72b7" - integrity sha1-EdiUTc8tUm4xZgu2lXC+A/j7crc= +"@nuxt/opencollective@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@nuxt/opencollective/-/opencollective-0.3.2.tgz#83cb70cdb2bac5fad6f8c93529e7b11187d49c02" + integrity sha512-XG7rUdXG9fcafu9KTDIYjJSkRO38EwjlKYIb5TQ/0WDbiTUTtUtgncMscKOYzfsY86kGs05pAuMOR+3Fi0aN3A== dependencies: - chalk "^2.4.2" - consola "^2.10.1" - node-fetch "^2.6.0" + chalk "^4.1.0" + consola "^2.15.0" + node-fetch "^2.6.1" "@sindresorhus/is@^0.14.0": version "0.14.0" @@ -904,28 +904,28 @@ resolved "https://registry.npm.taobao.org/@types/q/download/@types/q-1.5.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fq%2Fdownload%2F%40types%2Fq-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" integrity sha1-FZJUFOCtLNdlv+9YhC9+JqesyyQ= -"@vssue/api-github-v4@^1.4.0": - version "1.4.0" - resolved "https://registry.npm.taobao.org/@vssue/api-github-v4/download/@vssue/api-github-v4-1.4.0.tgz#30defd2220ff50e5ed4c50159e42eba52b004748" - integrity sha1-MN79IiD/UOXtTFAVnkLrpSsAR0g= +"@vssue/api-github-v4@^1.4.7": + version "1.4.7" + resolved "https://registry.yarnpkg.com/@vssue/api-github-v4/-/api-github-v4-1.4.7.tgz#873554ec8e8351e5eeb8ca76246c2914b20e1bc4" + integrity sha512-Tk4ZYyX03RwoVy29RW1+ZdqESzX/gLsN9010Eaq0WT/2pNV+8quyT9TMypIZp6rZCGNYTSdxB8ET4IiF7SLKXQ== dependencies: - "@vssue/utils" "^1.4.0" - axios "^0.18.1" + "@vssue/utils" "^1.4.7" + axios "^0.21.1" -"@vssue/utils@^1.4.0": - version "1.4.0" - resolved "https://registry.npm.taobao.org/@vssue/utils/download/@vssue/utils-1.4.0.tgz#3cc2fd8492a3409e343289981e2209b6ca2f8313" - integrity sha1-PML9hJKjQJ40MomYHiIJtsovgxM= +"@vssue/utils@^1.4.7": + version "1.4.7" + resolved "https://registry.yarnpkg.com/@vssue/utils/-/utils-1.4.7.tgz#58a9ec2687d26080aa04cab17e8f87049f1342c3" + integrity sha512-e94karP4szmSNT2L4bgIT+VGToBSY3bdlgmGcomcD2qCXTWDK4krSOYm8ES+BhHTcmCvzQYU/xenHR4tzrythA== dependencies: date-fns "^1.29.0" qs "^6.6.0" -"@vssue/vuepress-plugin-vssue@^1.4.6": - version "1.4.6" - resolved "https://registry.npm.taobao.org/@vssue/vuepress-plugin-vssue/download/@vssue/vuepress-plugin-vssue-1.4.6.tgz#0a231095f58b29bbd64c9ea964fa73add909ccfd" - integrity sha1-CiMQlfWLKbvWTJ6pZPpzrdkJzP0= +"@vssue/vuepress-plugin-vssue@^1.4.8": + version "1.4.8" + resolved "https://registry.yarnpkg.com/@vssue/vuepress-plugin-vssue/-/vuepress-plugin-vssue-1.4.8.tgz#37b8ada338c1222a143eb648555372d2959f4624" + integrity sha512-0QzegHl/Rx4/XgXswThIJi4Yk+b6AIaM450jX6p4RbOM6yOTzEKLTMduUo54Rvhq/NHNusu4Yy/w1iY8NTqBEg== dependencies: - vssue "^1.4.6" + vssue "^1.4.8" "@vue/babel-helper-vue-jsx-merge-props@^1.0.0": version "1.0.0" @@ -1028,18 +1028,18 @@ optionalDependencies: prettier "^1.18.2" -"@vuepress/core@1.7.1": - version "1.7.1" - resolved "https://registry.npm.taobao.org/@vuepress/core/download/@vuepress/core-1.7.1.tgz#e92faad0e9445fdd775f8e0d65e927bc35e80571" - integrity sha1-6S+q0OlEX913X44NZeknvDXoBXE= +"@vuepress/core@1.8.2": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@vuepress/core/-/core-1.8.2.tgz#4f5bafc894691bfea4146294a582a129483daf2a" + integrity sha512-lh9BLC06k9s0wxTuWtCkiNj49fkbW87enp0XSrFZHEoyDGSGndQjZmMMErcHc5Hx7nrW1nzc33sPH1NNtJl0hw== dependencies: "@babel/core" "^7.8.4" "@vue/babel-preset-app" "^4.1.2" - "@vuepress/markdown" "1.7.1" - "@vuepress/markdown-loader" "1.7.1" - "@vuepress/plugin-last-updated" "1.7.1" - "@vuepress/plugin-register-components" "1.7.1" - "@vuepress/shared-utils" "1.7.1" + "@vuepress/markdown" "1.8.2" + "@vuepress/markdown-loader" "1.8.2" + "@vuepress/plugin-last-updated" "1.8.2" + "@vuepress/plugin-register-components" "1.8.2" + "@vuepress/shared-utils" "1.8.2" autoprefixer "^9.5.1" babel-loader "^8.0.4" cache-loader "^3.0.0" @@ -1072,21 +1072,21 @@ webpack-merge "^4.1.2" webpackbar "3.2.0" -"@vuepress/markdown-loader@1.7.1": - version "1.7.1" - resolved "https://registry.npm.taobao.org/@vuepress/markdown-loader/download/@vuepress/markdown-loader-1.7.1.tgz#f3ab20965d5dec6e2fc2d11c78ef1a9f08d62f72" - integrity sha1-86sgll1d7G4vwtEceO8anwjWL3I= +"@vuepress/markdown-loader@1.8.2": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@vuepress/markdown-loader/-/markdown-loader-1.8.2.tgz#b2a58291a967f2bbe0af6e58f9542f5911879233" + integrity sha512-mWzFXikCUcAN/chpKkqZpRYKdo0312hMv8cBea2hvrJYV6y4ODB066XKvXN8JwOcxuCjxWYJkhWGr+pXq1oTtw== dependencies: - "@vuepress/markdown" "1.7.1" + "@vuepress/markdown" "1.8.2" loader-utils "^1.1.0" lru-cache "^5.1.1" -"@vuepress/markdown@1.7.1": - version "1.7.1" - resolved "https://registry.npm.taobao.org/@vuepress/markdown/download/@vuepress/markdown-1.7.1.tgz#56f60c2362fd82b8f2702eefa366c0d5b02fdcbd" - integrity sha1-VvYMI2L9grjycC7vo2bA1bAv3L0= +"@vuepress/markdown@1.8.2": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@vuepress/markdown/-/markdown-1.8.2.tgz#50ea5a1962591a436b26d1aa2b111df37eb9ea8a" + integrity sha512-zznBHVqW+iBkznF/BO/GY9RFu53khyl0Ey0PnGqvwCJpRLNan6y5EXgYumtjw2GSYn5nDTTALYxtyNBdz64PKg== dependencies: - "@vuepress/shared-utils" "1.7.1" + "@vuepress/shared-utils" "1.8.2" markdown-it "^8.4.1" markdown-it-anchor "^5.0.2" markdown-it-chain "^1.3.0" @@ -1094,84 +1094,62 @@ markdown-it-table-of-contents "^0.4.0" prismjs "^1.13.0" -"@vuepress/plugin-active-header-links@1.7.1", "@vuepress/plugin-active-header-links@^1.7.1": - version "1.7.1" - resolved "https://registry.npm.taobao.org/@vuepress/plugin-active-header-links/download/@vuepress/plugin-active-header-links-1.7.1.tgz#5a16281bebb977fc1c2b93d992b1a3b7ff840641" - integrity sha1-WhYoG+u5d/wcK5PZkrGjt/+EBkE= +"@vuepress/plugin-active-header-links@1.8.2", "@vuepress/plugin-active-header-links@^1.8.2": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@vuepress/plugin-active-header-links/-/plugin-active-header-links-1.8.2.tgz#0cb9b29c826dd97d35357a9b09c962ef782cb793" + integrity sha512-JmXAQg8D7J8mcKe2Ue3BZ9dOCzJMJXP4Cnkkc/IrqfDg0ET0l96gYWZohCqlvRIWt4f0VPiFAO4FLYrW+hko+g== dependencies: lodash.debounce "^4.0.8" -"@vuepress/plugin-back-to-top@^1.7.1": - version "1.7.1" - resolved "https://registry.npm.taobao.org/@vuepress/plugin-back-to-top/download/@vuepress/plugin-back-to-top-1.7.1.tgz#8bdc4a2de95f8244f167b3b3066c2610b88aabeb" - integrity sha1-i9xKLelfgkTxZ7OzBmwmELiKq+s= +"@vuepress/plugin-back-to-top@^1.8.2": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@vuepress/plugin-back-to-top/-/plugin-back-to-top-1.8.2.tgz#e9794409d1d589e4952b0700291270d2696e6d01" + integrity sha512-htAf2m8+6cGmYQexWerznGBY10y1E4TBfebYC3Y3wqNjFjvXUmRKcAG/u6Yxvey4OFkQUxbth2ilKi/GlIW8aQ== dependencies: lodash.debounce "^4.0.8" -"@vuepress/plugin-google-analytics@^1.7.1": - version "1.7.1" - resolved "https://registry.npm.taobao.org/@vuepress/plugin-google-analytics/download/@vuepress/plugin-google-analytics-1.7.1.tgz#c337e13c8a27f6fea911a04db22a3f3596a571fb" - integrity sha1-wzfhPIon9v6pEaBNsio/NZalcfs= +"@vuepress/plugin-google-analytics@^1.8.2": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@vuepress/plugin-google-analytics/-/plugin-google-analytics-1.8.2.tgz#96cf65f1f0ecbb3bcf6b0d10089dafe2aea875bc" + integrity sha512-BMFayLzT2BvXmnhM9mDHw0UPU7J0pH1X9gQA4HmZxOf7f3+atK5eJGsc1Ia/+1FTG2ESvhFLUU/CC3h5arjEJw== -"@vuepress/plugin-last-updated@1.7.1": - version "1.7.1" - resolved "https://registry.npm.taobao.org/@vuepress/plugin-last-updated/download/@vuepress/plugin-last-updated-1.7.1.tgz#668c55daa6b8bc1d8ee42cdb4169cf67c01b6e97" - integrity sha1-ZoxV2qa4vB2O5CzbQWnPZ8Abbpc= +"@vuepress/plugin-last-updated@1.8.2": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@vuepress/plugin-last-updated/-/plugin-last-updated-1.8.2.tgz#7ce689f8d5050cf0213949bc2e5aa879c09ff4b1" + integrity sha512-pYIRZi52huO9b6HY3JQNPKNERCLzMHejjBRt9ekdnJ1xhLs4MmRvt37BoXjI/qzvXkYtr7nmGgnKThNBVRTZuA== dependencies: cross-spawn "^6.0.5" -"@vuepress/plugin-medium-zoom@^1.7.1": - version "1.7.1" - resolved "https://registry.npm.taobao.org/@vuepress/plugin-medium-zoom/download/@vuepress/plugin-medium-zoom-1.7.1.tgz#170598bba9941dbd047cffaa659023db8f46e337" - integrity sha1-FwWYu6mUHb0EfP+qZZAj249G4zc= +"@vuepress/plugin-medium-zoom@^1.8.2": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@vuepress/plugin-medium-zoom/-/plugin-medium-zoom-1.8.2.tgz#0243dd27edf0c710f9a41a234d253d76ab51e625" + integrity sha512-Mljso/8E6IbNmIKmwKeC6FDfnhKY3fsOUSs5kEGzz3RQwd54eshqHAMRVwW4LZkYZHhwQXF8+qk7YqoMZB7jjg== dependencies: medium-zoom "^1.0.4" -"@vuepress/plugin-nprogress@1.7.1", "@vuepress/plugin-nprogress@^1.7.1": - version "1.7.1" - resolved "https://registry.npm.taobao.org/@vuepress/plugin-nprogress/download/@vuepress/plugin-nprogress-1.7.1.tgz#101ebf720eaa635a473e16ca16e7b4a7850331fa" - integrity sha1-EB6/cg6qY1pHPhbKFue0p4UDMfo= +"@vuepress/plugin-nprogress@1.8.2", "@vuepress/plugin-nprogress@^1.8.2": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@vuepress/plugin-nprogress/-/plugin-nprogress-1.8.2.tgz#dc6c082925420c8c59ecb7fc2d4a9401f6d4664a" + integrity sha512-3TOBee2NM3WLr1tdjDTGfrAMggjN+OlEPyKyv8FqThsVkDYhw48O3HwqlThp9KX7UbL3ExxIFBwWRFLC+kYrdw== dependencies: nprogress "^0.2.0" -"@vuepress/plugin-register-components@1.7.1": - version "1.7.1" - resolved "https://registry.npm.taobao.org/@vuepress/plugin-register-components/download/@vuepress/plugin-register-components-1.7.1.tgz#1ff58e931e8c27d64f9b86f2df879ddaceccdebe" - integrity sha1-H/WOkx6MJ9ZPm4by34ed2s7M3r4= +"@vuepress/plugin-register-components@1.8.2", "@vuepress/plugin-register-components@^1.8.0": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@vuepress/plugin-register-components/-/plugin-register-components-1.8.2.tgz#2fb45a68b0a1efb8822670d95c3b231a2d0eb74d" + integrity sha512-6SUq3nHFMEh9qKFnjA8QnrNxj0kLs7+Gspq1OBU8vtu0NQmSvLFZVaMV7pzT/9zN2nO5Pld5qhsUJv1g71MrEA== dependencies: - "@vuepress/shared-utils" "1.7.1" + "@vuepress/shared-utils" "1.8.2" -"@vuepress/plugin-register-components@^1.0.0-alpha.0": - version "1.5.2" - resolved "https://registry.npm.taobao.org/@vuepress/plugin-register-components/download/@vuepress/plugin-register-components-1.5.2.tgz#36a6807e523c17057bc3e9c0722bd26558f4dd1a" - integrity sha1-NqaAflI8FwV7w+nAcivSZVj03Ro= - dependencies: - "@vuepress/shared-utils" "1.5.2" +"@vuepress/plugin-search@1.8.2": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@vuepress/plugin-search/-/plugin-search-1.8.2.tgz#74b92f663acf6b4560e15dc0442a84c4e874e206" + integrity sha512-JrSJr9o0Kar14lVtZ4wfw39pplxvvMh8vDBD9oW09a+6Zi/4bySPGdcdaqdqGW+OHSiZNvG+6uyfKSBBBqF6PA== -"@vuepress/plugin-search@1.7.1": - version "1.7.1" - resolved "https://registry.npm.taobao.org/@vuepress/plugin-search/download/@vuepress/plugin-search-1.7.1.tgz#f52b6e77af30f452213bc677741cefe8a8309be2" - integrity sha1-9Stud68w9FIhO8Z3dBzv6Kgwm+I= - -"@vuepress/shared-utils@1.5.2": - version "1.5.2" - resolved "https://registry.npm.taobao.org/@vuepress/shared-utils/download/@vuepress/shared-utils-1.5.2.tgz#5f5bcd2365baa3f80feecd10c4920a4e1463df73" - integrity sha1-X1vNI2W6o/gP7s0QxJIKThRj33M= - dependencies: - chalk "^2.3.2" - diacritics "^1.3.0" - escape-html "^1.0.3" - fs-extra "^7.0.1" - globby "^9.2.0" - gray-matter "^4.0.1" - hash-sum "^1.0.2" - semver "^6.0.0" - upath "^1.1.0" - -"@vuepress/shared-utils@1.7.1": - version "1.7.1" - resolved "https://registry.npm.taobao.org/@vuepress/shared-utils/download/@vuepress/shared-utils-1.7.1.tgz#028bc6003247bb4c60cdc96f231eecfb55e7b85d" - integrity sha1-AovGADJHu0xgzclvIx7s+1XnuF0= +"@vuepress/shared-utils@1.8.2": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@vuepress/shared-utils/-/shared-utils-1.8.2.tgz#5ec1601f2196aca34ad82eed7c9be2d7948f705b" + integrity sha512-6kGubc7iBDWruEBUU7yR+sQ++SOhMuvKWvWeTZJKRZedthycdzYz7QVpua0FaZSAJm5/dIt8ymU4WQvxTtZgTQ== dependencies: chalk "^2.3.2" escape-html "^1.0.3" @@ -1183,14 +1161,14 @@ toml "^3.0.0" upath "^1.1.0" -"@vuepress/theme-default@1.7.1": - version "1.7.1" - resolved "https://registry.npm.taobao.org/@vuepress/theme-default/download/@vuepress/theme-default-1.7.1.tgz#36fee5bb5165798c0082c512cbf4d94352260d97" - integrity sha1-Nv7lu1FleYwAgsUSy/TZQ1ImDZc= +"@vuepress/theme-default@1.8.2": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@vuepress/theme-default/-/theme-default-1.8.2.tgz#7f474036c752c1f9801b83f68f5c70c092b182b4" + integrity sha512-rE7M1rs3n2xp4a/GrweO8EGwqFn3EA5gnFWdVmVIHyr7C1nix+EqjpPQF1SVWNnIrDdQuCw38PqS+oND1K2vYw== dependencies: - "@vuepress/plugin-active-header-links" "1.7.1" - "@vuepress/plugin-nprogress" "1.7.1" - "@vuepress/plugin-search" "1.7.1" + "@vuepress/plugin-active-header-links" "1.8.2" + "@vuepress/plugin-nprogress" "1.8.2" + "@vuepress/plugin-search" "1.8.2" docsearch.js "^2.5.2" lodash "^4.17.15" stylus "^0.54.8" @@ -1502,14 +1480,6 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -anymatch@~3.1.1: - version "3.1.1" - resolved "https://registry.npm.taobao.org/anymatch/download/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" - integrity sha1-xV7PAhheJGklk5kxDBc84xIzsUI= - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - aos@^2.3.4: version "2.3.4" resolved "https://registry.npm.taobao.org/aos/download/aos-2.3.4.tgz#eb1c29f5c1806a197cf6323080747547edd3db8e" @@ -1664,14 +1634,6 @@ aws4@^1.8.0: resolved "https://registry.npm.taobao.org/aws4/download/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" integrity sha1-oXs6jqgRBg501H0wYSJACtRJeuI= -axios@^0.18.1: - version "0.18.1" - resolved "https://registry.npm.taobao.org/axios/download/axios-0.18.1.tgz#ff3f0de2e7b5d180e757ad98000f1081b87bcea3" - integrity sha1-/z8N4ue10YDnV62YAA8Qgbh7zqM= - dependencies: - follow-redirects "1.5.10" - is-buffer "^2.0.2" - axios@^0.19.2: version "0.19.2" resolved "https://registry.npm.taobao.org/axios/download/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" @@ -1679,6 +1641,13 @@ axios@^0.19.2: dependencies: follow-redirects "1.5.10" +axios@^0.21.1: + version "0.21.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" + integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== + dependencies: + follow-redirects "^1.10.0" + babel-loader@^8.0.4: version "8.1.0" resolved "https://registry.npm.taobao.org/babel-loader/download/babel-loader-8.1.0.tgz?cache=0&sync_timestamp=1584715959282&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-loader%2Fdownload%2Fbabel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" @@ -1754,11 +1723,6 @@ binary-extensions@^1.0.0: resolved "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U= -binary-extensions@^2.0.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" - integrity sha1-MPpAyef+B9vIlWeM0ocCTeokHdk= - bindings@^1.5.0: version "1.5.0" resolved "https://registry.npm.taobao.org/bindings/download/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" @@ -1814,21 +1778,21 @@ boolbase@^1.0.0, boolbase@~1.0.0: resolved "https://registry.npm.taobao.org/boolbase/download/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= -bootstrap-vue@^2.15.0: - version "2.15.0" - resolved "https://registry.npm.taobao.org/bootstrap-vue/download/bootstrap-vue-2.15.0.tgz#0dfc12c054496c0f10efed510da1def41697cf3c" - integrity sha1-DfwSwFRJbA8Q7+1RDaHe9BaXzzw= +bootstrap-vue@^2.21.2: + version "2.21.2" + resolved "https://registry.yarnpkg.com/bootstrap-vue/-/bootstrap-vue-2.21.2.tgz#ec38f66c3a2205becccddb6158a991d96509ed0b" + integrity sha512-0Exe+4MZysqhZNXIKf4TzkvXaupxh9EHsoCRez0o5Dc0J7rlafayOEwql63qXv74CgZO8E4U8ugRNJko1vMvNw== dependencies: - "@nuxt/opencollective" "^0.3.0" - bootstrap ">=4.5.0 <5.0.0" + "@nuxt/opencollective" "^0.3.2" + bootstrap ">=4.5.3 <5.0.0" popper.js "^1.16.1" portal-vue "^2.1.7" vue-functional-data-merge "^3.1.0" -"bootstrap@>=4.5.0 <5.0.0", bootstrap@^4.5.0: - version "4.5.0" - resolved "https://registry.npm.taobao.org/bootstrap/download/bootstrap-4.5.0.tgz#97d9dbcb5a8972f8722c9962483543b907d9b9ec" - integrity sha1-l9nby1qJcvhyLJliSDVDuQfZuew= +"bootstrap@>=4.5.3 <5.0.0", bootstrap@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.6.0.tgz#97b9f29ac98f98dfa43bf7468262d84392552fd7" + integrity sha512-Io55IuQY3kydzHtbGvQya3H+KorS/M9rSNyfCGCg9WZ4pyT/lCxIlpJgG1GXW/PswzC84Tr2fBYi+7+jFVQQBw== boxen@^4.2.0: version "4.2.0" @@ -1868,13 +1832,6 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -braces@~3.0.2: - version "3.0.2" - resolved "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha1-NFThpGLujVmeI23zNs2epPiv4Qc= - dependencies: - fill-range "^7.0.1" - brorand@^1.0.1: version "1.1.0" resolved "https://registry.npm.taobao.org/brorand/download/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" @@ -2146,6 +2103,14 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" + integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chokidar@^2.0.3, chokidar@^2.1.8: version "2.1.8" resolved "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.8.tgz?cache=0&sync_timestamp=1594866429503&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" @@ -2165,21 +2130,6 @@ chokidar@^2.0.3, chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chokidar@^3.2.2: - version "3.4.1" - resolved "https://registry.npm.taobao.org/chokidar/download/chokidar-3.4.1.tgz?cache=0&sync_timestamp=1594866429503&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-3.4.1.tgz#e905bdecf10eaa0a0b1db0c664481cc4cbc22ba1" - integrity sha1-6QW97PEOqgoLHbDGZEgcxMvCK6E= - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.4.0" - optionalDependencies: - fsevents "~2.1.2" - chownr@^1.1.1: version "1.1.4" resolved "https://registry.npm.taobao.org/chownr/download/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" @@ -2408,7 +2358,12 @@ connect-history-api-fallback@^1.5.0, connect-history-api-fallback@^1.6.0: resolved "https://registry.npm.taobao.org/connect-history-api-fallback/download/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" integrity sha1-izIIk1kwjRERFdgcrT/Oq4iPl7w= -consola@^2.10.1, consola@^2.6.0: +consola@^2.15.0: + version "2.15.3" + resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550" + integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw== + +consola@^2.6.0: version "2.14.0" resolved "https://registry.npm.taobao.org/consola/download/consola-2.14.0.tgz?cache=0&sync_timestamp=1593182154186&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconsola%2Fdownload%2Fconsola-2.14.0.tgz#162ee903b6c9c4de25077d93f34ab902ebcb4dac" integrity sha1-Fi7pA7bJxN4lB32T80q5AuvLTaw= @@ -2805,7 +2760,7 @@ debug@=3.1.0, debug@~3.1.0: dependencies: ms "2.0.0" -debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: +debug@^3.1.1, debug@^3.2.5: version "3.2.6" resolved "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha1-6D0X3hbYp++3cX7b5fsQE17uYps= @@ -2946,11 +2901,6 @@ detect-node@^2.0.4: resolved "https://registry.npm.taobao.org/detect-node/download/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" integrity sha1-AU7o+PZpxcWAI9pkuBecCDooxGw= -diacritics@^1.3.0: - version "1.3.0" - resolved "https://registry.npm.taobao.org/diacritics/download/diacritics-1.3.0.tgz#3efa87323ebb863e6696cebb0082d48ff3d6f7a1" - integrity sha1-PvqHMj67hj5mls67AILUj/PW96E= - diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.npm.taobao.org/diffie-hellman/download/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -3487,13 +3437,6 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha1-GRmmp8df44ssfHflGYU12prN2kA= - dependencies: - to-regex-range "^5.0.1" - finalhandler@~1.1.2: version "1.1.2" resolved "https://registry.npm.taobao.org/finalhandler/download/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" @@ -3543,6 +3486,11 @@ follow-redirects@^1.0.0: resolved "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.12.1.tgz?cache=0&sync_timestamp=1592518278637&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.12.1.tgz#de54a6205311b93d60398ebc01cf7015682312b6" integrity sha1-3lSmIFMRuT1gOY68Ac9wFWgjErY= +follow-redirects@^1.10.0: + version "1.14.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.0.tgz#f5d260f95c5f8c105894491feee5dc8993b402fe" + integrity sha512-0vRwd7RKQBTt+mgu87mtYeofLFZpTas2S9zY+jIeuLJMNvudIgF52nr19q40HOwH5RrhWIPuj9puybzSJiRrVg== + for-in@^1.0.2: version "1.0.2" resolved "https://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -3624,11 +3572,6 @@ fsevents@^1.2.7: bindings "^1.5.0" nan "^2.12.1" -fsevents@~2.1.2: - version "2.1.3" - resolved "https://registry.npm.taobao.org/fsevents/download/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha1-+3OHA66NL5/pAMM4Nt3r7ouX8j4= - function-bind@^1.1.1: version "1.1.1" resolved "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -3683,13 +3626,6 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@~5.1.0: - version "5.1.1" - resolved "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" - integrity sha1-tsHvQXxOVmPqSY8cRa+saRa7wik= - dependencies: - is-glob "^4.0.1" - glob-to-regexp@^0.3.0: version "0.3.0" resolved "https://registry.npm.taobao.org/glob-to-regexp/download/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" @@ -4104,11 +4040,6 @@ iferr@^0.1.5: resolved "https://registry.npm.taobao.org/iferr/download/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= -ignore-by-default@^1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/ignore-by-default/download/ignore-by-default-1.0.1.tgz?cache=0&sync_timestamp=1592058614962&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore-by-default%2Fdownload%2Fignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" - integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= - ignore@^3.3.5: version "3.3.10" resolved "https://registry.npm.taobao.org/ignore/download/ignore-3.3.10.tgz?cache=0&sync_timestamp=1590809289115&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" @@ -4278,23 +4209,11 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk= - dependencies: - binary-extensions "^2.0.0" - is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha1-76ouqdqg16suoTqXsritUf776L4= -is-buffer@^2.0.2: - version "2.0.4" - resolved "https://registry.npm.taobao.org/is-buffer/download/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" - integrity sha1-PlcvI8hBGlz9lVfISeNmXgspBiM= - is-callable@^1.1.4, is-callable@^1.2.0: version "1.2.0" resolved "https://registry.npm.taobao.org/is-callable/download/is-callable-1.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-callable%2Fdownload%2Fis-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" @@ -4395,7 +4314,7 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: +is-glob@^4.0.0, is-glob@^4.0.1: version "4.0.1" resolved "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw= @@ -4422,11 +4341,6 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss= - is-obj@^2.0.0: version "2.0.0" resolved "https://registry.npm.taobao.org/is-obj/download/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" @@ -5229,10 +5143,10 @@ no-case@^2.2.0: dependencies: lower-case "^1.1.1" -node-fetch@^2.6.0: - version "2.6.0" - resolved "https://registry.npm.taobao.org/node-fetch/download/node-fetch-2.6.0.tgz?cache=0&sync_timestamp=1591866530709&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-fetch%2Fdownload%2Fnode-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" - integrity sha1-5jNFY4bUqlWGP2dqerDaqP3ssP0= +node-fetch@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== node-forge@0.9.0: version "0.9.0" @@ -5273,23 +5187,7 @@ node-releases@^1.1.58: resolved "https://registry.npm.taobao.org/node-releases/download/node-releases-1.1.59.tgz?cache=0&sync_timestamp=1594212264030&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-releases%2Fdownload%2Fnode-releases-1.1.59.tgz#4d648330641cec704bff10f8e4fe28e453ab8e8e" integrity sha1-TWSDMGQc7HBL/xD45P4o5FOrjo4= -nodemon@^2.0.4: - version "2.0.4" - resolved "https://registry.npm.taobao.org/nodemon/download/nodemon-2.0.4.tgz?cache=0&sync_timestamp=1589456222093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnodemon%2Fdownload%2Fnodemon-2.0.4.tgz#55b09319eb488d6394aa9818148c0c2d1c04c416" - integrity sha1-VbCTGetIjWOUqpgYFIwMLRwExBY= - dependencies: - chokidar "^3.2.2" - debug "^3.2.6" - ignore-by-default "^1.0.1" - minimatch "^3.0.4" - pstree.remy "^1.1.7" - semver "^5.7.1" - supports-color "^5.5.0" - touch "^3.1.0" - undefsafe "^2.0.2" - update-notifier "^4.0.0" - -nopt@1.0.10, nopt@~1.0.10: +nopt@1.0.10: version "1.0.10" resolved "https://registry.npm.taobao.org/nopt/download/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= @@ -5303,7 +5201,7 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" -normalize-path@^3.0.0, normalize-path@~3.0.0: +normalize-path@^3.0.0: version "3.0.0" resolved "https://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU= @@ -5656,11 +5554,6 @@ performance-now@^2.1.0: resolved "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4, picomatch@^2.2.1: - version "2.2.2" - resolved "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha1-IfMz6ba46v8CRo9RRupAbTRfTa0= - pify@^2.0.0: version "2.3.0" resolved "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -6128,11 +6021,6 @@ psl@^1.1.28: resolved "https://registry.npm.taobao.org/psl/download/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha1-kyb4vPsBOtzABf3/BWrM4CDlHCQ= -pstree.remy@^1.1.7: - version "1.1.8" - resolved "https://registry.npm.taobao.org/pstree.remy/download/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" - integrity sha1-wkIiT0pnwh9oaDm720rCgrg3PTo= - public-encrypt@^4.0.0: version "4.0.3" resolved "https://registry.npm.taobao.org/public-encrypt/download/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" @@ -6307,17 +6195,10 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" -readdirp@~3.4.0: - version "3.4.0" - resolved "https://registry.npm.taobao.org/readdirp/download/readdirp-3.4.0.tgz?cache=0&sync_timestamp=1584986156939&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freaddirp%2Fdownload%2Freaddirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" - integrity sha1-n9zN+ekVWAVEkiGsZF6DA6tbmto= - dependencies: - picomatch "^2.2.1" - -reduce-css-calc@^2.1.7: - version "2.1.7" - resolved "https://registry.npm.taobao.org/reduce-css-calc/download/reduce-css-calc-2.1.7.tgz#1ace2e02c286d78abcd01fd92bfe8097ab0602c2" - integrity sha1-Gs4uAsKG14q80B/ZK/6Al6sGAsI= +reduce-css-calc@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz#7ef8761a28d614980dc0c982f772c93f7a99de03" + integrity sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg== dependencies: css-unit-converter "^1.1.1" postcss-value-parser "^3.3.0" @@ -6634,7 +6515,7 @@ semver@7.0.0: resolved "https://registry.npm.taobao.org/semver/download/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha1-XzyjV2HkfgWyBsba/yz4FPAxa44= -semver@^5.1.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1: +semver@^5.1.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.7.1" resolved "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc= @@ -7137,7 +7018,7 @@ supports-color@^2.0.0: resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^5.3.0, supports-color@^5.5.0: +supports-color@^5.3.0: version "5.5.0" resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha1-4uaaRKyHcveKHsCzW2id9lMO/I8= @@ -7291,13 +7172,6 @@ to-regex-range@^2.1.0: is-number "^3.0.0" repeat-string "^1.6.1" -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ= - dependencies: - is-number "^7.0.0" - to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.npm.taobao.org/to-regex/download/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" @@ -7323,13 +7197,6 @@ toposort@^1.0.0: resolved "https://registry.npm.taobao.org/toposort/download/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk= -touch@^3.1.0: - version "3.1.0" - resolved "https://registry.npm.taobao.org/touch/download/touch-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftouch%2Fdownload%2Ftouch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" - integrity sha1-/jZfX3XsntTlaCXgu3bSSrdK+Ds= - dependencies: - nopt "~1.0.10" - tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.5.0.tgz?cache=0&sync_timestamp=1589682815640&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftough-cookie%2Fdownload%2Ftough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" @@ -7410,13 +7277,6 @@ uglify-js@3.4.x: commander "~2.19.0" source-map "~0.6.1" -undefsafe@^2.0.2: - version "2.0.3" - resolved "https://registry.npm.taobao.org/undefsafe/download/undefsafe-2.0.3.tgz#6b166e7094ad46313b2202da7ecc2cd7cc6e7aae" - integrity sha1-axZucJStRjE7IgLafsws18xueq4= - dependencies: - debug "^2.2.0" - unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.npm.taobao.org/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" @@ -7658,12 +7518,12 @@ vm-browserify@^1.0.1: resolved "https://registry.npm.taobao.org/vm-browserify/download/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha1-eGQcSIuObKkadfUR56OzKobl3aA= -vssue@^1.4.6: - version "1.4.6" - resolved "https://registry.npm.taobao.org/vssue/download/vssue-1.4.6.tgz#2ce16373907dc04bb92d6908224f0dd7239454f6" - integrity sha1-LOFjc5B9wEu5LWkIIk8N1yOUVPY= +vssue@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/vssue/-/vssue-1.4.8.tgz#e0de059d16bf870dd7d72735d71761dfedfcfeb5" + integrity sha512-Stp0CxF65Uv658qgYUgYKEDiWM8wskUfKCOT9ISJwz/Qn58N050vYnFYClnUXG060ZQi1YQxkTCuJAw8ee3YlQ== dependencies: - "@vssue/utils" "^1.4.0" + "@vssue/utils" "^1.4.7" github-markdown-css "^3.0.1" vue "^2.6.10" vue-i18n "^8.11.2" @@ -7747,10 +7607,10 @@ vue-template-es2015-compiler@^1.9.0: resolved "https://registry.npm.taobao.org/vue-template-es2015-compiler/download/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" integrity sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU= -vue2-animate@^2.1.3: - version "2.1.3" - resolved "https://registry.npm.taobao.org/vue2-animate/download/vue2-animate-2.1.3.tgz#24e0aaf7326d9147d587201f91df8d6c101dd8e3" - integrity sha1-JOCq9zJtkUfVhyAfkd+NbBAd2OM= +vue2-animate@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/vue2-animate/-/vue2-animate-2.1.4.tgz#7a241b8a0f839d97b9df63d4551fbe666354175e" + integrity sha512-tIFHLxLYXwti0E3rJ7OeIUxTl+uVC8t9SYlD4aQ+gfgcheSu9yDbXklBNRIFxBmfNWDVpKQLMvGLxRrrCn3alw== vue@^2.5.13, vue@^2.6.10: version "2.6.11" @@ -7780,12 +7640,12 @@ vuepress-plugin-code-copy@^1.0.6: resolved "https://registry.npm.taobao.org/vuepress-plugin-code-copy/download/vuepress-plugin-code-copy-1.0.6.tgz#6431dab764b48b5b203e4936d98b1943651ce4ad" integrity sha1-ZDHat2S0i1sgPkk22YsZQ2Uc5K0= -vuepress-plugin-code-switcher@^1.0.3: - version "1.0.3" - resolved "https://registry.npm.taobao.org/vuepress-plugin-code-switcher/download/vuepress-plugin-code-switcher-1.0.3.tgz#a0ddb4ec7af1cc8476001b3e0f3e4ba5169da04a" - integrity sha1-oN207HrxzIR2ABs+Dz5LpRadoEo= +vuepress-plugin-code-switcher@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/vuepress-plugin-code-switcher/-/vuepress-plugin-code-switcher-1.1.0.tgz#d242a890261107e02b11ff795eaa55a076b507ef" + integrity sha512-En6bhztg1m6TdzswclJ1WKylTyOYb56ghxvSit5by2/Xnpd6zIs4Ec/i6f7cmLRmNAuKzoB3r6+576i32L7BPQ== dependencies: - "@vuepress/plugin-register-components" "^1.0.0-alpha.0" + "@vuepress/plugin-register-components" "^1.8.0" vuepress-plugin-container@^2.0.2: version "2.1.4" @@ -7794,20 +7654,20 @@ vuepress-plugin-container@^2.0.2: dependencies: markdown-it-container "^2.0.0" -vuepress-plugin-named-chunks@^1.1.3: - version "1.1.3" - resolved "https://registry.npm.taobao.org/vuepress-plugin-named-chunks/download/vuepress-plugin-named-chunks-1.1.3.tgz#a8134dc5bfec6ebb8e405281db2d7939f4d9116f" - integrity sha1-qBNNxb/sbruOQFKB2y15OfTZEW8= +vuepress-plugin-named-chunks@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/vuepress-plugin-named-chunks/-/vuepress-plugin-named-chunks-1.1.4.tgz#c65e121a8d0bbb4201766ec06816a2aa67dae3b7" + integrity sha512-zCRVmbf10VAf8NcrVLlm1b6eGU3vkc/iLVNvpIL3sBvtCCVaZheT2OlaV0CMPE6OjjTYbMrYXjugu4vcpiXrNQ== vuepress-plugin-reading-progress@^1.0.10: version "1.0.10" resolved "https://registry.npm.taobao.org/vuepress-plugin-reading-progress/download/vuepress-plugin-reading-progress-1.0.10.tgz#0b9d44e27d583ff20e0307993aa4cbda49f3bdca" integrity sha1-C51E4n1YP/IOAweZOqTL2knzvco= -vuepress-plugin-seo@^0.1.3: - version "0.1.3" - resolved "https://registry.npm.taobao.org/vuepress-plugin-seo/download/vuepress-plugin-seo-0.1.3.tgz#776cb73e9d364de2e3fcddfe15f21c00b708b2ec" - integrity sha1-d2y3Pp02TeLj/N3+FfIcALcIsuw= +vuepress-plugin-seo@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/vuepress-plugin-seo/-/vuepress-plugin-seo-0.1.4.tgz#be8e5577491c1fc317a7ad4abe3ae51ff317be1e" + integrity sha512-foNKrAAKihiC47bx0UXFzs/+BIFmnowTQsLVF/8pfsnsPDp8FXjkTGyjxyjOhbwj7ADPv32CdX3pEoYGnZ7OjA== vuepress-plugin-sitemap@^2.3.1: version "2.3.1" @@ -7823,13 +7683,13 @@ vuepress-plugin-smooth-scroll@^0.0.3: dependencies: smoothscroll-polyfill "^0.4.3" -vuepress@^1.7.1: - version "1.7.1" - resolved "https://registry.npm.taobao.org/vuepress/download/vuepress-1.7.1.tgz#bb0e139d8c407a0b5aa962cf9577832a5808937e" - integrity sha1-uw4TnYxAegtaqWLPlXeDKlgIk34= +vuepress@^1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/vuepress/-/vuepress-1.8.2.tgz#97e8bf979630611fc7b621fc4cc35b798ee5e847" + integrity sha512-BU1lUDwsA3ghf7a9ga4dsf0iTc++Z/l7BR1kUagHWVBHw7HNRgRDfAZBDDQXhllMILVToIxaTifpne9mSi94OA== dependencies: - "@vuepress/core" "1.7.1" - "@vuepress/theme-default" "1.7.1" + "@vuepress/core" "1.8.2" + "@vuepress/theme-default" "1.8.2" cac "^6.5.6" envinfo "^7.2.0" opencollective-postinstall "^2.0.2"