├── .gitignore ├── Dockerfile ├── Dockerfile.base ├── Dockerfile.test ├── Introduction.md ├── Makefile ├── README.md ├── SUMMARY.md ├── api ├── README.md ├── automatic-build.md └── prometheus-alert.md ├── book.json ├── develop ├── code-standards.md ├── develop-flow.md ├── pr-standards.md └── release-flow.md ├── install ├── README.md ├── alertmanager.md ├── consul.md ├── elk.md ├── grafana.md ├── harbor.md ├── jenkins.md ├── kpaas.md ├── mysql.md ├── namespace.md ├── prometheus.md ├── rabbitmq.md ├── redis.md └── storage.md ├── start ├── README.md ├── command.md ├── environment.md ├── jenkins.md └── wechat.md └── use ├── README.md ├── account ├── msg.md ├── set.md └── user.md ├── api └── prometheus.md ├── app ├── README.md ├── bind-pvc.md ├── build.md ├── command.md ├── configmap.md ├── create-app │ ├── README.md │ ├── golang.md │ ├── java.md │ ├── nodejs.md │ ├── python.md │ └── static.md ├── delete.md ├── expansion.md ├── hosts.md ├── ingress.md ├── logging.md ├── mesh.md ├── ports.md ├── probe.md ├── rollback.md ├── sleep.md ├── stretch.md └── webhooks.md ├── audit.md ├── bind-wechat.md ├── cfg-storage ├── README.md ├── consul.md ├── pvc.md ├── storageclass.md └── webhooks.md ├── cronjob ├── README.md └── cronjob.md ├── dashboard ├── README.md ├── monitor.md ├── statistics.md └── workspace.md ├── discovery.md ├── login.md ├── market ├── README.md └── dockerfile.md ├── message.md ├── msg-distribute.md ├── security ├── README.md ├── gateway.md ├── ingress.md ├── namespace.md ├── service-entry.md └── virtualservice.md ├── system ├── README.md ├── group.md ├── member.md ├── permission.md ├── proclaim.md └── role.md ├── template.md └── tools ├── README.md ├── app-clone.md └── container-time.md /.gitignore: -------------------------------------------------------------------------------- 1 | *~ 2 | _book/ 3 | *.idea 4 | node_modules/ 5 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM kplcloud/gitbook:v3.2.3-191020 AS build_env 2 | 3 | MAINTAINER dudulu 4 | 5 | COPY ./ /opt/gitbook 6 | 7 | WORKDIR /opt/gitbook 8 | 9 | RUN mv /opt/data/node_modules /opt/gitbook/ 10 | RUN gitbook build 11 | 12 | FROM nginx:1.17.3-alpine 13 | 14 | COPY --from=build_env /opt/gitbook/_book/ /usr/share/nginx/html/ 15 | 16 | CMD ["nginx", "-g", "daemon off;"] 17 | -------------------------------------------------------------------------------- /Dockerfile.base: -------------------------------------------------------------------------------- 1 | FROM node:10.16.3-alpine AS build_env 2 | 3 | MAINTAINER dudulu 4 | 5 | RUN npm config set registry https://registry.npm.taobao.org 6 | 7 | RUN npm install -g gitbook-cli \ 8 | gitbook-plugin-mygitalk \ 9 | gitbook-plugin-github \ 10 | gitbook-plugin-highlight \ 11 | gitbook-plugin-search \ 12 | gitbook-plugin-copy-code-button \ 13 | gitbook-plugin-code \ 14 | gitbook-plugin-expandable-chapters \ 15 | gitbook-plugin-back-to-top-button \ 16 | gitbook-plugin-sharing-plus --registry=https://registry.npm.taobao.org 17 | RUN mkdir -p /opt/gitbook 18 | COPY ./README.md /opt/gitbook 19 | COPY ./book.json /opt/gitbook 20 | WORKDIR /opt/gitbook 21 | RUN gitbook fetch 3.2.3 22 | #RUN gitbook install mygitalk 23 | #RUN gitbook install donate 24 | #RUN gitbook install github 25 | #RUN gitbook install copy-code-button 26 | #RUN gitbook install code 27 | #RUN gitbook install expandable-chapters 28 | #RUN gitbook install back-to-top-button 29 | #RUN gitbook install sharing-plus 30 | RUN gitbook install . 31 | RUN gitbook build 32 | 33 | CMD ["bash"] 34 | -------------------------------------------------------------------------------- /Dockerfile.test: -------------------------------------------------------------------------------- 1 | FROM docker-prod-virtual.repo.yrd.creditease.corp/gitbook:v3.2.3 AS build_env 2 | 3 | COPY ./ /opt/gitbook 4 | 5 | WORKDIR /opt/gitbook 6 | 7 | RUN gitbook build 8 | 9 | FROM nginx:1.17.3-alpine 10 | 11 | COPY --from=build_env /opt/gitbook/_book/ /usr/share/nginx/html/ 12 | 13 | CMD ["nginx", "-g", "daemon off;"] 14 | -------------------------------------------------------------------------------- /Introduction.md: -------------------------------------------------------------------------------- 1 | # Kplcloud是什么 2 | 3 | kplcloud是一个基于Kubernetes的轻量级PaaS平台,通过可视化的界面对应用进行管理,降低应用容器化的对度,从而减少应用容器化的时间成本。 4 | 5 | Kplcloud已在服务于宜人财富多个团队,稳定运行了近两年,目前平台已在生产环境跑着上百个应用,近千个容器。 6 | 7 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | APPNAME = cloud-website 2 | HUB_ADDR = hub.kpaas.nsini.com 3 | DOCKER_USER = 4 | DOCKER_PWD = 5 | TAG = v0.1.48-test 6 | NAMESPACE = kpaas 7 | 8 | build: 9 | docker build --rm -t $(APPNAME):$(TAG) . 10 | 11 | docker-run: 12 | docker run -it --rm -p 80:80 $(APPNAME):$(TAG) 13 | 14 | push: 15 | docker image tag $(APPNAME):$(TAG) $(HUB_ADDR)/$(NAMESPACE)/$(APPNAME):$(TAG) 16 | docker push $(HUB_ADDR)/$(NAMESPACE)/$(APPNAME):$(TAG) 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Introduction 2 | 3 | ## 开普勒使用教程 4 | 5 | 本教程主要围绕 Kplcloud 的安装,集成发布。 6 | 7 | 教程由 宜人金科-财富技术部-创新团队 提供技术支持 8 | 9 | #### Kplcloud是什么? 10 | 11 | kplcloud是一个基于Kubernetes的轻量级PaaS平台,通过可视化的界面对应用进行管理,降低应用容器化的对度,从而减少应用容器化的时间成本。 12 | 13 | Kplcloud已在服务于宜人财富多个团队,稳定运行了近两年,目前平台已在生产环境跑着上百个应用,近千个容器。 14 | 15 | 16 | 17 | ## 本地启动文档库 18 | 19 | 1. 克隆 20 | 21 | ```bash 22 | $ git clone https://github.com/kplcloud/cloud-website.git 23 | ``` 24 | 25 | 2. Docker启动 26 | 27 | ```bash 28 | $ docker build --rm -t cloud-website . 29 | $ docker run -it --rm -p 80:80 cloud-website 30 | ``` 31 | 32 | 3. 访问 浏览器打开`http://localhost`即可访问。 -------------------------------------------------------------------------------- /SUMMARY.md: -------------------------------------------------------------------------------- 1 | # Table of contents 2 | 3 | * [Introduction](README.md) 4 | 5 | ## 开始 6 | 7 | * [环境变量](start/environment.md) 8 | * [启动命令](start/command.md) 9 | * [配置gitlab与jenkins](start/jenkins.md) 10 | * [配置微信公众号](start/wechat.md) 11 | 12 | ## 安装相关依赖 13 | 14 | * [Namespace](install/namespace.md) 15 | * [配置持久化存储](install/storage.md) 16 | * [安装Redis 单点](install/redis.md) 17 | * [安装Consul集群](install/consul.md) 18 | * [安装RabbitMQ服务](install/rabbitmq.md) 19 | * [安装Mysql服务](install/mysql.md) 20 | * [安装ELK](install/elk.md) 21 | * [安装Jenkins](install/jenkins.md) 22 | * [安装Harbor仓库](install/harbor.md) 23 | * [安装Prometheus](install/prometheus.md) 24 | * [安装AlertManager](install/alertmanager.md) 25 | * [安装kplcloud](install/kpaas.md) 26 | 27 | ## 使用 28 | 29 | * [登陆](use/login.md) 30 | * [Dashboard](use/dashboard/README.md) 31 | * [工作台](use/dashboard/workspace.md) 32 | * [监控](use/dashboard/monitor.md) 33 | * [上线统计](use/dashboard/statistics.md) 34 | * [应用管理](use/app/README.md) 35 | * [创建应用](use/app/create-app/README.md) 36 | * [创建一个Golang应用](use/app/create-app/golang.md) 37 | * [创建一个Java应用](use/app/create-app/java.md) 38 | * [创建一个Python应用](use/app/create-app/python.md) 39 | * [创建一个NodeJs应用](use/app/create-app/nodejs.md) 40 | * [创建一个静态应用](use/app/create-app/static.md) 41 | * [自定义Hosts](use/app/hosts.md) 42 | * [自定义启动命令](use/app/command.md) 43 | * [自定义日志采集](use/app/logging.md) 44 | * [配置字典](use/app/configmap.md) 45 | * [构建应用](use/app/build.md) 46 | * [回滚应用](use/app/rollback.md) 47 | * [模式切换](use/app/mesh.md) 48 | * [扩容](use/app/expansion.md) 49 | * [伸缩](use/app/stretch.md) 50 | * [绑定持久化存储卷](use/app/bind-pvc.md) 51 | * [webhooks](use/app/webhooks.md) 52 | * [健康检测](use/app/probe.md) 53 | * [管理端口](use/app/ports.md) 54 | * [生成入口地址](use/app/ingress.md) 55 | * [暂停应用](use/app/sleep.md) 56 | * [删除应用](use/app/delete.md) 57 | * [定时任务](use/cronjob/cronjob.md) 58 | * [应用审核部署](use/audit.md) 59 | * [工具集](use/tools/README.md) 60 | * [调整容器时间](use/tools/container-time.md) 61 | * [克隆应用](use/tools/app-clone.md) 62 | * [个人中心](use/account/user.md) 63 | * [用户中心](use/account/user.md) 64 | * [个人设置](use/account/set.md) 65 | * [消息中心](use/account/msg.md) 66 | * [消息订阅](use/message.md) 67 | * [消息分发](use/msg-distribute.md) 68 | * [配置与存储](use/cfg-storage/README.md) 69 | * [存储类管理](use/cfg-storage/storageclass.md) 70 | * [Consul KV使用](use/cfg-storage/consul.md) 71 | * [持久化存储卷](use/cfg-storage/pvc.md) 72 | * [webhook功能](use/cfg-storage/webhooks.md) 73 | * [云市场](use/market/README.md) 74 | * [Dockerfile](use/market/dockerfile.md) 75 | * [平台管理](use/system/README.md) 76 | * [权限管理](use/system/permission.md) 77 | * [角色管理](use/system/role.md) 78 | * [用户管理](use/system/member.md) 79 | * [组管理](use/system/group.md) 80 | * [公告管理](use/system/proclaim.md) 81 | * [模版管理](use/template.md) 82 | * [安全管理](use/security/README.md) 83 | * [空间管理](use/security/namespace.md) 84 | * [入口Ingress](use/security/ingress.md) 85 | * [istio-入口网关](use/security/gateway.md) 86 | * [istio-出口网关](use/security/service-entry.md) 87 | * [istio-虚拟服务](use/security/virtualservice.md) 88 | * [服务发现与负载](use/discovery.md) 89 | 90 | ## API 91 | 92 | - [自动构建](api/automatic-build.md) 93 | 94 | - [处理Prometheus告警](api/prometheus-alert.md) 95 | 96 | ## 开发指南 97 | 98 | * [开发流程](develop/develop-flow.md) 99 | * [代码规范](develop/code-standards.md) 100 | * [发布流程](develop/release-flow.md) 101 | * [PR提交说明](develop/pr-standards.md) 102 | 103 | -------------------------------------------------------------------------------- /api/README.md: -------------------------------------------------------------------------------- 1 | # API 2 | 3 | 对外开放的API -------------------------------------------------------------------------------- /api/automatic-build.md: -------------------------------------------------------------------------------- 1 | # 自动构建(由于目前暂只支持tags本功能不好使) 2 | 3 | > 开发、测试可能会有频繁更新应用版本的时候,每次需要在kplcloud平台上进行build,为了方便我们快速发布,我们在给gitlab提供了一个api。当git push 时会触发该事件进行自动化build。 4 | 5 | ## Gitlab配置Webhooks 6 | 7 | 首先打开gitlab仓库,并进入项目详情,在右上角有一个设置,点击它,在弹出的下拉框选择"Webhooks"进入webhooks事件页面,如下图所示。 8 | 9 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/79/ba/a1/20190814-93b28e1f8ad01d6ea8f69f6aba679e5d.jpeg?imageView2/2/w/1280/interlace/0/q/100) 10 | 11 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/83/6b/ff/20190814-3e09afc15e8bf349fb08cf056b083d57.jpeg?imageView2/2/w/1280/interlace/0/q/100) 12 | 13 | 在配置webhooks项需要填两项内容,第一个URL: 14 | 15 | ##### 规则是: https://kplcloud.nsini.com/public/build/{空间代号}/app/{应用名称}?word={关键字}&branch={分支} 16 | 17 | 其中 word关键字 和 branch分支都是可选填 18 | 19 | - word为空的话 默认监听的是 "build" 关键字,当提交的 message 中包含 "build" 字样就会进行 构建。 20 | - branch为空的话 默认取的是在 kplcloud 上创建项目时所选择的那个分支进行 构建。 21 | 22 | 第二个参数是 Secret Token 23 | 24 | 这个token 从哪里来呢? 25 | 26 | 打开kplcloud平台,找到该项目并进行详情页,在详情页找到"详情"卡片,如下图所示: 27 | 28 | 复制改token填到 gitlab上的webhook Secret Token下就可以了。 29 | 30 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/95/dd/08/20190814-342b2e378def8dfd01b8049add99542f.jpeg?imageView2/2/w/1280/interlace/0/q/100) 31 | 32 | 第个是勾选需要的事件,主要把 push event勾上就行了,其他的可选。需要注意的是要把 SSL verification 给去掉,把这个勾给去掉。 33 | 34 | ## 验证测试 35 | 36 | 添加完之后,我们可以点击“Test”按钮 37 | 38 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/ac/c9/9c/20190814-6726465829d4c3d9945e4539c99ac1de.jpeg?imageView2/2/w/1280/interlace/0/q/100) 39 | 40 | 返回200就表示验证成功了。 41 | 42 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/d3/c2/df/20190814-6a8c0720c075fa80d2a7fe24c27d3ef0.jpeg?imageView2/2/w/1280/interlace/0/q/100) 43 | 44 | -------------------------------------------------------------------------------- /api/prometheus-alert.md: -------------------------------------------------------------------------------- 1 | # Prometheus Alert 告警信息处理 2 | 3 | -------------------------------------------------------------------------------- /book.json: -------------------------------------------------------------------------------- 1 | { 2 | 3 | "title": "开普勒云平台使用教程", 4 | "description": "基于Kubernetes的Docker容器应用管理云平台", 5 | "isbn": "019-10-16-191016-0", 6 | "language": "zh-cn", 7 | "direction": "ltr", 8 | "plugins": ["donate", "github", "highlight", "search", "copy-code-button", "code", "expandable-chapters", "back-to-top-button", 9 | "-sharing", "sharing-plus"], 10 | "pluginsConfig": { 11 | "sharing": { 12 | "douban": false, 13 | "facebook": false, 14 | "google": true, 15 | "pocket": false, 16 | "qq": false, 17 | "qzone": true, 18 | "twitter": false, 19 | "weibo": true, 20 | "all": [ 21 | "douban", "facebook", "google", "instapaper", "linkedin","twitter", "weibo", 22 | "messenger","qq", "qzone","viber","whatsapp" 23 | ] 24 | }, 25 | "github": { 26 | "url": "https://github.com/kplcloud/cloud-website.git" 27 | }, 28 | "donate": { 29 | "wechat": "https://lattecake.oss-cn-beijing.aliyuncs.com/static%2Fimages%2Freward%2Fweixin-RMB-xxx.JPG", 30 | "alipay": "https://lattecake.oss-cn-beijing.aliyuncs.com/static%2Fimages%2Freward%2Falipay-RMB-xxx.png", 31 | "title": "深情按压, 小额赞赏, 您的赞赏就是我更新的动力。", 32 | "button": "打赏", 33 | "alipayText": "支付宝捐赠", 34 | "wechatText": "微信捐赠" 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /develop/code-standards.md: -------------------------------------------------------------------------------- 1 | # paas-api 代码规范 2 | 3 | ## 目录结构 4 | 5 | ``` 6 | . 7 | ├── Dockerfile // 构建使用的Dockerfile文件 8 | ├── LICENSE 9 | ├── Makefile // 本地开发、调试方便使用 10 | ├── README.md // README 11 | ├── app.dev.cfg // 开发配置文件 12 | ├── app.prod.cfg // 生产配置文件 13 | ├── app.test.cfg // 测试配置文件 14 | ├── cmd // 入口 15 | │ ├── client // 客户端测试 16 | │ │ └── client.go 17 | │ ├── main.go // 入口main 18 | │ └── service 19 | │ ├── service.go // 启动前的基础配置,各个模块的实例化、数据库等外部资源的连接初始化都在这 20 | │ ├── service_gen.go // 数据库命令行操作 21 | │ ├── service_setting.go // 系统设置命令行操作 22 | │ ├── service_sore.go // 初始化验证码仓库 23 | │ ├── service_start.go // 启动服务, http、grpc初始化都会在这 24 | │ └── service_tracer.go // 初始化tracer 25 | ├── docker-compose.yaml 26 | ├── docs // 文档目录 27 | ├── go.mod // go依赖 28 | ├── go.sum 29 | ├── src // 源 30 | │ ├── api // 所有连接外部的api统一出入口 31 | │ │ ├── alarm // 统一告警中心api 32 | │ │ │ ├── logging.go // 日志 33 | │ │ │ ├── service.go // 实现逻辑 34 | │ │ │ ├── service_test.go // 单元测试 35 | │ │ │ └── tracing.go // 链路 36 | │ │ ├── api.go // 初始化各个外部api服务 37 | │ ├── encode // 处理response的逻辑包 38 | │ │ ├── response.go // response处理逻辑 39 | │ │ └── responsestatus.go // 错误码定义 40 | │ ├── helpers // helpers 41 | │ │ └── hashids // 生成唯一码 42 | │ │ └── hashids.go 43 | │ ├── jwt // jwt 44 | │ │ └── jwt.go 45 | │ ├── kubernetes // 连接k8s客户端实现逻辑 46 | │ │ ├── client.go 47 | │ │ ├── logging.go 48 | │ │ └── tracing.go 49 | │ ├── logging // 全局日志配置 50 | │ │ └── logging.go // 输出的方式,及未被定义的错误会在这进行处理 51 | │ ├── middleware // 全局、上层中间件 52 | │ │ ├── access.go // 授权验证中间件 53 | │ │ ├── asd.go // 登陆验证中间件 54 | │ │ ├── audit.go // 审计中间件 55 | │ │ ├── cluster.go // 集群验证中间件 56 | │ │ ├── limitter.go // 限流中间件 57 | │ │ ├── namespace.go // 项目空间处理中间件 58 | │ │ └── tracing.go // 链路追踪中间件 59 | │ ├── pkg // 业务模块包 60 | │ │ ├── access // 授权管理模块 61 | │ │ │ ├── endpoint.go // 端点连接request,middleware,service,response 62 | │ │ │ ├── http.go // 处理http请求 63 | │ │ │ ├── logging.go // 处理grpc请求 64 | │ │ │ ├── service.go // 具体业务逻辑代码 65 | │ │ │ └── tracing.go // 链路追踪 66 | │ │ ├── auth // 登陆授权模块 67 | │ │ │ ├── endpoint.go // 端点连接request,middleware,service,response 68 | │ │ │ ├── http.go // 处理http请求 69 | │ │ │ ├── instrumenting.go // 模块指标监控 给prometheus的监控指标 70 | │ │ │ ├── logging.go // 日志 71 | │ │ │ ├── middleware.go // 本模块独立中间件 72 | │ │ │ ├── service.go // 具体业务逻辑代码 73 | │ │ │ └── tracing.go // 链路追踪 74 | │ │ ├── openapi // 开放API模块,对外开放的接口模块,只对开放API使用,其他模块不允许调用业务功能多的时候可能会独立出出去 75 | │ │ │ ├── nginx // nginx操作业务模块 76 | │ │ │ │ ├── endpoint.go // 端点连接request,middleware,service,response 77 | │ │ │ │ ├── http.go // 处理http请求 78 | │ │ │ │ ├── grpc.go // 处理grpc请求 79 | │ │ │ │ ├── pb // grpc 的pb文件 80 | │ │ │ │ ├── logging.go // 日志 81 | │ │ │ │ ├── middleware.go // 本模块独立中间件 82 | │ │ │ │ ├── service.go // 具体业务逻辑代码 83 | │ │ │ │ └── tracing.go // 链路追踪 84 | │ │ │ └── user // 用户相关操作业务模块 85 | │ │ │ ├── endpoint.go // 端点连接request,middleware,service,response 86 | │ │ │ ├── http.go // 处理http请求 87 | │ │ │ ├── logging.go // 日志 88 | │ │ │ ├── service.go // 具体业务逻辑代码 89 | │ │ │ ├── service_test.go // 单元测试 90 | │ │ │ └── tracing.go // 链路追踪 91 | │ ├── redis // redis客户端 92 | │ │ ├── redis.go 93 | │ │ └── redis_middleware.go 94 | │ ├── repository // 数据仓库处理逻辑 95 | │ │ ├── access // access 相关表数据库操作逻辑实现包 96 | │ │ │ ├── cache.go // 缓存 97 | │ │ │ ├── logging.go // 日志 98 | │ │ │ ├── service.go // 实现逻辑 99 | │ │ │ └── tracing.go // 链路 100 | │ │ ├── repository.go // 连接各个数据库、数据表的统一出入口,实现各各表操作逻辑初始化 101 | │ │ └── types // 数据库表结构定义 102 | │ │ ├── auth_access.go 103 | │ │ ├── auth_resource.go 104 | │ │ ├── auth_service.go 105 | │ └── util // util包 106 | │ ├── aes.go 107 | ├── tests // 单元测试 108 | │ ├── README.md 109 | │ ├── grpc_test.go 110 | │ └── service_client_test.go 111 | └── web // 前端文件 112 | ``` 113 | 114 | ## 代码规范 115 | 116 | ### 格式化代码 117 | 118 | Golang 代码使用 goimports 和 gofmt 进行代码格式化 119 | 120 | ### 命名规范 121 | 122 | #### 文件名命名规范 123 | 124 | 用小写,尽量见名思义,看见文件名就可以知道这个文件下的大概内容,对于源代码里的文件,文件名要很好的代表了一个模块实现的功能。 125 | 126 | src/ 目录下创建的是可公用的组件,src/pkg/下是各个功能模块,模块之间可以相互调用。 127 | 128 | #### 包名 129 | 130 | 保持 package 的名字和目录保持一致,尽量采取有意义的包名,简短,有意义,尽量和标准库不要冲突。命名尽量不使用分隔符。 131 | 132 | #### 模块包规范 133 | 134 | 新增加的模块必须在src/pkg目录下,每个模块只干该模块该干的事,基础文件有service.go、logging.go、endpoint.go、http.go、tracing.go、service_test.go 135 | 136 | **logging.go 参考:** 137 | 138 | ```go 139 | import ( 140 | "context" 141 | "github.com/go-kit/kit/log" 142 | "github.com/go-kit/kit/log/level" 143 | "time" 144 | ) 145 | 146 | type logging struct { 147 | logger log.Logger 148 | next Service 149 | traceId string 150 | } 151 | 152 | func (l *logging) Push(ctx context.Context, title, content, metrics, project, service string, level Level, silencePeriod int) (err error) { 153 | defer func(begin time.Time) { 154 | _ = l.logger.Log( 155 | l.traceId, ctx.Value(l.traceId), 156 | "method", "Push", 157 | "title", title, 158 | "content", content, 159 | "metrics", metrics, 160 | "project", project, 161 | "service", service, 162 | "level", level, 163 | "silencePeriod", silencePeriod, 164 | "took", time.Since(begin), 165 | "err", err, 166 | ) 167 | }(time.Now()) 168 | return l.next.Push(ctx, title, content, metrics, project, service, level, silencePeriod) 169 | } 170 | 171 | func NewLogging(logger log.Logger, traceId string) Middleware { 172 | logger = log.With(logger, "api.alarm", "logging") 173 | return func(next Service) Service { 174 | return &logging{ 175 | logger: level.Info(logger), 176 | next: next, 177 | traceId: traceId, 178 | } 179 | } 180 | } 181 | ``` 182 | 183 | **tracing.go 参考:** 184 | 185 | ```go 186 | import ( 187 | "context" 188 | "github.com/opentracing/opentracing-go" 189 | "github.com/opentracing/opentracing-go/ext" 190 | ) 191 | 192 | type tracing struct { 193 | next Service 194 | tracer opentracing.Tracer 195 | } 196 | 197 | func (s *tracing) Push(ctx context.Context, title, content, metrics, project, service string, level Level, silencePeriod int) (err error) { 198 | span, ctx := opentracing.StartSpanFromContextWithTracer(ctx, s.tracer, "Push", opentracing.Tag{ 199 | Key: string(ext.Component), 200 | Value: "Api.Alarm", 201 | }) 202 | defer func() { 203 | span.LogKV( 204 | "title", title, 205 | "content", content, 206 | "metrics", metrics, 207 | "project", project, 208 | "service", service, 209 | "level", level, 210 | "silencePeriod", silencePeriod, 211 | "err", err) 212 | span.SetTag(string(ext.Error), err != nil) 213 | span.Finish() 214 | }() 215 | return s.next.Push(ctx, title, content, metrics, project, service, level, silencePeriod) 216 | } 217 | 218 | func NewTracing(otTracer opentracing.Tracer) Middleware { 219 | return func(next Service) Service { 220 | return &tracing{ 221 | next: next, 222 | tracer: otTracer, 223 | } 224 | } 225 | } 226 | 227 | ``` 228 | 229 | service.go 里的每个方法必须带有一个logging方法,日志输打印入参入出参和错误信息。 230 | 231 | #### 接口规范 232 | 233 | 定义一个接口: 234 | 235 | ```go 236 | type Service interface { 237 | // Delete 删除Pod, 根据pod名称删除pod 238 | // clusterId: 中间件取得 239 | // ns: 空间标识 240 | // podName: 需要删除的pod名称 241 | Delete(ctx context.Context, clusterId int64, ns, podName string) (err error) 242 | } 243 | ``` 244 | 245 | 接口的实现: 246 | 247 | ```go 248 | type Middleware func(Service) Service 249 | type service struct { 250 | traceId string 251 | logger log.Logger 252 | k8sClient kubernetes.K8sClient 253 | config *config.Config 254 | } 255 | 256 | func New(logger log.Logger, traceId string, k8sClient kubernetes.K8sClient, 257 | config *config.Config) Service { 258 | return &service{traceId, logger, k8sClient, config} 259 | } 260 | 261 | func (s *service) Delete(ctx context.Context, clusterId int64, ns, podName string) (err error) { 262 | // ... 263 | return 264 | } 265 | ``` 266 | 267 | #### 变量 268 | 269 | - 局部变量:驼峰式,小写字母开头 270 | - 全局变量:变量名采用驼峰标准 271 | 272 | 如: 273 | 274 | ```go 275 | var ( 276 | lineReadLimit int64 = 5000 277 | byteReadLimit int64 = 5000000 278 | ) 279 | ``` 280 | 281 | #### 常量 282 | 283 | 常量全部以驼峰式大写字母开头的方式命名: 284 | 285 | ```go 286 | type ASDContext string 287 | const ( 288 | ContextKeyClusterName ASDContext = "ctx-cluster-name" // 集群名称 289 | ContextKeyClusterId ASDContext = "ctx-cluster-id" // 集群ID 290 | ContextKeyNamespaceName ASDContext = "ctx-namespace-name" // 空间标识 291 | ContextKeyNamespaceId ASDContext = "ctx-namespace-id" // 集群id 292 | ) 293 | ``` 294 | 295 | #### 错误处理命名 296 | 297 | 错误处理的原则就是不能丢弃任何有返回 err 的调用,不要采用_丢弃,必须全部处理。接收到错误,要么返回 err,并用 log记录下来。 error 的信息不要采用大写字母,尽量保持你的错误简短,但是要足够表达你的错误的意思。**所有的错误全部定义在src/encode/responsestatus.go上** 298 | 299 | 除了在man.go可以使用panic外,其于地方一率不得使用panic。 300 | 301 | 错误变量名以Err开头,接包名最后接具体的错误 Err{pkg}NotFound: xxx 未找到 302 | 303 | 命名参考: 304 | 305 | ```go 306 | 307 | type ResStatus string 308 | var ResponseMessage = map[ResStatus]int{ 309 | ErrAccessSave: 2501, 310 | ErrAccessNotfound: 2502, 311 | ErrAccessResourceNotfound: 2503, 312 | ErrAccessResourceExpireTime: 2504, 313 | } 314 | 315 | const ( 316 | ErrAccessSave ResStatus = "保存失败" 317 | ErrAccessNotfound ResStatus = "授权不存在" 318 | ErrAccessResourceNotfound ResStatus = "授权资源不存在" 319 | ErrAccessResourceExpireTime ResStatus = "授权已过期" 320 | ) 321 | ``` 322 | 323 | > 未来被定义的错误信息会统一返回“系统错误”,并发出一条告警信息到统一告警中心。 324 | 325 | **使用方式** 326 | 327 | 直接返回错误: 328 | 329 | ``` 330 | return encode.ErrAccessNotfound.Error() 331 | ``` 332 | 333 | 拼接上层错误: 334 | 335 | ``` 336 | var err = errors.New("parent error.") 337 | return encode.ErrAccessNotfound.Wrap(err) 338 | ``` 339 | 340 | 返回字符串错误: 341 | 342 | ``` 343 | return encode.ErrAccessNotfound.String() 344 | ``` 345 | -------------------------------------------------------------------------------- /develop/develop-flow.md: -------------------------------------------------------------------------------- 1 | # 开发流程 2 | 3 | ## 开发kplcloud 4 | 5 | 若您想对kplcloud进行二次开发,可以将代码克隆在您本地。 6 | 7 | ```bash 8 | $ git clone github.com/kplcloud/kplcloud.git 9 | ``` 10 | 11 | 该项目需要go 1.12.x 的版本支持,所以确保您本地的golang版本是1.12以上。 12 | 13 | 因为众所周知的一些原因,咱们国内可能无法访问一些资源,所以你还需要配置一个环境变量: 14 | 15 | ```bash 16 | $ export GOPROXY=https://goproxy.io 17 | ``` 18 | 19 | **启动** 20 | 21 | ```text 22 | $ make run 23 | ``` 24 | 25 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/9f/96/8c/20190802-59d5b707bb9bc63d80b20bc09609f05d.jpeg?imageView2/2/w/1280/interlace/0/q/70) 26 | 27 | **config.yaml** 28 | 29 | 在kubernetes master节点上找到,或您重新生成一个。 30 | 31 | **app.cfg** 32 | 33 | app.cfg文件的配置请看[config.md](../start/config.md) 34 | 35 | 36 | 37 | ### 前端 38 | 39 | 前端主要是基于阿里开源的[https://ant.design](https://ant.design/) 进行开发。如果想了解请看官网。 40 | 41 | ```bash 42 | $ git clone github.com/kplcloud/kpaas-frontend.git 43 | ``` 44 | 45 | #### 启动 46 | 47 | ```bash 48 | $ yarn install // 安装依赖 49 | $ yarn start // 启动前端 50 | $ yarn run build // build 前端 51 | ``` 52 | 53 | 54 | 55 | ## Docker 56 | 57 | > 本地直接Docker启动,请参考以下命令 58 | 59 | ```bash 60 | $ docker pull kplcloud/kplcloud:latest 61 | $ docker run -it --rm -p 8080:8080 kplcloud/kplcloud:latest -v app.cfg:/etc/kplcloud/app.cfg -v config.yaml:/etc/kplcloud/config.yaml 62 | ``` 63 | 64 | 启动成功后浏览器输入 localhost:8080 就可以开始使用开普勒平台了。 65 | 66 | ## kubernetes 67 | 68 | > 建议将与开普勒相关的服务独立到一个专有的 Namespace下,您可以执行以下命令创建该空间 69 | 70 | ```bash 71 | $ kubectl create namespace kpaas 72 | ``` 73 | 74 | 或执行以下命令 : 75 | 76 | ```bash 77 | $ kubectl apply -f install/kubernetes/namespace.yaml 78 | ``` 79 | 80 | 基础服务安装: [install.md](https://github.com/icowan/cloud-website/tree/8f255be9ee74e1dcb3bab1373025dc200a1b89f5/install/README.md) 81 | 82 | 若您的其他服务都已经准备好了,可以直接执行以下命令在kubernetes上进行部署开普勒云平台。 83 | 84 | ```text 85 | $ kubectl apply -f install/kubernetes/kpaas/configmap.yaml 86 | $ kubectl apply -f install/kubernetes/kpaas/deployment.yaml 87 | $ kubectl apply -f install/kubernetes/kpaas/service.yaml 88 | $ kubectl apply -f install/kubernetes/kpaas/ingress.yaml 89 | ``` 90 | 91 | ![image-20190802133902218](http://source.qiniu.cnd.nsini.com/images/2019/08/19/4a/6f/20190802-7643b01efd1ef58f6b393e4d4ad19e8e.jpeg?imageView2/2/w/1280/interlace/0/q/70) 92 | 93 | ## docker-compose 94 | 95 | 配置文件调整好后执行以下命令直接启动: 96 | 97 | ```bash 98 | $ cd install/docker-compose/ 99 | $ docker-compose up 100 | ``` 101 | 102 | -------------------------------------------------------------------------------- /develop/pr-standards.md: -------------------------------------------------------------------------------- 1 | # PR提交说明 2 | 3 | Kplcloud PR 使用 [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator) 根据 Github Issues 和 PR 自动生成 Changelog。 因此 PR 提交需要遵循一定的规范。 4 | 5 | PR 分为两种,Bug 和 Feature,PR title 用一句话概括当前提交解决的问题。 6 | 7 | - Bug: Bug 修复类型的 PR 以 Fix 开头,例如 Fix modal size change bug 8 | 9 | - Feature: 简要说明当前 PR 实现了什么功能。 10 | 11 | -------------------------------------------------------------------------------- /develop/release-flow.md: -------------------------------------------------------------------------------- 1 | # 发布流程 2 | 3 | ## 上传至 Docker 仓库 4 | 5 | 推荐使用make还行处理: 6 | 7 | ```makefile 8 | APPNAME = kplcloud 9 | BIN = $(GOPATH)/bin 10 | GOCMD = /usr/local/go/bin/go 11 | GOBUILD = $(GOCMD) build 12 | GOINSTALL = $(GOCMD) install 13 | GOCLEAN = $(GOCMD) clean 14 | GOTEST = $(GOCMD) test 15 | GOGET = $(GOCMD) get 16 | GORUN = $(GOCMD) run 17 | BINARY_UNIX = $(BIN)_unix 18 | PID = .pid 19 | HUB_ADDR = hub.kpaas.nsini.com 20 | DOCKER_USER = 21 | DOCKER_PWD = 22 | TAG = v0.0.11-test 23 | NAMESPACE = kpaas 24 | PWD = $(shell pwd) 25 | 26 | start: 27 | $(GOBUILD) -v 28 | $(BIN)/$(APPNAME) & echo $$! > $(PID) 29 | 30 | restart: 31 | @echo restart the app... 32 | @kill `cat $(PID)` || true 33 | $(BIN)/$(APPNAME) & echo $$! > $(PID) 34 | 35 | stop: 36 | @kill `cat $(PID)` || true 37 | 38 | build-linux: 39 | CGO_ENABLED=0 GOOS=linux GOARCH=amd64 $(GOBUILD) -o $(BINARY_UNIX) -v 40 | 41 | login: 42 | docker login -u $(DOCKER_USER) -p $(DOCKER_PWD) $(HUB_ADDR) 43 | 44 | build: 45 | # CGO_ENABLED=0 GOOS=linux GOARCH=amd64 $(GOBUILD) -o kplcloud -v ./cmd/server/main.go 46 | docker build --rm -t $(APPNAME):$(TAG) . 47 | 48 | docker-run: 49 | docker run -it --rm -p 8080:8080 -v $(PWD)/app.cfg:/etc/kplcloud/app.cfg -v $(PWD)/config_189.yaml:/etc/kplcloud/config.yaml $(APPNAME):$(TAG) 50 | 51 | push: 52 | docker image tag $(APPNAME):$(TAG) $(HUB_ADDR)/$(NAMESPACE)/$(APPNAME):$(TAG) 53 | docker push $(HUB_ADDR)/$(NAMESPACE)/$(APPNAME):$(TAG) 54 | 55 | run: 56 | GO111MODULE=on $(GORUN) ./cmd/server/main.go start -p :8080 -c ./app.cfg -k config_189.yaml 57 | ``` 58 | 59 | **Dockerfile:** 60 | 61 | ```dockerfile 62 | FROM golang:latest as build-env 63 | 64 | ENV GO111MODULE=on 65 | ENV BUILDPATH=github.com/kplcloud/kplcloud 66 | ENV GOPROXY=https://goproxy.io 67 | ENV GOPATH=/go 68 | RUN mkdir -p /go/src/${BUILDPATH} 69 | COPY ./ /go/src/${BUILDPATH} 70 | RUN cd /go/src/${BUILDPATH}/cmd/server && CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go install -v 71 | 72 | FROM alpine:latest 73 | 74 | RUN apk update \ 75 | && apk upgrade \ 76 | && apk add --no-cache \ 77 | ca-certificates \ 78 | && update-ca-certificates 2>/dev/null || true 79 | 80 | COPY --from=build-env /go/bin/server /go/bin/server 81 | COPY ./static /go/bin/static 82 | 83 | WORKDIR /go/bin/ 84 | CMD ["/go/bin/server", "start", "-p", ":8080", "-c", "/etc/kplcloud/app.cfg", "-k", "/etc/kplcloud/config.yaml"] 85 | ``` 86 | 87 | 1. 编译 88 | 89 | ```bash 90 | $ make login 91 | $ make build 92 | ``` 93 | 94 | 2. 上传至docker仓库 95 | 96 | ```bash 97 | $ make push 98 | ``` 99 | 100 | -------------------------------------------------------------------------------- /install/README.md: -------------------------------------------------------------------------------- 1 | # 相关服务的安装说明 2 | 3 | > 建议将与开普勒相关的服务独立到一个专有的 Namespace下,您可以执行以下命令创建该空间 4 | 5 | 6 | 7 | ```bash 8 | $ kubectl create namespace kpaas 9 | ``` 10 | 11 | 或执行以下命令 : 12 | 13 | ```bash 14 | $ kubectl apply -f install/kubernetes/namespace.yaml 15 | ``` 16 | 17 | 18 | 19 | - [Namespace](namespace.md) 20 | - [配置持久化存储](storage.md) 21 | - [安装Redis 单点](redis.md) 22 | - [安装Consul集群](consul.md) 23 | - [安装RabbitMQ服务](rabbitmq.md) 24 | - [安装Mysql服务](mysql.md) 25 | - [安装ELK](elk.md) 26 | - [安装Jenkins](jenkins.md) 27 | - [安装Harbor仓库](harbor.md) 28 | - [安装Prometheus](prometheus.md) 29 | - [安装AlertManager](alertmanager.md) 30 | - [安装kplcloud](kpaas.md) -------------------------------------------------------------------------------- /install/alertmanager.md: -------------------------------------------------------------------------------- 1 | # 安装配置alertmanager 2 | 3 | > Alertmanager 主要是接收来自prometheus 的alert数据 4 | 5 | ## 安装 6 | 7 | 可以独立安装不使用Docker,以下案例是部署在kubernetes集群上。 8 | 9 | ```bash 10 | $ kubectl apply -f install/kubernetes/alertmanager/deployment.yaml 11 | $ kubectl apply -f install/kubernetes/alertmanager/ingress.yaml 12 | $ kubectl apply -f install/kubernetes/alertmanager/configmap.yaml 13 | $ kubectl apply -f install/kubernetes/alertmanager/service.yaml 14 | ``` 15 | 16 | ## 相关配置 17 | 18 | 这里采用webhook的方式将报警信息发送到kplcloud平台,kplcloud接收数据处理并入rabbitmq。 19 | 20 | ```yaml 21 | apiVersion: v1 22 | data: 23 | config.yml: |- 24 | global: 25 | 26 | route: 27 | group_by: ['alertname', 'cluster', 'service'] 28 | group_wait: 30s 29 | group_interval: 5m 30 | repeat_interval: 10m 31 | receiver: webhook 32 | 33 | receivers: 34 | - name: 'webhook' 35 | webhook_configs: 36 | - url: 'http://kplcloud:8080/public/prometheus/alerts' 37 | kind: ConfigMap 38 | metadata: 39 | name: alertmanager 40 | ``` 41 | 42 | kplcloud处理完的数据最终根据相应的规则推送给相应的用户及平台等。 43 | 44 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/c8/23/5f/20190814-1a51b4e86ecefd405ba94232237c888d.jpeg?imageView2/2/w/1280/interlace/0/q/100) -------------------------------------------------------------------------------- /install/consul.md: -------------------------------------------------------------------------------- 1 | # 安装Consul集群 2 | 3 | > 如果您的独立的Consul集群或不想使用Consul的话,不需要执行以下命令。 以下命令是将docker版的consul集群安装在您的kubernetes集群上前提是前必须有持久化存储。 4 | 5 | 如果您还没有初始化持久化存储的,请在这里[持久化存储](storage.md)配置好存储类再安装consul集群。 6 | 7 | ## 安装 8 | 9 | ```text 10 | $ kubectl apply -f install/kubernetes/consul/configmap.yaml 11 | $ kubectl apply -f install/kubernetes/consul/service.yaml 12 | $ kubectl apply -f install/kubernetes/consul/statefulset.yaml 13 | $ kubectl apply -f install/kubernetes/consul/ingress.yaml 14 | ``` 15 | 16 | 咱们采用的是StatefulSet的方式部署集群,若您已经有了持久化的存储类,将storageClassName修改成您的存储类包就好。 17 | 18 | ![](http://source.qiniu.cnd.nsini.com/images/2019/07/09/73/29/20190723-1344eae741d09fdf2d10b1ba73e09287.jpeg?imageView2/2/w/1280/interlace/0/q/100) 19 | 20 | [ingress.yaml](https://github.com/kplcloud/kplcloud/tree/master/install/kubernetes/consul/ingress.yaml) 提供对外访问的入口 21 | 22 | [configmap.yaml](https://github.com/kplcloud/kplcloud/tree/master/install/kubernetes/consul/configmap.yaml) consul cluster server的配置文件 23 | 24 | ## 注释 25 | 26 | 这个kubernetes亲和度问题您可能需要关注一下,如果您的kubernetes是单点,请使用以下注释掉的代码。否由会无法起动服务。 27 | 28 | ```text 29 | affinity: 30 | podAntiAffinity: 31 | requiredDuringSchedulingIgnoredDuringExecution: 32 | - labelSelector: 33 | matchLabels: 34 | app: consul 35 | component: server 36 | topologyKey: kubernetes.io/hostname 37 | # # 单节点用这个 38 | # preferredDuringSchedulingIgnoredDuringExecution: 39 | # - wight: 100 40 | # podAffinityTerm: 41 | # topologyKey: kubernetes.io/hostname 42 | ``` 43 | 44 | -------------------------------------------------------------------------------- /install/elk.md: -------------------------------------------------------------------------------- 1 | # 安装ELK 2 | 3 | > Logstash、ES对机器要的求比较高,建议使用独立的ELK集群负责日志的采集分析 4 | 5 | 如果您非要使用Docker版的elk的并且部署在Kubernetes集群里,如果还没有初始货持久化存储,先初始化持久化存储的,请在这里[持久化存储](storage.md)配置好存储类再安装相关服务服务。 6 | 7 | ELK主要包含Elasticsearch、Logstash、Kibana几个服务,kibana和logstash可以做在Deployment,全ES需要持久化,因为日志数据是存在ES上的。 8 | 9 | ```text 10 | $ kubectl apply -f install/kubernetes/elk/elasticsearch.yaml 11 | $ kubectl apply -f install/kubernetes/elk/logstash.yaml 12 | $ kubectl apply -f install/kubernetes/elk/kibana.yaml 13 | $ kubectl apply -f install/kubernetes/elk/ingress.yaml 14 | ``` 15 | 16 | ## 相关配置 17 | 18 | -------------------------------------------------------------------------------- /install/grafana.md: -------------------------------------------------------------------------------- 1 | # 安装 grafana 2 | 3 | -------------------------------------------------------------------------------- /install/harbor.md: -------------------------------------------------------------------------------- 1 | # 安装Harbor 2 | 3 | > 镜像仓库就别在跑kubernetes集群上了,似乎也跑不了,找一台容量大的有安装Docker的服务器进行搭建。 4 | 5 | 6 | 7 | 安装启动方式,请查看官方说明: 8 | 9 | ## 安装 10 | 11 | 1. 下载Harbor安装文件,我这下的是离线处理,如果下载不了请加代理 12 | 13 | ```bash 14 | $ https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-offline-installer-v1.8.1.tgz 15 | ``` 16 | 17 | 2. 解压 18 | 19 | ```bash 20 | $ tar -zxvf harbor-offline-installer-v1.8.1.tgz 21 | ``` 22 | 23 | 3. 配置harbor文件 harbor.conf 24 | 25 | ```ini 26 | ## Configuration file of Harbor 27 | 28 | # hostname设置访问地址,可以使用ip、域名,不可以设置为127.0.0.1或localhost 29 | hostname = hub.kpaas.nsini.com 30 | 31 | # 访问协议,默认是http,也可以设置https,如果设置https,则nginx ssl需要设置on 32 | ui_url_protocol = http 33 | 34 | # mysql数据库root用户默认密码root123,实际使用时修改下 35 | db_password = root123 36 | 37 | max_job_workers = 3 38 | customize_crt = on 39 | ssl_cert = /data/cert/server.crt 40 | ssl_cert_key = /data/cert/server.key 41 | secretkey_path = /data 42 | admiral_url = NA 43 | 44 | # 邮件设置,发送重置密码邮件时使用 45 | email_identity = 46 | email_server = smtp.mydomain.com 47 | email_server_port = 25 48 | email_username = sample_admin@mydomain.com 49 | email_password = abc 50 | email_from = admin 51 | email_ssl = false 52 | 53 | # 启动Harbor后,管理员UI登录的密码,默认是Harbor12345 54 | harbor_admin_password = Harbor12345 55 | 56 | # 认证方式,这里支持多种认证方式,如LADP、本次存储、数据库认证。默认是db_auth,mysql数据库认证 57 | auth_mode = db_auth 58 | 59 | # LDAP认证时配置项 60 | #ldap_url = ldaps://ldap.mydomain.com 61 | #ldap_searchdn = uid=searchuser,ou=people,dc=mydomain,dc=com 62 | #ldap_search_pwd = password 63 | #ldap_basedn = ou=people,dc=mydomain,dc=com 64 | #ldap_filter = (objectClass=person) 65 | #ldap_uid = uid 66 | #ldap_scope = 3 67 | #ldap_timeout = 5 68 | 69 | # 是否开启自注册 70 | self_registration = on 71 | 72 | # Token有效时间,默认30分钟 73 | token_expiration = 30 74 | 75 | # 用户创建项目权限控制,默认是everyone(所有人),也可以设置为adminonly(只能管理员) 76 | project_creation_restriction = everyone 77 | 78 | verify_remote_cert = on 79 | ``` 80 | 81 | 4. 启动Harbor,直接执行./install.sh 或 docker-composer都可以 82 | 83 | ```bash 84 | $ ./install.sh 85 | $ docker-compose start 86 | ``` 87 | 88 | 89 | -------------------------------------------------------------------------------- /install/jenkins.md: -------------------------------------------------------------------------------- 1 | # 安装Jenkins 2 | 3 | > 如果您有自己的jenkins服务器请忽略安装,只可能会有一些配置需要关注一下 4 | 5 | ## 安装 6 | 7 | ## 配置 8 | 9 | ### 服务器的Docker配置 10 | 11 | ### maven、git、sshkey等配置 12 | 13 | 请参考 [jenkins及git的SSHKey配置](../start/jenkins.md),这里不再重复写了。 14 | 15 | -------------------------------------------------------------------------------- /install/kpaas.md: -------------------------------------------------------------------------------- 1 | # 安装kpaas 2 | 3 | ```bash 4 | $ git clone github.com/kplcloud/kplcloud.git 5 | ``` 6 | 7 | ## Docker 8 | 9 | ```bash 10 | $ docker pull kplcloud/kplcloud:latest 11 | ``` 12 | 13 | ## kubernetes 14 | 15 | 基础服务安装: [install.md](README.md) 16 | 17 | 若您的其他服务都已经准备好了,可以直接执行以下命令在kubernetes上进行部署开普勒云平台。 18 | 19 | ```bash 20 | $ kubectl apply -f install/kubernetes/kpaas/serviceaccount.yaml 21 | $ kubectl apply -f install/kubernetes/kpaas/configmap.yaml 22 | $ kubectl apply -f install/kubernetes/kpaas/deployment.yaml 23 | $ kubectl apply -f install/kubernetes/kpaas/service.yaml 24 | $ kubectl apply -f install/kubernetes/kpaas/ingress.yaml 25 | ``` 26 | 27 | 28 | 29 | 如果您有私有仓库,记得在master节点上执行一下: 30 | 31 | ```bash 32 | $ kubectl create secret generic regcred --from-file=.dockerconfigjson=/root/.docker/config.json --type=kubernetes.io/dockerconfigjson -n default 33 | ``` 34 | 35 | 在每个namespace下都创建一下,这样k8s就有权限拉取私有仓库的镜像了 36 | 37 | Deployment需要把imagePullSecrets加上: 38 | 39 | ```yaml 40 | imagePullSecrets: 41 | - name: regcred 42 | ``` 43 | -------------------------------------------------------------------------------- /install/mysql.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: install-mysql 3 | --- 4 | 5 | # 安装Mysql服务 6 | 7 | ## mysql 8 | 9 | > 为了方便给大家演示,mysql也使用的docker版本部署在kubernetes集群上,真实环境请使用独立的mysql服务器 10 | 11 | 如果您还没有初始化持久化存储的,请在这里[持久化存储](storage.md)配置好存储类再安装mysql服务。 12 | 13 | ### 安装 14 | 15 | ```text 16 | $ kubectl apply -f install/kubernetes/mysql/statefulset.yaml 17 | $ kubectl apply -f install/kubernetes/mysql/service.yaml 18 | ``` 19 | 20 | * `MYSQL_ROOT_PASSWORD`: mysql用户名 21 | * `MYSQL_ROOT_PASSWORD`: mysql密码 22 | 23 | [statefulset.yaml](https://github.com/kplcloud/kplcloud/tree/master/install/kubernetes/mysql/statefulset.yaml) 24 | 25 | 本项目需要创建数据库: kplcloud 26 | 27 | -------------------------------------------------------------------------------- /install/namespace.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: namespace 3 | --- 4 | 5 | # Namespace 6 | 7 | ## 在Kubernetes创建新的空间 8 | 9 | > 建议将与开普勒相关的服务独立到一个专有的 Namespace下,您可以执行以下命令创建该空间 10 | 11 | ```text 12 | $ kubectl create namespace kpaas 13 | ``` 14 | 15 | 或执行以下命令 : 16 | 17 | ```text 18 | $ kubectl apply -f install/kubernetes/namespace.yaml 19 | ``` 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /install/prometheus.md: -------------------------------------------------------------------------------- 1 | # Prometheus安装 2 | 3 | > 如果还没有初始货持久化存储,先初始化持久化存储的,请在这里[持久化存储](storage.md)配置好存储类再安装相关服务服务。 4 | 5 | Prometheus 需要将数据存在本地,所以需要挂载持久化存储。 6 | 7 | ```bash 8 | $ kubectl apply -f install/kubernetes/prometheus/deployment.yaml 9 | $ kubectl apply -f install/kubernetes/prometheus/ingress.yaml 10 | $ kubectl apply -f install/kubernetes/prometheus/configmap.yaml 11 | $ kubectl apply -f install/kubernetes/prometheus/serviceaccount.yaml 12 | $ kubectl apply -f install/kubernetes/prometheus/service.yaml 13 | $ kubectl apply -f install/kubernetes/prometheus/persistentvolumeclaim.yaml 14 | ``` 15 | 16 | 17 | 18 | ## 相关配置 19 | 20 | configmap.yaml文件有五个文件: 21 | 22 | - *etcd3.rules.yml* 23 | - *kube-state-metrics_rules.yml* 24 | - *kubelet_rule.yml* 25 | - *kubernetes_rule.yml* 26 | - *prometheus.yml* 27 | 28 | 在prometheus里引用了上面4个文件。如果您有新的规则可以在这里增加。 29 | 30 | 在prometheus.yml 文件里有配置 alerting 目前默认发身 alertmanager:9093 ,若您有自己的报警管理平台,修改该地址就行,若还想使用alertmanager的话请看[安装AlertManager](alertmanager.md) -------------------------------------------------------------------------------- /install/rabbitmq.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: install-rabbitmq 3 | --- 4 | 5 | # 安装RabbitMQ服务 6 | 7 | > 为了方便给大家演示,rabbitmq也使用的docker版本部署在kubernetes集群上,真实环境请使用独立的rabbitmq服务器 8 | 9 | 如果您还没有初始化持久化存储的,请在这里[持久化存储](storage.md)配置好存储类再安装rabbitMQ服务。 10 | 11 | ## 安装 12 | 13 | ```text 14 | $ kubectl apply -f install/kubernetes/rabbitmq/statefulset.yaml 15 | $ kubectl apply -f install/kubernetes/rabbitmq/service.yaml 16 | ``` 17 | 18 | 有状态服务: [statefulset.yaml](https://github.com/kplcloud/kplcloud/tree/master/install/kubernetes/rabbitmq/statefulset.yaml) 入口: [ingress.yaml](https://github.com/kplcloud/kplcloud/tree/master/install/kubernetes/rabbitmq/ingress.yaml) 19 | 20 | kpass在rabbitmq里需要创建: 21 | 22 | * Vhost: kplcloud 23 | * Exchanges: kplcloud-exchange 24 | * User: kplcloud 25 | * RoutingKey: kplcloud 26 | 27 | ![](http://source.qiniu.cnd.nsini.com/images/2019/07/96/fe/b6/20190723-82ddfef524db68edb29dc7f4fe5962c7.jpeg?imageView2/2/w/1280/interlace/0/q/100) 28 | 29 | -------------------------------------------------------------------------------- /install/redis.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 安装Redis 单点 3 | --- 4 | 5 | # 安装Redis 单点 6 | 7 | > 为了方便给大家演示,redis也使用的docker版本部署在kubernetes集群上,真实环境请使用独立的redis服务器或集群 8 | 9 | 如果您还没有初始化持久化存储的,请在这里[持久化存储配置](storage.md)好存储类再安装Redis服务。 10 | 11 | ## 安装 12 | 13 | ```text 14 | $ kubectl apply -f install/kubernetes/redis/statefulset.yaml 15 | $ kubectl apply -f install/kubernetes/redis/service.yaml 16 | $ kubectl apply -f install/kubernetes/redis/configmap.yaml 17 | ``` 18 | 19 | redis的配置相关信息写在configmap里面 [statefulset.yaml](https://github.com/kplcloud/kplcloud/tree/master/install/kubernetes/redis/statefulset.yaml) 20 | 21 | 官方redis默认的存在/data目录,所以我们需要将持久化存储目标配置在/data目录下。 22 | 23 | -------------------------------------------------------------------------------- /install/storage.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 安装持久化存储 3 | --- 4 | 5 | # 配置持久化存储 6 | 7 | ## 持久化存储的相关配置 8 | 9 | > 这里使用的是NFS的方式进行持久化,如果您有自己的持久化方案可以不使用改方案。 10 | 11 | ```text 12 | $ kubectl apply -f install/kubernetes/storage/serviceaccount.yaml 13 | $ kubectl apply -f install/kubernetes/storage/rbac.yaml 14 | $ kubectl apply -f install/kubernetes/storage/provisioner.yaml 15 | $ kubectl apply -f install/kubernetes/storage/stroageclass.yaml 16 | ``` 17 | 18 | ### 需要调整provisioner 19 | 20 | 根据您自己的环境调service地址及path。 21 | 22 | ```text 23 | volumes: 24 | - name: kpl-nfs-client-root 25 | nfs: 26 | server: 172.16.0.4 27 | path: "/home/data" 28 | containers: 29 | - name: kpl-nfs-client-provisioner 30 | image: quay.io/external_storage/nfs-client-provisioner:latest 31 | env: 32 | - name: PROVISIONER_NAME 33 | value: fuseim.pri/ifs 34 | - name: NFS_SERVER 35 | value: 172.16.0.4 36 | - name: NFS_PATH 37 | value: "/home/data" 38 | ``` 39 | 40 | ![](http://source.qiniu.cnd.nsini.com/images/2019/07/ee/9f/ea/20190723-551e420d647eae0de5864f249f6eee83.jpeg?imageView2/2/w/1280/interlace/0/q/100) 41 | 42 | ![](http://source.qiniu.cnd.nsini.com/images/2019/07/f8/11/ec/20190723-1f0a6e38a6dac148ee883db9110f82f9.jpeg?imageView2/2/w/1280/interlace/0/q/100) 43 | 44 | -------------------------------------------------------------------------------- /start/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kplcloud/cloud-website/dd161e02b986f384c621e88b6ebe755c049c9448/start/README.md -------------------------------------------------------------------------------- /start/command.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kplcloud/cloud-website/dd161e02b986f384c621e88b6ebe755c049c9448/start/command.md -------------------------------------------------------------------------------- /start/environment.md: -------------------------------------------------------------------------------- 1 | # 环境变量解析 2 | 3 | > 本文主要介绍kplcloud所支持的环境变量的参数解释 4 | > 5 | > kplcloud 启动的各参数的优先级顺序是 6 | > 7 | > cmd args > 环境变量 > 默认值 8 | 9 | ### \[server\] 环境变量 10 | 11 | | 环境变量 | 默认值 | 备注 | 12 | | :---------------------------------- | --------------- | :----------------------------------------------------------- | 13 | | KPL_HTTP_PORT | `:8080` | http服务启动端口 | 14 | | KPL_SERVER_LOG_PATH | | 日志文件输出路径,如果为空则会日志则会打开控制台。例: /var/log | 15 | | KPL_SERVER_LOG_NAME | `kplcloud.log` | 日志文件名,日志将按日分割,每天一个日志文件 | 16 | | KPL_SERVER_LOG_LEVEL | `debug` | 日志输出级别,支持五个级别 ,all: 会打印所有日志all,error,warn,info,debug | 17 | | KPL_SERVER_NAME | `kplcloud` | 本服务名称 | 18 | | KPL_SERVER_DOMAIN | | 您的站点域名 例:https://kplcloud.nsini.com | 19 | | KPL_SERVER_DOMAIN_SUFFIX | | 生成域名的后缀 例如: `%s.%s.nsini.com` 第一个 `%s`表示服务名称,第二个`%s`空间名称 | 20 | | KPL_SERVER_UPLOAD_PATH | `/data` | 本系统上传文件的路径 | 21 | | KPL_SERVER_DEBUG | `false` | 是否开启DEBUG模式 | 22 | | KPL_SERVER_SESSION_TIMEOUT | `7200` | 登陆Session超时的时间 7200 单位秒 | 23 | | KPL_SERVER_TERMINAL_SESSION_TIMEOUT | `600` | WebTermianl超时没有动作自动关闭 600秒 | 24 | | KPL_SERVER_SELF_QUEUE | `true` | 是否本http服务监听topic。 如果开启服务启动将会自动监听处理topic数据,如果http服务和脚本分开请设置为false,可通过命令`kplcloud topicsubscribe -h`查看如何使用 | 25 | | KPL_SERVER_DEFAULT_ROLE | `develop` | 新注册用户默认分配的角色 | 26 | | KPL_SERVER_DEFAULT_NAMESPACE | `app` | 新注册用户默认可访问的空间 | 27 | | KPL_SERVER_DEFAULT_CLUSTER | `c1` | 新注册用户默认可访问的集群**(请先在集群管理添加好集群之后再进行设置)** | 28 | | KPL_SERVER_KEY | `6Id96Zhx1eqD` | 密码hash的salt **使用平台前请修改,修改完之后不能变更,否则加密salt会失效,无法登录系统** | 29 | | KPL_SERVER_HUB_ADDR | `hub.nsini.com` | 镜像仓库的地址。打包后镜像上传的仓库域名 | 30 | | KPL_SERVER_HTTP_PROXY | | 出网HTTP代理。如果无法访问外网可设置代理: http://10.10.11:1080 | 31 | 32 | 33 | 34 | ### \[cors\] 跨域环境变量 35 | 36 | | 字段 | 默认值 | 备注 | 37 | | :------------------------- | ------------------------------------------------------------ | :--------------------- | 38 | | KPL_ENABLE_CORS | `false` | 是否允许跨域请求 | 39 | | KPL_CORS_ALLOW_METHODS | `GET,POST,PUT,DELETE,OPTIONS` | 允许跨域的方法 | 40 | | KPL_CORS_ALLOW_CREDENTIALS | `true` | 是否允许跨域访问的凭证 | 41 | | KPL_CORS_ALLOW_ORIGINS | `*` | 允许跨域的域名 | 42 | | KPL_CORS_ALLOW_HEADERS | `Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization` | 允许跨域的header头信息 | 43 | 44 | ### \[mysql\] mysql环境变量 45 | 46 | | 字段 | 默认值 | 备注 | 47 | | :----------------- | ---------- | :--------- | 48 | | KPL_DB_DRIVER | `mysql` | 数据库驱动 | 49 | | KPL_MYSQL_HOST | `mysql` | 数据库地址 | 50 | | KPL_MYSQL_PORT | `3306` | 数据库端口 | 51 | | KPL_MYSQL_USER | `kplcloud` | 数据库用户 | 52 | | KPL_MYSQL_PASSWORD | `kplcloud` | 数据库密码 | 53 | | KPL_MYSQL_DATABASE | `kplcloud` | 数据库名 | 54 | 55 | ### \[redis\] redis环境变量 56 | 57 | | 字段 | 默认值 | 备注 | 58 | | :----------------- | ------------ | :----------------------------------------------------------- | 59 | | KPL_REDIS_HOSTS | `redis:6379` | redis IP 地址, 多个redis地址用";"隔开例如 redis-0:6379;redis-1:6379;redis-2:6379 | 60 | | KPL_REDIS_PASSWORD | | redis库密码 | 61 | | KPL_REDIS_DB | `0` | redisDB | 62 | | KPL_REDIS_PREFIX | `kplcloud` | redis key 前缀 | 63 | 64 | ### [tracer] Tracer Jaeger环境变量 65 | 66 | | 字段 | 备注 | 其他 | 67 | | --------------------------- | ------------- | ------------------------------------------------------------ | 68 | | KPL_TRACER_ENABLE | `false` | 是否使用链路追踪器 | 69 | | KPL_TRACER_DRIVE | `jaeger` | Tracer驱动 | 70 | | KPL_TRACER_NAME | `kplcloud` | Tracer名称 | 71 | | KPL_TRACER_JAEGER_HOST | `jaeger:6832` | Tracer Jaeger Host | 72 | | KPL_TRACER_JAEGER_PARAM | `1` | 1:全采样, 0:不采样 | 73 | | KPL_TRACER_JAEGER_TYPE | `const` | 采样器的类型 const: 固定采样, probabilistic: 随机取样, ratelimiting: 速度限制取样, remote: 基于Jaeger代理的取样 | 74 | | KPL_TRACER_JAEGER_LOG_SPANS | `false` | 是否打印日志 | 75 | 76 | ### \[queue] 消息队列服务环境变量 77 | 78 | | 字段 | 默认值 | 备注 | 79 | | :-------------------------- | :------------------ | :----------------------- | 80 | | KPL_QUEUE_DRIVE | `rabbitmq` | 消息队列系统驱动 | 81 | | KPL_QUEUE_RABBITMQ_HOST | `rabbitmq` | RabbitMq队列系统地址 | 82 | | KPL_QUEUE_RABBITMQ_PORT | `5672` | RabbitMq队列系统端口 | 83 | | KPL_QUEUE_RABBITMQ_USER | `kplcloud` | RabbitMq队列系统用户名 | 84 | | KPL_QUEUE_RABBITMQ_PASSWORD | | RabbitMq队列系统密码 | 85 | | KPL_QUEUE_RABBITMQ_VHOST | `kplcloud` | RabbitMq队列系统虚拟主机 | 86 | | KPL_QUEUE_RABBITMQ_EXCHANGE | `kplcloud-exchange` | RabbitMq队列系统交换机 | 87 | 88 | ### \[github\] github环境变量 89 | 90 | > 以下两环境变量是在GitHub授权登陆使用的GithuApp 客户端Key,如果不需要GitHub授权有情较则可不填 91 | 92 | | 字段 | 默认值 | 备注 | 93 | | :-------------------- | :----- | :---------------------------- | 94 | | KPL_GITHUB_CLIENT_ID | | 默认连接的GitHub客户端ID | 95 | | KPL_GITHUB_SECRET_KEY | | 默认连接的GitHub地址客户端Key | 96 | 97 | ### \[kubernetes] kubernetes 98 | 99 | | 字段 | 默认值 | 备注 | 100 | | :----------------------------- | :------------------------------------ | :---------------------------- | 101 | | KPL_KUBERNETES_SELECTOR_LABELS | `k8s-app,kpl.dev/name,nsini.com/name` | k8s 各类资源的selector labels | 102 | 103 | ### \[jenkins] Jenkins环境变量 104 | 105 | | 字段 | 默认值 | 备注 | 106 | | :------------------- | :--------------- | :------------------ | 107 | | KPL_JENKINS_HOST | `http://jenkins` | Jenkins服务器地址 | 108 | | KPL_JENKINS_USERNAME | | Jenkins服务器用户名 | 109 | | KPL_JENKINS_PASSWORD | | Jenkins服务器密码 | 110 | 111 | ### \[prometheus\] prometheus环境变量 112 | 113 | | 字段 | 默认值 | 其他 | 114 | | :------------------ | :----------------------- | :----------------------------------------------------------- | 115 | | KPL_PROMETHEUS_HOST | `http://prometheus:9090` | 默认是prometheus监控地址每个集群可单独配置若没有配置则使用该默认参数 | 116 | 117 | > 邮箱使用的是公司邮箱,有相应用API的,把src/api/email/service实现一遍就好 118 | 119 | ### \[email] 邮件环境变量 120 | 121 | | 字段 | 默认值 | 备注 | 122 | | :----------------- | :----- | :--------------- | 123 | | KPL_EMAIL_HOST | | 邮件服务器地址 | 124 | | KPL_EMAIL_PORT | | 邮件服务器端口 | 125 | | KPL_EMAIL_USERNAME | | 邮件服务器用户名 | 126 | | KPL_EMAIL_PASSWORD | | 邮件服务器密码 | 127 | | KPL_EMAIL_FROM | | 邮件发送者 | 128 | 129 | ### \[ldap\] LDAP配置 130 | 131 | | 字段 | 备注 | 其他 | 132 | | :--- | :--- | :--- | 133 | | | | | 134 | | | | | 135 | | | | | 136 | | | | | 137 | | | | | 138 | | | | | 139 | | | | | 140 | | | | | 141 | | | | | 142 | 143 | ### \[wechat\] 微信相关配置 144 | 145 | | 字段 | 备注 | 其他 | 146 | | :--- | :--- | :--- | 147 | | | | | 148 | | | | | 149 | | | | | 150 | | | | | 151 | | | | | 152 | | | | | 153 | 154 | ### \[msg\] 消息推送配置 155 | 156 | | 字段 | 备注 | 其他 | 157 | | :--- | :--- | :--- | 158 | | | | | 159 | | | | | 160 | 161 | ### 完成的环境变量 162 | 163 | ```bash 164 | # 本应用环境变量 165 | KPL_HTTP_PORT=:8080 166 | 167 | KPL_DB_DRIVER=mysql 168 | KPL_MYSQL_HOST=mysql 169 | KPL_MYSQL_PORT=3306 170 | KPL_MYSQL_USER=kplcloud 171 | KPL_MYSQL_PASSWORD=kplcloud 172 | KPL_MYSQL_DATABASE=kplcloud 173 | 174 | KPL_REDIS_HOSTS=redis:6379 175 | KPL_REDIS_PASSWORD= 176 | KPL_REDIS_DB=5 177 | KPL_REDIS_PREFIX=kplcloud 178 | KPL_REDIS_PREFIX= 179 | 180 | KPL_SERVER_LOG_PATH= 181 | KPL_SERVER_LOG_LEVEL=all 182 | KPL_SERVER_LOG_NAME=kplcloud.log 183 | KPL_SERVER_NAME=kplcloud 184 | KPL_SERVER_DOMAIN= 185 | KPL_SERVER_DOMAIN_SUFFIX=%s.%s.nsini.com 186 | KPL_SERVER_UPLOAD_PATH=/data 187 | KPL_SERVER_DEBUG=true 188 | KPL_SERVER_SESSION_TIMEOUT=86400 189 | KPL_SERVER_TERMINAL_SESSION_TIMEOUT=600 190 | KPL_SERVER_SELF_QUEUE=true 191 | KPL_SERVER_DEFAULT_ROLE=develop 192 | KPL_SERVER_DEFAULT_NAMESPACE=app 193 | KPL_SERVER_DEFAULT_CLUSTER=c5 194 | KPL_SERVER_KEY=wOu8eOYZwUaF 195 | KPL_SERVER_HUB_ADDR=hub.nsini.com 196 | KPL_SERVER_HTTP_PROXY= 197 | 198 | KPL_ENABLE_CORS=false 199 | KPL_CORS_ALLOW_METHODS=GET,POST,PUT,DELETE,OPTIONS 200 | KPL_CORS_ALLOW_HEADERS=Origin,Content-Type,Authorization,mode,cors,x-requested-with,Access-Control-Allow-Origin,Access-Control-Allow-Credentials,X-Token,Token,Tag,X-Tag,Upgrade,Sec-WebSocket-Version,Sec-WebSocket-Key,Sec-WebSocket-Extensions,Connection,XMLHttpRequest,withCredentials,include 201 | KPL_CORS_ALLOW_CREDENTIALS=true 202 | KPL_CORS_ALLOW_ORIGINS=* 203 | 204 | KPL_TRACER_ENABLE=false 205 | KPL_TRACER_DRIVE=jaeger 206 | KPL_TRACER_NAME=kplcloud 207 | KPL_TRACER_JAEGER_HOST=jaeger:6832 208 | KPL_TRACER_JAEGER_PARAM=1 209 | KPL_TRACER_JAEGER_TYPE=const 210 | KPL_TRACER_JAEGER_LOG_SPANS=false 211 | 212 | KPL_QUEUE_DRIVE=rabbitmq 213 | KPL_QUEUE_RABBITMQ_HOST=rabbitmq 214 | KPL_QUEUE_RABBITMQ_PORT=5672 215 | KPL_QUEUE_RABBITMQ_USER=kplcloud 216 | KPL_QUEUE_RABBITMQ_PASSWORD= 217 | KPL_QUEUE_RABBITMQ_VHOST=kplcloud 218 | KPL_QUEUE_RABBITMQ_EXCHANGE=kplcloud-exchange 219 | 220 | KPL_GITHUB_CLIENT_ID= 221 | KPL_GITHUB_SECRET_KEY= 222 | 223 | KPL_KUBERNETES_SELECTOR_LABELS=k8s-app,kpl.dev/name,nsini.com/name 224 | 225 | KPL_JENKINS_HOST=http://jenkins 226 | KPL_JENKINS_USERNAME= 227 | KPL_JENKINS_PASSWORD= 228 | 229 | KPL_PROMETHEUS_HOST=http://prometheus:9090 230 | 231 | KPL_EMAIL_HOST= 232 | KPL_EMAIL_PORT= 233 | KPL_EMAIL_USERNAME= 234 | KPL_EMAIL_PASSWORD= 235 | KPL_EMAIL_FROM= 236 | 237 | ``` 238 | 239 | -------------------------------------------------------------------------------- /start/jenkins.md: -------------------------------------------------------------------------------- 1 | # 配置gitlab与jenkins 2 | 3 | > 应用的源码是通过jenkins 从git 服务器上拉取到jenkins服务器上进行编译,所以我们需要让jenkins服务有对git服务的访问权限。 4 | > 5 | > 以下是介绍如何让jenkins有对gitlab和github的访问权限配置。 6 | 7 | ## gitlab配置 8 | 9 | 1. 登陆jenkins服务器 10 | 2. 进入 `cd ~/.ssh/` 11 | 3. 找到 `cat id_rsa.pub` 12 | * 如果没有请执行以下命令生成: 13 | * `$ ssh-keygen -o -t rsa -b 4096 -C` 14 | 4. 将内容贴到你的gitlab上 15 | 16 | ![](http://source.qiniu.cnd.nsini.com/images/2019/07/8c/43/e7/20190726-8ae0a304799c77e0e60684114388c392.jpeg?imageView2/2/w/1280/interlace/0/q/80) 17 | 18 | ## jenkins上的配置 19 | 20 | 1. 登陆jenkins服务器 21 | 2. 进入 `cd ~/.ssh/` 22 | 3. 找到 `cat id_rsa` 23 | * 如果没有请执行以下命令生成: 24 | * `$ ssh-keygen -o -t rsa -b 4096 -C` 25 | 26 | 进入 [http://{your](http://{your) jenkins server}/credentials/store/system/domain/\_/ 27 | 28 | ![](http://source.qiniu.cnd.nsini.com/images/2019/07/7d/61/8b/20190726-d535f7c0a8f5be9b86b1056361c7d014.jpeg?imageView2/2/w/1280/interlace/0/q/100) 29 | 30 | 点击“添加凭据” 31 | 32 | ![](http://source.qiniu.cnd.nsini.com/images/2019/07/f8/bb/1e/20190726-0f2fda09eb0eec6514559cd2bb1f8b5f.jpeg) 33 | 34 | 将 privateKey 贴到 private Key块中,这样jenkins服务器就可以访问到gitlab服务了。 35 | 36 | ## 安装maven 37 | 38 | java 应用构建需要安装maven 插件 39 | 40 | ![](http://source.qiniu.cnd.nsini.com/images/2019/07/20/a7/1d/20190726-8ea71c8c5b09d7701d69587da7820466.jpeg?imageView2/2/w/1280/interlace/0/q/100) 41 | 42 | 搜索 maven 插件,勾选好直接安装,安装好之后勾选自动重启jenkins 43 | 44 | ### 配置maven 45 | 46 | 进入全局工具 configureTools/ 47 | 48 | ![](http://source.qiniu.cnd.nsini.com/images/2019/07/49/c5/e2/20190726-23cc2b4dcf892fffebae9d47c5649d74.jpeg?imageView2/2/w/1280/interlace/0/q/100) 49 | 50 | 选择新增maven 并配置好版本,如果您有自己的maven 根据自己的需求配置路径 51 | 52 | -------------------------------------------------------------------------------- /start/wechat.md: -------------------------------------------------------------------------------- 1 | # 配置微信公众号 2 | 3 | 配置微信公众号有什么用? 4 | 5 | 便于通过微信接收平台的消息,并且可以在用户中心自定义接收事件类型,方便即时接收消息 6 | 7 | 配置说明 8 | 9 | 1.登录https://mp.weixin.qq.com/,开发->基本配置 10 | 11 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/2e/15/f4/20190820-4ccd06676db0427efae804751572e486.jpeg?imageView2/2/w/1280/interlace/0/q/70) 12 | 13 | 2.配置文件 [app.cfg] 14 | 15 | ``` 16 | ; ;[wechat] 17 | ; ;app_id: 微信公众号的应用ID 18 | ; ;access_token: 微信公众号的应用access_token 19 | [wechat] 20 | app_id = wx12345678985 #开发者ID(AppID) 21 | app_secret = fcfkftclie0e9a71fdf4af4c05b84b #开发者密码(AppSecret) 22 | token = TEST #令牌(Token) 23 | encoding_aes_key = ASDFAWERF335ADFVDF23RDFD #消息加解密密钥(EncodingAESKey) 24 | ``` 25 | 26 | 3.配置项说明 27 | 28 | 3.1 IP白名单是开普勒平台布署的服务器IP 29 | 30 | 3.2 服务器地址(URL)是开普勒平台微信服务链接 https://kplcloud.nsini.com/wechat/server 31 | 32 | 域名替换为实际配置的域名即可 33 | 34 | 3.3 消息密钥是安全模式下,用于加解密跟微信交互的消息使用的。也可以选明文模式 35 | 36 | 3.4 在微信公众平台填好对应信息后,点击启用配置(点击启用配置前,先确认平台已布署可正常访问) 37 | 38 | -------------------------------------------------------------------------------- /use/README.md: -------------------------------------------------------------------------------- 1 | # kplcloud 2 | 3 | 卡普勒平台开源版 4 | 5 | kplcloud是一个基于了kubernetes的应用管理系统,通过可视化的页面对应用进行管理,降低容器化成本,同时也降低了Docker及Kubernetes的学习门槛。 6 | 7 | kplcloud已服务于宜人财富部分业务,稳定管理了上百个应用,近千个容器。 8 | 9 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/70/29/eb/20190813-e6d29094aab8be96ecb77ad029a70896.jpeg?imageView2/2/w/1280/interlace/0/q/100) 10 | 11 | ## 架构设计 12 | 13 | 该平台提供了一整套解决方案。 14 | 15 | ## 平台演示 16 | 17 | 演示地址: [https://kplcloud.nsini.com](https://kplcloud.nsini.com) 18 | 19 | - 感谢 [@icowan](https://github.com/icowan) 赞助三台服务器 20 | - 感谢 [@xzghua](https://github.com/xzghua) 赞助一台服务器 21 | 22 | 所用到的相关服务,组件分别部署在阿里云,腾讯云服务器上。资源非常有限,希望大家不用过度使用。 23 | 24 | ## 安装说明 25 | 26 | 平台后端基于[go-kit](https://github.com/go-kit/kit)、前端基于[ant-design](https://github.com/ant-design/ant-design)(版本略老)框架进行开发。 27 | 28 | 后端所使用到的依赖全部都在[go.mod](go.mod)里,前端的依赖在package.jso,详情的请看yarn.lock,感谢开源社区的贡献。 29 | 30 | 后端代码: [https://github.com/kplcloud/kplcloud](https://github.com/kplcloud/kplcloud) 31 | 32 | 前端代码: [https://github.com/kplcloud/kpaas-frontend](https://github.com/kplcloud/kpaas-frontend) 33 | 34 | ### 安装教程 35 | 36 | [安装教程](https://docs.nsini.com/install/kpaas) 37 | 38 | ### 依赖 39 | 40 | - Golang 1.12+ [安装手册](https://golang.org/dl/) 41 | - MySQL 5.7+ (大多数据都存在mysql) 42 | - Docker 18.x+ [安装](https://docs.docker.com/install/) 43 | - RabbitMQ (主要用于消息队列) 44 | - Jenkins 2.176.2+ (老版本对java适配可能会有问题,尽量使用新版本) 45 | 46 | ## 快速开始 47 | 48 | 1. 克隆 49 | 50 | ``` 51 | $ mkdir -p $GOPATH/src/github.com/kplcloud 52 | $ cd $GOPATH/src/github.com/kplcloud 53 | $ git clone https://github.com/kplcloud/kplcloud.git 54 | $ cd kplcloud 55 | ``` 56 | 57 | 2. 配置文件准备 58 | 59 | - 将连接Kubernets的kubeconfig文件放到该项目目录 60 | - app.cfg文件配置也放到该项目目录app.cfg配置请参考 [配置文件解析](https://docs.nsini.com/start/config) 61 | 62 | 3. docker-compose 启动 63 | 64 | ``` 65 | $ cd install/docker-compose 66 | $ docker-compose up 67 | ``` 68 | 69 | 4. make 启动 70 | 71 | ``` 72 | $ make run 73 | ``` 74 | 75 | ## 使用教程 76 | 77 | [使用教程](https://docs.nsini.com/use/login) 78 | 79 | ### 视频教程 80 | 81 | - [创建一个应用](https://docs.nsini.com/use/app/create-app/golang) 82 | 83 | ## 成员 84 | 85 | - **[@icowan](https://github.com/icowan)** 86 | - **[@yuntinghu](https://github.com/yuntinghu)** 87 | - **[@soup-zhang](https://github.com/soup-zhang)** 88 | - **[@xzghua](https://github.com/xzghua)** 89 | 90 | ### 支持我们 91 | 92 | -------------------------------------------------------------------------------- /use/account/msg.md: -------------------------------------------------------------------------------- 1 | # 消息中心 2 | 3 | 消息分类 4 | 5 | - 通知消息 6 | - 告警消息 7 | - 公告消息 8 | 9 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/f2/39/b5/20190820-5e1e2f9e36085d21b97dffe4391f20bf.jpeg?imageView2/2/w/1280/interlace/0/q/70) 10 | 11 | -------------------------------------------------------------------------------- /use/account/set.md: -------------------------------------------------------------------------------- 1 | # 个人设置 2 | 3 | > 基本设置 4 | 5 | 可配置用户基本信息,城市,部门,手机号等。邮箱和姓名根据登录账号信息自动获取,不可修改。 6 | 7 | > 账号绑定 8 | 9 | 可以绑定微信,用于接收消息。绑定成功可以点击测试按钮,测试是否绑定成功。 10 | 11 | 支持解绑和换绑微信。 12 | 13 | > 消息订阅设置 14 | 15 | 可以自定义接收消息的配置 16 | 17 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/da/4b/90/20190820-cfb6d994d93000279ad40b0c4bcdafd6.jpeg?imageView2/2/w/1280/interlace/0/q/70) -------------------------------------------------------------------------------- /use/account/user.md: -------------------------------------------------------------------------------- 1 | # 用户中心 2 | 3 | > 显示用户基本信息和项目列表 4 | 5 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/22/ab/49/20190820-eafc23823c7c94374c319547ab422eb3.jpeg?imageView2/2/w/1280/interlace/0/q/70) 6 | 7 | -------------------------------------------------------------------------------- /use/api/prometheus.md: -------------------------------------------------------------------------------- 1 | # 接收告警接口 2 | 3 | > 接收prometheus发出来的告警信息 4 | > 5 | > apiUrl: /public/prometheus/alerts 6 | 7 | **告警处理** 8 | 9 | 接收告警信息-->格式化数据-->存入MQ-->消息中心分发-->接收者 10 | 11 | -------------------------------------------------------------------------------- /use/app/README.md: -------------------------------------------------------------------------------- 1 | # 应用管理 2 | 3 | -------------------------------------------------------------------------------- /use/app/bind-pvc.md: -------------------------------------------------------------------------------- 1 | # 挂载持久化存储卷 2 | 3 | > 本平台是通过storageclass来动态创建PV。也就是说咱们依赖于storageclass,如果您的Kubernetes不支持相应的存储试,将无法非常方便的进行挂载。 4 | > 5 | > 目前暂不支持挂载多个PVC,或许以后会更新吧。 6 | > 7 | > 这里演示的是用的NFS进行演示,实际使用时可根据自己的需求配置相应的provisioner,其他配置是一样的不需要调整,只需要在“模版管理” 调整StorageClass和PersistentVolumeClaim模版。 8 | 9 | ## 创建持久化存储卷声明 10 | 11 | 在菜单找到**“配置与存储”->"持久化存储卷声明"**。 12 | 13 | 选择应用的空间,并点击**“创建”**按钮 14 | 15 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/ce/b7/b7/20190813-2a585696c0d07c17b010e589b75ce7ce.jpeg?imageView2/2/w/1280/interlace/0/q/70) 16 | 17 | 在弹出的对话框中会有几个选项目: 18 | 19 | - 名称:存储卷的名称(规则: `^[a-z0-9]([-a-z0-9])?([a-z0-9]([-a-z0-9]*[a-z0-9])?)*$`) 20 | - 容量:可以使用的存储区大小,最小单位Mi,最大Ti 21 | - 访问模式: 22 | - ReadWriteOnce——该卷可以被单个节点以读/写模式挂载 23 | - ReadOnlyMany——该卷可以被多个节点以只读模式挂载 24 | - ReadWriteMany——该卷可以被多个节点以读/写模式挂载 25 | - 存储类:如果没有存储类请查看[创建存储类](../cf-storage/storageclass.md) 26 | 27 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/e6/9d/75/20190813-09ab64e09ab15f4c7f336b889dbe6c34.jpeg?imageView2/2/w/1280/interlace/0/q/70) 28 | 29 | ## 挂载到应用目录 30 | 31 | 当存储卷创建好之后就可以在应用进行挂载了。 32 | 33 | 同样的进入应用详情页面,找到**“持久化存储”**选项卡,如图: 34 | 35 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/ea/57/73/20190813-fdc975ee3d593dcb754a4c54578eacc9.jpeg?imageView2/2/w/1280/interlace/0/q/70) 36 | 37 | 点击**“添加”**按钮,在弹出来的对话框加输入相关信息: 38 | 39 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/e2/c0/cf/20190813-84479c9de314fe80c336d2b3c0ce2b1e.jpeg?imageView2/2/w/1280/interlace/0/q/70) 40 | 41 | - 持久化存储路径:该路径为容器里的挂载路径 42 | - 持久化存储卷声明:这里会列出您可以使用的存储卷 43 | 44 | 填写好路径及选择好存储卷后点击提交,改应用的所有POD的逐步重启动。 45 | 46 | 挂载完成之后可以看到所挂载的相关信息: 47 | 48 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/5a/0e/c3/20190813-6eb168f7e6e93951c56fa1b10e65aceb.jpeg?imageView2/2/w/1280/interlace/0/q/70) 49 | 50 | 最终生成的yaml结果: 51 | 52 | ```yaml 53 | volumes: 54 | - name: soup-hello-pvc 55 | persistentVolumeClaim: 56 | claimName: test-data 57 | containers: 58 | - volumeMounts: 59 | - name: "soup-hello-pvc" 60 | mountPath: "/soupzhang" 61 | 62 | ``` 63 | 64 | -------------------------------------------------------------------------------- /use/app/build.md: -------------------------------------------------------------------------------- 1 | # 构建应用 2 | 3 | > 构建应用的流程是通过创建应用提交一些信息进行处理 4 | > 5 | > 1. 从git 仓库获取tags列表 6 | > 2. 调用jenkins API 将应用的相关参数及版本信息传给它并进行构建 7 | > 3. Jenkins Job执行Shell命令 执行docker build并上传致Docker 仓库 8 | > 4. 平台监听到job已经执行完成并成功了,调用kubernetes API更新应用的Image地址 9 | > 5. 监听升级情况 10 | > 6. 发送通知 11 | 12 | 以上是构建应用的后端流程,而前端就变得比较简单了。只需要在应用详情页点击**"Build"**按钮,在弹出的对话框中选择相应用的tags版本并提交就行了,如下图: 13 | 14 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/6b/72/b8/20190808-1f90194b4d328bd7b2e965637226be9d.jpeg?imageView2/2/w/1280/interlace/0/q/70) 15 | 16 | ## 查询构建日志 17 | 18 | 点击详情页的**build日志**选项卡,会显示最近的构建记录,点击左侧相应的版本可以查看该版本的构建情况,也可以对正在松建的应用进行中断,如下图: 19 | 20 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/b7/8c/d6/20190823-9bc37b5a97c36c6cdd8e0a3b8c2b7f10.jpeg?imageView2/2/w/1280/interlace/0/q/70) 21 | 22 | -------------------------------------------------------------------------------- /use/app/command.md: -------------------------------------------------------------------------------- 1 | # 自定义启动命令 2 | 3 | 应用服务启动可以在多个地方进行调整,以下介绍两种方案,Dockerfile 和 平台详情页调整 4 | 5 | ## Dockerfile CMD启动方式 6 | 7 | 看一下简单的例子: 8 | 9 | ```dockerfile 10 | FROM hub.kpaas.nsini.com/app/hello:v0.0.3 11 | 12 | CMD ["/go/bin/hello"] 13 | ``` 14 | 15 | 启动命令写在CMD这个后面,如果后面有多个参数可以以逗号隔开例如: CMD ["static-web", "-path", "app", "-port", ":8080"] 16 | 17 | 18 | 19 | ## 平台详情页调整 20 | 21 | 打开应用详情页: 22 | 23 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/a5/78/bc/20190805-f36284cdf591c626bc7dfc9c784a5bf3.jpeg?imageView2/2/w/1280/interlace/0/q/70) 24 | 25 | 在详情这一选卡上找到“命令,参数”,点右边的编辑icon,弹出对话框进行填写: 26 | 27 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/de/ab/76/20190805-640aca8beff664e2701aba70abdded1b.jpeg?imageView2/2/w/1280/interlace/0/q/70) 28 | 29 | 填定启动的命令和参数,参数用逗号隔开。点提交服务会自动重启动。 30 | 31 | **注意:在平台详情页修改的命令会覆盖掉Dockerfile 下的CMD命令。** 32 | 33 | -------------------------------------------------------------------------------- /use/app/configmap.md: -------------------------------------------------------------------------------- 1 | # 配置字典 2 | 3 | > 项目配置信息信息可以通过配置字典来实现。 4 | 5 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/a5/aa/87/20190827-e1cb222c136c7f038e042d61aada5136.jpeg) 6 | 7 | 8 | 9 | 可以根据项目需要添加 `key`/`value` 10 | 11 | 例如配置日志信息,key为 `filebeat.yml` 详细 `yaml` 信息如下(`可根据项目日志规则更改`): 12 | 13 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/68/dd/84/20190827-856199f3d35b454184bc6fb9ddc687fc.jpeg) 14 | 15 | 16 | 17 | ## 挂载配置文件 18 | 19 | 除了使用Consul作为配置中心外,您也可以通过挂载文件的方式来实现配置文件的分离。 20 | 21 | -------------------------------------------------------------------------------- /use/app/create-app/README.md: -------------------------------------------------------------------------------- 1 | # 创建应用 2 | 3 | -------------------------------------------------------------------------------- /use/app/create-app/golang.md: -------------------------------------------------------------------------------- 1 | # 创建一个Golang应用 2 | 3 | > 在创建应用之前,首先我们要做的是在你的git项目上将Dockerfile文件提交上去,并且生成一个Tag或releases版本。 4 | 5 | ## Dockerfile 参考 6 | 7 | ```text 8 | FROM golang:latest as build-env 9 | 10 | ENV GO111MODULE=on 11 | ENV BUILDPATH=github.com/kplcloud/hello 12 | ENV GOPROXY=https://goproxy.io 13 | ENV GOPATH=/go 14 | RUN mkdir -p /go/src/${BUILDPATH} 15 | COPY ./ /go/src/${BUILDPATH} 16 | RUN cd /go/src/${BUILDPATH} && CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go install -v 17 | 18 | FROM alpine:latest 19 | 20 | RUN apk update \ 21 | && apk upgrade \ 22 | && apk add --no-cache \ 23 | ca-certificates \ 24 | && update-ca-certificates 2>/dev/null || true 25 | 26 | COPY --from=build-env /go/bin/hello /go/bin/hello 27 | 28 | WORKDIR /go/bin/ 29 | CMD ["/go/bin/hello"] 30 | ``` 31 | 32 | ## 进入创建应用页面,填写基本信息 33 | 34 | 1. 进入“创建项目”页面 35 | 2. 项目英文名填写项目的“英文名称” 名称的规则: `^[a-z0-9]([-a-z0-9])?([a-z0-9]([-a-z0-9]*[a-z0-9])?)*$` 36 | 3. 填写“项目描述” 可不填 37 | 4. 提交信息,进入第二步 38 | 39 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/6c/1d/1b/20190801-63ecd24bd0d2be4f16599f271d46c492.jpeg?imageView2/2/w/1280/interlace/0/q/80) 40 | 41 | ## 填写详细信息 42 | 43 | 1. 选择项目语言,目前支持主流的Golang、Java、NodeJS、Python、Nginx 44 | 2. 项目地址:输入项目的址 `kplcloud/hello` 填写完后会自动获取项目的tags列表 45 | 3. 选择版本:选择获取回来的tags版本 46 | 4. 构建路径:这是Dockerfile放到项目所在的路径地址 47 | 5. 容器数量:启动的Pods数量 48 | 6. 容器规格:该Pods的最大内存上限 49 | 7. 如果选择了“增加端口” 会列出端口、协议填写 50 | 8. 端口及协议:如果选择了则会创建Service进行负载,注意端口名称的格式,必须是`xxx-port`,可以添加多个端口,但建议一个应用只启动一个端口。 51 | 52 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/43/19/fa/20190805-7e77d97823e1a3a3fe2d5d44194437f8.jpeg?imageView2/2/w/1280/interlace/0/q/80) 53 | 54 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/72/ee/ca/20190801-04373694ed64af40c9cdafa9ee372b75.jpeg?imageView2/2/w/1280/interlace/0/q/80) 55 | 56 | 提交成功之后会显示如下页面,管理就可以在审核页面进行部署。 57 | 58 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/63/d9/1e/20190801-559cc5e18caee1381f6a7d4cd90637be.jpeg?imageView2/2/w/1280/interlace/0/q/80) 59 | 60 | -------------------------------------------------------------------------------- /use/app/create-app/java.md: -------------------------------------------------------------------------------- 1 | # 创建一个Java应用 2 | 3 | > 在创建应用之前,首先我们要做的是在你的git项目上将Dockerfile文件提交上去,并且生成一个Tag或releases版本。 4 | 5 | ## Dockerfile 参考 6 | 7 | ```dockerfile 8 | FROM openjdk:latest 9 | 10 | COPY xxxx.jar /opt/app 11 | 12 | WORKDIR /opt/app 13 | CMD ["java", "xxx.jar"] 14 | ``` 15 | 16 | ## 进入创建应用页面,填写基本信息 17 | 18 | 1. 进入“创建项目”页面 19 | 2. 项目英文名填写项目的“英文名称” 名称的规则: `^[a-z0-9]([-a-z0-9])?([a-z0-9]([-a-z0-9]*[a-z0-9])?)*$` 20 | 3. 填写“项目描述” 可不填 21 | 4. 提交信息,进入第二步 22 | 23 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/6c/1d/1b/20190801-63ecd24bd0d2be4f16599f271d46c492.jpeg?imageView2/2/w/1280/interlace/0/q/80) 24 | 25 | ## 填写详细信息 26 | 27 | 1. 选择项目语言Java 28 | 2. 项目地址:输入项目的址 `kplcloud/hello` 填写完后会自动获取项目的tags列表 29 | 3. 选择版本:选择获取回来的tags版本 30 | 4. POMFILE: pom.xml文件的路径 31 | 5. 构建路径:这是Dockerfile放到项目所在的路径地址 32 | 6. 容器数量:启动的Pods数量 33 | 7. 容器规格:该Pods的最大内存上限 34 | 8. 启动方式:jar 启动或 tomcat 启动 35 | 9. Args: 选择jar 启动会自动生成简单的 启动命令,如果是tomcat 启动则是其他命令 // 考虑去掉这个选项 36 | 10. dubbo 服务: 如果是dubbo服务则勾选,会为其开放20880端口 37 | 11. 如果选择了“增加端口” 会列出端口、协议填写 38 | 12. 端口及协议:如果选择了则会创建Service进行负载,注意端口名称的格式,必须是`xxx-port`,可以添加多个端口,但建议一个应用只启动一个端口。 39 | 40 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/e2/e7/53/20190808-643681da2d833042597738d5e7ae2b8f.jpeg?imageView2/2/w/1280/interlace/0/q/80) 41 | 42 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/72/ee/ca/20190801-04373694ed64af40c9cdafa9ee372b75.jpeg?imageView2/2/w/1280/interlace/0/q/80) 43 | 44 | 提交成功之后会显示如下页面,管理就可以在审核页面进行部署。 45 | 46 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/63/d9/1e/20190801-559cc5e18caee1381f6a7d4cd90637be.jpeg?imageView2/2/w/1280/interlace/0/q/80) 47 | 48 | -------------------------------------------------------------------------------- /use/app/create-app/nodejs.md: -------------------------------------------------------------------------------- 1 | # 创建一个NodeJS应用 2 | 3 | > 在创建应用之前,首先我们要做的是在你的git项目上将Dockerfile文件提交上去,并且生成一个Tag或releases版本。 4 | 5 | ## Dockerfile 参考 6 | 7 | ```dockerfile 8 | FROM node:latest 9 | 10 | COPY ./ /opt/app 11 | WORKDIR /opt/app 12 | 13 | RUN yarn config set registry "https://registry.npm.taobao.org" && yarn install 14 | CMD ["yarn", "start"] 15 | 16 | ``` 17 | 18 | ## 进入创建应用页面,填写基本信息 19 | 20 | 1. 进入“创建项目”页面 21 | 2. 项目英文名填写项目的“英文名称” 名称的规则: `^[a-z0-9]([-a-z0-9])?([a-z0-9]([-a-z0-9]*[a-z0-9])?)*$` 22 | 3. 填写“项目描述” 可不填 23 | 4. 提交信息,进入第二步 24 | 25 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/6c/1d/1b/20190801-63ecd24bd0d2be4f16599f271d46c492.jpeg?imageView2/2/w/1280/interlace/0/q/80) 26 | 27 | ## 填写详细信息 28 | 29 | 1. 选择项目语言,目前支持主流的Golang、Java、NodeJS、Python、Nginx 30 | 2. 项目地址:输入项目的址 `kplcloud/hello` 填写完后会自动获取项目的tags列表 31 | 3. 选择版本:选择获取回来的tags版本 32 | 4. 构建路径:这是Dockerfile放到项目所在的路径地址 33 | 5. 容器数量:启动的Pods数量 34 | 6. 容器规格:该Pods的最大内存上限 35 | 7. 如果选择了“增加端口” 会列出端口、协议填写 36 | 8. 端口及协议:如果选择了则会创建Service进行负载,注意端口名称的格式,必须是`xxx-port`,可以添加多个端口,但建议一个应用只启动一个端口。 37 | 38 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/43/19/fa/20190805-7e77d97823e1a3a3fe2d5d44194437f8.jpeg?imageView2/2/w/1280/interlace/0/q/80) 39 | 40 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/72/ee/ca/20190801-04373694ed64af40c9cdafa9ee372b75.jpeg?imageView2/2/w/1280/interlace/0/q/80) 41 | 42 | 提交成功之后会显示如下页面,管理就可以在审核页面进行部署。 43 | 44 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/63/d9/1e/20190801-559cc5e18caee1381f6a7d4cd90637be.jpeg?imageView2/2/w/1280/interlace/0/q/80) 45 | 46 | -------------------------------------------------------------------------------- /use/app/create-app/python.md: -------------------------------------------------------------------------------- 1 | # 创建一个NodeJS应用 2 | 3 | > 在创建应用之前,首先我们要做的是在你的git项目上将Dockerfile文件提交上去,并且生成一个Tag或releases版本。 4 | 5 | ## Dockerfile 参考 6 | 7 | ```dockerfile 8 | FROM python:latest 9 | 10 | COPY ./ /opt/app 11 | WORKDIR /opt/app 12 | 13 | RUN pip install -r requirements.txt 14 | CMD ["python", "app.py"] 15 | 16 | ``` 17 | 18 | ## 进入创建应用页面,填写基本信息 19 | 20 | 1. 进入“创建项目”页面 21 | 2. 项目英文名填写项目的“英文名称” 名称的规则: `^[a-z0-9]([-a-z0-9])?([a-z0-9]([-a-z0-9]*[a-z0-9])?)*$` 22 | 3. 填写“项目描述” 可不填 23 | 4. 提交信息,进入第二步 24 | 25 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/6c/1d/1b/20190801-63ecd24bd0d2be4f16599f271d46c492.jpeg?imageView2/2/w/1280/interlace/0/q/80) 26 | 27 | ## 填写详细信息 28 | 29 | 1. 选择项目语言,目前支持主流的Golang、Java、NodeJS、Python、Nginx 30 | 2. 项目地址:输入项目的址 `kplcloud/hello` 填写完后会自动获取项目的tags列表 31 | 3. 选择版本:选择获取回来的tags版本 32 | 4. 构建路径:这是Dockerfile放到项目所在的路径地址 33 | 5. 容器数量:启动的Pods数量 34 | 6. 容器规格:该Pods的最大内存上限 35 | 7. 如果选择了“增加端口” 会列出端口、协议填写 36 | 8. 端口及协议:如果选择了则会创建Service进行负载,注意端口名称的格式,必须是`xxx-port`,可以添加多个端口,但建议一个应用只启动一个端口。 37 | 38 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/43/19/fa/20190805-7e77d97823e1a3a3fe2d5d44194437f8.jpeg?imageView2/2/w/1280/interlace/0/q/80) 39 | 40 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/72/ee/ca/20190801-04373694ed64af40c9cdafa9ee372b75.jpeg?imageView2/2/w/1280/interlace/0/q/80) 41 | 42 | 提交成功之后会显示如下页面,管理就可以在审核页面进行部署。 43 | 44 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/63/d9/1e/20190801-559cc5e18caee1381f6a7d4cd90637be.jpeg?imageView2/2/w/1280/interlace/0/q/80) 45 | 46 | -------------------------------------------------------------------------------- /use/app/create-app/static.md: -------------------------------------------------------------------------------- 1 | # 创建静态文件代理应用 2 | 3 | > 在创建应用之前,首先我们要做的是在你的git项目上将Dockerfile文件提交上去,并且生成一个Tag或releases版本。 4 | 5 | ## Dockerfile 参考 6 | 7 | ```dockerfile 8 | FROM nginx:latest 9 | 10 | COPY ./ /usr/share/nginx/html 11 | # ADD xxx.com.conf /etc/nginx/conf.d/ # 如果需要的话 12 | 13 | CMD ["/bin/bash", "-c", "nginx && tail -f /var/log/nginx/access.log"] 14 | 15 | ``` 16 | 17 | ## 进入创建应用页面,填写基本信息 18 | 19 | 1. 进入“创建项目”页面 20 | 2. 项目英文名填写项目的“英文名称” 名称的规则: `^[a-z0-9]([-a-z0-9])?([a-z0-9]([-a-z0-9]*[a-z0-9])?)*$` 21 | 3. 填写“项目描述” 可不填 22 | 4. 提交信息,进入第二步 23 | 24 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/6c/1d/1b/20190801-63ecd24bd0d2be4f16599f271d46c492.jpeg?imageView2/2/w/1280/interlace/0/q/80) 25 | 26 | ## 填写详细信息 27 | 28 | 1. 选择项目语言,目前支持主流的Golang、Java、NodeJS、Python、Nginx 29 | 2. 项目地址:输入项目的址 `kplcloud/hello` 填写完后会自动获取项目的tags列表 30 | 3. 选择版本:选择获取回来的tags版本 31 | 4. 构建路径:这是Dockerfile放到项目所在的路径地址 32 | 5. 容器数量:启动的Pods数量 33 | 6. 容器规格:该Pods的最大内存上限 34 | 7. 如果选择了“增加端口” 会列出端口、协议填写 35 | 8. 端口及协议:如果选择了则会创建Service进行负载,注意端口名称的格式,必须是`xxx-port`,可以添加多个端口,但建议一个应用只启动一个端口。 36 | 37 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/43/19/fa/20190805-7e77d97823e1a3a3fe2d5d44194437f8.jpeg?imageView2/2/w/1280/interlace/0/q/80) 38 | 39 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/72/ee/ca/20190801-04373694ed64af40c9cdafa9ee372b75.jpeg?imageView2/2/w/1280/interlace/0/q/80) 40 | 41 | 提交成功之后会显示如下页面,管理就可以在审核页面进行部署。 42 | 43 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/63/d9/1e/20190801-559cc5e18caee1381f6a7d4cd90637be.jpeg?imageView2/2/w/1280/interlace/0/q/80) 44 | 45 | -------------------------------------------------------------------------------- /use/app/delete.md: -------------------------------------------------------------------------------- 1 | # 删除应用 2 | 3 | > 删除应用是一个非常危险的操作,不开放给普通用户。 4 | > 5 | > 最好只有管理员才有权限删除应用 6 | 7 | 删除应用会删除与之相关的所有数据。如jenkins、consul资源及k8s相关的资源 8 | 9 | 10 | 11 | ## 删除 12 | 13 | 在“应用列表”页找到需要删除的应用点击**“下线”**按钮弹出以下对话框。 14 | 15 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/8a/11/66/20190823-3ea5ed8d8a3763aa6ecc7fd91158acd2.jpeg?imageView2/2/w/1280/interlace/0/q/70) 16 | 17 | 确认要删除该应用后,输入该应用名称删除。 18 | 19 | 骚等片刻该应用就消失了。 -------------------------------------------------------------------------------- /use/app/expansion.md: -------------------------------------------------------------------------------- 1 | # 扩容 2 | 3 | > 扩容是对Pods的使用资源进行扩容,例如最大使用的CPU及内存资源。 4 | 5 | 6 | 7 | 在应用的详情页面,在右上角找到**“扩容”**按钮,并点开。 8 | 9 | 在弹出的对话框中拖动CPU和内存,可对其设置一个基础值及一个最大值,如下图: 10 | 11 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/35/b8/ac/20190813-e77cb1f8c581c982aec0fa4bb8a35f81.jpeg?imageView2/2/w/1280/interlace/0/q/70) 12 | 13 | 选择好相应的值后点击**“保存”**按钮后,会重起该应用的所有POD。重启后的POD可使用的最大CPU及内存资源就是您刚刚设置的值。 14 | 15 | 所对应用以deployment的yaml参数: 16 | 17 | ```yaml 18 | requests: 19 | limits: 20 | cpu: 1 21 | memory: 128Mi 22 | requests: 23 | cpu: 500m 24 | memory: 64Mi 25 | ``` 26 | 27 | -------------------------------------------------------------------------------- /use/app/hosts.md: -------------------------------------------------------------------------------- 1 | # 自定义hosts 2 | 3 | 在我们测试应用的时候或没有域名解析时,我们可能需要自己定义hosts的指向,在kplcloud我们提供的该功能 4 | 5 | 打开应用详情面在“详情”卡片上找到"hosts"如下图 6 | 7 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/ed/e3/b8/20190805-a00e51be68868707b546e862e31ed1dd.jpeg?imageView2/2/w/1280/interlace/0/q/70) 8 | 9 | 点击编辑按钮后会弹出对话框 10 | 11 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/ba/65/b5/20190805-9188863bb4b55227b105afe6659bac19.jpeg?imageView2/2/w/1280/interlace/0/q/70) 12 | 13 | 在Hosts框中就可以添加我们需要自定义的hosts地址了。 14 | 15 | 框加写法与 /etc/hosts 的写法一样,可以添加多条。 16 | 17 | 添加成功后会自动重启容器,重启完成后就生效果了。 -------------------------------------------------------------------------------- /use/app/ingress.md: -------------------------------------------------------------------------------- 1 | # 生成入口地址 2 | 3 | > 若一个http应用需要外部能访问进来怎么办?Kubernetes提供了一个种方案叫作Ingress。 4 | > 5 | > 在这里可以快速的生成一个Ingress 6 | 7 | ## 生成地址 8 | 9 | 生成地址之前请先确认您的配置文件[app.cfg](../../start/config.md)下的[server]参数`domain_suffix = %s.%s.nsini.com`,也就是您要生成的对外的域名后缀。 10 | 11 | 目前的规则是 {应用名}.{空间名}.{域名} 可根据您的环境自行调整。 12 | 13 | 您需要将*.nsini.com解析到对应的端口。 14 | 15 | 我们这是通过haproxy代理80端口到ingresscontroller开放的NodePort端口上。 16 | 17 | 实际生产应该是高可用的方案,您可以参考[切换服务模式](mesh.md)的流程图进行搭建。 18 | 19 | 在“应用详情”下面找到“外部地址”卡片。点击**"添加按钮"**弹出对话框,点击**“确定”**一个对外的地址就生成了 20 | 21 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/37/7e/8c/20190823-8891fa9c5bf4cf2987e991657ec373ed.jpeg?imageView2/2/w/1280/interlace/0/q/70) -------------------------------------------------------------------------------- /use/app/logging.md: -------------------------------------------------------------------------------- 1 | # 日志采集 2 | 3 | 4 | 5 | ## 日志采集配置 6 | 7 | 在应用详情页中间有一个叫作“日志采集”的模块 8 | 9 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/e3/80/b8/20190805-031dc52e96028bcebe3c3daa80ae3f55.jpeg?imageView2/2/w/1280/interlace/0/q/70) 10 | 11 | 点击右边的“添加”按钮,在弹出的对话框中选择日志的路径及正则规则 12 | 13 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/ac/4c/70/20190805-1337737ec12d0f8d72526cf34c8acc08.jpeg?imageView2/2/w/1280/interlace/0/q/70) 14 | 15 | 1. 文件路径:你日志文件的位置 16 | 2. 日志规则:如果没有特殊需求的话默认就好 17 | 18 | 提交后服务会自动重启动。 19 | 20 | 21 | 22 | ## 日志采集 23 | 24 | 如果配置了上面采集器,那么它会向服务所在的Pod注入一个Filebeat采集器对应用服务的业务日志进行采集。把采集到的日志入到kafka集群,然后logstash进行消息处理及格式化。 25 | 26 | 处理完后入到ES集群,最终我们就可以通过kibana查询到我们的业务日志了。 27 | 28 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/7d/5a/2d/20190805-0a25629ce9a1dacf2ab2cde05af7dbb6.jpeg?imageView2/2/w/1280/interlace/0/q/70) 29 | 30 | 当然kafka、logstash、es得您自己去搭建。 31 | 32 | 若您可把这几个服务跑在Kubernetes可以参考我给您生成的yaml 直接apply 进去就能跑。 33 | 34 | ## 模版配置 35 | 36 | 生成filebeat会用到两个模版,一个是容器的模版**FilebeatContainer**,另一个是ConfigMap的模版**FilebeatConfigMap**,您可根据自己的需求调整相应的模版文件。 37 | 38 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/35/64/b9/20190805-cb8769626b6297ebbe4629e764e35133.jpeg?imageView2/2/w/1280/interlace/0/q/70) -------------------------------------------------------------------------------- /use/app/mesh.md: -------------------------------------------------------------------------------- 1 | # 切换服务模式 2 | 3 | > 服务模式切换比较麻烦,需要您的Kubernetes支持,目前我们使用的是istio的方案,也就是说您需要在你的kubernetes上安装istio的相关服务,并且在我们的模版管理将istio所需要的几个模版配置上。才能开启此功能。 4 | 5 | 如果您没有安装Istio,可跳过此章。 6 | 7 | 8 | 9 | ## 依赖 10 | 11 | 在**"模版管理"**菜单找到**Gateway**、**VritualService**、**InitContainer**、**IstioProxy**这几个模版,根据自己环境的情况进行调整。 12 | 13 | - Gateway: 本平台设计的模式是一个Namespace所对应一个Gateway,多个Namespace空间就会有多个Gateway,VirtualService选择的是本Namespace下的Gateway。 14 | 15 | - VirtualService: 在生成应用的对外访问入口时与Ingress一起生成。 16 | 17 | 使用过Istio的同学应该都知道,要实现Istio所提供的相关功能需要在Pods里注入两个容器,一个是`proxy_init`,另一个是`proxyv2` 18 | 19 | - InitContainer: 模版是是初始化设置的yaml,比如将流量通过iptables的方式转发给 proxy 20 | - IstioProxy: 模版就是将pods的所有流量代理的yaml 21 | 22 | ## 流程 23 | 24 | 下图是我们架构流量进入到我们容器所图: 25 | 26 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/bd/11/9b/20190813-2b04ec201162b3819896abc011bbd649.jpeg?imageView2/2/w/1280/interlace/0/q/70) 27 | 28 | - DNS 将域名解析到VIP 29 | - VIP 将80的流量转发边缘节点的31380端口(这个是IstioIngressGateway控制器的Service的NodePort) 30 | - 前面我们所说过每个Namespace都会有至少一个对应的Gateway,Gateway的hosts就是xxx.{namespace}.xxx.com 31 | - VirtualService里的destination.host 就是Service的名称。 32 | 33 | 以上是kplcloud平台的流程,如果您有需要调整的,只需要修改模版就好,不需要调整代码。 34 | 35 | 36 | 37 | ## 一键切换 38 | 39 | 如下图,在应用详情页面选择**“模式”**按钮,在弹出的对话框中选择"Service Mesh"选项目,后点击提交后Pods会自动重起。 40 | 41 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/56/08/f8/20190808-14bdbef0b93087c9f0cfc11308656b00.jpeg?imageView2/2/w/1280/interlace/0/q/70) 42 | 43 | *你需要在app.cfg文件开起ServiceMesh功能* 44 | 45 | ```ini 46 | [server] 47 | service_mesh = true 48 | ``` 49 | 50 | -------------------------------------------------------------------------------- /use/app/ports.md: -------------------------------------------------------------------------------- 1 | # 端口管理 2 | 3 | > 该功能可以对您应用开放的端口进行一个调整。 4 | 5 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/67/68/16/20190823-8a4879132b1e65221459f81968d67169.jpeg?imageView2/2/w/1280/interlace/0/q/70) 6 | 7 | 该功能对容器开放的端口进行调整,初始化完之后尽量不动。因为它可能关联问Service、Deployment、Ingress、VirtualService等资源。 -------------------------------------------------------------------------------- /use/app/probe.md: -------------------------------------------------------------------------------- 1 | # 健康检测 2 | 3 | > 健康检测是对应用进行check,判定应用是否在正常运行。 4 | 5 | 健康检测有三种方案 6 | 7 | 1. 只对tcp端口进行检测 8 | 2. 只通过http的方式check需要提供path地址 9 | 3. 以上两种结合 10 | 11 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/0f/c9/1a/20190823-d2e94932e619a12c1efbe144c950f942.jpeg?imageView2/2/w/1280/interlace/0/q/70) 12 | 13 | -------------------------------------------------------------------------------- /use/app/rollback.md: -------------------------------------------------------------------------------- 1 | # 回滚应用版本 2 | 3 | > 回滚应用比较简单,直接将对应用的Docker Image启动就好了。不需要再走一次构建过程,方便快捷。 4 | 5 | ## 回滚版本 6 | 7 | 点击详情页的**"回滚"**按钮,在弹出的所有构建记录中选择所需要回滚的应用版本,点击`“+”`号还可以查看构建的过程记录,如下图: 8 | 9 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/36/fb/98/20190808-e6588631fe5085139768d99cfbb368d8.jpeg?imageView2/2/w/1280/interlace/0/q/70) 10 | 11 | 选择所需要回滚的版本点击**“回滚”**按钮,在弹出的对话框选择**”确认“**,应用会拉取相应版本的Image并自动重起。 12 | 13 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/bf/15/0c/20190808-8f3cecf405efc51d032180c115ebf644.jpeg?imageView2/2/w/1280/interlace/0/q/70) -------------------------------------------------------------------------------- /use/app/sleep.md: -------------------------------------------------------------------------------- 1 | # 暂停应用 2 | 3 | > 可能会有暂停应用的需求,那这里给做了一个。 4 | > 5 | > 实现非常简单,就是对容器的启动使用做了一个Sleep 6 | > 7 | > 当然还有另一种方案是将 replace 设置为 0 8 | 9 | -------------------------------------------------------------------------------- /use/app/stretch.md: -------------------------------------------------------------------------------- 1 | # 伸缩 2 | 3 | > 伸缩是对该应用所启动的pods数量进行一个控制。 4 | 5 | 同样进入应用的详情页页,在右上角找到**“伸缩”**按钮并点开。 6 | 7 | 在弹出来的对话框中选择启动的POD数量,如下图: 8 | 9 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/02/4e/a0/20190813-7b6792212c7a0219a7a80d684ed0232a.jpeg?imageView2/2/w/1280/interlace/0/q/70) 10 | 11 | 提交之后若数量大于之前的数量,则会启动缺少的POD数量,若小于之前的值,将会逐步减少应用的POD。 12 | 13 | 目前给的最大值是8个pod,资源可使用的内存是16G,若您的应用超过我们所设定的最大值。想办法优化吧,64核128G内存都不够用,这种级别的应用不适合用Docker。 14 | 15 | 这种级别的应用最好是拆了吧。 -------------------------------------------------------------------------------- /use/app/webhooks.md: -------------------------------------------------------------------------------- 1 | # webHooks 2 | 3 | > `webhook` 用来监测你在 `kplcloud` 上的各种事件 4 | > 如果设置了一个监测事件的 `webhook` 当你这个项目涉及到相关操作时 5 | > 会发送一个 HTTP `POST` 请求到你配置好的地址 6 | 7 | 8 | ## webhooks(项目详情->Webhooks) 9 | 10 | 点击菜单栏,列表信息展示已创建的Webhooks状态及绑定事件等。 11 | 12 | 13 | 14 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/6d/0a/92/20190823-221e25276f2420eb9137f94c0a66d307.jpeg) 15 | 16 | 根据自己的需要创建,如果是希望关注全局,请选择钩子类型为 `global` ,请将激活状态为 `激活` 否则事件不会被监听. 17 | 18 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/24/40/23/20190823-4a87233c0e323b1d28e900df40824390.jpeg) 19 | 20 | 21 | 22 | 创建好的hooks,可以在列表页点击 **测试** 进行发送一条hook数据。 -------------------------------------------------------------------------------- /use/audit.md: -------------------------------------------------------------------------------- 1 | # 应用审核部署 2 | 3 | 如果配置了邮箱,用户提交审核之后会给管理员发送邮件,邮件里带有审核地址。 4 | 5 | 或者您也可以在应用列表里找到未审核的应用进入。 6 | 7 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/84/6b/07/20190805-d669ab85aadf7f650870f40e6b58457a.jpeg?imageView2/2/w/1280/interlace/0/q/70) 8 | 9 | 10 | 11 | ## 审核应用 12 | 13 | ### 提交的基础信息 14 | 15 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/df/3d/ac/20190805-a39ede61339bc97aad7f94a73dedfb55.jpeg?imageView2/2/w/1280/interlace/0/q/70) 16 | 17 | 18 | 19 | ### 生成的kubernetes yaml 20 | 21 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/28/59/bb/20190805-171de63c4510be0eb1951d9b5982892b.jpeg?imageView2/2/w/1280/interlace/0/q/70) 22 | 23 | ### 代码库中的Dockerfile文件 24 | 25 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/5d/c5/4e/20190805-f5fb16b5dcf1edca41881bb4c5d5d678.jpeg?imageView2/2/w/1280/interlace/0/q/70) 26 | 27 | ### 驳回 28 | 29 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/17/f3/9b/20190805-3d408fd71cb3bfa194ceb362f3c177c7.jpeg?imageView2/2/w/1280/interlace/0/q/70) 30 | 31 | 如果管理员觉得提交的有问题,可以进行驳回,驳回填定理由会发送至提交者的邮箱。 32 | 33 | 若没有啥问题,可以点击“开始部署”按钮。 34 | 35 | 开始部署之后应用会自动在jenkins上创建一个job,并自动进行build。 -------------------------------------------------------------------------------- /use/bind-wechat.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kplcloud/cloud-website/dd161e02b986f384c621e88b6ebe755c049c9448/use/bind-wechat.md -------------------------------------------------------------------------------- /use/cfg-storage/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kplcloud/cloud-website/dd161e02b986f384c621e88b6ebe755c049c9448/use/cfg-storage/README.md -------------------------------------------------------------------------------- /use/cfg-storage/consul.md: -------------------------------------------------------------------------------- 1 | # 配置中心Consul使用说明 2 | 3 | **Consul相关功能:** 4 | 5 | - 根据项目及业务线配置一个`ConsulACL`(即:Consul权限)。 6 | - 根据配置好的 **Consul token**,可配置具体 `Key/Value`。 7 | 8 | **Consul相关提示:** 9 | 10 | - 支持删除 `ACL` 删除后不可恢复。 11 | - 支持删除 `Key/Value` 具体 字段 及 文件夹,删除后不可恢复。 12 | - `Key/Value` 的增、删、改,都需要用到 **token**,请妥善保管。 13 | 14 | ## 操作步骤 15 | 16 | ### ACL 管理 17 | 18 | 1. `Consul` 位置:菜单栏 >> 配置与存储 >> Consul/KV配置中心 19 | 20 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/ed/27/a3/20190823-beace63274083822ad2e8163270ed4dc.jpeg?imageView2/2/w/1280/interlace/0/q/70) 21 | 22 | 2. 创建 `ACL` , 填写 `项目名称` 及选择 `命名空间`, Rules 填写支持 `命名空间.项目名称`(eg: `local.kplcloud`) 23 | 24 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/44/36/1b/20190823-be9a72ece643bcbf1541a5a036944454.jpeg?imageView2/2/w/1280/interlace/0/q/70) 25 | 26 | 3. 点击列表中的名称,可查询 `ACL` 详情 27 | 28 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/e1/79/4a/20190823-47ddd3d7f09da257428b0fc0793e1f28.jpeg?imageView2/2/w/1280/interlace/0/q/70) 29 | 30 | ### Key/Value 管理 31 | 32 | 1. 点击列表中的 `token` 可进入管理页面。 33 | 34 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/c1/be/bf/20190823-6ac50c2e2311f8e2ba6ec2e4be1c11b2.jpeg?imageView2/2/w/1280/interlace/0/q/70) 35 | 36 | 2. 详情页中您可以很方便的管理项目的 `Key/Value` 了。左侧展示 `K/V` 列表,右侧可对具体的 `K/V` 进行修改 37 | 38 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/e2/bd/63/20190823-10ba26b1f38b31a56ec8f3edbd8e2fca.jpeg?imageView2/2/w/1280/interlace/0/q/70) 39 | 40 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/00/2b/73/20190823-f474dcf1745f38077d3429cb2bc00312.jpeg?imageView2/2/w/1280/interlace/0/q/70) 41 | 42 | ## 结束语 43 | 44 | ``` 45 | 更多功能,待您实际使用发现。。。 46 | ``` -------------------------------------------------------------------------------- /use/cfg-storage/pvc.md: -------------------------------------------------------------------------------- 1 | # 存储卷声明 2 | 3 | 4 | 5 | > 本平台是通过storageclass来动态创建PV。也就是说咱们依赖于storageclass,如果您的Kubernetes不支持相应的存储试,将无法非常方便的进行挂载。 6 | > 7 | > 目前暂不支持挂载多个PVC,或许以后会更新吧。 8 | > 9 | > 这里演示的是用的NFS进行演示,实际使用时可根据自己的需求配置相应的provisioner,其他配置是一样的不需要调整,只需要在“模版管理” 调整StorageClass和PersistentVolumeClaim模版。 10 | 11 | ## 创建持久化存储卷声明 12 | 13 | 在菜单找到**“配置与存储”->"持久化存储卷声明"**。 14 | 15 | 选择应用的空间,并点击**“创建”**按钮 16 | 17 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/b1/29/77/20190823-91237c52382279bb7b7a250829cb1505.jpeg?imageView2/2/w/1280/interlace/0/q/70) 18 | 19 | 在弹出的对话框中会有几个选项目: 20 | 21 | - 名称:存储卷的名称(规则: `^[a-z0-9]([-a-z0-9])?([a-z0-9]([-a-z0-9]*[a-z0-9])?)*$`) 22 | - 容量:可以使用的存储区大小,最小单位Mi,最大Ti 23 | - 访问模式: 24 | - ReadWriteOnce——该卷可以被单个节点以读/写模式挂载 25 | - ReadOnlyMany——该卷可以被多个节点以只读模式挂载 26 | - ReadWriteMany——该卷可以被多个节点以读/写模式挂载 27 | - 存储类:如果没有存储类请查看[创建存储类](../cf-storage/storageclass.md) 28 | 29 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/e6/9d/75/20190813-09ab64e09ab15f4c7f336b889dbe6c34.jpeg?imageView2/2/w/1280/interlace/0/q/70) -------------------------------------------------------------------------------- /use/cfg-storage/storageclass.md: -------------------------------------------------------------------------------- 1 | # 存储类管理 2 | 3 | > Kubernetes集群管理员通过提供不同的存储类,可以满足用户不同的服务质量级别、备份策略和任意策略要求的存储需求。动态存储卷供应使用StorageClass进行实现,其允许存储卷按需被创建。 4 | > 5 | > 如果没有动态存储供应,Kubernetes集群的管理员将不得不通过手工的方式类创建新的存储卷。 6 | > 7 | > 通过动态存储卷,Kubernetes将能够按照用户的需要,自动创建其需要的存储。 8 | 9 | 10 | 11 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/e5/28/7c/20190823-c0bdf20f6403cb3170a0289728fe594b.jpeg?imageView2/2/w/1280/interlace/0/q/70) 12 | 13 | ## 供应者 14 | 15 | 创建存储类之前必须得有 "provisioner",每个平台所使用的存储方案可能都会不一样。您可根据自己方式安装相应的Provisioner。 16 | 17 | 官方文档:[https://kubernetes.io/docs/concepts/storage/storage-classes/](https://kubernetes.io/docs/concepts/storage/storage-classes/) 18 | 19 | | Volume Plugin | Internal Provisioner | Config Example | 20 | | -------------------- | -------------------- | ------------------------------------------------------------ | 21 | | AWSElasticBlockStore | ✓ | [AWS EBS](https://kubernetes.io/docs/concepts/storage/storage-classes/#aws-ebs) | 22 | | AzureFile | ✓ | [Azure File](https://kubernetes.io/docs/concepts/storage/storage-classes/#azure-file) | 23 | | AzureDisk | ✓ | [Azure Disk](https://kubernetes.io/docs/concepts/storage/storage-classes/#azure-disk) | 24 | | CephFS | - | - | 25 | | Cinder | ✓ | [OpenStack Cinder](https://kubernetes.io/docs/concepts/storage/storage-classes/#openstack-cinder) | 26 | | FC | - | - | 27 | | Flexvolume | - | - | 28 | | Flocker | ✓ | - | 29 | | GCEPersistentDisk | ✓ | [GCE PD](https://kubernetes.io/docs/concepts/storage/storage-classes/#gce-pd) | 30 | | Glusterfs | ✓ | [Glusterfs](https://kubernetes.io/docs/concepts/storage/storage-classes/#glusterfs) | 31 | | iSCSI | - | - | 32 | | Quobyte | ✓ | [Quobyte](https://kubernetes.io/docs/concepts/storage/storage-classes/#quobyte) | 33 | | NFS | - | - | 34 | | RBD | ✓ | [Ceph RBD](https://kubernetes.io/docs/concepts/storage/storage-classes/#ceph-rbd) | 35 | | VsphereVolume | ✓ | [vSphere](https://kubernetes.io/docs/concepts/storage/storage-classes/#vsphere) | 36 | | PortworxVolume | ✓ | [Portworx Volume](https://kubernetes.io/docs/concepts/storage/storage-classes/#portworx-volume) | 37 | | ScaleIO | ✓ | [ScaleIO](https://kubernetes.io/docs/concepts/storage/storage-classes/#scaleio) | 38 | | StorageOS | ✓ | [StorageOS](https://kubernetes.io/docs/concepts/storage/storage-classes/#storageos) | 39 | | Local | - | [Local](https://kubernetes.io/docs/concepts/storage/storage-classes/#local) | 40 | 41 | 官方提供了以上方案,而这里我们方便演示使用最简单的NFS方案。 42 | 43 | ### 安装NFS 44 | 45 | #### 安装服务端 46 | 47 | ``` 48 | $ sudo yum install nfs-utils 49 | ``` 50 | 51 | #### 开机启动 52 | 53 | ``` 54 | $ sudo systemctl enable rpcbind 55 | $ sudo systemctl enable nfs 56 | ``` 57 | 58 | #### 启动NFS 59 | 60 | ``` 61 | $ sudo systemctl start rpcbind 62 | $ sudo systemctl start nfs 63 | ``` 64 | 65 | ### 配置共享目录 66 | 67 | ``` 68 | $ sudo mkdir /opt/data 69 | $ sudo chmod 755 /opt/data 70 | ``` 71 | 72 | 打开文件: 73 | 74 | ``` 75 | $ sudo vi /etc/exports 76 | ``` 77 | 78 | 添加以下配置: 79 | 80 | ``` 81 | /opt/data/ *(rw,nohide,insecure,no_subtree_check,async,no_root_squash) 82 | ``` 83 | 84 | 重启: 85 | 86 | ``` 87 | $ sudo systemctl restart nfs 88 | ``` 89 | 90 | ### 安装Provisioner 91 | 92 | 修改`install/kubernetes/storage/provisioner.yaml`的IP地址及路径后执行以下命令: 93 | 94 | ```bash 95 | $ kubectl apply -f install/kubernetes/storage/provisioner.yaml 96 | $ kubectl apply -f install/kubernetes/storage/rbac.yaml 97 | $ kubectl apply -f install/kubernetes/storage/serviceaccount.yaml 98 | ``` 99 | 100 | ## 创建存储类 101 | 102 | 在**“配置与存储”**->**“存储类”**菜单点开。 103 | 104 | 在列表页面点击**“新建”**按钮,在弹出来的对话框中输入以下信息: 105 | 106 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/c4/2e/f8/20190823-98ab4f92d00283a6f4eabe6c2e3c4abe.jpeg?imageView2/2/w/1280/interlace/0/q/70) 107 | 108 | - 名称: 规则 `^[a-z0-9]([-a-z0-9])?([a-z0-9]([-a-z0-9]*[a-z0-9])?)*$`可以有"." 109 | 110 | - Provisioner:供应者服务名 111 | 112 | > 这里我创建了一个名为“kpl-nfs-client-provisioner”的供应者。如果您可使用NFS的方式存储方案可以参考以上方案 113 | 114 | - ReclaimPolicy:回收策略 [更改 PersistentVolume 的回收策略](https://kubernetes.io/zh/docs/tasks/administer-cluster/change-pv-reclaim-policy/) 115 | - Recycle 116 | - Delete 117 | - Retain 118 | 119 | - VolumeBindingMode: [Volume Binding Mode](https://kubernetes.io/docs/concepts/storage/storage-classes/#volume-binding-mode) 120 | - Immediate 121 | - WaitForFirstConsumer 122 | 123 | ## 存储类详情 124 | 125 | 创始完成存储类之后点击创建的存储类可查看详情,若有PVC及pv关联会在在这里显示: 126 | 127 | ![image-20190823162311096](http://source.qiniu.cnd.nsini.com/images/2019/08/b0/d7/e8/20190823-641e7ea6f352855ae8c4475fd70b0c54.jpeg?imageView2/2/w/1280/interlace/0/q/70) 128 | 129 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/ca/16/a3/20190823-45278a523de03358a2d75db016dca25b.jpeg?imageView2/2/w/1280/interlace/0/q/70) -------------------------------------------------------------------------------- /use/cfg-storage/webhooks.md: -------------------------------------------------------------------------------- 1 | # webHooks 2 | 3 | > `webhook` 用来监测你在 `kplcloud` 上的各种事件 4 | > 如果设置了一个监测事件的 `webhook` 当你这个项目涉及到相关操作时 5 | > 会发送一个 HTTP `POST` 请求到你配置好的地址 6 | 7 | 8 | ## webhooks(菜单栏:配置与存储->Webhooks) 9 | 10 | 点击菜单栏,列表信息展示状态及绑定事件等,可根据业务线进行筛选。 11 | 12 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/fd/99/53/20190819-f9a449ee6e67352359d7855c99afd1e3.jpeg) 13 | 14 | 15 | 根据自己的需要创建,如果是希望关注全局,请选择钩子类型为 `global` ,请将激活状态为 `激活` 否则事件不会被监听。 16 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/31/a9/93/20190819-2609cb4405123d3d9ee85ba8a9331000.jpeg) 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /use/cronjob/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kplcloud/cloud-website/dd161e02b986f384c621e88b6ebe755c049c9448/use/cronjob/README.md -------------------------------------------------------------------------------- /use/cronjob/cronjob.md: -------------------------------------------------------------------------------- 1 | # 定时任务相关操作 2 | 3 | ## 添加 4 | 5 | #### 添加定时任务 6 | 7 | - 菜单-->应用管理-->定时任务--> 创建定时任务按钮 8 | 9 | - 填入定时任务相关 10 | 11 | > 注意: 脚本模式和命令模式 是不一样的! 12 | 13 | - 点击提交后,开始构建定时任务 14 | 15 | ~~~flow 16 | ```flow 17 | st=>start: 前端提交创建定时任务 18 | isExists=>condition: 任务是否已经存在? 19 | cronCreate=>operation: 数据库创建定时任务 20 | jenkinsCreate=>operation: jenkins创建Job 21 | jenkinsBuild=>operation: jenkins构建 22 | buildLogCreate=>operation: 构建信息插入数据库 23 | amqQueueBuild=>operation: 构建信息推入队列 24 | k8sCreate=>operation: k8s创建定时任务 25 | amqQueueListen=>operation: 队列监听构建结果 26 | buildLogUpdate=>operation: 构建信息修改 27 | s=>end: 成功 28 | e=>end: 失败 29 | 30 | st->isExists->cronCreate->jenkinsCreate->jenkinsBuild->buildLogCreate->amqQueueBuild->k8sCreate->amqQueueListen->buildLogUpdate->s 31 | isExists(yes)->cronCreate 32 | isExists(no)->e 33 | ``` 34 | ~~~ 35 | 36 | 37 | 38 | #### 添加日志采集 39 | 40 | - 在成功构建定时任务后,可在定时任务列表点击任务,进入任务详情里,日志采集添加日志路径 41 | 42 | #### 添加环境变量 43 | 44 | - 任务详情里,环境变量板块自定义环境变量 45 | 46 | #### 添加配置 47 | 48 | - 任务详情里,配置板块添加配置 49 | 50 | 51 | 52 | ## 修改 53 | 54 | - 定时任务列表,点击需要修改的定时任务, 修改相关信息后,点击`提交`,定时任务会进行修改 55 | 56 | 57 | 58 | ## 删除 59 | 60 | - 定时任务列表,点击需要删除的定时任务,点击`删除`,会删除定时任务相关信息,包括`数据库`和`k8s`等相关信息都会被删除 -------------------------------------------------------------------------------- /use/dashboard/README.md: -------------------------------------------------------------------------------- 1 | # Dashboard 2 | 3 | 4 | -------------------------------------------------------------------------------- /use/dashboard/monitor.md: -------------------------------------------------------------------------------- 1 | # 全局监控 2 | 3 | > 监控只是简易的集群网络,内存、CPU及语言,详情的监控可以从grafana查看。 4 | 5 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/a6/0e/14/20190808-22a458e5f5e6414814fb19be0eaa63c1.jpeg?imageView2/2/w/1280/interlace/0/q/70) -------------------------------------------------------------------------------- /use/dashboard/statistics.md: -------------------------------------------------------------------------------- 1 | # 上线统计 2 | 3 | > 本模块主要是对一些应用发布的情况进行一些统计,如应用失败的应用的次数中断及回滚的次数,点击应用名称可以看应用详情。 4 | 5 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/ff/a1/1e/20190808-22a3abe6275ce3751734556ba1cffbac.jpeg?imageView2/2/w/1280/interlace/0/q/70) 6 | 7 | -------------------------------------------------------------------------------- /use/dashboard/workspace.md: -------------------------------------------------------------------------------- 1 | # 工作台 2 | 3 | > 工作台是我们进入之后看到的第一个页面,主要列出以下一些信息 4 | 5 | 6 | 7 | 1. 使用文档 8 | 2. 创建应用入口 9 | 3. 空间CPU及内存资源使用情况 10 | 4. 你可操作的最新的几个应用 11 | 5. 该空间下最近应用的动态 12 | 6. 您可操作的空间列表 13 | 7. 您规属于哪些权限组列表 14 | 15 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/87/77/40/20190808-3813b43202950d0a4b184c2c773872e6.jpeg?imageView2/2/w/1280/interlace/0/q/70) -------------------------------------------------------------------------------- /use/discovery.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kplcloud/cloud-website/dd161e02b986f384c621e88b6ebe755c049c9448/use/discovery.md -------------------------------------------------------------------------------- /use/login.md: -------------------------------------------------------------------------------- 1 | # 登陆 2 | 3 | > 登陆可以分为三种,分别是LDAP登陆、邮箱密码登陆、三方授权登陆,咱们没有注册功能。下面对这三种登陆方式进行讲解。 4 | 5 | LDAP与邮箱登陆大同小异,只需要简单的配置即可。 6 | 7 | ## LDAP登陆 8 | 9 | 在app.cfg文件找到`[server]`的`login_type`参数,设置为 **`ldap`**并且找到`[ldap]`块 10 | 11 | ```ini 12 | [ldap] 13 | ldap_host = 127.0.0.1 14 | ldap_port = 389 15 | ldap_base = DC=yourdomain,DC=corp 16 | ldap_sseSSL = false 17 | ldap_bindDN = 18 | ldap_bind_password = 19 | ldap_user_filter = (userPrincipalName=%s) 20 | ldap_group_filter = (&(objectCategory=Group)) 21 | ldap_attr = name;mail 22 | 23 | [server] 24 | ;auth_login 25 | login_type = ldap 26 | ``` 27 | 28 | 输入你家LDAP的相关信息即可。 29 | 30 | *不要设置`auth_login`,应该把它注释掉* 31 | 32 | ## 邮箱登陆 33 | 34 | 在app.cfg文件找到`[server]`的`login_type`参数,设置为 **`email`** 35 | 36 | ```ini 37 | [server] 38 | ;auth_login 39 | login_type = ldap 40 | ``` 41 | 42 | *不要设置`auth_login`,应该把它注释掉* 43 | 44 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/93/62/e4/20190808-9d1ad5b7bdb341dee5b94f2562a93f2d.jpeg?imageView2/2/w/1280/interlace/0/q/70) 45 | 46 | ## Github授权登陆 47 | 48 | > 通过Github授权登陆需要的app.cfg将[server]下的 auth_login参数设置为github 49 | 50 | 51 | 52 | ### Github创建OAuth App 53 | 54 | 1. 打开github官网,进入[https://github.com/settings/developers](https://github.com/settings/developers), 在左侧菜单栏找到“OAuth Apps”并点击进入 55 | 56 | 2. 如果没有OAuth App则点击“New OAuth App”按钮创建一个新的OAuth App 57 | 58 | 3. 创建完成之后 找到我们刚刚创建的OAuth App并进入就可以看到Client ID和Client Secret了 59 | 60 | 4. 将它们复制下来他贴到app.cfg的`[server]`块下的`client_id`和`client_secret` 61 | 62 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/85/43/e0/20190808-44881f18b9f20d16efcfc5d4438856d9.jpeg?imageView2/2/w/1280/interlace/0/q/70) 63 | 64 | 5. 设置好Homepage URL和Authorization callback URL 65 | 66 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/0c/a6/44/20190808-3cd06219f2e84b4b4fb2e3a0a6a0c888.jpeg?imageView2/2/w/1280/interlace/0/q/70) 67 | 68 | 6. 授权登陆需要用户把 [https://github.com/settings/profile](https://github.com/settings/profile) Public Email 设置上,否则无法授权成功 69 | 70 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/73/6d/d7/20190808-0b4fb2cde5627616d3d3b2016d373e33.jpeg?imageView2/2/w/1280/interlace/0/q/70) 71 | 72 | ### 授权登陆 73 | 74 | 上面设置好之后, 就可以使用github授权登陆的方式进入平台了,默认分配的空间及权限可以在app.cfg文件下的`[server]`块下的`default_namespace`和`default_role_id`配置 75 | 76 | ```ini 77 | [server] 78 | client_id = balabalabalbabiubiubiu 79 | client_secret = balabalabalbabiubiubiu 80 | auth_login = github 81 | default_namespace = default-app 82 | default_role_id = 4 83 | ``` 84 | 85 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/d7/85/0c/20190808-c3ccecfa1ea7cd260f168074858d77c3.jpeg?imageView2/2/w/1280/interlace/0/q/70) 86 | 87 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/71/e5/12/20190812-0b6d4599d557209716653941e5a71a25.jpeg?imageView2/2/w/1280/interlace/0/q/70) 88 | 89 | -------------------------------------------------------------------------------- /use/market/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kplcloud/cloud-website/dd161e02b986f384c621e88b6ebe755c049c9448/use/market/README.md -------------------------------------------------------------------------------- /use/market/dockerfile.md: -------------------------------------------------------------------------------- 1 | # Dockerfile 2 | 3 | > Dockerfile市场主要是为了方便大家正确的填写Dockerfile而提供的一些例子,当然您也可以直接下载该市场里的已经制作好的相关Dockerfile文件放到您的项目里 4 | 5 | ## 创建Dockerfile 6 | 7 | 不多说了,直接看图吧... 8 | 9 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/58/e5/98/20190823-abb59ffecbea8af39369d13ce5a5892c.jpeg?imageView2/2/w/1280/interlace/0/q/70) 10 | 11 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/99/46/13/20190823-38eddda45e4230981aa640e546a99abd.jpeg?imageView2/2/w/1280/interlace/0/q/70) 12 | 13 | -------------------------------------------------------------------------------- /use/message.md: -------------------------------------------------------------------------------- 1 | # 消息订阅 2 | 3 | > 开普勒消息目前分为三大类:公告,告警和通知。 4 | > 5 | > 通知中根据不同的操作事件类型,分为十几个事件。每个事件都跟项目操作相关。便于接收项目操作变更的通知。 6 | 7 | | 分类 | 事件 | 8 | | ---- | ------------------------------------------------------------ | 9 | | 公告 | Alarm | 10 | | 告警 | Proclaim | 11 | | 通知 | Build,Apply,Audit,Delete,Rollback,Logging,Reboot,Command,Storage,Extend... | 12 | 13 | > **订阅界面:** 14 | 15 | 用户中心,点击头像,下拉菜单→个人设置 16 | 17 | 消息订阅设置 18 | 19 | 目前默认选中项有 20 | 21 | - 公告:站内信,邮件 22 | - 告警:站内认,微信,邮箱 23 | - 构建:站内信,邮箱 24 | - 删除应用:站内信,微信,邮箱 25 | 26 | 其它项:根据自己选中来订阅 27 | 28 | 重要:支持权限组分发消息,如果某个项目的变更,会通知到该项目组内所有成员。 29 | 30 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/6f/63/b5/20190819-cab2ecc247745a82b4857ef663c6f5f1.jpeg?imageView2/2/w/1280/interlace/0/q/70) 31 | 32 | > **站内信图例:** 33 | 34 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/fd/47/1c/20190819-6d0a1bb42de8c2b01d24b19e479fd128.jpeg?imageView2/2/w/1280/interlace/0/q/70) 35 | 36 | > **邮件图例:** 37 | 38 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/00/03/c4/20190819-c3a710c8b464478ecac0daaa03000e5f.jpeg?imageView2/2/w/1280/interlace/0/q/70) 39 | 40 | > **微信图例:** 41 | 42 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/50/f3/d8/20190827-0946294b05d38cdcdb308a0af3250bec.jpeg) -------------------------------------------------------------------------------- /use/msg-distribute.md: -------------------------------------------------------------------------------- 1 | # 消息分发 2 | 3 | 开普勒消息分发 4 | 5 | > 公告:由管理员在后台公告管理中,发布公告,可以选择接收对象(指定个人,指定业务线,全部) 6 | > 7 | > 通知:由项目操作事件时产生,如构建,回滚,删除应用等 8 | > 9 | > 告警:由prometheus发出,开普勒通过对外提供API,接收到告警信息,然后根据规则分发 10 | 11 | **消息流程:** 12 | 13 | 消息产生后,先压到MQ对应的队列,消息中心定时分任务会时时从MQ队列取出消息,然后根据订阅配置和接收权限来分发给接收者。 14 | 15 | **接收终端:** 16 | 17 | 站内信,邮件,微信,短信,其它方式 18 | 19 | **订阅配置:** 20 | 21 | 接收者可以在用户中心->订阅配置里,自定义配置接收的事件类型和接收终端方式。 22 | 23 | **分发流程图:** 24 | 25 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/53/cd/d5/20190819-839edadc08a45c5bd2eb78d7cd153514.jpeg?imageView2/2/w/1280/interlace/0/q/70) 26 | 27 | -------------------------------------------------------------------------------- /use/security/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kplcloud/cloud-website/dd161e02b986f384c621e88b6ebe755c049c9448/use/security/README.md -------------------------------------------------------------------------------- /use/security/gateway.md: -------------------------------------------------------------------------------- 1 | # Istio 的网关配置 2 | 3 | > 敬请期待... -------------------------------------------------------------------------------- /use/security/ingress.md: -------------------------------------------------------------------------------- 1 | # 入口 Ingress 2 | 3 | > 在服务配置好之后,可能需要外部来访问该服务,这时候就要用到 `Ingress` 来配置网关。 4 | 5 | ### Ingress管理 (菜单栏 > 安全管理 > 入口/API列表) 6 | 7 | 列表展示当前业务空间下所有的 **Ingress** 配置信息。多个配置项信息会全部展示在列表中。 8 | 9 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/9e/a8/04/20190826-393ed225de4b40360cd73bc0a8a9e86d.jpeg) 10 | 11 | 点击列表中的 `项目名称` 可以查看当前项目配置的 `yaml` 详情信息。 12 | 13 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/d9/9e/f3/20190823-8755bea82c0534b0f34880939e9d9d19.jpeg) 14 | 15 | 16 | 17 | 创建 **Ingress** 仅支持选择已经填写完整并且部署好的项目,默认会生成域名:`项目名.空间名称.xxx.com` 18 | 19 | 支持多个项目配置项添加,并且所有配置项均可以按照自己的需求添加。 20 | 21 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/92/1f/ef/20190826-555ef9b42281f3f9eadaa64f1fc9208e.jpeg) -------------------------------------------------------------------------------- /use/security/namespace.md: -------------------------------------------------------------------------------- 1 | # 空间管理 2 | 3 | > 空间管理用于区分各个业务线,方便各个业务线的服务管理。 4 | > 5 | > 安全起见,仅支持创建空间,不允许进行修改及删除操作,如有需要,请在 kubernetes 终端操作。 6 | 7 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/57/62/5d/20190827-b5c258900122dccb52eb75a562157a92.jpeg) 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /use/security/service-entry.md: -------------------------------------------------------------------------------- 1 | # Istio的出口网关配置 2 | 3 | > 敬请期待... 4 | 5 | -------------------------------------------------------------------------------- /use/security/virtualservice.md: -------------------------------------------------------------------------------- 1 | # Istio的虚拟服务配置 2 | 3 | > 敬请期待... -------------------------------------------------------------------------------- /use/system/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kplcloud/cloud-website/dd161e02b986f384c621e88b6ebe755c049c9448/use/system/README.md -------------------------------------------------------------------------------- /use/system/group.md: -------------------------------------------------------------------------------- 1 | # 组相关操作 2 | 3 | > 此处是为超管设置的组相关操作 4 | 5 | 6 | 7 | > 权限大小: 业务线 > 自己创建的 > 组 8 | 9 | 10 | 11 | ## 添加 12 | 13 | #### 添加组 14 | 15 | - 点击 `添加组` 按钮 16 | - 需要组别名(唯一)、组名(唯一)、选择业务线、组长 17 | - 点击添加按钮即新建一个组 18 | 19 | #### 添加项目 20 | 21 | - 展开需要加项目的组 22 | - 点击`添加项目`,搜索项目,选好后,点击添加即添加了项目 23 | 24 | #### 添加成员 25 | 26 | - 展开需要加成员的组 27 | - 点击`添加成员`,搜索成员,选好后,点击添加即添加了成员 28 | 29 | #### 添加定时任务 30 | 31 | - 展开需要加定时任务的组 32 | - 点击`添加定时任务`,搜索需要添加的定时任务,选好后,点击添加即可 33 | 34 | 35 | 36 | ## 修改 37 | 38 | - 超管可修改组别名、组名、组长, 不可修改业务线 39 | 40 | 41 | 42 | ## 删除 43 | 44 | #### 删除组项目 45 | 46 | - 展开组,点击项目后的`删除`,即可删除该项目与组的关系 47 | 48 | #### 删除组成员 49 | 50 | - 展开组,点击成员后的`删除`即可删除该成员与该组的关系 51 | 52 | #### 删除定时任务 53 | 54 | - 展开组,点击定时任务后的`删除`即可删除该定时任务与组的关系 55 | 56 | #### 删除组 57 | 58 | - 点击组后面的`删除`, 即可删除整个组,删除后,组内关系全部解绑(不会删除组内项目,组内定时任务,组内成员,只删除关系) 59 | 60 | 61 | -------------------------------------------------------------------------------- /use/system/member.md: -------------------------------------------------------------------------------- 1 | # 用户管理 2 | 3 | > 因该平台主要面向内部使用,对注册功能其实没有太大用处。所以没有做用户注册功能,要么通过LDAP登陆,要么第三方授权登陆,要么就管理员添加用户登陆。 4 | 5 | 6 | 7 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/fd/e0/bc/20190823-7c590c01cabbcd13b1d62c05e0efd473.jpeg?imageView2/2/w/1280/interlace/0/q/70) 8 | 9 | ## 添加/编辑用户 10 | 11 | 找到**“平台管理”**->**“用户管理”**菜单,在列表页点击“清加用户”按钮,在弹出的对话框中输入相关信息: 12 | 13 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/49/37/58/20190823-f3060f84bf168a235ff2a4a037e498ae.jpeg?imageView2/2/w/1280/interlace/0/q/70) 14 | 15 | 如果您使用的是LDAP登陆或第三方授权登陆,那该用户会自动获取到邮箱及姓名。 16 | 17 | 授权登陆或LDAP登陆的用户默认分配的空间及角色是在`app.cfg`文件的[server]下的default_namespace和default_role参数。若想对它调整权限可用超管登陆后过进行分配。 18 | 19 | 角色可以选择多个。 20 | 21 | 空间也可以选择多个。 22 | 23 | 它们是多对多对多的关系。 24 | 25 | 普通用户一般是“项目开发”的角色,然后分配一个空间就行了,该用户可以看到相应空间的相关应用。但无法进行操作。若将它加入到“组”里边,那该用户可以操作相关空间下的组下的相关应用。 26 | 27 | 这关系有点绕,详细的请看[组](group.md) 28 | 29 | 状态:一共有三个值,分别是“创建”,“激活”,“关闭”三个状态。“创建”和“激活” 是一样的功效果(那为什么要分成两种状态?答:别问,当初怎么想的忘了),“关闭”状态的用户将无法登陆该平台。 30 | 31 | -------------------------------------------------------------------------------- /use/system/permission.md: -------------------------------------------------------------------------------- 1 | # 路由地址 2 | 3 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/e9/6e/0c/20190823-7cf846425b13c7d104916a166e6e95b3.jpeg?imageView2/2/w/1280/interlace/0/q/70) 4 | 5 | ## 添加 6 | 7 | 1. 找到一个你要添加的位置**“右击”** 8 | 9 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/2f/8b/61/20190823-334ed53afefd16d7649904528b72f157.jpeg?imageView2/2/w/1280/interlace/0/q/70) 10 | 11 | 2. 在弹出的下拉选项中选择**“添加同级”**或**“添加下级”** 12 | 13 | 3. 在弹出的对话框输入相关信息 14 | 15 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/5a/dc/ea/20190823-4e7e604ce6b6ad47e35a4178dca5a0b8.jpeg?imageView2/2/w/1280/interlace/0/q/70) 16 | 17 | 1. 路由名称 18 | 2. 路由路径,支持 `/app/{namespace}/{id:+0~9}` 或 `/app/:namespace/:id` 两种写法 19 | 3. Icon: 如果是菜单填ant.design支持的icon就行 20 | 4. HTTP请求的Method,支持 GET、POST、DELETE、PUT等 21 | 5. 是否是菜单,如果是由会在菜单列表展示 22 | 23 | ## 删除 24 | 25 | 1. 找到一个你要添加的位置**“右击”** 26 | 27 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/2f/8b/61/20190823-334ed53afefd16d7649904528b72f157.jpeg?imageView2/2/w/1280/interlace/0/q/70) 28 | 29 | 2. 点击**删除目录** 30 | 31 | ## 更新 32 | 33 | 同添加功能差不多,只不过是更新相关信息而已 34 | 35 | ## 移动 36 | 37 | 这个功能就厉害了,可以直接拖动路由到相应的路由下,谁用谁知道。 38 | 39 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/9d/25/b6/20190823-fab41293da616221b0853cb52599d16f.jpeg?imageView2/2/w/1280/interlace/0/q/70) -------------------------------------------------------------------------------- /use/system/proclaim.md: -------------------------------------------------------------------------------- 1 | # 公告管理 2 | 3 | 主要用于平台系统发布公告。 4 | 5 | 接收类型 6 | 7 | - 全部 8 | - 业务线 9 | - 指定用户 10 | 11 | 说明:如果上传内空有图片,需要在app.cfg 配置文件中,配置好上传路径,用于存储图片 12 | 13 | ``` 14 | [server] 15 | upload_path = /tmp/kpaas/upload #文件上传目录 16 | ``` 17 | 18 | -------------------------------------------------------------------------------- /use/system/role.md: -------------------------------------------------------------------------------- 1 | # 角色管理 2 | 3 | > 平台默认初如化了两个角色的权限。一个是超管另一个是项目研发 4 | > 5 | > 剩下的您可以根据需求配置相关角色的权限。 6 | 7 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/19/57/aa/20190823-d8cdd9128523ab68a24ca2a75741954f.jpeg?imageView2/2/w/1280/interlace/0/q/70) 8 | 9 | ##增加角色 10 | 11 | 在角色管理菜单列表页点击**“添加角色”**按钮 12 | 13 | 在弹出的对话框中输入以下三个信息 14 | 15 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/ac/1f/41/20190823-6ab24b0ecd051d4b447f7bfa1f0ac7d9.jpeg?imageView2/2/w/1280/interlace/0/q/70) 16 | 17 | 1. 名称 18 | 2. 描述 19 | 3. 级别 20 | 21 | > 这里需要特别注意“角色级别”的值越小,可能的权限会越大,目前只用在了几个地方。 22 | 23 | ## 角色分配权限 24 | 25 | 添加完角色之后,我们得给角色加上相应的权限。 26 | 27 | 在角色列表找到需要调整的角色,并点击**“权限按钮”**弹出如下对话框。 28 | 29 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/85/04/dd/20190823-5443a3488af0d5fcd79f866304585e69.jpeg?imageView2/2/w/1280/interlace/0/q/70) 30 | 31 | 根据需求,勾选相应的权限提交就好了。 32 | 33 | 灰常简单。 34 | 35 | -------------------------------------------------------------------------------- /use/template.md: -------------------------------------------------------------------------------- 1 | # 模板管理 2 | 3 | > 这里涉及到的模板,主要用于项目配置必须的模板信息。 4 | 5 | 首先,我们来看下模板列表都包含哪些信息。模板详情内容请 **点击查看详情...** 6 | 7 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/3d/f2/98/20190823-bb324a31aa3789b194f1a9e7f293d99c.jpeg) 8 | 9 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/d9/9e/f3/20190823-8755bea82c0534b0f34880939e9d9d19.jpeg) 10 | 11 | 12 | 13 | 当然,如果当前模板不符合要求,也可以进行编辑操作... 14 | 15 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/ad/8c/5f/20190823-cd30bfb67723fec856ad3e1b8c0ad4fe.jpeg) 16 | 17 | 18 | 19 | #### 模板类型详解 20 | 21 | > **Service** : 负载均衡 22 | > 23 | > **Deployment** : 创建一个*Kubernetes Deployment*对象来运行一个应用 24 | > 25 | > **Endpoints** : 创建一个 Kubernetes Endpoints 26 | > 27 | > **ConfigMap** : 配置字典 28 | > 29 | > **Ingress** : 创建 Kubernetes Ingress 30 | > 31 | > **CronJob** : 创建一个 Kubernetes 定时任务 32 | > 33 | > **JenkinsCommand** : 创建一个 Jenkins 项目的Shell命令 34 | > 35 | > **Gateway** : 配置网关 36 | > 37 | > **IstioProxy** : 配置 Istio 代理 38 | > 39 | > **InitContainers** : 初始化容器配置 40 | > 41 | > **FilebeatConfigMap** : 日志采集配置 42 | > 43 | > **StorageClass** : 创建一个存储类 44 | > 45 | > **PersistentVolumeClaim** : 创建一个存储卷 46 | > 47 | > **StatefulSet** : 创建一个有状态服务 48 | > 49 | > **FilebeatContainer** : 容器日志采集信息 50 | > 51 | > 更多模板信息, 待完善..... 52 | 53 | -------------------------------------------------------------------------------- /use/tools/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kplcloud/cloud-website/dd161e02b986f384c621e88b6ebe755c049c9448/use/tools/README.md -------------------------------------------------------------------------------- /use/tools/app-clone.md: -------------------------------------------------------------------------------- 1 | # 克隆应用 2 | 3 | > 应用克隆 (`用于已有服务,需要在另一个业务线下创建一个同样的服务,不需要重新创建`) 4 | 5 | 6 | 7 | ## 服务/环境克隆(菜单栏:工具集->服务/环境克隆) 8 | 9 | 点击菜单栏,在项目列表中筛选您要克隆的项目,然后点击 `克隆` ,弹框中选择您要克隆到哪个业务线。 10 | 11 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/c6/15/3e/20190805-03e59b22d253ef9433ed8f7b151c6688.jpeg?imageView2/2/w/1280/interlace/0/q/70) 12 | 13 | 14 | 15 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/a9/3b/87/20190805-85594654f12479f083b163453bea93cd.jpeg?imageView2/2/w/1280/interlace/0/q/70) 16 | 17 | 选择目录空间,系统为在目标空间下生成该应用所需要的所有类型资源和Jenkins Job。 -------------------------------------------------------------------------------- /use/tools/container-time.md: -------------------------------------------------------------------------------- 1 | # 调整容器时间 2 | 3 | > 在我们项目维护过程中,可能会遇到需要修改服务器时间,平台的工具集功能就可以满足您的需求了~ 4 | 5 | 6 | 7 | 在这需要注意,此功能依赖faketime,请在宿主机编译faketime扩展。路径在 `/usr/local/lib/libfaketime.so.1` 8 | 9 | ## 调整服务时间(菜单栏:工具集->调整时间) 10 | 11 | 在项目列表中筛选您要修改的项目,点击 `修改时间`,确认之后会重启服务生效。 12 | 13 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/1f/6d/e4/20190805-eff744fbd04f4cbee57a52336da1f659.jpeg?imageView2/2/w/1280/interlace/0/q/70) 14 | 15 | ![](http://source.qiniu.cnd.nsini.com/images/2019/08/32/d3/f6/20190805-5439bff0aadc665cf18df9d2d3632a78.jpeg?imageView2/2/w/1280/interlace/0/q/70) --------------------------------------------------------------------------------