This commit is contained in:
huanqing.shao
2019-08-03 20:36:05 +08:00
parent 53907c6ff6
commit d759d99a45
7 changed files with 104 additions and 21 deletions

View File

@ -117,6 +117,13 @@ module.exports = {
'install-dashboard-upgrade'
]
},
{
title: '常见问题',
collapsable: false,
children: [
'faq/timeout'
]
}
],
'/guide/': [

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

66
install/faq/timeout.md Normal file
View File

@ -0,0 +1,66 @@
# 输入 Token 后提示 timeout
## 错误描述
如下图所示,显示错误信息:
> Token校验失败Error: timeout of 10000ms exceeded
![image-20190803165814924](./timeout.assets/image-20190803165814924.png)
## 发生此错误的原因是
Kuboard 不能访问 Kubernetes apiserver。
通常出现此错误时,[Kubernetes Dashboard](https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/) 也不能正常工作。
## 此问题产生的根源
多位反馈此问题的网友都是在网上不同的地方找到了不同形式的 Kubernetes 集群安装文档,并依照文档的描述安装集群。他们都缺少如下几个步骤中的一个或多个:
**关闭 防火墙、SeLinux、swap**
``` sh
# 在 master 节点和 worker 节点都要执行
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
swapoff -a
yes | cp /etc/fstab /etc/fstab_bak
cat /etc/fstab_bak |grep -v swap > /etc/fstab
```
**修改 /etc/sysctl.conf**
``` sh
# 在 master 节点和 worker 节点都要执行
vim /etc/sysctl.conf
```
向其中添加
```
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
```
执行命令以应用
```sh
# 在 master 节点和 worker 节点都要执行
sysctl -p
```
## 解决办法
* 在每一个节点上包括Master、Worker补充执行上述步骤然后重新启动节点机器。
* 或者按照 [安装 Kubernetes 单Master节点](install) 的描述重新安装集群

View File

@ -9,10 +9,6 @@
* 初学者, 请参考 [安装 Kubernetes 单Master节点](install-k8s.html)
* 用于生产,请参考 [安装 Kubernetes 高可用](install-kubernetes.html)
碰到问题? **在线提问**
![Kuboard 兴趣群二维码](./../overview/README.assets/kuboard_qq.png)
## 兼容性
@ -173,11 +169,18 @@ kubectl port-forward service/kuboard 8080:80 -n kube-system
::: tip
需要您先完成 [从客户端电脑远程管理 Kubernetes](install-kubectl) 的配置
需要您先完成 [从客户端电脑远程管理 Kubernetes](install-kubectl.html) 的配置
:::
::::
::: warning
* 如果不能访问 Kuboard请参考 [常见问题](faq/timeout.html)
* 如果仍然不能解决,请到 QQ 群提问
![qq](../overview/README.assets/kuboard_qq.png)
:::
**下一步**

View File

@ -44,7 +44,6 @@ management:
eureka:
instance:
preferIpAddress: true
hostname: ${HOSTNAME}
client:
register-with-eureka: false
fetch-registry: false
@ -55,11 +54,7 @@ eureka:
enable-self-preservation: false
```
该项目中有个值取自环境变量:
* HOSTNAME
Kubernetes 自动配置,如前所述,实际运行时取值为 cloud-eureka-0cloud-eureka-1cloud-eureka-2
该项目中有个值取自环境变量:
* CLOUD_EUREKA_DEFAULT_ZONE 这个参数必须通过环境变量进行配置
@ -69,7 +64,7 @@ eureka:
因为各微服务也需要用到 CLOUD_EUREKA_DEFAULT_ZONE 这个参数(请参考 部署 svc-example 章节),所以建议将该参数配置在 Kubernetes 的 ConfigMap 中最为便捷。
文件中没有配置 `eureka.instance.hostname`,该参数的默认取值通过 java.net.InetAddress 查找机器的 hostname。如前所示当我们使用 StatefulSet 部署 eureka 时hostname 为 cloud-eureka-0 / cloud-eureka-1 / cloud-eureka-2
**容器 Command 参数**

View File

@ -10,11 +10,12 @@
**部署类型**
关于 MySQL 数据库的部署,Kuboard 建议的做法如下:
* 在开发环境、测试环境使用 Kuboard 部署一个副本数为 1 的 StatefulSet以便可以快速复制 开发环境、测试环境
* 在准上线环境和生产环境,使用 IaaS 服务商提供的 RDS 服务,原因是:
关于 MySQL 数据库的部署,建议的做法如下:
* 在开发环境、测试环境使用 Kuboard 部署一个副本数为 1 的 Deployment以便可以快速复制 开发环境、测试环境
* 在准上线环境和生产环境,使用 IaaS 服务商提供的 RDS 服务,或者自建 MySQL 主从集群,原因是:
* 直接将 MySQL 部署到 Kubernetes 虽然简便,但是数据库的运维仍然有大量的事情需要考虑,例如数据的备份、恢复、迁移等
* Kubernetes 管理无状态服务已经非常成熟,在管理有状态的容器例如 MySQL 时,仍然需要等待更好的解决方案。当下这方面最新的进展是 [Kubernetes Operator](http://dockone.io/article/8769)
* Kubernetes 管理无状态服务已经非常成熟,在管理有状态的容器例如 MySQL 时,仍然需要等待更好的解决方案。目前这方面最新的进展是 [Kubernetes Operator](http://dockone.io/article/8769)
* 如果您想尝试部署 MySQL 集群,目前还可以参考 [Run a Replicated Stateful Application](https://kubernetes.io/docs/tasks/run-application/run-replicated-stateful-application/)
**环境变量**
@ -42,7 +43,9 @@ ENV eureka.management.port=9104
ENV eureka.serviceUrl.default=http://monitor-eureka:9000/eureka
```
Dockerfile 中定义了环境变量 ENABLE_EUREKA_CLIENT=TRUE这个环境变量用于 Prometheus [监控套件](/guide/monitor/) 的服务发现。在不启用监控套件的情况下,应该将 ENABLE_EUREKA_CLIENT 这个环境变量设置为 FALSE。
Dockerfile 中定义了环境变量 ENABLE_EUREKA_CLIENT=TRUE这个环境变量用于 Prometheus [监控套件](/guide/monitor/) 的服务发现。在不启用监控套件的情况下,应该将 ***ENABLE_EUREKA_CLIENT*** 这个环境变量设置为 FALSE。
容器镜像 eipwork/mysql:5.7.26-1.1.11 基于 [mysql/mysql-server:5.7.26](https://hub.docker.com/r/mysql/mysql-server) 制作。参考文档 [More Topics on Deploying MySQL Server with Docker](https://dev.mysql.com/doc/refman/5.7/en/docker-mysql-more-topics.html#docker-environment-variables),通过设置环境变量 ***MYSQL_ROOT_PASSWORD*** ,可指定 MySQL 的root 用户密码
::: tip
可以在部署时覆盖环境变量的值,无需修改 Dockerfile。
@ -50,11 +53,22 @@ Dockerfile 中定义了环境变量 ENABLE_EUREKA_CLIENT=TRUE这个环境变
**容器 Command 参数**
容器镜像 eipwork/mysql:5.7.26-1.1.11 的 Dockerfile 指定了容器的启动方式,此处无需为容器额外设置 Command 参数。
容器镜像 eipwork/mysql:5.7.26-1.1.11 的 [Dockerfile](https://github.com/eip-work/eip-docker-library/blob/master/mysql/Dockerfile) 指定了容器的启动方式,此处无需为容器额外设置 Command 参数。
**数据卷**
参考文档 [More Topics on Deploying MySQL Server with Docker](https://dev.mysql.com/doc/refman/5.7/en/docker-mysql-more-topics.html#docker-persisting-data-configuration),我们需要将容器内路径 `/var/lib/mysql` 映射到数据卷,以便数据能够持久化。
**访问方式及互联网入口**
通常在两种情况下需要访问数据库:
* 微服务程序中访问数据库
* 开发者/运维人员通过 Navicat 等数据库工具访问数据库
为了同时支持这两种使用场景,建议为数据库配置 VPC内访问方式 NodePort Service
与数据库的通信为 socket不能为其配置互联网入口 Ingress
## 部署 db-example

View File

@ -52,8 +52,6 @@ Kuboard 为 Kubernetes 初学者设计了如下学习路径:
* **Kubernetes 进阶**
* [十分钟带你理解Kubernetes核心概念](k8s-core-concepts.html)
* 集成 DevOps
* 安装高可用 Kubernetes 集群
### Kubernetes 有经验者
@ -76,7 +74,7 @@ Kuboard 为您的这些痛苦提供了极佳的解决方案,请立刻开始:
### Kubernetes + Spring Cloud
使用 Kuboard 在 Kubernetes 上部署 Spring Cloud 微服务:
在 Kubernetes 上部署 Spring Cloud 微服务:
* [概述](/micro-service/spring-cloud/index.html)
* [部署服务注册中心]