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 @@ + + + + + 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
-

- Kubernetes教程:QQ群在线答疑 +

+ Kubernetes教程:QQ群在线答疑

-

微信群(即时)

+

微信群(即时)

扫第一个二维码完成打赏,扫第二个加微信进群聊(请发送打赏截图) -

- - +

+ +

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可打开该文件 + +![Kubernetes安装:拓扑结构](/images/topology/kubernetes.png) + +* **在线答疑** + + 也可以扫描二维码加群 +

+ Kubernetes教程:QQ群在线答疑 +

+ + + + + +## 检查 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可打开该文件

Kubernetes安装:Kubernetes安装拓扑图 @@ -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 力图

    - - + +

    Kubernetes教程:Kuboard 在线Demo