first commit

This commit is contained in:
huanqing.shao
2019-07-25 00:47:21 +08:00
commit 97d19726a4
198 changed files with 13768 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 319 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

40
docs/overview/README.md Normal file
View File

@ -0,0 +1,40 @@
## Kuboard
A cool Kubernetes dashboard.
Kuboard 可以有效降低 Kubernetes 初学者的学习门槛,对于有经验的用户,也是非常顺手的一款运维工具。已在多个项目中投产使用。
Kuboard 的主要特点:
* 场景化设计
* 微服务分层显示
* 微服务上下文监控
![image-20190716234146419](./README.assets/image-20190716234146419.png)
## Demo
[Kuboard 在线体验](http://demo.eip.work/#/login?isReadOnly=true&token=eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJvYXJkLXZpZXdlci10b2tlbi02djZiZiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJvYXJkLXZpZXdlciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjhiYTU3YmI1LWFiMTctNDM1NS1hNTM0LTQ0Njk4NGY0NzFlZiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJvYXJkLXZpZXdlciJ9.DcXNIp0RKha1zkV4ga_QlGfcvMLGx2LOyzX-0VeboC3FojKFhxnfBeoda-zTeh6ugJlSM4kQYrRcof1Kx8Mg3-UgofNmgRySbDEVKtJZyMUoHqLmySKUIn8sbX8q83RNcqwcvY-fM8-w8HSuzU7Td7WWNuZrlCL4q_LQDYIBet1nlQ83YsENKNE8rsZQFDw8YM0MH6BEZLdwyhaboy_jjYbsU7kv8gks3aIX4lh1Fs9ZFQpC_6B0_MZvb7rEeG2M8QWXoUkDoL5JCKu6Wot5GlWf0kDMxIsViggP0NmSDTKh6kIvCkT2FZ2I4guEcjE_EjBpdOS6Abta22tzLlPKhg)
为保证环境的稳定性,在线 Demo 中只提供只读权限。<span style="color: #F56C6C; font-weight: 500;">请在PC浏览器中打开</span>
<p>
<a target="_blank" href="http://demo.eip.work/#/login?isReadOnly=true&token=eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJvYXJkLXZpZXdlci10b2tlbi02djZiZiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJvYXJkLXZpZXdlciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjhiYTU3YmI1LWFiMTctNDM1NS1hNTM0LTQ0Njk4NGY0NzFlZiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJvYXJkLXZpZXdlciJ9.DcXNIp0RKha1zkV4ga_QlGfcvMLGx2LOyzX-0VeboC3FojKFhxnfBeoda-zTeh6ugJlSM4kQYrRcof1Kx8Mg3-UgofNmgRySbDEVKtJZyMUoHqLmySKUIn8sbX8q83RNcqwcvY-fM8-w8HSuzU7Td7WWNuZrlCL4q_LQDYIBet1nlQ83YsENKNE8rsZQFDw8YM0MH6BEZLdwyhaboy_jjYbsU7kv8gks3aIX4lh1Fs9ZFQpC_6B0_MZvb7rEeG2M8QWXoUkDoL5JCKu6Wot5GlWf0kDMxIsViggP0NmSDTKh6kIvCkT2FZ2I4guEcjE_EjBpdOS6Abta22tzLlPKhg">
<img src="./README.assets/image-20190723104717575.png"></img>
</a>
</p>
## Getting Started
[如何降低K8S学习门槛<span style="color: red;">(必读)</span>](concepts)
[安装](/install/index)
[使用](/guide/index)
## 在线提问
![Kuboard 兴趣群二维码](./README.assets/kuboard_qq.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

223
docs/overview/concepts.md Normal file
View File

@ -0,0 +1,223 @@
# Kubernetes 入门
## Kubernetes 学习门槛在哪儿
学习 Kubernetes 之前,必须具备的知识储备:
* Linux 基础
* 网络基础
* 容器技术,例如 https://www.docker.com/
学习 Kubernetes 的过程中可能碰到的难关:
* 理解 Kubenetes 为了实现容器编排而提出的各种抽象概念以及他们之间的关系容器组Pod、存储卷Volume、存储卷声明PVC、Ingress、Service 等
* 安装及配置 Kubernetes 环境
* 编写和维护 Kubernetes Yaml 文件
* 熟悉 kubectl 命令行工具中常用的 10 多个命令
## 降低 Kubernetes 学习门槛
Kuboard 为初学者学习 Kubernetes 时设计了如下学习路径:
* 跟随文档 [安装 Kubernetes 用于测试](/install/install-k8s) 快速安装一个可以练习使用的 Kubernetes 环境初学者也许要花费2小时或更多
* 跟随文档 [安装 Kuboard](/install/install-dashboard) 5分钟
* 使用 Kuboard 工作负载编辑器 [创建 busybox](/guide/example/busybox) 10分钟
* 尝试 Kuboard 设计的其他 example [使用 Kuboard](/guide/index)
后续使用 Kuboard 进行 Kubernetes 运维时,学习者、使用者除了在极少数场景下需要依赖 kubectl 命令之外,完全可以使用 Kuboard 完成日常运维任务。
> 日常的 Kubernetes 运维过程中,为了排查问题,您可能需要:
>
> * 使用 kubectl port-forward 命令实现 [端口转发](/guide/diagonize/port-forward)(已在 Kuboard 开发计划中)
> * 使用 kubectl cp 命令向容器中复制文件(极低频场景)
本文后续章节介绍了 Kuboard 工作负载编辑器的设计,如果您能够大致理解当中的概念,说明您已经完全准备好了,可以开始自己的 Kubernetes 之旅。
## 工作负载编辑器设计
在向 Kubernetes 集群部署应用时,开发者或者运维团队必须花大量的时间去理解 Kubernetes 中各种对象的概念,并编写 Yaml 文件去描述 Kubernetes 对象以及他们之间的关系然而不同的人因为经验、视角的不同对Kubernetes 中各对象之间关系的理解并不完全一致,也因此产生了一系列问题:
* 由于理解的不到位刚入门Kubernetes的技术人员在使用 Kubernetes 部署应用时经常性地受挫;
* 由于理解方式的不一致,不同技术人员编写的 yaml 文件结构各不一样,降低了部署在后期的可维护性;
* 由于部署数量的增加,导致 YAML 文件的数量和代码行数不断增长;
Kubernetes 官方提供的 Kubernetes Dashboard 充分意识到了 Kubernete 对象类型在种类上的多样性以及关系上的复杂性,到目前为止并没有在全功能 Dashboard 上做出过多努力,尤其是没有付出过多努力去打造工作负载的 UI 编辑器。在 Kubernetes Dashboard 中,如果想要对 Service、Deployment、StatefulSet、ConfigMap 等各种 Kubernetes 对象执行新增或者变更操作时,您必须编写 YAML 文件。从这个意义上来讲截止到作者写这篇文章的时间点Kubernetes 的官方 Dashboard 仍然是一个 “只读” 型 Dashboard几乎所有的运维操作仍然需要技术人员去编写和维护冗长的 YAML 文件,并通过 kubectl 命令来完成。
由于 Kubernetes YAML 文件复杂性,以及开发/运维团队在多环境复制开发环境、测试环境、准上线环境、生产环境等方面的普遍需求Kubernetes 社区提出了各种各样的解决方案,例如 kustomize / helm chart 等,这些解决方案在解决一个问题的同时,又在另一方面增加了复杂度,为 Kubernetes 爱好者增加了新的学习门槛。
Kuboard 与 Kubernetes Dashboard 相同的是,架构上的简洁性。尤其是,使用 Kuboard 并不需要我们去学习和理解新的概念,而是和 Kuboard 一起,将 Kubernetes 对象中各种复杂的概念和关系梳理清楚,将各种知识点条理化,清晰化。在 Kuboard 的辅助下,轻松掌握 Kubernetes 的使用和运维,并利用 Kuboard 完成 Kubernetes 的日常运维工作。
## 工作负载编辑器介绍
为了降低 Kubernetes 的学习难度和使用难度Kuboard 尝试对 Kubernetes 中管理的各种对象做了一个梳理,并以此为基础,设计了 Kuboard 工作负载编辑器。
Kuboard 工作负载编辑器以下图的方式理解和管理 Kubernetes 对象。
![image-20190722165648180](./concepts.assets/image-20190722165648180.png)
上图中各概念与 Kuboard 工作负载编辑器界面的映射关系如下:
![image-20190722162249531](./concepts.assets/image-20190722162249531.png)
### 1. 基本信息
基本信息对应到 Kubernetes 的 Workload Controller当前 Kuboard 工作负载编辑器已经支持了使用频率最高的几类 Workload Controller
* Deployment
* StatefulSet
* DaemonSet
除此之外Kubernetes 还有如下几类 Controller
* ReplicaSet Kubernetes 官方推荐使用 Deployment 而不是 ReplicaSet
* ReplicationController Kubernetes 官方推荐使用 Deployment 而不是 ReplicationController
* Garbage Collection
* TTL controller For Finished Resources
* Jobs
* Cron Job
Kuboard 未来将陆续支持 Garbage CollectionTTL ControllerJobs 和 Cron Job。
Kubernetes Workload Controller 主要用于:
* 根据容器组模板的定义,创建和管理多个容器组
* 处理容器组的复制和上线
* 在集群范围内提供自修复能力
> 例如Workload Controller 起初在节点 A 上创建并运行了一个容器组 pod_a当节点 A 出现故障不能正常工作时Workload Controller 可以自动地在其他可用的节点上运行一个完全相同的容器组实例 pod_a' 以替代 pod_a。
>
> 不同类型的 Workload Controller 在处理容器组时,会有各自不同的行为。
> 请参考 https://kubernetes.io/docs/concepts/workloads/pods/pod-overview/#pods-and-controllers
基本信息编辑器的界面如下图所示:
![image-20190722172356943](./concepts.assets/image-20190722172356943.png)
| 字段名称 | 字段描述 |
| -------- | ------------------------------------------------------------ |
| 服务类型 | 即工作负载类型,<br />当前支持: Deployment、StatefulSet、DaemonSet |
| 服务分层 | 决定了 Kuboard 将该工作负载展示在哪一个分层,同时,也确定了该工作负载名称的前缀,可选项有:<br />* 展现层 web、网关层 gateway、服务层 svc、持久层 db、中间件层 cloud、监控层 monitor<br />* 默认层当前不可选择 |
| 标签 | 用于确定 Service 的 labelSelector、Controller 的 labels、容器组的 labels |
| 服务描述 | 展示在 Kuboard 界面上的一段描述信息 |
| 副本数量 | 对于 Deployment 和 StatefulSet 可以填写,决定了该控制器应该维持的容器组副本的数量 |
### 2. 数据卷
容器每次启动时,从镜像中初始化所有文件,后续对文件系统的修改、新增、删除操作的结果都是不能持久化的。当容器崩溃时, kubelet 重启该容器,但是原容器已经做的修改将丢失,因为每次启动容器,都是从镜像中初始化;此外,多个容器运行在同一个容器组中时,通常伴随着在不同容器之间共享文件的需求。
Kubernetes的抽象出了数据卷 Volume 的概念,以解决上述的问题。
**Kuboard 目前支持如下类型的数据卷:**
* NFS
* 存储卷声明
* emptyDir
* 配置 ConfigMap
* Secrets
> Kubernetes 支持的数据卷类型请参考https://kubernetes.io/docs/concepts/storage/volumes/#types-of-volumes
>
> Kuboard 认为当前支持的数据卷类型已经满足绝大多数应用场景,目前正在添加对更多类型数据卷的支持。
容器组中的不同容器都可以通过挂载点引用该容器组加载的数据卷。Kuboard 工作负载编辑中,使用如下界面定义数据卷:
![image-20190722182005060](./concepts.assets/image-20190722182005060.png)
| 字段名称 | 说明 |
| -------------- | ------------------------------------------------------------ |
| 数据卷名称 | 如图中的 ***example-data*** 、 ***empty-dir*** |
| 数据卷类型 | |
| 数据卷详细信息 | 不同类型的数据卷需要填写的信息不尽相同,例如<br />存储卷声明,需要选择事先已经在名称空间中创建好的存储卷声明<br />NFS需要填写 NFS Server 的地址,以及 NFS Path |
### 3. 身份信息
身份信息区域主要为容器组定义两类信息:
* imagePullSecrets容器组调用镜像仓库接口抓取镜像时所使用的用户名密码。如果您使用了私有镜像仓库您需要在此指定镜像仓库的用户名密码如果您使用 docker 公共仓库,则无需填写 imagePullSecrets
* ServiceAccount容器组调用 kubernetes apiserver 时,所使用的身份信息
Kuboard 工作负载编辑器中关于身份信息的编辑界面如下所示:
![image-20190722183329825](./concepts.assets/image-20190722183329825.png)
### 4. 容器
容器是我们真正应用程序镜像被加载和运行的地方,按照 Kubernetes 的设计,一个容器组 Pod 中可以包含多个容器 Container这些容器被分为两类
* 初始化容器
* 初始化容器总是执行后结束执行
* 初始化容器按其定义的顺序执行,前一个初始化容器执行结束后,才开始后一个初始化容器的执行
* 只有初始化容器执行成功后,容器组才启动工作容器
* 请参考 https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
* 工作容器
* 容器组可以包含一个或多个工作容器
* https://kubernetes.io/docs/concepts/workloads/pods/pod-overview
Kuborad中定义容器的界面如下图所示
![image-20190722183750444](./concepts.assets/image-20190722183750444.png)
![image-20190722184516447](./concepts.assets/image-20190722184516447.png)
### 5. 访问方式
访问方式,即 Kubernetes Service。
> 请参考: https://kubernetes.io/docs/concepts/services-networking/service/
Kuboard 中,支持 ClusterIP集群内访问 以及 NodePortVPC 内访问) 两种 Service 访问方式,您也可以不为该工作负载定义 Service 访问方式。访问方式的界面如下所示:
![image-20190722184943431](./concepts.assets/image-20190722184943431.png)
### 6. 互联网入口
互联网入口,即 Kubernetes Ingress。
> 请参考: https://kubernetes.io/docs/concepts/services-networking/ingress/
Kuboard 并不限定您使用何种类型的 [Ingress Controller](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/) 但是 [安装 Kubernetes 用于测试](/install/install-k8s) 文档中,推荐使用的 Ingress Controller 是 [Nginx-Ingress](https://github.com/nginxinc/kubernetes-ingress)。
在您使用 Nginx-Ingress 的情况下,要想确保您能按照互联网入口中定义的域名访问您的服务,请确保以下两点:
* 域名解析指向 Kubernetes 集群中 Worker 节点对应的负载均衡的 IP 地址
* 如果是测试环境,也可以只指向其中一台 Worker 节点的 IP 地址
* 通过该域名,可以访问 Worker 节点的 80 端口
* 如果您启用了 HTTPS请同时确保通过该域名可以访问 Worker 节点的 443 端口
Kuboard 中,定义互联网入口的界面如下所示:
![image-20190722185113938](./concepts.assets/image-20190722185113938.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 KiB

View File

@ -0,0 +1,96 @@
## 为什么选择 Kuboard
Kubernetes 已然是当下容器编排领域事实上的标准,各大云服务商都急于推出 Kubernetes 服务,互联网公司也纷纷跟进,将自己的应用容器化,并使用 Kubernetes 编排。
在 Kubernetes 图形化工具方面,我们已经获得了极大的可选择空间:
* 各云服务商自己推出的 Kubernetes 服务所搭载的管理控制台,例如 阿里云的 Kubernetes 服务,青云推出的 KubeSphere其他云服务商的 CaaS 类服务
* Kubernetes 官方的图形管理界面 Kubernetes Dashboard
* 面向企业私有化部署的 Rancher
什么场景下更适合选择 Kuboard 呢?
## Kubernetes 入门学习者
Kuboard类似于 Kubernetes Dashboard是一款轻量级产品按照 Kuboard 的文档,您可以很快地搭建一套学习 Kubernetes 用的集群环境,您也可以在自己已经有的集群上轻易地完成 Kuboard 的安装。
对于 K8S 入门学习者来说,看了那么多 Kubernetes 文章,了解了许多的跟 apiserver、etcd、pod、container、service、ingress、storage class等各种概念都不如比不上自己动手搭一套 K8S 环境并在其上部署一套微服务应用的效果好。Kuboard 完全采用场景化的设计,操作过程更适合人们的思考方式。例如,集群概览的展示方式、名称空间的展示方式。
### 集群概览
在 Kuboard 中,集群概览的展现形式如下:
计算资源、存储资源并列在集群概览的下层,上层则是运行于计算资源与存储资源上的名称空间(应用)。
![集群概览](./README.assets/image-20190716234146419.png)
### 名称空间
在 Kuboard 中,名称空间的展示形式如下:
以微服务参考分层架构的形式,将所有的微服务分为如下几层:
* 展现层
* 终端用户访问的 Web 应用
* API网关层
* Spring Cloud Gateway / Zuul /Kong 等接口网关
* 微服务层
* Spring Boot 微服务,或 PHP / Python 实现的微服务
* 持久层
* MySQL 数据库等开发及测试环境里将MySQL部署于 Kubernetes 可以极大地降低环境维护的任务量)
* 中间件层
* 消息队列
* 服务注册 Eureka / Zookeeper / Consul 等
* 监控层
* Prometheus + Grafana
* Pinpooint 等
![image-20190721154650916](./why-kuboard.assets/image-20190721154650916.jpg)
更为贴心的,当某一个工作负载存在部署方面的问题时, Kuboard 将以红色高亮出该工作负载,并配有合适的方式辅助用户定位错误信息。
### 无需手写 Yaml
学习 Kubernetes 时,需要花费许多的时间,在理解一个概念之后,模仿着写一个 yaml 文件,再使用 kubectl 应用该文件。
使用 Kuboard 提供的工作负载编辑器,可以直观的完成应用的部署
![image-20190723105039358](./why-kuboard.assets/image-20190723105039358.png)
## Kubernetes 日常运维人员
kubectl 的命令敲了许多遍了yaml 文件越来越多,结构越来越复杂?又要部署一套测试环境,用来进行 UAT 测试?
### 纯图形界面运维 Kubernetes
在作者的日常运维工作中,除了 kubectl port-forward 还需要回到命令行界面以外,其他运维任务已经全部在 Kuboard 中轻松完成。更让人期待的是Kuboard 作者还计划实现 port-forward 的功能,如此一来,作者日后就完全不再需要使用 kubectl 了。
### 多环境复制
为了能够是你的一套 yaml 文件适应多种部署开发环境、测试环境、UAT环境、生产环境您一定尝试过各种办法例如 helmer chart, kustomize, kubectl apply -k directory_name但是您本来可以更轻松地完成这样的任务的。
Kuboard 提供了 工作负载导出和导入的功能0 yaml文件轻松复制多个环境。
### 应用升级
Kuboard 提供批量修改容器镜像版本的功能,轻松升级应用程序的版本。
![image-20190721000759925](./why-kuboard.assets/image-20190721000759925.png)
## 0 侵入性
Rancher 为了支持多云管理MeSosDocker SwarmKubernetes等引入了一系列复杂的概念又需要新增安装 Rancher Server、Rancher Agent等本来学习 Kubernetes 已然不堪重负Rancher再把多云整合到一起来无疑又增加了学习和使用的复杂性。如果您只是打算使用 Kubernetes 的话,也许并不需要选择 Rancher 这样重量级的产品。Kuboard 仅仅依赖于原生 Kubernetes可以运行在各种公有云、私有云上您也可以自己基于物理机、vsphere、vmware等已经有的基础设施搭建 Kubernetes轻松实现现有 Infrastructure 的容器化改造。
## 更多资料
Kuboard 官网 http://kuboard.cn
Kuboard QQ 群
![Kuboard QQ 群](./README.assets/kuboard_qq.png)