diff --git a/.vuepress/components/InstallEnvCheck.vue b/.vuepress/components/InstallEnvCheck.vue
new file mode 100644
index 0000000..8b5212f
--- /dev/null
+++ b/.vuepress/components/InstallEnvCheck.vue
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
必须选中下面的五个勾选框才能继续
+
选中后显示 安装 docker/kubelet 的文档
+
+
+
+
+
+ 我的任意节点 centos 版本在兼容列表中
+ 我的任意节点 hostname 不是 localhost,且不包含下划线
+ 我的任意节点 CPU 内核数量大于等于 2
+ 我的任意节点不会直接使用 docker run 或 docker-compose 运行容器
+ 我的任意节点只有一块网卡(可以在完成K8S安装后再添加网卡)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.vuepress/public/install-script/v1.16.1/init-master.sh b/.vuepress/public/install-script/v1.16.1/init-master.sh
index 100f1e3..8e876fd 100644
--- a/.vuepress/public/install-script/v1.16.1/init-master.sh
+++ b/.vuepress/public/install-script/v1.16.1/init-master.sh
@@ -26,9 +26,9 @@ mkdir /root/.kube/
cp -i /etc/kubernetes/admin.conf /root/.kube/config
# 安装 calico 网络插件
-# 参考文档 https://docs.projectcalico.org/v3.8/getting-started/kubernetes/
+# 参考文档 https://docs.projectcalico.org/v3.9/getting-started/kubernetes/
rm -f calico.yaml
-wget https://docs.projectcalico.org/v3.8/manifests/calico.yaml
+wget https://docs.projectcalico.org/v3.9/manifests/calico.yaml
sed -i "s#192\.168\.0\.0/16#${POD_SUBNET}#" calico.yaml
kubectl apply -f calico.yaml
diff --git a/.vuepress/public/install-script/v1.16.1/init_master.sh b/.vuepress/public/install-script/v1.16.1/init_master.sh
index f76f217..fc690c2 100644
--- a/.vuepress/public/install-script/v1.16.1/init_master.sh
+++ b/.vuepress/public/install-script/v1.16.1/init_master.sh
@@ -29,8 +29,8 @@ mkdir /root/.kube/
cp -i /etc/kubernetes/admin.conf /root/.kube/config
# 安装 calico 网络插件
-# 参考文档 https://docs.projectcalico.org/v3.8/getting-started/kubernetes/
+# 参考文档 https://docs.projectcalico.org/v3.9/getting-started/kubernetes/
rm -f calico.yaml
-wget https://docs.projectcalico.org/v3.8/manifests/calico.yaml
+wget https://docs.projectcalico.org/v3.9/manifests/calico.yaml
sed -i "s#192\.168\.0\.0/16#${POD_SUBNET}#" calico.yaml
kubectl apply -f calico.yaml
diff --git a/.vuepress/public/kuboard.rp b/.vuepress/public/kuboard.rp
index d14285a..3b25d5d 100644
Binary files a/.vuepress/public/kuboard.rp and b/.vuepress/public/kuboard.rp differ
diff --git a/.vuepress/theme/components/Page.vue b/.vuepress/theme/components/Page.vue
index 901bedd..ecc995c 100644
--- a/.vuepress/theme/components/Page.vue
+++ b/.vuepress/theme/components/Page.vue
@@ -24,24 +24,24 @@
- QQ群(免费)
+ QQ群(免费)
808894550
-
-
+
+
- 微信群(即时)
+ 微信群(即时)
扫第一个二维码完成打赏,扫第二个加微信进群聊(请发送打赏截图)
-
-
-
+
+
+
diff --git a/install/history-k8s/install-kubernetes-1.15.3.md b/install/history-k8s/install-kubernetes-1.15.3.md
new file mode 100644
index 0000000..56bb73d
--- /dev/null
+++ b/install/history-k8s/install-kubernetes-1.15.3.md
@@ -0,0 +1,507 @@
+---
+vssueId: 16
+description: Kubernete安装文档_使用kubeadm安装高可用的Kubernetes_v1.15.3集群_可用于生产环境
+meta:
+ - name: keywords
+ content: Kubernetes集群,Kubernetes高可用,Kubernetes生产环境
+# storyBook:
+# title: '使用 kubeadm 安装 kubernetes v1.15.3(高可用)'
+# initial: FullPage
+# pages:
+# - name: overview
+# title: 配置要求
+# - name: step1
+# title: 检查环境
+# - name: step2
+# title: 安装 docker/kubelet
+# - name: step3
+# title: 初始化 apiserver 集群
+# - name: step4
+# title: 初始化 worker 节点
+# - name: step5
+# title: 安装 Ingress Controller
+# - name: step6
+# title: 总结
+---
+
+# 安装Kubernetes高可用
+
+
+
+
+
+::: tip
+推荐初学者按照 [安装Kubernetes 单Master节点](install-k8s.html) 文档进行 Kubernetes 集群搭建
+:::
+
+## 介绍
+
+kubernetes 安装有多种选择,本文档描述的集群安装具备如下特点:
+
+* Kubernetes 1.15.3
+ * calico 3.8.2
+ * nginx-ingress 1.5.3
+* Docker 18.09.7
+* 三个 master 组成主节点集群,通过内网 loader balancer 实现负载均衡;至少需要三个 master 节点才可组成高可用集群,否则会出现 ***脑裂*** 现象
+* 多个 worker 组成工作节点集群,通过外网 loader balancer 实现负载均衡
+
+安装后的拓扑图如下:下载拓扑图源文件 使用Axure RP 9.0可打开该文件
+
+
+
+* **在线答疑**
+
+ 也可以扫描二维码加群
+
+
+
+
+
+
+
+
+## 检查 centos / hostname
+
+``` sh
+# 在 master 节点和 worker 节点都要执行
+cat /etc/redhat-release
+
+# 此处 hostname 的输出将会是该机器在 Kubernetes 集群中的节点名字
+hostname
+```
+
+**操作系统兼容性**
+
+| CentOS 版本 | 本文档是否兼容 | 备注 |
+| ----------- | --------------------------------------- | ----------------------------------- |
+| 7.7 | 😄 | 已验证 |
+| 7.6 | 😄 | 已验证 |
+| 7.5 | 😄 | 已验证 |
+| 7.4 | 🤔 | 待验证 |
+| 7.3 | 🤔 | 待验证 |
+| 7.2 | 😞 | 已证实会出现 kubelet 无法启动的问题 |
+
+::: tip 修改 hostname
+如果您需要修改 hostname,可执行如下指令:
+``` sh
+# 修改 hostname
+hostnamectl set-hostname your-new-host-name
+# 查看修改结果
+hostnamectl status
+```
+:::
+
+
+
+## 安装 docker / kubelet
+
+使用 root 身份在所有节点执行如下代码,以安装软件:
+- docker
+- nfs-utils
+- kubectl / kubeadm / kubelet
+
+
+
+
+``` sh
+# 在 master 节点和 worker 节点都要执行
+
+curl -sSL https://kuboard.cn/install-script/v1.15.3/install_kubelet.sh | sh
+
+```
+
+
+
+
+手动执行以下代码,效果与快速安装完全相同。
+
+<<< @/.vuepress/public/install-script/v1.15.3/install_kubelet.sh
+
+::: warning
+如果此时执行 `service status kubelet` 命令,将得到 kubelet 启动失败的错误提示,请忽略此错误,因为必须完成后续步骤中 kubeadm init 的操作,kubelet 才能正常启动
+:::
+
+
+
+
+
+
+## 初始化API Server
+
+### 创建 ApiServer 的 Load Balancer(私网)
+
+监听端口:6443 / TCP
+
+后端资源组:包含 demo-master-a-1, demo-master-b-1, demo-master-b-2
+
+后端端口:6443
+
+开启 按源地址保持会话
+
+假设完成创建以后,Load Balancer的 ip 地址为 x.x.x.x
+
+### 初始化第一个master节点
+
+
+::: tip
+* 以 root 身份在 demo-master-a-1 机器上执行
+* 初始化 master 节点时,如果因为中间某些步骤的配置出错,想要重新初始化 master 节点,请先执行 `kubeadm reset` 操作
+:::
+
+::: danger 关于初始化时用到的环境变量
+* **APISERVER_NAME** 不能是 master 的 hostname
+* **APISERVER_NAME** 必须全为小写字母、数字、小数点,不能包含减号
+* **POD_SUBNET** 所使用的网段不能与 ***master节点/worker节点*** 所在的网段重叠。该字段的取值为一个 CIDR 值,如果您对 CIDR 这个概念还不熟悉,请不要修改这个字段的取值 10.100.0.1/16
+:::
+
+
+
+
+在第一个 master 节点 demo-master-a-1 上执行
+
+``` sh
+# 只在 master 节点执行
+# 替换 apiserver.demo 为 您想要的 dnsName
+export APISERVER_NAME=apiserver.demo
+# Kubernetes 容器组所在的网段,该网段安装完成后,由 kubernetes 创建,事先并不存在于您的物理网络中
+export POD_SUBNET=10.100.0.1/16
+echo "127.0.0.1 ${APISERVER_NAME}" >> /etc/hosts
+curl -sSL https://kuboard.cn/install-script/v1.15.3/init_master.sh | sh
+```
+
+
+
+
+``` sh
+# 只在 master 节点执行
+# 替换 apiserver.demo 为 您想要的 dnsName
+export APISERVER_NAME=apiserver.demo
+# Kubernetes 容器组所在的网段,该网段安装完成后,由 kubernetes 创建,事先并不存在于您的物理网络中
+export POD_SUBNET=10.100.0.1/16
+echo "127.0.0.1 ${APISERVER_NAME}" >> /etc/hosts
+```
+
+<<< @/.vuepress/public/install-script/v1.15.3/init_master.sh
+
+
+
+
+***执行结果***
+
+执行结果中:
+* 第15、16、17行,用于初始化第二、三个 master 节点
+* 第25、26行,用于初始化 worker 节点
+
+``` sh {15,16,17,25,26}
+Your Kubernetes control-plane has initialized successfully!
+
+To start using your cluster, you need to run the following as a regular user:
+
+ mkdir -p $HOME/.kube
+ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
+ sudo chown $(id -u):$(id -g) $HOME/.kube/config
+
+You should now deploy a pod network to the cluster.
+Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
+ https://kubernetes.io/docs/concepts/cluster-administration/addons/
+
+You can now join any number of the control-plane node running the following command on each as root:
+
+ kubeadm join apiserver.k8s:6443 --token 4z3r2v.2p43g28ons3b475v \
+ --discovery-token-ca-cert-hash sha256:959569cbaaf0cf3fad744f8bd8b798ea9e11eb1e568c15825355879cf4cdc5d6 \
+ --control-plane --certificate-key 41a741533a038a936759aff43b5680f0e8c41375614a873ea49fde8944614dd6
+
+Please note that the certificate-key gives access to cluster sensitive data, keep it secret!
+As a safeguard, uploaded-certs will be deleted in two hours; If necessary, you can use
+"kubeadm init phase upload-certs --upload-certs" to reload certs afterward.
+
+Then you can join any number of worker nodes by running the following on each as root:
+
+kubeadm join apiserver.k8s:6443 --token 4z3r2v.2p43g28ons3b475v \
+ --discovery-token-ca-cert-hash sha256:959569cbaaf0cf3fad744f8bd8b798ea9e11eb1e568c15825355879cf4cdc5d6
+
+```
+
+**检查 master 初始化结果**
+
+``` sh
+# 只在第一个 master 节点执行
+
+# 执行如下命令,等待 3-10 分钟,直到所有的容器组处于 Running 状态
+watch kubectl get pod -n kube-system -o wide
+
+# 查看 master 节点初始化结果
+kubectl get nodes
+```
+
+### 初始化第二、三个master节点
+
+**获得 master 节点的 join 命令**
+
+
+
+
+
+初始化第一个 master 节点时的输出内容中,第15、16、17行就是用来初始化第二、三个 master 节点的命令,如下所示:此时请不要执行该命令
+
+``` sh
+ kubeadm join apiserver.k8s:6443 --token 4z3r2v.2p43g28ons3b475v \
+ --discovery-token-ca-cert-hash sha256:959569cbaaf0cf3fad744f8bd8b798ea9e11eb1e568c15825355879cf4cdc5d6 \
+ --control-plane --certificate-key 41a741533a038a936759aff43b5680f0e8c41375614a873ea49fde8944614dd6
+```
+
+
+
+
+**获得 certificate key**
+
+在 demo-master-a-1 上执行
+
+```sh
+# 只在 第一个 master 节点 demo-master-a-1 上执行
+kubeadm init phase upload-certs --upload-certs
+```
+
+输出结果如下:
+
+``` sh {6}
+[root@demo-master-a-1 ~]# kubeadm init phase upload-certs --upload-certs
+W0902 09:05:28.355623 1046 version.go:98] could not fetch a Kubernetes version from the internet: unable to get URL "https://dl.k8s.io/release/stable-1.txt": Get https://dl.k8s.io/release/stable-1.txt: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
+W0902 09:05:28.355718 1046 version.go:99] falling back to the local client version: v1.15.3
+[upload-certs] Storing the certificates in Secret "kubeadm-certs" in the "kube-system" Namespace
+[upload-certs] Using certificate key:
+70eb87e62f052d2d5de759969d5b42f372d0ad798f98df38f7fe73efdf63a13c
+```
+
+**获得 join 命令**
+
+在 demo-master-a-1 上执行
+``` sh
+# 只在 第一个 master 节点 demo-master-a-1 上执行
+kubeadm token create --print-join-command
+```
+
+输出结果如下:
+``` sh {2}
+[root@demo-master-a-1 ~]# kubeadm token create --print-join-command
+kubeadm join apiserver.demo:6443 --token bl80xo.hfewon9l5jlpmjft --discovery-token-ca-cert-hash sha256:b4d2bed371fe4603b83e7504051dcfcdebcbdcacd8be27884223c4ccc13059a4
+```
+
+则,第二、三个 master 节点的 join 命令如下:
+
+* 命令行中,蓝色部分来自于前面获得的 join 命令,红色部分来自于前面获得的 certificate key
+
+
+kubeadm join apiserver.demo:6443 --token ejwx62.vqwog6il5p83uk7y \
+--discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303 \
+--control-plane --certificate-key 70eb87e62f052d2d5de759969d5b42f372d0ad798f98df38f7fe73efdf63a13c
+
+
+
+
+
+**初始化第二、三个 master 节点**
+
+在 demo-master-b-1 和 demo-master-b-2 机器上执行
+
+``` sh
+# 只在第二、三个 master 节点 demo-master-b-1 和 demo-master-b-2 执行
+# 替换 x.x.x.x 为 ApiServer LoadBalancer 的 IP 地址
+export APISERVER_IP=x.x.x.x
+# 替换 apiserver.demo 为 前面已经使用的 dnsName
+export APISERVER_NAME=apiserver.demo
+echo "${APISERVER_IP} ${APISERVER_NAME}" >> /etc/hosts
+# 使用前面步骤中获得的第二、三个 master 节点的 join 命令
+kubeadm join apiserver.demo:6443 --token ejwx62.vqwog6il5p83uk7y \
+--discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303 \
+--control-plane --certificate-key 70eb87e62f052d2d5de759969d5b42f372d0ad798f98df38f7fe73efdf63a13c
+```
+
+**检查 master 初始化结果**
+
+``` sh
+# 只在第一个 master 节点 demo-master-a-1 执行
+# 查看 master 节点初始化结果
+kubectl get nodes
+```
+
+
+
+## 初始化 worker节点
+
+### 获得 join命令参数
+
+
+
+
+初始化第一个 master 节点时的输出内容中,第25、26行就是用来初始化 worker 节点的命令,如下所示:此时请不要执行该命令
+
+``` sh
+ kubeadm join apiserver.k8s:6443 --token 4z3r2v.2p43g28ons3b475v \
+ --discovery-token-ca-cert-hash sha256:959569cbaaf0cf3fad744f8bd8b798ea9e11eb1e568c15825355879cf4cdc5d6
+```
+
+
+
+
+**在第一个 master 节点 demo-master-a-1 节点执行**
+
+```bash
+# 只在第一个 master 节点 demo-master-a-1 上执行
+kubeadm token create --print-join-command
+```
+
+可获取kubeadm join 命令及参数,如下所示
+
+```bash
+kubeadm join apiserver.demo:6443 --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303
+```
+
+
+
+
+### 初始化worker
+
+**针对所有的 worker 节点执行**
+
+```sh
+# 只在 worker 节点执行
+# 替换 ${APISERVER_IP} 为 ApiServer LoadBalancer 的 IP 地址
+# 替换 ${APISERVER_NAME} 为 前面已经使用的 dnsName
+echo "${APISERVER_IP} ${APISERVER_NAME}" >> /etc/hosts
+
+# 替换为前面 kubeadm token create --print-join-command 的输出结果
+kubeadm join apiserver.demo:6443 --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303
+```
+
+### 检查 worker 初始化结果
+
+在第一个master节点 demo-master-a-1 上执行
+
+```sh
+# 只在第一个 master 节点 demo-master-a-1 上执行
+kubectl get nodes
+```
+
+
+
+## 移除 worker 节点
+
+::: warning
+正常情况下,您无需移除 worker 节点
+:::
+
+在准备移除的 worker 节点上执行
+
+```sh
+kubeadm reset
+```
+
+在第一个 master 节点 demo-master-a-1 上执行
+
+```sh
+kubectl delete node demo-worker-x-x
+```
+
+> * 将 demo-worker-x-x 替换为要移除的 worker 节点的名字
+> * worker 节点的名字可以通过在第一个 master 节点 demo-master-a-1 上执行 kubectl get nodes 命令获得
+
+
+
+## 安装 Ingress Controller
+
+> Ingress官方文档:https://kubernetes.io/docs/concepts/services-networking/ingress/
+>
+> Ingress Controllers官网介绍:https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/
+>
+> 本文中使用如下部署方式:https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#using-a-self-provisioned-edge
+>
+> kubernetes支持多种Ingress Controllers (traefic / Kong / Istio / Nginx 等),本文推荐使用 https://github.com/nginxinc/kubernetes-ingress
+
+
+
+
+
+**在 master 节点上执行**
+
+``` sh
+# 只在第一个 master 节点 demo-master-a-1 上执行
+kubectl apply -f https://kuboard.cn/install-script/v1.15.3/nginx-ingress.yaml
+```
+
+
+
+
+<<< @/.vuepress/public/install-script/v1.15.3/nginx-ingress.yaml
+
+
+
+
+::: warning
+如果您打算将 Kubernetes 用于生产环境,请参考此文档 [Installing Ingress Controller](https://github.com/nginxinc/kubernetes-ingress/blob/v1.5.3/docs/installation.md),完善 Ingress 的配置
+:::
+
+### 在 IaaS 层完成如下配置(**公网Load Balancer**)
+
+创建负载均衡 Load Balancer:
+
+* 监听器 1:80 / TCP, SOURCE_ADDRESS 会话保持
+* 服务器资源池 1: demo-worker-x-x 的所有节点的 80端口
+* 监听器 2:443 / TCP, SOURCE_ADDRESS 会话保持
+* 服务器资源池 2: demo-worker-x-x 的所有节点的443端口
+
+假设刚创建的负载均衡 Load Balancer 的 IP 地址为: z.z.z.z
+
+
+
+### 配置域名解析
+
+将域名 *.demo.yourdomain.com 解析到地址负载均衡服务器 的 IP 地址 z.z.z.z
+
+
+
+### 验证配置
+
+在浏览器访问 a.demo.yourdomain.com,将得到 404 NotFound 错误页面
+
+
+
+
+## 下一步
+:tada: :tada: :tada:
+
+您已经完成了 Kubernetes 集群的安装,下一步请:
+
+[安装 Kuboard](/install/install-dashboard.html)
+
+安装 Kuboard 之前先
+
+ 在线体验 Kuboard
+
+
+
diff --git a/install/install-k8s.md b/install/install-k8s.md
index c9b945d..56fba7e 100644
--- a/install/install-k8s.md
+++ b/install/install-k8s.md
@@ -31,78 +31,6 @@ meta:
-
-
@@ -122,7 +50,7 @@ export default {
* **持续更新和完善**
* 始终有最新的 Kubernetes 稳定版安装文档,当前版本 v1.16.1
- * 当前已更新了 60 次 , [查看更新历史](https://github.com/eip-work/kuboard-press/commits/master/install/install-k8s.md)
+ * 当前已更新了 61 次 , [查看更新历史](https://github.com/eip-work/kuboard-press/commits/master/install/install-k8s.md)
* **在线答疑**
@@ -165,7 +93,7 @@ export default {
**安装后的软件版本为**
* Kubernetes v1.16.1
- * calico 3.8.2
+ * calico 3.9
* nginx-ingress 1.5.5
* Docker 18.09.7
@@ -184,7 +112,7 @@ export default {
-安装后的拓扑图如下:下载拓扑图源文件 使用Axure RP 9.0可打开该文件
+安装后的拓扑图如下:下载拓扑图源文件 使用Axure RP 9.0可打开该文件
@@ -261,43 +189,7 @@ echo "127.0.0.1 $(hostname)" >> /etc/hosts
## 安装 docker / kubelet
-
-
-
-
-
-
-
-
-::: danger 必须选中下面的四个勾选框才能继续
-* 选中后显示 **安装 docker/kubelet 的文档**
-
-
-
-
-
- 我的任意节点 centos 版本在兼容列表中
- 我的任意节点 hostname 不是 localhost,且不包含下划线
- 我的任意节点 CPU 内核数量大于等于 2
- 我的任意节点不会直接使用 docker run 或 docker-compose 运行容器
- 我的任意节点只有一块网卡(可以在完成K8S安装后再添加网卡)
-
-
-
-
-:::
-
-
-
-
-
-
-
-
-
-
-
-
+
使用 root 身份在所有节点执行如下代码,以安装软件:
- docker
@@ -329,8 +221,7 @@ curl -sSL https://kuboard.cn/install-script/v1.16.1/install_kubelet.sh | sh
-
-
+
diff --git a/install/install-kubernetes.md b/install/install-kubernetes.md
index 20b1cb9..f333d87 100644
--- a/install/install-kubernetes.md
+++ b/install/install-kubernetes.md
@@ -1,11 +1,11 @@
---
vssueId: 16
-description: Kubernete安装文档_使用kubeadm安装高可用的Kubernetes_v1.15.3集群_可用于生产环境
+description: Kubernete安装文档_使用kubeadm安装高可用的Kubernetes_v1.16.1集群_可用于生产环境
meta:
- name: keywords
content: Kubernetes集群,Kubernetes高可用,Kubernetes生产环境
# storyBook:
-# title: '使用 kubeadm 安装 kubernetes v1.15.3(高可用)'
+# title: '使用 kubeadm 安装 kubernetes v1.16.1(高可用)'
# initial: FullPage
# pages:
# - name: overview
@@ -26,7 +26,7 @@ meta:
# 安装Kubernetes高可用
-
+
@@ -157,8 +160,9 @@ curl -sSL https://kuboard.cn/install-script/v1.15.3/install-kubelet.sh | sh
假设完成创建以后,Load Balancer的 ip 地址为 x.x.x.x
-### 初始化第一个master节点
+> 根据每个人实际的情况不同,实现 LoadBalancer 的方式不一样,本文不详细阐述如何搭建 LoadBalancer,请读者自行解决
+### 初始化第一个master节点
::: tip
* 以 root 身份在 demo-master-a-1 机器上执行
@@ -177,20 +181,20 @@ curl -sSL https://kuboard.cn/install-script/v1.15.3/install-kubelet.sh | sh
在第一个 master 节点 demo-master-a-1 上执行
``` sh
-# 只在 master 节点执行
+# 只在第一个 master 节点执行
# 替换 apiserver.demo 为 您想要的 dnsName
export APISERVER_NAME=apiserver.demo
# Kubernetes 容器组所在的网段,该网段安装完成后,由 kubernetes 创建,事先并不存在于您的物理网络中
export POD_SUBNET=10.100.0.1/16
echo "127.0.0.1 ${APISERVER_NAME}" >> /etc/hosts
-curl -sSL https://kuboard.cn/install-script/v1.15.3/init-master.sh | sh
+curl -sSL https://kuboard.cn/install-script/v1.16.1/init_master.sh | sh
```
``` sh
-# 只在 master 节点执行
+# 只在第一个 master 节点执行
# 替换 apiserver.demo 为 您想要的 dnsName
export APISERVER_NAME=apiserver.demo
# Kubernetes 容器组所在的网段,该网段安装完成后,由 kubernetes 创建,事先并不存在于您的物理网络中
@@ -198,7 +202,7 @@ export POD_SUBNET=10.100.0.1/16
echo "127.0.0.1 ${APISERVER_NAME}" >> /etc/hosts
```
-<<< @/.vuepress/public/install-script/v1.15.3/init-master.sh
+<<< @/.vuepress/public/install-script/v1.16.1/init_master.sh
@@ -251,10 +255,18 @@ watch kubectl get pod -n kube-system -o wide
kubectl get nodes
```
+::: danger
+请等到所有容器组(大约9个)全部处于 Running 状态,才进行下一步
+:::
+
### 初始化第二、三个master节点
**获得 master 节点的 join 命令**
+> 可以和第一个Master节点一起初始化第二、三个Master节点,也可以从单Master节点调整过来,只需要
+> * 增加Master的 LoadBalancer
+> * 将所有节点的 /etc/hosts 文件中 apiserver.demo 解析为 LoadBalancer 的地址
+> * 添加第二、三个Master节点
@@ -284,7 +296,7 @@ kubeadm init phase upload-certs --upload-certs
``` sh {6}
[root@demo-master-a-1 ~]# kubeadm init phase upload-certs --upload-certs
W0902 09:05:28.355623 1046 version.go:98] could not fetch a Kubernetes version from the internet: unable to get URL "https://dl.k8s.io/release/stable-1.txt": Get https://dl.k8s.io/release/stable-1.txt: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
-W0902 09:05:28.355718 1046 version.go:99] falling back to the local client version: v1.15.3
+W0902 09:05:28.355718 1046 version.go:99] falling back to the local client version: v1.16.1
[upload-certs] Storing the certificates in Secret "kubeadm-certs" in the "kube-system" Namespace
[upload-certs] Using certificate key:
70eb87e62f052d2d5de759969d5b42f372d0ad798f98df38f7fe73efdf63a13c
@@ -350,6 +362,7 @@ kubectl get nodes
### 获得 join命令参数
+
@@ -385,9 +398,11 @@ kubeadm join apiserver.demo:6443 --token mpfjma.4vjjg8flqihor4vt --discovery
```sh
# 只在 worker 节点执行
-# 替换 ${APISERVER_IP} 为 ApiServer LoadBalancer 的 IP 地址
-# 替换 ${APISERVER_NAME} 为 前面已经使用的 dnsName
-echo "${APISERVER_IP} ${APISERVER_NAME}" >> /etc/hosts
+# 替换 x.x.x.x 为 ApiServer LoadBalancer 的 IP 地址
+export MASTER_IP=x.x.x.x
+# 替换 apiserver.demo 为初始化 master 节点时所使用的 APISERVER_NAME
+export APISERVER_NAME=apiserver.demo
+echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
# 替换为前面 kubeadm token create --print-join-command 的输出结果
kubeadm join apiserver.demo:6443 --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303
@@ -403,7 +418,6 @@ kubectl get nodes
```
-
## 移除 worker 节点
::: warning
@@ -447,13 +461,13 @@ kubectl delete node demo-worker-x-x
``` sh
# 只在第一个 master 节点 demo-master-a-1 上执行
-kubectl apply -f https://kuboard.cn/install-script/v1.15.3/nginx-ingress.yaml
+kubectl apply -f https://kuboard.cn/install-script/v1.16.1/nginx-ingress.yaml
```
-<<< @/.vuepress/public/install-script/v1.15.3/nginx-ingress.yaml
+<<< @/.vuepress/public/install-script/v1.16.1/nginx-ingress.yaml
diff --git a/learning/k8s-advanced/policy/lr.md b/learning/k8s-advanced/policy/lr.md
index 29fb598..fd477cb 100644
--- a/learning/k8s-advanced/policy/lr.md
+++ b/learning/k8s-advanced/policy/lr.md
@@ -7,9 +7,15 @@ meta:
content: Kubernetes
---
-# Limit Range
+# Limit Ranges
-
+
+
+默认情况下,容器在 Kubernetes 集群上运行时,不受 [计算资源](/learning/k8s-intermediate/config/computing-resource.html) 的限制。使用 [Resource quota](./rq.html),集群管理员可以针对名称空间限定资源的使用情况。在名称空间内部,一个 Pod(或容器)的资源消耗不受限制。此时的顾虑在于,可能有一个 Pod(或容器)独占了名称空间的大部分资源。Limit Range 是一种用来限定名称空间内 Pod(或容器)可以消耗资源数量的策略。
+
+[[TOC]]
+
+
正在撰写 ...
diff --git a/learning/k8s-intermediate/config/computing-resource.md b/learning/k8s-intermediate/config/computing-resource.md
index 8b8a695..1700a1a 100644
--- a/learning/k8s-intermediate/config/computing-resource.md
+++ b/learning/k8s-intermediate/config/computing-resource.md
@@ -32,6 +32,10 @@ meta:
Kubernetes 中,0.5 代表请求半个 CPU 资源。表达式 0.1 等价于 表达式 100m (英文读作 one hundred millicpu 或 one hundred millicores)。在 API Server 中,表达式 0.1 将被转换成 100m,精度低于 1m 的请求是不受支持的。 CPU 的计量代表的是绝对值,而非相对值,例如,您请求了 0.1 个 CPU,无论您的节点是 单核、双核、48核,您得到的 CPU 资源都是 0.1 核。
+::: tip
+在 `top` 命令查看CPU消耗,100% 代表 1核;4核为 400%;10% 代表 0.1 核 或者 100m
+:::
+
### 内存的计量
内存的计量单位是 byte 字节。您可以使用一个整数来表达内存的大小,也可以使用后缀来表示(E、P、T、G、M、K)。您也可以使用 2 的幂数来表示内存大小,其后缀为(Ei、Pi、Ti、Gi、Mi、Ki)。例如,下面的几个表达方式所表示的内存大小大致相等:
diff --git a/overview/README.md b/overview/README.md
index b415b77..cf6d774 100644
--- a/overview/README.md
+++ b/overview/README.md
@@ -96,9 +96,9 @@ Kuboard,是一款免费的 Kubernetes 图形化管理工具,Kuboard 力图
## Kuboard在线体验
-
-
-
+
+
+
Kuboard 在线体验
@@ -109,8 +109,8 @@ Kuboard,是一款免费的 Kubernetes 图形化管理工具,Kuboard 力图
-
-
+
+