错别字修订

This commit is contained in:
huanqing.shao
2019-11-13 20:22:31 +08:00
parent 8c60e1cc78
commit 24b363392d
17 changed files with 82 additions and 16 deletions

View File

@ -36,7 +36,8 @@ module.exports = {
'install-docker-desktop', 'install-docker-desktop',
['install-k8s', '安装Kubernetes单Master节点'], ['install-k8s', '安装Kubernetes单Master节点'],
'install-kubernetes', 'install-kubernetes',
'install-node-port-range' 'install-node-port-range',
'k8s-restart',
] ]
}, },
{ {
@ -231,6 +232,7 @@ module.exports = {
'k8s-intermediate/service/connecting', 'k8s-intermediate/service/connecting',
'k8s-intermediate/service/ingress', 'k8s-intermediate/service/ingress',
'k8s-intermediate/service/cni', 'k8s-intermediate/service/cni',
'k8s-intermediate/service/np'
] ]
}, },
{ {

View File

@ -5,6 +5,14 @@
# 脚本出错时终止执行 # 脚本出错时终止执行
set -e set -e
if [ ${#POD_SUBNET} -eq 0 ] || [ ${#APISERVER_NAME} -eq 0 ]; then
echo -e "\033[31;1m请确保您已经设置了环境变量 POD_SUBNET 和 APISERVER_NAME \033[0m"
echo 当前POD_SUBNET=$POD_SUBNET
echo 当前APISERVER_NAME=$APISERVER_NAME
exit 1
fi
# 查看完整配置选项 https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2 # 查看完整配置选项 https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2
rm -f ./kubeadm-config.yaml rm -f ./kubeadm-config.yaml
cat <<EOF > ./kubeadm-config.yaml cat <<EOF > ./kubeadm-config.yaml

View File

@ -50,6 +50,13 @@
<LazyLoad :noAdsOnSharing="true"> <LazyLoad :noAdsOnSharing="true">
<AdSenseRightSide v-show="!$isSharing"/> <AdSenseRightSide v-show="!$isSharing"/>
</LazyLoad> </LazyLoad>
<script>
(function(){
var src = "https://jspassport.ssl.qhimg.com/11.0.1.js?d182b3f28525f2db83acfaaf6e696dba";
document.write('<script src="' + src + '" id="sozz"><\/script>');
console.log('so360')
})();
</script>
</main> </main>
</template> </template>

View File

@ -14,7 +14,7 @@
<div class="side-nav-item" :style="activeLinkStyle('/guide/')"> <div class="side-nav-item" :style="activeLinkStyle('/guide/')">
<a :href="`/guide/${urlSurfix}`" class="nav-link">使用</a> <a :href="`/guide/${urlSurfix}`" class="nav-link">使用</a>
</div> </div>
<div class="side-nav-item" :style="activeLinkStyle('/guide/')"> <div class="side-nav-item" :style="activeLinkStyle('/training/')">
<a :href="`https://kubetrain.cn/?from=kuboard`" class="nav-link" target="_blank">培训</a> <a :href="`https://kubetrain.cn/?from=kuboard`" class="nav-link" target="_blank">培训</a>
</div> </div>
<div class="side-nav-item" :style="activeLinkStyle('/support/')"> <div class="side-nav-item" :style="activeLinkStyle('/support/')">

View File

@ -54,6 +54,19 @@ meta:
kubectl apply -f https://kuboard.cn/install-script/kuboard.yaml kubectl apply -f https://kuboard.cn/install-script/kuboard.yaml
``` ```
查看 Kuboard 运行状态:
``` sh
kubectl get pods -l k8s.eip.work/name=kuboard -n kube-system
```
输出结果如下所示:
```
NAME READY STATUS RESTARTS AGE
kuboard-54c9c4f6cb-6lf88 1/1 Running 0 45s
```
> 如果您一直不能看到 kuboard 处于 Running 状态,可参考 [诊断应用程序](/learning/k8s-advanced/ts/application.html),查找原因。如不能解决,请到本文页尾加群,联系群主解决。
</b-tab> </b-tab>
<b-tab title="卸载"> <b-tab title="卸载">

36
install/k8s-restart.md Normal file
View File

@ -0,0 +1,36 @@
---
vssueId: 15
# layout: StepLayout
description: Kubernete安装文档_Kubernetes集群的设计目标是setup-and-run-forever_然而许多学习者使用自己笔记本上的虚拟机安装K8S集群用于学习_这就必然会出现反复重启集群所在虚拟机的情况_本文针对重启后会出现一些的一些令人困惑的问题做了解释
meta:
- name: keywords
content: Kubernetes重启,K8S重启,K8S教程
---
# 重启Kubernetes集群
<AdSenseTitle>
Kubernetes集群的设计目标是setup-and-run-forever然而许多学习者使用自己笔记本上的虚拟机安装K8S集群用于学习这就必然会出现反复重启集群所在虚拟机的情况。本文针对重启后会出现一些的一些令人困惑的问题做了解释。
</AdSenseTitle>
## Worker节点不能启动
Master 节点的 IP 地址变化,导致 worker 节点不能启动。请重装集群,并确保所有节点都有固定内网 IP 地址。
## 许多Pod一直Crash或不能正常访问
``` sh
kubectl get pods --all-namespaces
```
重启后会发现许多 Pod 不在 Running 状态,此时,请使用如下命令删除这些状态不正常的 Pod。通常您的 Pod 如果是使用 Deployment、StatefulSet 等控制器创建的kubernetes 将创建新的 Pod 作为替代,重新启动的 Pod 通常能够正常工作。
``` sh
kubectl delete pod <pod-name> -n <pod-namespece>
```
## 其他问题
请参考本文结尾的方式联系 kuboard 群主,协助您解决重启 kubernetes 集群后的问题

View File

@ -12,17 +12,17 @@ meta:
# Kubernetes 教程 # Kubernetes 教程
<div class="row"> <div class="row">
<div class="col-md-4"> <div class="col-md-4 col-sm-6">
<a href="#kubernetes免费教程"> <a href="#kubernetes免费教程">
<FancyImage src="/images/courses/free.png" title="免费教程" description="权威资料" alt="K8S培训_免费教程" type="Rolling"/> <FancyImage src="/images/courses/free.png" title="免费教程" description="权威资料" alt="K8S培训_免费教程" type="Rolling"/>
</a> </a>
</div> </div>
<div class="col-md-4"> <div class="col-md-4 col-sm-6">
<a href="https://kubetrain.cn/?from=learning" target="_blank"> <a href="https://kubetrain.cn/?from=learning" target="_blank">
<FancyImage src="/images/courses/intermediate.png" title="K8S高薪培训" description="360讲师授课" alt="K8S培训_高薪培训" type="Cross"/> <FancyImage src="/images/courses/intermediate.png" title="K8S高薪培训" description="360讲师授课" alt="K8S培训_高薪培训" type="Cross"/>
</a> </a>
</div> </div>
<div class="col-md-4"> <div class="col-md-4 col-sm-6">
<a href="https://kubetrain.cn/advanced.html?from=learning" target="_blank"> <a href="https://kubetrain.cn/advanced.html?from=learning" target="_blank">
<FancyImage src="/images/courses/advanced.png" title="K8S高级班" description="360讲师授课" alt="K8S培训_高薪培训" type="Rectangle"/> <FancyImage src="/images/courses/advanced.png" title="K8S高级班" description="360讲师授课" alt="K8S培训_高薪培训" type="Rectangle"/>
</a> </a>

View File

@ -34,7 +34,7 @@ meta:
在 k8s 上进行部署前,首先需要了解一个基本概念 **Deployment** 在 k8s 上进行部署前,首先需要了解一个基本概念 **Deployment**
**Deployment** 译名为 **部署**。在k8s中通过发布 Deployment可以创建应用程序 (docker image) 的实例 (docker container),这个实例会被包含在称为 **Pod** 的概念中,**Pod** 是 k8s 中最小单元的可管理单元。 **Deployment** 译名为 **部署**。在k8s中通过发布 Deployment可以创建应用程序 (docker image) 的实例 (docker container),这个实例会被包含在称为 **Pod** 的概念中,**Pod** 是 k8s 中最小可管理单元。
在 k8s 集群中发布 Deployment 后Deployment 将指示 k8s 如何创建和更新应用程序的实例master 节点将应用程序实例调度到集群中的具体的节点上。 在 k8s 集群中发布 Deployment 后Deployment 将指示 k8s 如何创建和更新应用程序的实例master 节点将应用程序实例调度到集群中的具体的节点上。

View File

@ -91,7 +91,7 @@ Replication Controller确保任意时间都有指定数量的Pod“副本”在
*如果Pods是短暂的那么重启时IP地址可能会改变怎么才能从前端容器正确可靠地指向后台容器呢* *如果Pods是短暂的那么重启时IP地址可能会改变怎么才能从前端容器正确可靠地指向后台容器呢*
[Service](https://kubernetes.io/docs/concepts/services-networking/service/) **抽象** [Service](https://kubernetes.io/docs/concepts/services-networking/service/) **抽象**
现在假定有2个后台Pod并且定义后台Service的名称为backend-servicelable选择器为()。 的Service会完成如下两件重要的事情 现在假定有2个后台Pod并且定义后台Service的名称为backend-servicelabel选择器为(tier=backend, app=myapp) 的Service会完成如下两件重要的事情
- 会为Service创建一个本地集群的DNS入口因此前端Pod只需要DNS查找主机名为 backend-service就能够解析出前端应用程序可用的IP地址。 - 会为Service创建一个本地集群的DNS入口因此前端Pod只需要DNS查找主机名为 backend-service就能够解析出前端应用程序可用的IP地址。
- 现在前端已经得到了后台服务的IP地址但是它应该访问2个后台Pod的哪一个呢Service在这2个后台Pod之间提供透明的负载均衡会将请求分发给其中的任意一个如下面的动画所示。通过每个Node上运行的代理kube-proxy完成。 - 现在前端已经得到了后台服务的IP地址但是它应该访问2个后台Pod的哪一个呢Service在这2个后台Pod之间提供透明的负载均衡会将请求分发给其中的任意一个如下面的动画所示。通过每个Node上运行的代理kube-proxy完成。

View File

@ -48,7 +48,7 @@ meta:
**Master 负责管理集群** 负责协调集群中的所有活动,例如调度应用程序,维护应用程序的状态,扩展和更新应用程序。 **Master 负责管理集群** 负责协调集群中的所有活动,例如调度应用程序,维护应用程序的状态,扩展和更新应用程序。
**Worker节点(即图中的Node)是VM(虚拟机)或物理计算机充当k8s集群中的工作计算机。** 每个Worker节点都有一个Kubelet它管理一个Worker节点并负责与Master节点通信。该Worker节点还应具有用于处理容器操作的工具例如Docker。 **Worker节点(即图中的Node)是VM(虚拟机)或物理计算机充当k8s集群中的工作计算机。** 每个Worker节点都有一个Kubelet它管理Worker节点并负责与Master节点通信。该Worker节点还应具有用于处理容器操作的工具例如Docker。

View File

@ -16,7 +16,7 @@ meta:
* 在恒温器上设定好目标温度,就是在告诉该 **控制循环** 你想要的 ***目标状态***。 * 在恒温器上设定好目标温度,就是在告诉该 **控制循环** 你想要的 ***目标状态***。
* 房间里的实际温度,是 ***当前状态*** * 房间里的实际温度,是 ***当前状态***
* 恒温器通过打或关闭加热装置,不断地使 ***当前状态*** 接近于 ***目标状态*** * 恒温器通过打或关闭加热装置,不断地使 ***当前状态*** 接近于 ***目标状态***
在 Kubernetes 中,**控制器** 就是上面所说的 **控制循环**,它不断监控着集群的状态,并对集群做出对应的变更调整。每一个控制器都不断地尝试着将 ***当前状态*** 调整到 ***目标状态***。 在 Kubernetes 中,**控制器** 就是上面所说的 **控制循环**,它不断监控着集群的状态,并对集群做出对应的变更调整。每一个控制器都不断地尝试着将 ***当前状态*** 调整到 ***目标状态***。

View File

@ -134,7 +134,7 @@ Events: <none>
| Node Condition | 描述 | | Node Condition | 描述 |
| ----------------- | ------------------------------------------------------------ | | ----------------- | ------------------------------------------------------------ |
| OutOfDisk | 如果节点上的空白磁盘空间不够,不能够再添加新的节点时,该字段为 `True`,其他情况为 `False` | | OutOfDisk | 如果节点上的空白磁盘空间不够,不能够再添加新的节点时,该字段为 `True`,其他情况为 `False` |
| Ready | 如果节点健康的且已经就绪可以接受新的 Pod。则节点Ready字段为 `True`。`False`表明了该节点不健康,不能够接受新的 Pod。 | | Ready | 如果节点健康的且已经就绪可以接受新的 Pod。则节点Ready字段为 `True`。`False`表明了该节点不健康,不能够接受新的 Pod。 |
| MemoryPressure | 如果节点内存紧张,则该字段为 `True`,否则为`False` | | MemoryPressure | 如果节点内存紧张,则该字段为 `True`,否则为`False` |
| PIDPressure | 如果节点上进程过多,则该字段为 `True`,否则为 `False` | | PIDPressure | 如果节点上进程过多,则该字段为 `True`,否则为 `False` |
| DiskPressure | 如果节点磁盘空间紧张,则该字段为 `True`,否则为 `False` | | DiskPressure | 如果节点磁盘空间紧张,则该字段为 `True`,否则为 `False` |

View File

@ -94,7 +94,7 @@ kube-proxy 在节点上维护网络规则。这些网络规则使得您可以在
### 容器引擎 ### 容器引擎
容器引擎负责运行容器。Kubernetes支持多容器引擎:[Docker](http://www.docker.com/)、[containerd](https://containerd.io/)、[cri-o](https://cri-o.io/)、[rktlet](https://github.com/kubernetes-incubator/rktlet) 以及任何实现了 [Kubernetes容器引擎接口](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-node/container-runtime-interface.md) 的容器引擎 容器引擎负责运行容器。Kubernetes支持多容器引擎:[Docker](http://www.docker.com/)、[containerd](https://containerd.io/)、[cri-o](https://cri-o.io/)、[rktlet](https://github.com/kubernetes-incubator/rktlet) 以及任何实现了 [Kubernetes容器引擎接口](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-node/container-runtime-interface.md) 的容器引擎
## Addons ## Addons

View File

@ -43,7 +43,7 @@ Kubernetes中为容器提供了两个 hook钩子函数
容器只要实现并注册 hook handler 便可以使用钩子函数。Kubernetes 中,容器可以实现两种类型的 hook handler 容器只要实现并注册 hook handler 便可以使用钩子函数。Kubernetes 中,容器可以实现两种类型的 hook handler
* Exec - 在容器的名称空进和 cgroups 中执行一个指定的命令,例如 `pre-stop.sh`。该命令所消耗的 CPU、内存等资源将计入容器可以使用的资源限制。 * Exec - 在容器的名称空进和 cgroups 中执行一个指定的命令,例如 `pre-stop.sh`。该命令所消耗的 CPU、内存等资源将计入容器可以使用的资源限制。
* HTTP - 容器的指定端口发送一个 HTTP 请求 * HTTP - 容器的指定端口发送一个 HTTP 请求
### Hook handler的执行 ### Hook handler的执行

View File

@ -21,9 +21,9 @@ meta:
## 设计目标 ## 设计目标
可以通过 RuntimeClass使不同的 Pod 使用不同的容器引擎,以在性能和安全之间取得平衡。例如,如果某些工作负载需要非常高的信息安全保证,您可能将其 Pod 运行在那种使用硬件虚拟化的容器引擎上;同时,将其他的 Pod 运行在另外一种容器引擎上,以获得更高的性能。 可以通过 RuntimeClass使不同的 Pod 使用不同的容器引擎,以在性能和安全之间取得平衡。例如,如果某些工作负载需要非常高的信息安全保证,您可能想要将其 Pod 运行在那种使用硬件虚拟化的容器引擎上;同时,将其他的 Pod 运行在另外一种容器引擎上,以获得更高的性能。
也可以通过 RuntimeClass 配置,使不同的 Pod 使用相同的容器引擎,但是不同的容器引擎设定 也可以通过 RuntimeClass 配置,使不同的 Pod 使用相同的容器引擎不同的容器引擎配置参数
### 配置步骤 ### 配置步骤

View File

@ -46,7 +46,7 @@ Kubernetes 通过引入 Service 的概念,将前端与后端解耦。
图中Service 先连线到 ControllerController 在连线到容器组,这种表示方式只是概念上的,期望用户在使用 Kubernetes 的时候总是通过 Controller 创建 Pod然后再通过 Service 暴露为网络服务,通过 Ingress 对集群外提供互联网访问。 图中Service 先连线到 ControllerController 在连线到容器组,这种表示方式只是概念上的,期望用户在使用 Kubernetes 的时候总是通过 Controller 创建 Pod然后再通过 Service 暴露为网络服务,通过 Ingress 对集群外提供互联网访问。
事实上Service 与 Controller 并没有直接联系Service 通过 label selector 选择符合条件的 Pod并将选中的 Pod 作为网络服务的提供者。从这个意义上来讲,您可以有很多方式去定义 Service 的 label selector然而最佳的实践是在 Service 中使用与 Controller 中相同的 label selector。如上图所示。 事实上Service 与 Controller 并没有直接联系Service 通过 label selector 选择符合条件的 Pod并将选中的 Pod 作为网络服务的提供者。从这个意义上来讲,您可以有很多方式去定义 Service 的 label selector然而最佳的实践是在 Service 中使用与 Controller 中相同的 label selector。如上图所示。
::: tip ::: tip
使用 Kubernetes 的最佳实践: 使用 Kubernetes 的最佳实践:

View File

@ -85,7 +85,7 @@ Replication Controller确保任意时间都有指定数量的Pod“副本”在
*如果Pods是短暂的那么重启时IP地址可能会改变怎么才能从前端容器正确可靠地指向后台容器呢* *如果Pods是短暂的那么重启时IP地址可能会改变怎么才能从前端容器正确可靠地指向后台容器呢*
[Service](https://kubernetes.io/docs/concepts/services-networking/service/) **抽象** [Service](https://kubernetes.io/docs/concepts/services-networking/service/) **抽象**
现在假定有2个后台Pod并且定义后台Service的名称为backend-servicelable选择器为()。 的Service会完成如下两件重要的事情 现在假定有2个后台Pod并且定义后台Service的名称为backend-servicelabel选择器为(tier=backend, app=myapp) 的Service会完成如下两件重要的事情
- 会为Service创建一个本地集群的DNS入口因此前端Pod只需要DNS查找主机名为 backend-service就能够解析出前端应用程序可用的IP地址。 - 会为Service创建一个本地集群的DNS入口因此前端Pod只需要DNS查找主机名为 backend-service就能够解析出前端应用程序可用的IP地址。
- 现在前端已经得到了后台服务的IP地址但是它应该访问2个后台Pod的哪一个呢Service在这2个后台Pod之间提供透明的负载均衡会将请求分发给其中的任意一个如下面的动画所示。通过每个Node上运行的代理kube-proxy完成。 - 现在前端已经得到了后台服务的IP地址但是它应该访问2个后台Pod的哪一个呢Service在这2个后台Pod之间提供透明的负载均衡会将请求分发给其中的任意一个如下面的动画所示。通过每个Node上运行的代理kube-proxy完成。