diff --git a/.vuepress/config.js b/.vuepress/config.js index 08c0ec0..8c8d10d 100644 --- a/.vuepress/config.js +++ b/.vuepress/config.js @@ -117,6 +117,13 @@ module.exports = { 'install-dashboard-upgrade' ] }, + { + title: '常见问题', + collapsable: false, + children: [ + 'faq/timeout' + ] + } ], '/guide/': [ diff --git a/install/faq/timeout.assets/image-20190803165814924.png b/install/faq/timeout.assets/image-20190803165814924.png new file mode 100644 index 0000000..4081740 Binary files /dev/null and b/install/faq/timeout.assets/image-20190803165814924.png differ diff --git a/install/faq/timeout.md b/install/faq/timeout.md new file mode 100644 index 0000000..812e232 --- /dev/null +++ b/install/faq/timeout.md @@ -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) 的描述重新安装集群 + diff --git a/install/install-dashboard.md b/install/install-dashboard.md index b058fab..922eb5c 100644 --- a/install/install-dashboard.md +++ b/install/install-dashboard.md @@ -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) +::: **下一步** diff --git a/micro-service/spring-cloud/cloud-eureka.md b/micro-service/spring-cloud/cloud-eureka.md index 8321eb2..6dd90e2 100644 --- a/micro-service/spring-cloud/cloud-eureka.md +++ b/micro-service/spring-cloud/cloud-eureka.md @@ -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-0,cloud-eureka-1,cloud-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 参数** diff --git a/micro-service/spring-cloud/db-example.md b/micro-service/spring-cloud/db-example.md index c29ba8a..001976a 100644 --- a/micro-service/spring-cloud/db-example.md +++ b/micro-service/spring-cloud/db-example.md @@ -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 diff --git a/overview/README.md b/overview/README.md index 1cccf86..cd1379e 100644 --- a/overview/README.md +++ b/overview/README.md @@ -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) * [部署服务注册中心]