From ea0bca239471bfa172e78df12c6b216a8d16312c Mon Sep 17 00:00:00 2001 From: Dragons Date: Sat, 24 Jun 2017 10:27:38 +0800 Subject: [PATCH 01/19] what-is-kubernetes-pr --- cn/docs/concepts/overview/what-is-kubernetes.md | 17 ++++++++--------- cn/docs/whatisk8s.md | 1 + 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/cn/docs/concepts/overview/what-is-kubernetes.md b/cn/docs/concepts/overview/what-is-kubernetes.md index 3a651964f6..52d141a409 100644 --- a/cn/docs/concepts/overview/what-is-kubernetes.md +++ b/cn/docs/concepts/overview/what-is-kubernetes.md @@ -5,14 +5,14 @@ assignees: title: 认识 Kubernetes? --- -Kubernetes 是一个 [开源的容器调度平台,它可以自动化应用容器的部署、扩展和操作](http://www.slideshare.net/BrianGrant11/wso2con-us-2015-kubernetes-a-platform-for-automating-deployment-scaling-and-operations) 可以跨主机集群, 提供以容器为中心的基础架构。 +Kubernetes 是一个跨主机集群的 [开源的容器调度平台,它可以自动化应用容器的部署、扩展和操作](http://www.slideshare.net/BrianGrant11/wso2con-us-2015-kubernetes-a-platform-for-automating-deployment-scaling-and-operations) , 提供以容器为中心的基础架构。 使用 Kubernetes, 您可以快速高效地响应客户需求: - 快速、可预测地部署您的应用程序 - 拥有即时扩展应用程序的能力 - 不影响现有业务的情况下,无缝地发布新功能。 - - 优化您的硬件资源,降低您的拥有成本 + - 优化您的硬件资源,降低您的所需成本 我们的目标是构建一个软件和工具的生态系统,以减轻您在公共云或私有云运行应用程序的负担。 @@ -36,11 +36,11 @@ Kubernetes 项目由 Google 公司在 2014 年启动。Kubernetes 建立在 [Goo *新方式* 是基于操作系统级虚拟化而不是硬件级虚拟化方法来部署容器。容器之间彼此隔离并与主机隔离:它们具有自己的文件系统,不能看到彼此的进程,并且它们所使用的计算资源是可以被限制的。它们比虚拟机更容易构建,并且因为它们与底层基础架构和主机文件系统隔离,所以它们可以跨云和操作系统快速分发。 -由于容器体积小且启动快,因此可以在每个容器镜像中打包一个应用程序。这种一对一的应用镜像关系拥有很多好处。使用容器,不需要与外部的基础架构环境绑定, 因为每一个应用程序不需要外部依赖,更不需要与外部的基础架构环境依赖。完美解决了从开发到生产环境的一致性问题。 +由于容器体积小且启动快,因此可以在每个容器镜像中打包一个应用程序。这种一对一的应用镜像关系拥有很多好处。使用容器,不需要与外部的基础架构环境绑定, 因为每一个应用程序都不需要外部依赖,更不需要与外部的基础架构环境依赖。完美解决了从开发到生产环境的一致性问题。 -类似地,容器比虚拟机更加透明,这有助于监测和管理。真实的情况是,容器进程的生命周期由基础设施管理,而容器内的进程对外是隐藏的。最后,每个应用程序用容器封装,管理容器部署就等同于管理应用程序部署。 +容器同样比虚拟机更加透明,这有助于监测和管理。尤其是容器进程的生命周期由基础设施管理,而不是由容器内的进程对外隐藏时更是如此。最后,每个应用程序用容器封装,管理容器部署就等同于管理应用程序部署。 -容器好处摘要: +容器优点摘要: * **敏捷的应用程序创建和部署**: 与虚拟机镜像相比,容器镜像更容易创建,提升了硬件的使用效率。 @@ -55,7 +55,7 @@ Kubernetes 项目由 Google 公司在 2014 年启动。Kubernetes 建立在 [Goo * **以应用为中心的管理**: 提升了操作系统的抽象级别,以便在使用逻辑资源的操作系统上运行应用程序。 * **松耦合、分布式、弹性伸缩 [微服务](http://martinfowler.com/articles/microservices.html)**: - 应用程序被分成更小,更独立的部分,可以动态部署和管理 - 而不是巨型单体应用运行在专用的大型机。 + 应用程序被分成更小,更独立的部分,可以动态部署和管理 - 而不是巨型单体应用运行在专用的大型机上。 * **资源隔离**: 通过对应用进行资源隔离,可以很容易的预测应用程序性能。 * **资源利用**: @@ -87,11 +87,11 @@ Kubernetes 满足了生产中运行应用程序的许多常见的需求,例如 #### 为什么 Kubernetes 是一个平台? -Kubernetes 提供了很多的功能,总会有新的场景会受益于新特性。它可以简化应用程序的工作流,加快开发速度。被大家认可的应用编排通常需要有较强的自动化能力。这就是为什么 Kubernetes 被设计作为构建组件和工具的生态系统平台,以便更轻松地部署、扩展和管理应用程序。 +Kubernetes 提供了很多的功能,总会有新的场景受益于新特性。它可以简化应用程序的工作流,加快开发速度。被大家认可的应用编排通常需要有较强的自动化能力。这就是为什么 Kubernetes 被设计作为构建组件和工具的生态系统平台,以便更轻松地部署、扩展和管理应用程序。 [Label](/docs/user-guide/labels/) 允许用户按照自己的方式组织管理对应的资源。 [注解](/docs/user-guide/annotations/) 使用户能够以自定义的描述信息来修饰资源,以适用于自己的工作流,并为管理工具提供检查点状态的简单方法。 -此外,[Kubernetes 控制面](/docs/admin/cluster-components) 是构建在相同的 [APIs](/docs/api/) 上面,开发员人和用户都可以用。用户可以编写自己的控制器, [调度器](https://github.com/kubernetes/kubernetes/tree/{{page.githubbranch}}/docs/devel/scheduler.md)等等,如果这么做,根据新加的[自定义 API](https://github.com/kubernetes/kubernetes/blob/{{page.githubbranch}}/docs/design/extending-api.md) ,可以扩展当前的通用 [CLI 命令行工具](/docs/user-guide/kubectl-overview/)。 +此外,[Kubernetes 控制面](/docs/admin/cluster-components) 是构建在相同的 [APIs](/docs/api/) 上面,开发人员和用户都可以用。用户可以编写自己的控制器, [调度器](https://github.com/kubernetes/kubernetes/tree/{{page.githubbranch}}/docs/devel/scheduler.md)等等,如果这么做,根据新加的[自定义 API](https://github.com/kubernetes/kubernetes/blob/{{page.githubbranch}}/docs/design/extending-api.md) ,可以扩展当前的通用 [CLI 命令行工具](/docs/user-guide/kubectl-overview/)。 这种 [设计](https://github.com/kubernetes/kubernetes/blob/{{page.githubbranch}}/docs/design/principles.md) 使得许多其他系统可以构建在 Kubernetes 之上。 @@ -116,4 +116,3 @@ Kubernetes 不是一个传统意义上,包罗万象的 PaaS (平台即服务) #### *Kubernetes* 是什么意思? K8s? 名称 **Kubernetes** 源于希腊语,意为 "舵手" 或 "飞行员", 且是英文 "governor" 和 ["cybernetic"](http://www.etymonline.com/index.php?term=cybernetics)的词根。 **K8s** 是通过将 8 个字母 "ubernete" 替换为 8 而导出的缩写。另外,在中文里,k8s 的发音与 Kubernetes 的发音比较接近。 - diff --git a/cn/docs/whatisk8s.md b/cn/docs/whatisk8s.md index 61432c6991..e4e662c152 100644 --- a/cn/docs/whatisk8s.md +++ b/cn/docs/whatisk8s.md @@ -1,6 +1,7 @@ --- assignees: - k8s-merge-robot + title: 认识 Kubernetes? --- From bb02346e47161b38154e6b43c07f45a59f769eba Mon Sep 17 00:00:00 2001 From: Dragons Date: Sat, 24 Jun 2017 10:28:34 +0800 Subject: [PATCH 02/19] kubernetes-basics-pr --- cn/docs/tutorials/kubernetes-basics/index.html | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) mode change 100755 => 100644 cn/docs/tutorials/kubernetes-basics/index.html diff --git a/cn/docs/tutorials/kubernetes-basics/index.html b/cn/docs/tutorials/kubernetes-basics/index.html old mode 100755 new mode 100644 index 856a6dcc28..eac5a29ad5 --- a/cn/docs/tutorials/kubernetes-basics/index.html +++ b/cn/docs/tutorials/kubernetes-basics/index.html @@ -17,15 +17,15 @@ title: 概述

Kubernetes 基础

-

本教程介绍了 Kubernetes 集群编排系统的基础知识。每个模块包含关于 Kubernetes 主要特性和概念的一些背景信息,并包括一个交互式在线教程。这些交互式教程让您可以自己管理一个简单的集群及其容器化应用程序。

-

使用交互式教程,您可以学习:

+

本教程介绍了 Kubernetes 集群编排系统的基础知识。每个模块包含关于 Kubernetes 主要特性和概念的一些背景信息,并包括一个在线互动教程。这些互动教程让您可以自己管理一个简单的集群及其容器化应用程序。

+

使用互动教程,您可以学习:

  • 在集群上部署容器化应用程序
  • 弹性部署
  • 使用新的软件版本,更新容器化应用程序
  • 调试容器化应用程序
-

教程 Katacoda 在您的浏览器中运行一个虚拟终端,在浏览器中运行 Minikube,这是一个可在任何地方小规模本地部署的 Kubernetes 集群。没有安装任何软件或进行任何配置; 每个交互性教程都直接从您的网页浏览器上运行。

+

教程 Katacoda 在您的浏览器中运行一个虚拟终端,在浏览器中运行 Minikube,这是一个可在任何地方小规模本地部署的 Kubernetes 集群。不需要安装任何软件或进行任何配置; 每个交互性教程都直接从您的网页浏览器上运行。

@@ -34,7 +34,7 @@ title: 概述

Kubernetes 可以为您做些什么?

-

现代的 Web 服务,用户希望应用程序能够 24/7 全天候使用,开发人员希望每天可以多次发布部署新版本的应用程序。 容器化可以帮助软件包服务于这些目标,使应用程序能够以简单快速的方式发布和更新,而无需停机。Kubernetes 帮助您确保这些容器化的应用程序在您想要的地方和时间运行,并帮助应用程序找到它们需要的资源的工具。 Kubernetes 是一个生产可用的开源平台,具有 Google 容器集群方面的设计与经验积累,拥有来自社区的最佳实践。

+

通过现代的 Web 服务,用户希望应用程序能够 24/7 全天候使用,开发人员希望每天可以多次发布部署新版本的应用程序。 容器化可以帮助软件包达成这些目标,使应用程序能够以简单快速的方式发布和更新,而无需停机。Kubernetes 帮助您确保这些容器化的应用程序在您想要的时间和地点运行,并帮助应用程序找到它们需要的资源和工具。 Kubernetes 是一个可用于生产的开源平台,根据 Google 容器集群方面积累的经验,以及来自社区的最佳实践而设计。

@@ -77,7 +77,7 @@ title: 概述 From 88ed4d38bd9efbeb5f42365a5a988128c595cd0a Mon Sep 17 00:00:00 2001 From: Dragons Date: Sat, 24 Jun 2017 10:29:44 +0800 Subject: [PATCH 03/19] kubernetes-basics-cluster-pr --- .../kubernetes-basics/cluster-interactive.html | 2 +- .../kubernetes-basics/cluster-intro.html | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) mode change 100755 => 100644 cn/docs/tutorials/kubernetes-basics/cluster-interactive.html mode change 100755 => 100644 cn/docs/tutorials/kubernetes-basics/cluster-intro.html diff --git a/cn/docs/tutorials/kubernetes-basics/cluster-interactive.html b/cn/docs/tutorials/kubernetes-basics/cluster-interactive.html old mode 100755 new mode 100644 index e1b1613bdb..c69ce8ec96 --- a/cn/docs/tutorials/kubernetes-basics/cluster-interactive.html +++ b/cn/docs/tutorials/kubernetes-basics/cluster-interactive.html @@ -1,5 +1,5 @@ --- -title: 交互式教程 - 创建集群 +title: 互动教程 - 创建集群 --- diff --git a/cn/docs/tutorials/kubernetes-basics/cluster-intro.html b/cn/docs/tutorials/kubernetes-basics/cluster-intro.html old mode 100755 new mode 100644 index 3c1057f422..927a2fdf33 --- a/cn/docs/tutorials/kubernetes-basics/cluster-intro.html +++ b/cn/docs/tutorials/kubernetes-basics/cluster-intro.html @@ -31,12 +31,12 @@ title: 使用 Minikube 创建一个集群

Kubernetes 集群

- Kubernetes 用于协调高度可用的计算机集群,这些计算机群集被连接作为单个单元工作。 Kubernetes 中的抽象允许您将容器化的应用程序部署到集群,而不必专门将其绑定到单个计算机。为了利用这种新的部署模型,应用程序需要以将它们与各个主机分离的方式打包: 它们需要被容器化。容器化应用程序比过去的部署模型更灵活和可用,其中应用程序直接安装到特定机器上,作为深入集成到主机中的软件包。 Kubernetes 以更有效的方式自动化、跨集群的容器应用程序的分发和调度。 Kubernetes 是一个 开源 平台,为生产环境准备的。 + Kubernetes 用于协调高度可用的计算机集群,这些计算机群集被连接作为单个单元工作。 Kubernetes 的抽象性允许您将容器化的应用程序部署到集群,而不必专门将其绑定到单个计算机。为了利用这种新的部署模型,应用程序需要以将它们与各个主机分离的方式打包: 它们需要被容器化。容器化应用程序比过去的部署模型更灵活和可用,其中应用程序直接安装到特定机器上,作为深入集成到主机中的软件包。 Kubernetes 在一个集群上以更有效的方式自动分发和调度容器应用程序。 Kubernetes 是一个 开源 平台,并且已经准备好了帮助生产。

Kubernetes 集群由两种类型的资源组成:

    -
  • 一个 Master 调度节点
  • -
  • Nodes 应用程序实际运行的地方
  • +
  • 一个 Master 调度集群
  • +
  • 节点 是应用程序实际运行的地方

@@ -74,21 +74,21 @@ title: 使用 Minikube 创建一个集群

Master 负责管理集群。 master 协调集群中的所有活动,例如调度应用程序、维护应用程序的所需状态、扩展应用程序和滚动更新。

-

node 是 Kubernetes 集群中的工作机器,可以是物理机或虚拟机。 每个工作节点都有一个 Kubelet,它是管理 node 并与 Kubernetes Master 节点进行通信的代理。node 上还应具有处理容器操作的工作,例如 Dockerrkt。一个 Kubernetes 工作集群至少有三个 node 节点。

+

节点 是 Kubernetes 集群中的工作机器,可以是物理机或虚拟机。 每个工作节点都有一个 Kubelet,它是管理 节点 并与 Kubernetes Master 节点进行通信的代理。节点 上还应具有处理容器操作的工作,例如 Dockerrkt。一个 Kubernetes 工作集群至少有三个节点。

-

Master 管理集群和 Nodes 用于托管正在运行的应用程序。

+

Master 管理集群,而 节点 用于托管正在运行的应用程序。

-

当您在 Kubernetes 上部署应用程序时,您可以告诉 master 启动应用程序容器。Master 调度容器在集群的 Node 上运行。 Nodes 使用 Master 公开的 Kubernetes API 与 Master 通信。最终用户还可以直接使用 Kubernetes 的 API 与集群交互。

+

当您在 Kubernetes 上部署应用程序时,您可以告诉 master 启动应用程序容器。Master 调度容器在集群的 节点 上运行。 节点 使用 Master 公开的 Kubernetes API 与 Master 通信。最终用户还可以直接使用 Kubernetes 的 API 与集群交互。

-

Kubernetes 集群可以部署在物理机或虚拟机上。要开始使用 Kubernetes 开发,您可以使用 Minikube。Minikube 是一个轻量级的 Kubernetes 实现,在本机创建一台虚拟机,并部署一个只包含一个节点的简单集群。 Minikube 适用于 Linux, Mac OS 和 Windows 系统。Minikube CLI 提供了集群的基本引导操作,包括启动、停止、状态和删除。但是,对于此基础训练,您将使用预先安装了 Minikube 的在线终端。

+

Kubernetes 集群可以部署在物理机或虚拟机上。要开始使用 Kubernetes 开发,您可以使用 Minikube。Minikube 是一个轻量级的 Kubernetes 实现,会在本机创建一台虚拟机,并部署一个只包含一个节点的简单集群。 Minikube 适用于 Linux, Mac OS 和 Windows 系统。Minikube CLI 提供了集群的基本引导操作,包括启动、停止、状态和删除。为了完成此基础训练,您将使用预先安装了 Minikube 的在线终端。

现在您已经知道 Kubernetes 是什么,让我们使用在线教程,开始我们的第一个集群!

@@ -98,7 +98,7 @@ title: 使用 Minikube 创建一个集群 From b5cb8321ceb61012b87751bc52290b9a3d25b162 Mon Sep 17 00:00:00 2001 From: Dragons Date: Sat, 24 Jun 2017 10:30:10 +0800 Subject: [PATCH 04/19] kubernetes-basics-deploy-pr --- .../kubernetes-basics/deploy-interactive.html | 2 +- .../kubernetes-basics/deploy-intro.html | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) mode change 100755 => 100644 cn/docs/tutorials/kubernetes-basics/deploy-interactive.html mode change 100755 => 100644 cn/docs/tutorials/kubernetes-basics/deploy-intro.html diff --git a/cn/docs/tutorials/kubernetes-basics/deploy-interactive.html b/cn/docs/tutorials/kubernetes-basics/deploy-interactive.html old mode 100755 new mode 100644 index 707538a45e..bd419e4ef5 --- a/cn/docs/tutorials/kubernetes-basics/deploy-interactive.html +++ b/cn/docs/tutorials/kubernetes-basics/deploy-interactive.html @@ -1,5 +1,5 @@ --- -title: 交互式教程 - 部署应用程序 +title: 互动教程 - 部署应用程序 --- diff --git a/cn/docs/tutorials/kubernetes-basics/deploy-intro.html b/cn/docs/tutorials/kubernetes-basics/deploy-intro.html old mode 100755 new mode 100644 index ecd024ca40..b06de18b94 --- a/cn/docs/tutorials/kubernetes-basics/deploy-intro.html +++ b/cn/docs/tutorials/kubernetes-basics/deploy-intro.html @@ -27,12 +27,12 @@ title: 使用 kubectl 创建部署

Kubernetes 部署

- 一旦运行了 Kubernetes 集群,您可以在其上部署容器化应用程序。为此,您可以创建一个 Kubernetes Deployment。Deployment 负责创建和更新应用程序实例。创建 Deployment 后, Kubernetes master 会将 Deployment 创建的应用程序实例调度到集群中的各个节点。 + 一旦运行了 Kubernetes 集群,您可以在其上部署容器化应用程序。为此,您可以创建一个 Kubernetes 部署。部署负责创建和更新应用程序实例。创建部署 后, Kubernetes master 会将部署创建的应用程序实例调度到集群中的各个节点。

-

创建应用程序实例后,Kubernetes Deployment 控制器会持续监视这些实例。如果托管它的节点不可用或删除,则 Deployment 控制器将替换实例。 这提供了一种解决机器故障或维护的自愈机制。

+

创建应用程序实例后,Kubernetes 部署控制器会持续监视这些实例。如果托管它的节点不可用或删除,则部署控制器将替换实例。 这提供了一种解决机器故障或维护的自愈机制。

-

在编排前的世界中,通常会使用安装脚本启动应用程序,但是它们并不能从机器故障中恢复。通过创建应用程序实例并使其运行在跨节点的机器之间,Kubernetes Deployments 提供了截然不同的应用管理方法。

+

在编排诞生前的世界中,通常会使用安装脚本启动应用程序,但是它们并不能从机器故障中恢复。通过创建应用程序实例并使其运行在跨节点的机器之间,Kubernetes 部署提供了截然不同的应用管理方法。

@@ -40,13 +40,13 @@ title: 使用 kubectl 创建部署

概要:

    -
  • Deployments
  • +
  • 部署
  • Kubectl

- Deployment 负责创建和更新应用程序的实例 + 部署负责创建和更新应用程序的实例

@@ -69,9 +69,9 @@ title: 使用 kubectl 创建部署
-

您可以使用 Kubernetes 命令行工具 Kubectl创建和管理 Deployment。Kubectl 使用 Kubernetes API 与集群进行交互。在本模块中,您将学习在 Kubernetes 集群上运行应用程序部署所需的最常见 Kubectl 命令。

+

您可以使用 Kubernetes 命令行工具 Kubectl创建和管理部署。Kubectl 使用 Kubernetes API 与集群进行交互。在本模块中,您将学习在 Kubernetes 集群上运行应用程序部署所需的最常见的 Kubectl 命令。

-

创建部署时,您需要为应用程序指定容器镜像以及要运行的副本数。您可以稍后通过更新部署来更改该信息;模块 56 是一个基础训练讨论如何扩展和更新您的部署。

+

创建部署时,您需要为应用程序指定容器镜像以及要运行的副本数。您可以稍后通过更新部署来更改该信息;基础训练模块 56 讨论如何扩展和更新您的部署。

@@ -86,7 +86,7 @@ title: 使用 kubectl 创建部署
-

对于我们的第一个部署,我们将使用 Node.js 应用程序打包到 Docker 容器。源代码和 Dockerfile 可在 Kubernetes Bootcamp GitHub 存储库 中找到。

+

对于我们的第一个部署,我们将使用 Node.js 应用程序打包到 Docker 容器。源代码和 Dockerfile 可在 Kubernetes Bootcamp 的 GitHub 存储库 中找到。

现在您已经知道部署是什么,我来再来看看在线教程,并部署我们的第一个应用程序!

@@ -96,7 +96,7 @@ title: 使用 kubectl 创建部署 From 9181bb31e42d068622599df3fc6e94346d07746d Mon Sep 17 00:00:00 2001 From: Dragons Date: Sat, 24 Jun 2017 10:30:48 +0800 Subject: [PATCH 05/19] kubernetes-basics/explore-pr --- .../explore-interactive.html | 2 +- .../kubernetes-basics/explore-intro.html | 30 +++++++++---------- 2 files changed, 16 insertions(+), 16 deletions(-) mode change 100755 => 100644 cn/docs/tutorials/kubernetes-basics/explore-interactive.html mode change 100755 => 100644 cn/docs/tutorials/kubernetes-basics/explore-intro.html diff --git a/cn/docs/tutorials/kubernetes-basics/explore-interactive.html b/cn/docs/tutorials/kubernetes-basics/explore-interactive.html old mode 100755 new mode 100644 index 821e6930c1..8787d3da58 --- a/cn/docs/tutorials/kubernetes-basics/explore-interactive.html +++ b/cn/docs/tutorials/kubernetes-basics/explore-interactive.html @@ -1,5 +1,5 @@ --- -title: 交互式教程 - 应用程序探索 +title: 互动教程 - 应用程序探索 --- diff --git a/cn/docs/tutorials/kubernetes-basics/explore-intro.html b/cn/docs/tutorials/kubernetes-basics/explore-intro.html old mode 100755 new mode 100644 index 4e2d1416f6..22e8319506 --- a/cn/docs/tutorials/kubernetes-basics/explore-intro.html +++ b/cn/docs/tutorials/kubernetes-basics/explore-intro.html @@ -1,5 +1,5 @@ --- -title: 查看 Pods 和 Nodes +title: 查看 Pods 和节点 --- @@ -22,7 +22,7 @@ title: 查看 Pods 和 Nodes
  • 了解 Kubernetes Pods
  • 了解 Kubernetes Nodes
  • -
  • 已部署应用故障排除
  • +
  • 已部署应用的故障排除
@@ -34,9 +34,9 @@ title: 查看 Pods 和 Nodes
  • 网络,作为唯一的集群 IP 地址
  • 每个容器如何运行的信息,例如容器镜像版本或要使用的特定端口
  • -

    Pod 模型可以理解为应用程序特定的 "逻辑主机",并且可以包含相对紧密耦合的不同应用程序容器。例如,Pod 可能包含带有 Node.js 应用程序的容器以及用于提供要由 Node.js Web 服务器发布数据的不同容器。Pod 中的容器共享 IP 地址和端口空间,始终位于同一位置并且统一调度,并在相同的节点上运行,共享上下文环境。

    +

    Pod 模型可以理解为应用程序特定的 "逻辑主机",并且可以包含相对紧密耦合的不同应用程序容器。例如,Pod 可能包含带有 Node.js 应用程序的容器以及另一个要吸收 Node.js Web 服务器提供的数据的不同容器。Pod 中的容器共享 IP 地址和端口空间,始终位于同一位置并且统一调度,并在相同的节点上运行,共享上下文环境。

    -

    Pods 是 Kubernetes 平台上的原子单元。当我们在 Kubernetes 上创建一个部署时,该部署将在其中创建包含容器的 Pod (而不是直接创建容器)。每个 Pod 绑定到它被调度的节点,并且保持在那里,直到终止 (根据重启策略) 或删除。在节点故障的情况下,在集群中的其他可用节点上调度相同的 Pod。

    +

    Pods 是 Kubernetes 平台上原子级别的单元。当我们在 Kubernetes 上创建一个部署时,该部署将在其中创建包含容器的 Pod (而不是直接创建容器)。每个 Pod 都绑定到它被调度的节点,并且始终在那里,直到终止 (根据重启策略) 或删除。在节点故障的情况下,在集群中的其他可用节点上调度相同的 Pod。

    @@ -44,13 +44,13 @@ title: 查看 Pods 和 Nodes

    概要:

    • Pods
    • -
    • Nodes
    • +
    • 节点
    • Kubectl 主要命令

    - Pod 是一组或多个应用程序容器 (例如 Docker 或 rkt),包含共享存储 (卷),IP 地址以及有关如何运行它们的信息。 + Pod 是一组一个或多个应用程序容器 (例如 Docker 或 rkt),包含共享存储 (卷),IP 地址以及有关如何运行它们的信息。

    @@ -72,19 +72,19 @@ title: 查看 Pods 和 Nodes
    -

    Nodes

    -

    Pod 总是运行在 Node上。Node 是 Kubernetes 的工作机器,可以是一个虚拟机或物理,这取决于在集群的安装情况。每个 Node 由 Master 管理。一个 Node 上可以有多个 Pod, Kubernetes master 会自动处理调度集群各个 Node 上的 Pod。 Master 在自动调度时,会考虑每个 Node 上的可用资源。

    +

    节点

    +

    Pod 总是运行在 Node上。Node 是 Kubernetes 的工作机器,可以是虚拟机或物理机,这取决于在集群的安装情况。每个节点由 Master 管理。一个节点上可以有多个 Pod, Kubernetes master 会自动处理调度集群各个节点上的 Pod。 Master 在自动调度时,会考虑每个 Node 上的可用资源。

    -

    每个 Kubernetes Node 节点至少运行以下组件:

    +

    每个 Kubernetes 节点至少运行以下组件:

      -
    • Kubelet 是负责 Kubernetes Master 和 所有 Node 节点之间通信的进程,它管理机器上运行的 Pod 和容器。
    • +
    • Kubelet 是负责 Kubernetes Master 和 所有节点之间通信的进程,它管理机器上运行的 Pod 和容器。
    • 容器运行时(例如 Docker, rkt) 负责从镜像仓库中拉取容器镜像,解包容器并运行应用程序。
    -

    如果一些容器强耦合并且需要共享资源(例如 磁盘),那么这些容器应该放到单个 Pod 中一起调度。

    +

    如果一些容器属于强耦合并且需要共享资源(例如 磁盘),那么这些容器应该放到单个 Pod 中一起调度。

    @@ -93,7 +93,7 @@ title: 查看 Pods 和 Nodes
    -

    Node 概述

    +

    节点概述

    @@ -107,7 +107,7 @@ title: 查看 Pods 和 Nodes

    使用 kubectl 进行故障排除

    -

    在模块 2中,您使用了 Kubectl 命令行接口。您将在模块 3 中继续使用它来获取有关已部署应用程序及其环境信息。最常见的操作可以通过以下 kubectl 命令完成:

    +

    在模块 2中,您使用了 Kubectl 命令行接口。您将在模块 3 中继续使用它来获取有关已部署应用程序及其环境的信息。最常见的操作可以通过以下 kubectl 命令完成:

    • kubectl get - 列出可用资源
    • kubectl describe - 显示有关资源的详细信息
    • @@ -122,7 +122,7 @@ title: 查看 Pods 和 Nodes
    -

    Node 是 Kubernetes 中的工作机器,可能是物理机或虚拟机,具体取决于集群的安装配置。多个 Pod 可以在一个 Node 上运行。

    +

    节点是 Kubernetes 中的工作机器,可能是物理机或虚拟机,具体取决于集群的安装配置。多个 Pod 可以在一个节点上运行。

    @@ -130,7 +130,7 @@ title: 查看 Pods 和 Nodes From 0de03a50a8986e6ee2581658e7ab800d2abf26cb Mon Sep 17 00:00:00 2001 From: Dragons Date: Sat, 24 Jun 2017 10:31:19 +0800 Subject: [PATCH 06/19] kubernetes-basics-expose-pr --- .../kubernetes-basics/expose-interactive.html | 2 +- .../kubernetes-basics/expose-intro.html | 89 +++++++------------ 2 files changed, 32 insertions(+), 59 deletions(-) mode change 100755 => 100644 cn/docs/tutorials/kubernetes-basics/expose-interactive.html mode change 100755 => 100644 cn/docs/tutorials/kubernetes-basics/expose-intro.html diff --git a/cn/docs/tutorials/kubernetes-basics/expose-interactive.html b/cn/docs/tutorials/kubernetes-basics/expose-interactive.html old mode 100755 new mode 100644 index 4cae319edf..e41ebcfc37 --- a/cn/docs/tutorials/kubernetes-basics/expose-interactive.html +++ b/cn/docs/tutorials/kubernetes-basics/expose-interactive.html @@ -1,5 +1,5 @@ --- -title: 交互性教程 - 应用外部可见 +title: 互动教程 - 应用外部可见 --- diff --git a/cn/docs/tutorials/kubernetes-basics/expose-intro.html b/cn/docs/tutorials/kubernetes-basics/expose-intro.html old mode 100755 new mode 100644 index b70e1d2de1..1e133f95fd --- a/cn/docs/tutorials/kubernetes-basics/expose-intro.html +++ b/cn/docs/tutorials/kubernetes-basics/expose-intro.html @@ -1,5 +1,5 @@ --- -title: 使用服务让您的应用程序外部可见 +title: 使用服务公开您的应用程序 --- @@ -15,40 +15,41 @@ title: 使用服务让您的应用程序外部可见
    - -
    -

    目标

    +
    +

    目标

      -
    • 了解 Kubernetes 服务
    • -
    • 了解 Kubernetes 标签
    • -
    • 应用程序在 Kubernetes 外部可见
    • +
    • 了解 Kubernetes 中的服务
    • +
    • 了解标签和标签选择器对象如何与服务相关联
    • +
    • 使用服务在 Kubernetes 群集外公开应用程序
    -

    Kubernetes Services

    +

    Kubernetes 服务概述

    -

    虽然每个 Pod 在所在的集群中拥有自己独立的 IP 地址,但这些 IP 地址不会暴露在 Kubernetes 集群外部。考虑到 Pod 可能随时会被终止、删除或被其他 Pod 替换,我们需要一种方法让其他 Pod 和应用程序自动发现彼此。Kubernetes 通过 Service 对 Pods 进行分组来解决此问题。一个 Kubernetes Service 是一个抽象层,它定义了一组逻辑的 Pods,并让这些 Pods 对外部流量可见,可以被负载均衡和服务发现。

    +

    Kubernetes Pods 终有一死. Pods 实际上有一个 生命周期. 当工作节点死机时, 节点上运行的Pod也将丢失。 一个 ReplicationController 可能会通过创建新的Pod以动态地将集群恢复到所需的状态,以保持您的应用程序运行。还有一种方法就是:决定是否使用具有3个副本的图像处理后端。这些副本是可替代的前端系统不应关心后端副本,即使Pod丢失并重建也不会更改。 也就是说,Kubernetes 集群中的每个 Pod 都有一个唯一的IP地址,即使在同一个节点上的 Pods 也是如此,所以此时就需要一种自动调整更改 Pod 的方法, 以便您的应用程序继续运行。输入 服务. Kubernetes 中的服务是一个抽象对象,它定义了一组逻辑的 Pods 和一个访问它们的策略。 服务让互相依赖的 Pod 之间的耦合松动。 服务由 YAML (首选) 或 JSON 定义。像所有 Kubernetes 对象一样。 针对服务的一组 Pod 通常由Label选择器确定(参见下文,为什么您可能希望不将 选择器 包含在规范中。

    -

    此抽象允许我们将 Pods 暴露给集群外部的流量访问。Services 具有自己的唯一集群专用 IP 地址,并显示一个端口以接收流量。如果选择在集群外公开 Service,则有如下选项:

    +

    虽然每个 Pod 都有一个唯一的 IP 地址,但是这些 IP 不会在没有服务的情况下公开在群集之外。服务允许您的应用程序接收流量。 可以通过在 ServiceSpec 中指定类型 以不同方式显示服务:

      -
    • LoadBalancer - 提供公有 IP 地址 (在 GCP 或 AWS 上运行 Kubernetes 通常使用此方式)
    • -
    • NodePort - 使用 NAT 在集群的每个 Node 节点的同一端口让服务可见。(所有 Kubernetes 集群和 Minikube 中都可用此方式)
    • +
    • ClusterIP(默认) - 在集群中的内部IP上公开服务。此类型使服务只能从集群中访问。
    • +
    • NodePort —— 使用NAT在群集中每个选定的节点的同一端口上显示该服务。使用 :可以从群集外部访问服务。建立 ClusterIP 的超集.
    • +
    • LoadBalancer —— 在当前云中创建外部负载平衡器(如果支持),并为服务分配固定的外部IP。建立 NodePort 的超集。
    • +
    • ExternalName —— 使用任意名称显示该服务(由规范中的externalName 指定),本过程通过使用该名称返回 CNAME 记录达成。无须使用代理。这种类型需要 v1.7 或更高版本的 kube-dns.
    +

    有关不同类型服务的详细信息,请参见 使用源IP 教程。另请参阅 使用服务连接应用程序.

    +

    另外,请注意,服务中有一些使用案例涉及在规范中不定义选择器 。不使用 选择器 创建的服务也不会创建相应的端点对象。 这允许用户手动将服务映射到特定端点。没有选择器还有可能是因为您严格地使用了 type: ExternalName.

    -

    摘要:

    +

    摘要

      -
    • Pod 流量外部可见
    • -
    • Pods 流量负载均衡
    • +
    • 对外部流量曝光 Pod
    • +
    • 跨多个 Pods 进行流量负载均衡
    • 使用标签
    -

    - Kubernetes Service 是一个抽象层,它定义了一组逻辑的 Pods,并为这些 Pods 启用了外部流量访问、负载均衡和服务发现。 -

    +

    Kubernetes 服务是一个抽象层,它定义了一组逻辑的Pods,并为这些Pods启用了外部流量曝光、负载平衡和服务发现。

    @@ -56,57 +57,35 @@ title: 使用服务让您的应用程序外部可见
    -

    Services 概述

    +

    服务和标签

    -

    -
    -
    -
    - -
    -
    - -

    一个 Service 提供了一组 Pods 的流量负载均衡。通过创建服务以对来自特定部署的所有 Pods 进行分组时,这是有用的(当我们有多个实例运行时,我们的应用程序将在下一个模块中使用这一点)。

    - -

    Services 还负责集群内部的服务发现 (包含在 访问服务中)。 例如,这将允许前端服务 (如 web 服务器) 从后端服务 (如 数据库) 接收流量,而不必考虑 Pod。

    - -

    Services 使用标签选择器匹配一组 Pods,标签选择器支持在标签上进行原始逻辑分组的能力。

    - -
    -
    -
    -

    您可以通过添加 --expose 作为 kubectl 运行命令的参数,在创建 Deployment 的同时创建 Service。

    -
    +

    -
    -
    -

    Labels 是附加到对象的 键/值对,例如 Pods,您可以将它们视为社交媒体的标签符号。它们用于以对用户有意义的方式组织相关对象,如:

    +

    A服务可以跨一组 Pod 路由流量。服务是允许 Pod 在 Kubernetes 中死亡和复制而不影响应用程序的抽象层。相关 Pod 之间的发现和路由(如应用程序中的前端和后端组件)是由 Kubernetes Services 处理的。

    +

    服务使用 标签和选择器, 匹配一组 Pod,成为分组原语,此原语允许在 Kubernetes 中的对象进行逻辑运算。标签是一对附加到对象的关键/重要组,可以以多种方式使用,方式如下:

      -
    • 生产环境 (生产、测试、开发)
    • -
    • 应用程序版本 (beta、v1.3)
    • -
    • 服务类型 (前端、后端、数据库)
    • +
    • 指定用于开发、测试和生产的对象
    • +
    • 嵌入版本标签
    • +
    • 使用标签分类对象
    +
    -

    Labels 是附加到对象的键/值对。

    +

    您可以在使用
    --expose 在 kubectl 中创建部署的同时创建服务.

    +
    -
    -
    -

    Labels

    -
    -
    @@ -116,22 +95,16 @@ title: 使用服务让您的应用程序外部可见
    - -

    Labels 可以在创建时或以后附加到对象,并可以随时修改。 - 在使用 kubectl run 命令新建 Pods/Deployment 时,会设置一些默认的 Labels/Label。标签和标签选择器之间的链接定义了 Deployment 及其创建 Pod 之间的关系。

    - -

    现在,让我们在 Service 的帮助下公开我们的应用程序,并应用一些新的标签。

    +

    标签可以在创建时或之后附加到对象后,并支持随时修改。让我们现在开始使用服务公开我们的应用程序并应用一些标签吧。


    -
    -
    From ce93d29e9dbb3be107f98a1a13de44a013b77c82 Mon Sep 17 00:00:00 2001 From: Dragons Date: Sat, 24 Jun 2017 10:31:52 +0800 Subject: [PATCH 07/19] kubernetes-basics-scale-pr --- .../kubernetes-basics/scale-interactive.html | 2 +- .../tutorials/kubernetes-basics/scale-intro.html | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) mode change 100755 => 100644 cn/docs/tutorials/kubernetes-basics/scale-interactive.html mode change 100755 => 100644 cn/docs/tutorials/kubernetes-basics/scale-intro.html diff --git a/cn/docs/tutorials/kubernetes-basics/scale-interactive.html b/cn/docs/tutorials/kubernetes-basics/scale-interactive.html old mode 100755 new mode 100644 index dd03ef220d..5dbd15486c --- a/cn/docs/tutorials/kubernetes-basics/scale-interactive.html +++ b/cn/docs/tutorials/kubernetes-basics/scale-interactive.html @@ -1,5 +1,5 @@ --- -title: 交互式教程 - 扩展您的应用程序 +title: 互动教程 - 扩展您的应用程序 --- diff --git a/cn/docs/tutorials/kubernetes-basics/scale-intro.html b/cn/docs/tutorials/kubernetes-basics/scale-intro.html old mode 100755 new mode 100644 index 28ec8ec033..a4041dae02 --- a/cn/docs/tutorials/kubernetes-basics/scale-intro.html +++ b/cn/docs/tutorials/kubernetes-basics/scale-intro.html @@ -19,14 +19,15 @@ title: 运行应用程序的多个实例

    目标

      -
    • 使用 kubectl 缩放应用程序
    • +
    • 使用 kubectl 伸缩应用程序
    -

    缩放应用程序

    +

    伸缩应用程序

    -

    在之前的模块中,我们创建了一个 Deployment,然后通过 Service让应用程序外部可见。Deployment 仅为我们的应用程序创建了一个 Pod。 当流量增加时,我们将需要扩展应用程序以跟上用户需求。

    +

    在之前的模块中,我们创建了一个 Deployment,然后通过 Service让应用程序外部可见。Deployment 仅为我们的应用程序创建了一个 Pod。 当流量增加时,我们将需要 + 应用程序以跟上用户需求。

    Scaling 是通过更改 Deployment 中的副本数量实现的。

    @@ -35,7 +36,7 @@ title: 运行应用程序的多个实例

    摘要:

      -
    • Deployment 的缩放
    • +
    • Deployment 的伸缩
    @@ -101,14 +102,14 @@ title: 运行应用程序的多个实例
    -

    一旦您有应用程序的多个实例,您将能够滚动更新而不会停止服务。我们将在下一个模块中介绍。现在,我们去在线终端扩展我们的应用程序。

    +

    一旦您有应用程序的多个实例,您将能够滚动更新,而不会停止服务————我们将在下一个模块中介绍这些。现在,我们去在线终端对我们的应用程序进行伸缩。


    From e41d03e957b39f427b7e8e54d4ffc04021ace2dd Mon Sep 17 00:00:00 2001 From: Dragons Date: Sat, 24 Jun 2017 10:32:44 +0800 Subject: [PATCH 08/19] kuberntes-basics-update-pr --- .../kubernetes-basics/update-interactive.html | 2 +- cn/docs/tutorials/kubernetes-basics/update-intro.html | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) mode change 100755 => 100644 cn/docs/tutorials/kubernetes-basics/update-interactive.html mode change 100755 => 100644 cn/docs/tutorials/kubernetes-basics/update-intro.html diff --git a/cn/docs/tutorials/kubernetes-basics/update-interactive.html b/cn/docs/tutorials/kubernetes-basics/update-interactive.html old mode 100755 new mode 100644 index c38ba6c6f5..61b43318a0 --- a/cn/docs/tutorials/kubernetes-basics/update-interactive.html +++ b/cn/docs/tutorials/kubernetes-basics/update-interactive.html @@ -1,5 +1,5 @@ --- -title: 交互式教程 - 更新您的应用程序 +title: 互动教程 - 更新您的应用程序 --- diff --git a/cn/docs/tutorials/kubernetes-basics/update-intro.html b/cn/docs/tutorials/kubernetes-basics/update-intro.html old mode 100755 new mode 100644 index 18289e04df..ffb4950d5e --- a/cn/docs/tutorials/kubernetes-basics/update-intro.html +++ b/cn/docs/tutorials/kubernetes-basics/update-intro.html @@ -26,9 +26,9 @@ title: 执行滚动更新

    更新应用程序

    -

    用户期望应用程序始终可用,并且开发人员有望每天部署新版本。这就是 Kubernetes 的滚动更新。 Rolling updates 允许通过使用新的 Pods 实例逐个更新来实现零停机的更新部署。新的 Pods 会被调度到可用资源的 Node 节点上。

    +

    用户期望应用程序始终可用,并且希望开发人员每天部署新版本。在 Kubernetes 上这通过滚动更新达成。 Rolling updates 允许通过使用新的 Pods 实例逐个更新来实现零停机的部署更新。新的 Pods 会被调度到可用资源的 Node 节点上。

    -

    在上一个模块中,我们将应用程序扩展为运行多个实例。这是执行更新但不影响应用可用性的要求。默认情况下,更新期间最大数量的 Pods 可能不可用,此时创建和更新 Pod 的最大数量是一。 这两个选项可以配置为数字或百分比(Pods)。 +

    在上一个模块中,我们将应用程序扩展为运行多个实例。这也是执行更新但不影响应用可用性所需的条件。默认情况下,更新期间最大数量的不可用 Pod 以及最大数量的新 Pod 是一。 这两个选项可以配置为数字或百分比(Pods)。 在 Kubernetes 中,更新已版本化,任何部署更新都可以恢复到以前的 (稳定) 版本。

    @@ -94,13 +94,13 @@ title: 执行滚动更新
    -

    与应用程序缩放类似,如果 Deployment 外部可见,则 Service 将在更新期间将流量负载均衡到可用的 Pod。可用的 Pod 指的是应用程序用户可用的实例。

    +

    与应用程序伸缩类似,如果 Deployment 外部可见,则服务将在更新期间将流量负载均衡到可用的 Pod。可用的 Pod 指的是应用程序用户可用的实例。

    滚动更新允许以下操作:

    • 将应用程序从一个环境升级到另一个环境 (通过容器镜像更新)
    • 回滚到以前的版本
    • -
    • 持续集成和持续交付,实现应用程序零故障
    • +
    • 持续集成和持续交付,实现应用程序零停机
    @@ -116,7 +116,7 @@ title: 执行滚动更新
    -

    在下面的交互式教程中,我们将把应用程序更新到一个新版本,并执行回滚。

    +

    在下面的互动教程中,我们将把应用程序更新到一个新版本,并执行回滚。


    From a5aea25a2f0abcbb2e081b9781752a41dde80c1a Mon Sep 17 00:00:00 2001 From: Dragons Date: Mon, 26 Jun 2017 16:59:52 +0800 Subject: [PATCH 09/19] tutorials-object-management-kubectl-object-management-pr --- .../object-management.md | 157 ++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 cn/docs/tutorials/object-management-kubectl/object-management.md diff --git a/cn/docs/tutorials/object-management-kubectl/object-management.md b/cn/docs/tutorials/object-management-kubectl/object-management.md new file mode 100644 index 0000000000..a2013ec418 --- /dev/null +++ b/cn/docs/tutorials/object-management-kubectl/object-management.md @@ -0,0 +1,157 @@ +--- +title: Kubernetes 对象管理 +redirect_from: +- "/docs/concepts/tools/kubectl/object-management-overview/" +- "/docs/concepts/tools/kubectl/object-management-overview.html" +- "/docs/user-guide/working-with-resources/" +- "/docs/user-guide/working-with-resources.html" +--- + +{% capture overview %} +`kubectl` 命令行工具支持 Kubernetes 对象几种不同的创建和管理方法。本文档概述了不同的方法. +{% endcapture %} + +{% capture body %} + +## 管理技巧 + +**警告:** Kubernetes 对象应该只使用一种技术进行管理。混合使用不同的技术,会导致相同对象出现未定义的行为。 + +| 管理技术 | 操作 |推荐环境 | 支持撰写 | 学习曲线 | +|----------------------------------|----------------------|------------------------|--------------------|----------------| +| 命令式的方式 | 活动对象 | 开发项目 | 1+ | 最低 | +| 命令式对象配置 | 单文件 | 生产项目 | 1 | 中等 | +| 声明式对象配置 | 文件目录 | 生产项目 | 1+ | 最高 | + +## 命令式的方式 + +当使用命令式的命令时,用户直接对集群中的活动对象进行操作。用户提供 `kubectl` 命令的参数或标记进行操作。 + +这是在集群中启动或运行一次性任务的最简单的方法。因为这种技术直接在活动对象上运行,所以它没有提供以前配置的历史记录。 + +### 例子 + +通过创建 Deployment 对象来运行 nginx 容器的实例: + +```sh +kubectl run nginx --image nginx +``` + +使用不同的语法做同样的事情: + +```sh +kubectl create deployment nginx --image nginx +``` + +### 权衡 + +与对象配置相比的优点: + + - 命令简单易学,易于记忆。 + - 命令只需要一个步骤即可对群集进行更改。 + +与对象配置相比的缺点: + + - 命令不与变更审核流程整合。 + - 命令不提供与更改相关联的审计跟踪。 + - 除了活动对象之外,命令不提供记录来源。 + - 命令不提供用于创建新对象的模板。 + +## 命令式对象配置 + +在命令式对象配置中,`kubectl` 命令指定操作(创建,替换等),可选标志和至少一个文件名称。指定的文件必须包含对象的完整定义以 YAML 或 JSON 格式。 + +请参阅[资源参考](https://kubernetes.io/docs/resources-reference/v1.6/) +查看有关对象定义的更多细节。 + +**警告:** 命令式 `replace` 命令用新提供的命令替换现有资源规格,将对配置文件中缺少的对象的所有更改都丢弃。这种方法不应更新与配置文件无关的资源类型。例如,`LoadBalancer` 类型的服务使其 `externalIPs` 字段与集群的配置无关。 + +### 例子 + +创建对象定义配置文件: + +```sh +kubectl create -f nginx.yaml +``` + +删除两个配置文件中定义的对象: + +```sh +kubectl delete -f nginx.yaml -f redis.yaml +``` + +通过覆写实时配置更新配置文件中定义的对象: + +```sh +kubectl replace -f nginx.yaml +``` + +### 权衡 + +与命令式的命令相比的优点: + + - 对象配置可以存储在源码控制系统中,如Git。 + - 对象配置可以与进程集成,例如在推送和审计跟踪之前查看更改。 + - 对象配置提供了一个用于创建新对象的模板。 + +与命令式的命令相比的缺点: + + - 对象配置需要对对象模式有基本的了解。 + - 对象配置需要编写 YAML 文件的附加步骤。 + +与声明式对象配置相比的优势: + + - 命令对象配置行为更简单易懂。 + - 至于 Kubernetes 1.5 版本,命令式对象配置更为成熟。 + +与声明式对象配置相比的缺点: + + - 命令对象配置最适合于文件,而不是目录。 + - 活动对象的更新必须反映在配置文件中,否则在下次更替时将丢失。 + +## 声明式对象配置 + +当使用声明式对象配置时,用户对本地存储的对象配置文件进行操作,但是用户没有定义要对文件执行的操作。通过 `kubectl` 自动检测每个对象进行创建、更新和删除操作。这样可以在目录层级上工作,因为不同的对象可能需要不同的操作。 + +**注意:** 声明式对象配置保留由其他对象进行的更改,即使更改未合并到对象配置文件中。这可以通过使用 `patch` API 操作来写入观察到的差异,而不是使用`replace` API 操作来替换整个对象的配置。 + +### 例子 + +处理`configs` 目录中的所有对象配置文件,创建或修补(patch)活动对象: + +```sh +kubectl apply -f configs/ +``` + +递归处理目录: + +```sh +kubectl apply -R -f configs/ +``` + +### 权衡 + +与命令式对象配置相比的优点: + + - 直接对活动对象进行的更改将被保留,即使它们未被并入到配置文件中。 + - 声明式对象配置更好地支持目录操作,并自动检测每个对象的操作类型 (创建、修补,删除)。 + +与命令式对象配置相比的缺点: + +- 声明式对象配置在意外情况下难以调试和了解结果。 +- 使用差异的部分更新会创建复杂的合并和补丁操作。 + + {% endcapture %} + + {% capture whatsnext %} + - [使用命令式的命令管理 Kubernetes 对象](/docs/tutorials/object-management-kubectl/imperative-object-management-command/) + - [使用对象配置管理 Kubernetes 对象(必要)](/docs/tutorials/object-management-kubectl/imperative-object-management-configuration/) + - [使用对象配置(声明式)管理 Kubernetes 对象](/docs/tutorials/object-management-kubectl/declarative-object-management-configuration/) + - [Kubectl 命令参考](/docs/user-guide/kubectl/v1.6/) + - [Kubernetes 对象模式参考](/docs/resources-reference/v1.6/) + + {% comment %} + {% endcomment %} + {% endcapture %} + + {% include templates/concept.md %} From 5fa66df44b8e1ca58884fbe2e5577e181f7d15b2 Mon Sep 17 00:00:00 2001 From: Dragons Date: Mon, 26 Jun 2017 17:00:46 +0800 Subject: [PATCH 10/19] tutorials-object-management-kubectl-imperative-object-management-command-pr --- .../imperative-object-management-command.md | 145 ++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 cn/docs/tutorials/object-management-kubectl/imperative-object-management-command.md diff --git a/cn/docs/tutorials/object-management-kubectl/imperative-object-management-command.md b/cn/docs/tutorials/object-management-kubectl/imperative-object-management-command.md new file mode 100644 index 0000000000..5ddde0e5dc --- /dev/null +++ b/cn/docs/tutorials/object-management-kubectl/imperative-object-management-command.md @@ -0,0 +1,145 @@ +--- +title: 使用命令式的方式管理 Kubernetes 对象 +redirect_from: +- "/docs/concepts/tools/kubectl/object-management-using-imperative-commands/" +- "/docs/concepts/tools/kubectl/object-management-using-imperative-commands.html" +--- + +{% capture overview %} +直接使用内置的 `kubectl` 命令行工具,以命令式方式可以快速创建,更新和删除 Kubernetes 对象。本文档介绍了这些命令是如何组织的,以及如何使用它们来管理活动对象。 +{% endcapture %} + +{% capture body %} + +## 权衡 + +`kubectl` 工具支持三种对象的管理: + +* 命令式的方式 +* 命令式的对象配置 +* 声明式的对象配置 + +参见[Kubernetes对象管理](/docs/concepts/tools/kubectl/object-management-overview/) +讨论各种对象管理的优缺点. + +## 如何创建对象 + +`kubectl` 工具支持用于创建一些最常用的对象类型的动词驱动命令,这些命令被命名为对于不熟悉的用户也是一目了然。 + +- `run`: 创建一个新的 Deployment 对象以在一个或多个 Pod 中运行 Containers。 +- `expose`: 创建一个新的 Service 对象用于负载均衡 Pods 上的的网络流量。 +- `autoscale`: 创建一个新的 Autoscaler 对象,即自动水平扩展控制器,提供 Deployment 自动水平伸缩支持。 + +`kubectl` 工具也支持由对象类型驱动的创建命令。 这些命令支持更多的对象类型,并且对其意图更为明确,但要求用户知道他们打算创建的对象的类型。 + + - `create [] ` + +某些对象类型具有您可以在“create"命令中指定的子类型. +例如,Service对象有几种子类型,包括ClusterIP, +LoadBalancer和NodePort. 以下是创建一个服务的示例 +子类型NodePort: + +一些对象类型允许你在 `create` 命令中指定子命令。例如,Service 对象拥有几个子命令,包括 ClusterIP、LoadBalancer 和 NodePort。以下是使用子命令 NodePort 创建服务的示例: + + +```shell +kubectl create service nodeport +``` + +在前面的例子中,调用 `create service nodeport`命令是 `create service`命令的子命令. + +您可以使用 `-h` 标志来查找子命令支持的参数和标志: + +```shell +kubectl create service nodeport -h +``` + +## 如何更新对象 + +`kubectl` 命令支持一些常见更新操作的动词驱动命令。这样命名可以让不熟悉 Kubernetes 对象的用户,在不知道必须设置的特定字段的情况下也可以执行更新操作: + + - `scale`: 通过更新控制器的副本数量,水平扩展控制器以添加或删除 Pod。 + - `annotate`: 从对象添加或删除注释。 + - `label`: 为对象添加或删除标签。 + +`kubectl`命令还支持由对象的一个​​切面驱动的更新命令.设置此切面可能会为不同的对象类型设置不同的字段: + + - `set` : 设置对象的一个​​切面. + +**注**: 在 Kubernetes 版本 1.5 中,并不是每个动词驱动的命令都有一个相关的切面驱动的命令. + +`kubectl` 工具支持直接更新活动对象的其他方法,然而,它们需要更好的了解 Kubernetes 对象模式。 + +- `edit`: 通过在编辑器中打开其配置,直接编辑活动对象的原始配置。 +- `patch`: 通过使用补丁字符串直接修改活动对象的特定字段。 + +有关补丁字符串的更多详细信息,请参阅补丁部分 +[API 公约](https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#patch-operations). + +## 如何删除对象 + +您可以使用 `delete` 命令从集群中删除一个对象: + + - `delete /` + + **注意**: 您可以对命令式命令和命令式对象配置都使用 `kubectl delete` 方法。两者的差异在于传递的命令参数不同。要将 + `kubectl delete` 作为命令式命令使用,将要删除的对象作为参数传递。以下是传递名为 nginx 的 Deployment 对象的示例: + +```shell +kubectl delete deployment/nginx +``` + +## 如何查看对象 + +{% comment %} +TODO(pwittrock): 实现时取消注释. + +您可以使用 `kubectl view` 打印指定对象的字段。 + +- `view`: 打印对象的特定字段的值。 + +{% endcomment %} + + + +有几个命令用于打印有关对象的信息: + +- `get`: 打印有关匹配对象的基本信息。使用 `get -h` 来查看选项列表。 +- `describe`: 打印有关匹配对象的聚合详细信息。 +- `logs`: 打印 Pod 运行容器的 stdout 和 stderr 信息。 + +## 使用 `set` 命令在创建之前修改对象 + +有一些对象字段没有可以使用的标志,在 `create` 命令中。在某些情况下,您可以使用组合 `set` 和 `create` 为对象之前的字段指定一个值创建。这是通过将 `create` 命令的输出管道连接到 `set` 命令,然后回到 `create` 命令。以下是一个例子: + +```sh +kubectl create service clusterip -o yaml --dry-run | kubectl set selector --local -f - 'environment=qa' -o yaml | kubectl create -f - +``` + +1. 使用 `create service -o yaml --dry-run` 创建服务配置,并将其作为 YAML 打印到 stdout,而不是将其发送到 Kubernetes API 服务器。 +1. 使用 `set --local -f - -o yaml` 从 stdin 读取配置,并将更新后的配置作为 YAML 写入 stdout。 +1. 使用 `kubectl create -f -` 从 stdin 提供的配置创建对象。 + +## 使用 `--edit` 在创建之前修改对象 + +您可以使用 `kubectl create --edit` 命令在对象创建之前,对对象进行任意更改。以下是一个例子: + +```sh +kubectl create service clusterip my-svc -o yaml --dry-run > /tmp/srv.yaml +kubectl create --edit -f /tmp/srv.yaml +``` + +1. 使用`create service` 创建服务的配置并将其保存到 `/tmp/srv.yaml`。 +1. 使用`create --edit` 在创建对象之前打开配置文件进行编辑。 + + +{% endcapture %} + +{% capture whatsnext %} + - [使用对象配置管理 Kubernetes 对象(必要)](/docs/tutorials/object-management-kubectl/imperative-object-management-configuration/) + - [使用对象配置(声明式)管理 Kubernetes 对象](/docs/tutorials/object-management-kubectl/declarative-object-management-configuration/) + - [Kubectl 命令参考](/docs/user-guide/kubectl/v1.6/) + - [Kubernetes 对象模式参考](/docs/resources-reference/v1.6/) + {% endcapture %} + + {% include templates/concept.md %} From fb7650ba298d9e5e2d79be9dde5b82ee7c66d51e Mon Sep 17 00:00:00 2001 From: Dragons Date: Thu, 29 Jun 2017 17:01:22 +0800 Subject: [PATCH 11/19] xingzhou-fix-pr --- cn/docs/concepts/overview/what-is-kubernetes.md | 6 +++--- cn/docs/tutorials/kubernetes-basics/cluster-intro.html | 6 +++--- cn/docs/tutorials/kubernetes-basics/deploy-intro.html | 2 +- cn/docs/tutorials/kubernetes-basics/explore-intro.html | 2 +- cn/docs/tutorials/kubernetes-basics/expose-intro.html | 4 ++-- cn/docs/tutorials/kubernetes-basics/scale-intro.html | 2 +- cn/docs/tutorials/kubernetes-basics/update-intro.html | 2 +- .../object-management-kubectl/object-management.md | 4 ++-- 8 files changed, 14 insertions(+), 14 deletions(-) diff --git a/cn/docs/concepts/overview/what-is-kubernetes.md b/cn/docs/concepts/overview/what-is-kubernetes.md index 52d141a409..167a06697c 100644 --- a/cn/docs/concepts/overview/what-is-kubernetes.md +++ b/cn/docs/concepts/overview/what-is-kubernetes.md @@ -11,8 +11,8 @@ Kubernetes 是一个跨主机集群的 [开源的容器调度平台,它可以 - 快速、可预测地部署您的应用程序 - 拥有即时扩展应用程序的能力 - - 不影响现有业务的情况下,无缝地发布新功能。 - - 优化您的硬件资源,降低您的所需成本 + - 不影响现有业务的情况下,无缝地发布新功能 + - 优化硬件资源,降低成本 我们的目标是构建一个软件和工具的生态系统,以减轻您在公共云或私有云运行应用程序的负担。 @@ -91,7 +91,7 @@ Kubernetes 提供了很多的功能,总会有新的场景受益于新特性。 [Label](/docs/user-guide/labels/) 允许用户按照自己的方式组织管理对应的资源。 [注解](/docs/user-guide/annotations/) 使用户能够以自定义的描述信息来修饰资源,以适用于自己的工作流,并为管理工具提供检查点状态的简单方法。 -此外,[Kubernetes 控制面](/docs/admin/cluster-components) 是构建在相同的 [APIs](/docs/api/) 上面,开发人员和用户都可以用。用户可以编写自己的控制器, [调度器](https://github.com/kubernetes/kubernetes/tree/{{page.githubbranch}}/docs/devel/scheduler.md)等等,如果这么做,根据新加的[自定义 API](https://github.com/kubernetes/kubernetes/blob/{{page.githubbranch}}/docs/design/extending-api.md) ,可以扩展当前的通用 [CLI 命令行工具](/docs/user-guide/kubectl-overview/)。 +此外,[Kubernetes 控制面 (Controll Plane)](/docs/admin/cluster-components) 是构建在相同的 [APIs](/docs/api/) 上面,开发人员和用户都可以用。用户可以编写自己的控制器, [调度器](https://github.com/kubernetes/kubernetes/tree/{{page.githubbranch}}/docs/devel/scheduler.md)等等,如果这么做,根据新加的[自定义 API](https://github.com/kubernetes/kubernetes/blob/{{page.githubbranch}}/docs/design/extending-api.md) ,可以扩展当前的通用 [CLI 命令行工具](/docs/user-guide/kubectl-overview/)。 这种 [设计](https://github.com/kubernetes/kubernetes/blob/{{page.githubbranch}}/docs/design/principles.md) 使得许多其他系统可以构建在 Kubernetes 之上。 diff --git a/cn/docs/tutorials/kubernetes-basics/cluster-intro.html b/cn/docs/tutorials/kubernetes-basics/cluster-intro.html index 927a2fdf33..23eb7e3ba6 100644 --- a/cn/docs/tutorials/kubernetes-basics/cluster-intro.html +++ b/cn/docs/tutorials/kubernetes-basics/cluster-intro.html @@ -31,12 +31,12 @@ title: 使用 Minikube 创建一个集群

    Kubernetes 集群

    - Kubernetes 用于协调高度可用的计算机集群,这些计算机群集被连接作为单个单元工作。 Kubernetes 的抽象性允许您将容器化的应用程序部署到集群,而不必专门将其绑定到单个计算机。为了利用这种新的部署模型,应用程序需要以将它们与各个主机分离的方式打包: 它们需要被容器化。容器化应用程序比过去的部署模型更灵活和可用,其中应用程序直接安装到特定机器上,作为深入集成到主机中的软件包。 Kubernetes 在一个集群上以更有效的方式自动分发和调度容器应用程序。 Kubernetes 是一个 开源 平台,并且已经准备好了帮助生产。 + Kubernetes 用于协调高度可用的计算机集群,这些计算机群集被连接作为单个单元工作。 Kubernetes 的抽象性允许您将容器化的应用程序部署到集群,而不必专门将其绑定到单个计算机。为了利用这种新的部署模型,应用程序需要以将它们与各个主机分离的方式打包: 它们需要被容器化。容器化应用程序比过去的部署模型更灵活和可用,其中应用程序直接安装到特定机器上,作为深入集成到主机中的软件包。 Kubernetes 在一个集群上以更有效的方式自动分发和调度容器应用程序。 Kubernetes 是一个 开源 平台,可满足生产环境的需要。

    Kubernetes 集群由两种类型的资源组成:

      -
    • 一个 Master 调度集群
    • -
    • 节点 是应用程序实际运行的地方
    • +
    • 一个 Master 是集群的调度节点
    • +
    • Nodes 是应用程序实际运行的工作节点

    diff --git a/cn/docs/tutorials/kubernetes-basics/deploy-intro.html b/cn/docs/tutorials/kubernetes-basics/deploy-intro.html index b06de18b94..65d382a3cb 100644 --- a/cn/docs/tutorials/kubernetes-basics/deploy-intro.html +++ b/cn/docs/tutorials/kubernetes-basics/deploy-intro.html @@ -27,7 +27,7 @@ title: 使用 kubectl 创建部署

    Kubernetes 部署

    - 一旦运行了 Kubernetes 集群,您可以在其上部署容器化应用程序。为此,您可以创建一个 Kubernetes 部署。部署负责创建和更新应用程序实例。创建部署 后, Kubernetes master 会将部署创建的应用程序实例调度到集群中的各个节点。 + 一旦运行了 Kubernetes 集群,您可以在其上部署容器化应用程序。为此,您可以创建一个 Kubernetes Deployment。Deployment 负责创建和更新应用程序实例。创建 Deployment 后, Kubernetes master 会将 Deployment 创建的应用程序实例调度到集群中的各个节点。

    创建应用程序实例后,Kubernetes 部署控制器会持续监视这些实例。如果托管它的节点不可用或删除,则部署控制器将替换实例。 这提供了一种解决机器故障或维护的自愈机制。

    diff --git a/cn/docs/tutorials/kubernetes-basics/explore-intro.html b/cn/docs/tutorials/kubernetes-basics/explore-intro.html index 22e8319506..786eede372 100644 --- a/cn/docs/tutorials/kubernetes-basics/explore-intro.html +++ b/cn/docs/tutorials/kubernetes-basics/explore-intro.html @@ -50,7 +50,7 @@ title: 查看 Pods 和节点

    - Pod 是一组一个或多个应用程序容器 (例如 Docker 或 rkt),包含共享存储 (卷),IP 地址以及有关如何运行它们的信息。 + Pod是由一个或者多个应用程序容器构成的(例如 Docker 或 rkt),包含共享存储 (卷),IP 地址以及有关如何运行它们的信息。

    diff --git a/cn/docs/tutorials/kubernetes-basics/expose-intro.html b/cn/docs/tutorials/kubernetes-basics/expose-intro.html index 1e133f95fd..301df7376d 100644 --- a/cn/docs/tutorials/kubernetes-basics/expose-intro.html +++ b/cn/docs/tutorials/kubernetes-basics/expose-intro.html @@ -1,5 +1,5 @@ --- -title: 使用服务公开您的应用程序 +title: 使用服务发布您的应用程序 --- @@ -20,7 +20,7 @@ title: 使用服务公开您的应用程序
    • 了解 Kubernetes 中的服务
    • 了解标签和标签选择器对象如何与服务相关联
    • -
    • 使用服务在 Kubernetes 群集外公开应用程序
    • +
    • 通过 Service 在 Kubernetes 集群外发布应用程序
    diff --git a/cn/docs/tutorials/kubernetes-basics/scale-intro.html b/cn/docs/tutorials/kubernetes-basics/scale-intro.html index a4041dae02..d021b9586b 100644 --- a/cn/docs/tutorials/kubernetes-basics/scale-intro.html +++ b/cn/docs/tutorials/kubernetes-basics/scale-intro.html @@ -24,7 +24,7 @@ title: 运行应用程序的多个实例
    -

    伸缩应用程序

    +

    应用程序伸缩

    在之前的模块中,我们创建了一个 Deployment,然后通过 Service让应用程序外部可见。Deployment 仅为我们的应用程序创建了一个 Pod。 当流量增加时,我们将需要 应用程序以跟上用户需求。

    diff --git a/cn/docs/tutorials/kubernetes-basics/update-intro.html b/cn/docs/tutorials/kubernetes-basics/update-intro.html index ffb4950d5e..2b5773d9df 100644 --- a/cn/docs/tutorials/kubernetes-basics/update-intro.html +++ b/cn/docs/tutorials/kubernetes-basics/update-intro.html @@ -26,7 +26,7 @@ title: 执行滚动更新

    更新应用程序

    -

    用户期望应用程序始终可用,并且希望开发人员每天部署新版本。在 Kubernetes 上这通过滚动更新达成。 Rolling updates 允许通过使用新的 Pods 实例逐个更新来实现零停机的部署更新。新的 Pods 会被调度到可用资源的 Node 节点上。

    +

    用户期望应用程序始终可用,并且希望开发人员每天部署新版本。在 Kubernetes 上这通过滚动更新(Rolling updates)达成。 Rolling updates 允许通过使用新的 Pods 实例逐个更新来实现零停机的部署更新。新的 Pods 会被调度到可用资源的 Node 节点上。

    在上一个模块中,我们将应用程序扩展为运行多个实例。这也是执行更新但不影响应用可用性所需的条件。默认情况下,更新期间最大数量的不可用 Pod 以及最大数量的新 Pod 是一。 这两个选项可以配置为数字或百分比(Pods)。 在 Kubernetes 中,更新已版本化,任何部署更新都可以恢复到以前的 (稳定) 版本。

    diff --git a/cn/docs/tutorials/object-management-kubectl/object-management.md b/cn/docs/tutorials/object-management-kubectl/object-management.md index a2013ec418..ab63f1665d 100644 --- a/cn/docs/tutorials/object-management-kubectl/object-management.md +++ b/cn/docs/tutorials/object-management-kubectl/object-management.md @@ -8,7 +8,7 @@ redirect_from: --- {% capture overview %} -`kubectl` 命令行工具支持 Kubernetes 对象几种不同的创建和管理方法。本文档概述了不同的方法. +`kubectl` 命令行工具支持 Kubernetes 对象几种不同的创建和管理方法。本文档简要介绍了这些方法. {% endcapture %} {% capture body %} @@ -61,7 +61,7 @@ kubectl create deployment nginx --image nginx 在命令式对象配置中,`kubectl` 命令指定操作(创建,替换等),可选标志和至少一个文件名称。指定的文件必须包含对象的完整定义以 YAML 或 JSON 格式。 -请参阅[资源参考](https://kubernetes.io/docs/resources-reference/v1.6/) +请参阅[参考资源](https://kubernetes.io/docs/resources-reference/v1.6/) 查看有关对象定义的更多细节。 **警告:** 命令式 `replace` 命令用新提供的命令替换现有资源规格,将对配置文件中缺少的对象的所有更改都丢弃。这种方法不应更新与配置文件无关的资源类型。例如,`LoadBalancer` 类型的服务使其 `externalIPs` 字段与集群的配置无关。 From 48ffe5ca1adcacf11e4ed2bed4b8f62381f6ac51 Mon Sep 17 00:00:00 2001 From: Dragons Date: Fri, 7 Jul 2017 10:46:20 +0800 Subject: [PATCH 12/19] kubernetes-concepts-overview-components-pr --- cn/docs/concepts/overview/components.md | 124 ++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 cn/docs/concepts/overview/components.md diff --git a/cn/docs/concepts/overview/components.md b/cn/docs/concepts/overview/components.md new file mode 100644 index 0000000000..a19cb92854 --- /dev/null +++ b/cn/docs/concepts/overview/components.md @@ -0,0 +1,124 @@ +--- +assignees: +- lavalamp +title: Kubernetes 组件 +redirect_from: +- "/docs/admin/cluster-components/" +- "/docs/admin/cluster-components.html" +--- +{% capture overview %} +本文档概述了 Kubernetes 所需的各种二进制组件, 用于提供齐全的功能。 +{% endcapture %} + +{% capture body %} + +## Master 组件 + +Master 组件提供的集群控制。Master 组件对集群做出全局性决策(例如:调度),以及检测和响应集群事件(副本控制器的`replicas`字段不满足时,启动新的副本)。 + +Master 组件可以在集群中的任何节点上运行。然而,为了简单起见,设置脚本通常会启动同一个虚拟机上所有 Master 组件,并且不会在此虚拟机上运行用户容器。请参阅[构建高可用性群集](/docs/admin/high-availability)示例对于多主机 VM 的设置。 + +### API服务器 + +[kube-apiserver](/docs/admin/kube-apiserver)对外暴露了Kubernetes API。它是的 Kubernetes 前端控制层。它被设计为水平扩展,即通过部署更多实例来缩放。请参阅[构建高可用性群集](/docs/admin/high-availability). + +### etcd + +[etcd](/docs/admin/etcd) 用于 Kubernetes 的后端存储。所有集群数据都存储在此处,始终为您的 Kubernetes 集群的 etcd 数据提供备份计划。 + +### kube-controller-manager + +[kube-controller-manager](/docs/admin/kube-controller-manager)运行控制器,它们是处理集群中常规任务的后台线程。逻辑上,每个控制器是一个单独的进程,但为了降低复杂性,它们都被编译成单个二进制文件,并在单个进程中运行。 + +这些控制器包括: + +* 节点控制器: 当节点移除时,负责注意和响应。 +* 副本控制器: 负责维护系统中每个副本控制器对象正确数量的 Pod。 +* 端点控制器: 填充 Endpoints 对象(即连接 Services & Pods)。 +* 服务帐户和令牌控制器: 为新的命名空间创建默认帐户和 API 访问令牌. + +### 云控制器管理器 + +云控制器管理器是用于与底层云提供商交互的控制器。云控制器管理器二进制是 Kubernetes v1.6 版本中引入的 Alpha 功能。 + +云控制器管理器仅运行云提供商特定的控制器循环。您必须在 kube-controller-manager 中禁用这些控制器循环,您可以通过在启动 kube-controller-manager 时将 `--cloud-provider` 标志设置为`external`来禁用控制器循环。 + +云控制器管理器允许云供应商代码和 Kubernetes 核心彼此独立发展,在以前的版本中,Kubernetes 核心代码依赖于云提供商特定的功能代码。在未来的版本中,云供应商的特定代码应由云供应商自己维护,并与运行 Kubernetes 的云控制器管理器相关联。 + +以下控制器具有云提供商依赖关系: + +* 节点控制器: 用于检查云提供商以确定节点是否在云中停止响应后被删除 +* 路由控制器: 用于在底层云基础架构中设置路由 +* 服务控制器: 用于创建,更新和删除云提供商负载平衡器 +* 数据卷控制器: 用于创建,附加和装载卷,并与云提供商进行交互以协调卷 + +### kube-scheduler + +[kube-scheduler](/docs/admin/kube-scheduler)观看没有分配节点的新创建的 Pod,选择一个节点供他们运行。 + +### 插件 + +插件是实现集群功能的 Pod 和 Service。 Pods 可能通过 Deployments,ReplicationControllers 管理。命名空间的插件对象被创建在 `kube-system` 命名空间。 + +Addon 管理器用于创建和维护附加资源. 有关详细信息,请参阅[here](http://releases.k8s.io/HEAD/cluster/addons). + +#### DNS + +虽然其他插件并不是严格要求的,但所有 Kubernetes 集群都应该具有[Cluster DNS](/docs/concepts/services-networking/dns-pod-service/),许多示例依赖于它。 + +Cluster DNS是一个 DNS 服务器,除了您的环境中的其他 DNS 服务器,它为 Kubernetes 服务提供DNS记录。 + +Kubernetes 启动的容器自动将 DNS 服务器包含在 DNS 搜索中。 + +#### 用户界面 + +kube-ui 提供了集群状态的只读概述。有关更多信息,请参阅[使用HTTP代理访问 Kubernetes API](/docs/tasks/access-kubernetes-api/http-proxy-access-api/) + + +#### 容器资源监控 + +[容器资源监控](/docs/user-guide/monitoring)记录关于中央数据库中的容器的通用时间序列指标,并提供用于浏览该数据的 UI。 + +#### 集群级日志记录 + +[Cluster-level logging](/docs/user-guide/logging/overview) 负责使用搜索/浏览界面将容器日志保存到中央日志存储。 + +## 节点组件 + +节点组件在每个节点上运行,维护运行的 Pod 并提供 Kubernetes 运行时环境。 + +### kubelet + +[kubelet](/docs/admin/kubelet)是 Master 节点代理,它监视已分配给其节点的 Pod(通过 apiserver 或通过本地配置文件)和: + +* 安装 Pod 的所需数据卷(Volume)。 +* 下载 Pod 的 secrets。 +* 通过 Docker码 运行(或通过 rkt)运行 Pod 的容器。 +* 定期对容器生命周期进行探测。 +* 如果需要,通过创建 *mirror pod* 将报告状态报告回系统的其余部分。 +* 将节点的状态报告回系统的其余部分。 + +### kube-proxy + +[kube-proxy](/docs/admin/kube-proxy)通过维护主机上的网络规则并执行连接转发,实现了Kubernetes服务抽象。 + + +### docker + +Docker 用于运行容器。 + +### rkt + +实验中支持 rkt 运行容器作为 Docker 的替代方案。 + +### supervisord + +supervisord 是一个轻量级的过程监控和控制系统,可以用来保证 kubelet 和 docker 运行。 + +### fluentd + +fluentd 是一个守护进程,它有助于提供[cluster-level logging](#cluster-level-logging) 集群层级的日志。 + +{% endcapture %} + +{% include templates/concept.md %} From b3bce95c2b9ccd6bd9dd0e5c61a39940c5f184ef Mon Sep 17 00:00:00 2001 From: Dragons Date: Mon, 10 Jul 2017 21:48:09 +0800 Subject: [PATCH 13/19] admin-authorization-abac-pr --- cn/docs/admin/authorization/abac.md | 141 ++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 cn/docs/admin/authorization/abac.md diff --git a/cn/docs/admin/authorization/abac.md b/cn/docs/admin/authorization/abac.md new file mode 100644 index 0000000000..a0759a7be1 --- /dev/null +++ b/cn/docs/admin/authorization/abac.md @@ -0,0 +1,141 @@ +--- +assignees: +- erictune +- lavalamp +- deads2k +- liggitt +title: ABAC 模式 +--- + +{% capture overview %} + +基于属性的访问控制(ABAC)定义了访问控制范例,其中通过使用将属性组合在一起的策略来向用户授予访问权限。 + +{% endcapture %} + +{% capture body %} + +## 策略文件格式 + +基于 `ABAC` 模式,可以这样指定策略文件 `--authorization-policy-file=SOME_FILENAME`。 + +此文件是 JSON 格式[每行都是一个JSON对象](http://jsonlines.org/),不应存在封闭的列表或映射,每行只有一个映射。 + +每一行都是一个 "策略对象",策略对象是具有以下映射的属性: + + - 版本控制属性: + - `apiVersion`,字符串类型: 有效值为"abac.authorization.kubernetes.io/v1beta1",允许版本控制和转换策略格式。 + - `kind`,字符串类型: 有效值为 "Policy",允许版本控制和转换策略格式。 + - `spec` 配置为具有以下映射的属性: + - 匹配属性: + - `user`,字符串类型; 来自 `--token-auth-file` 的用户字符串,如果你指定`user`,它必须与验证用户的用户名匹配。 + - `group`,字符串类型; 如果指定`group`,它必须与经过身份验证的用户的一个组匹配,`system:authenticated`匹配所有经过身份验证的请求。`system:unauthenticated`匹配所有未经过身份验证的请求。 + - 资源匹配属性: + - `apiGroup`,字符串类型; 一个 API 组。 + - 例: `extensions` + - 通配符: `*`匹配所有 API 组。 + - `namespace`,字符串类型; 一个命名空间。 + - 例如: `kube-system` + - 通配符: `*` 匹配所有资源请求。 + - `resource`,字符串类型; 资源类型。 + - 例:`pods` + - 通配符: `*`匹配所有资源请求。 + - 非资源匹配属性: + - `nonResourcePath`,字符串类型; 非资源请求路径。 + - 例如:`/version`或`/apis` + - 通配符: + - `*` 匹配所有非资源请求。 + - `/foo/*` 匹配`/foo/`的所有子路径。 + - `readonly`,键入 boolean,如果为 true,则表示该策略仅适用于 get,list 和 watch 操作。 + +**注意:** 未设置的属性与类型设置为零值的属性相同(例如空字符串,0、false),然而未知的应该可读性优先。 + +在将来,策略可能以 JSON 格式表示,并通过 REST 界面进行管理。 + +## 授权算法 + +请求具有与策略对象的属性对应的属性。 + +当接收到请求时,确定属性。 未知属性设置为其类型的零值(例如: 空字符串,0,false)。 + +设置为`“*"`的属性将匹配相应属性的任何值。 + +检查属性的元组,以匹配策略文件中的每个策略。 如果至少有一行匹配请求属性,则请求被授权(但可能会在稍后验证失败)。 + +要允许任何经过身份验证的用户执行某些操作,请将策略组属性设置为 `"system:authenticated“`。 + +要允许任何未经身份验证的用户执行某些操作,请将策略组属性设置为`"system:authentication“`。 + +要允许用户执行任何操作,请使用 apiGroup,命名空间, +资源和 nonResourcePath 属性设置为 `“*"`的策略. + +要允许用户执行任何操作,请使用设置为`“*”` 的 apiGroup,namespace,resource 和 nonResourcePath 属性编写策略。 + +## Kubectl + +Kubectl 使用 api-server 的 `/api` 和 `/apis` 端点进行协商客户端/服务器版本。 通过创建/更新来验证发送到API的对象操作,kubectl 查询某些 swagger 资源。 对于API版本"v1", 那就是`/swaggerapi/api/v1` & `/swaggerapi/ experimental/v1`。 + +当使用 ABAC 授权时,这些特殊资源必须明确通过策略中的 `nonResourcePath` 属性暴露出来(参见下面的[examples](#examples)): + +* `/api`,`/api/*`,`/apis`和`/apis/*` 用于 API 版本协商. +* `/version` 通过 `kubectl version` 检索服务器版本. +* `/swaggerapi/*` 用于创建/更新操作. + +要检查涉及到特定kubectl操作的HTTP调用,您可以调整详细程度: + + kubectl --v=8 version + +## 例子 + +1. Alice 可以对所有资源做任何事情: + + ```json + {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "alice", "namespace": "*", "resource": "*", "apiGroup": "*"}} + ``` +2. Kubelet 可以读取任何pod: + + ```json + {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "kubelet", "namespace": "*", "resource": "pods", "readonly": true}} + ``` +3. Kubelet 可以读写事件: + + ```json + {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "kubelet", "namespace": "*", "resource": "events"}} + ``` +4. Bob 可以在命名空间“projectCaribou"中读取 pod: + + ```json + {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "bob", "namespace": "projectCaribou", "resource": "pods", "readonly": true}} + ``` +5. 任何人都可以对所有非资源路径进行只读请求: + + ```json + {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"group": "system:authenticated", "readonly": true, "nonResourcePath": "*"}} + {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"group": "system:unauthenticated", "readonly": true, "nonResourcePath": "*"}} + ``` + +[完整文件示例](http://releases.k8s.io/{{page.githubbranch}}/pkg/auth/authorizer/abac/example_policy_file.jsonl) + +## 服务帐户的快速说明 + +服务帐户自动生成用户。 用户名是根据命名约定生成的: + +```shell +system:serviceaccount:: +``` +创建新的命名空间也会导致创建一个新的服务帐户: + +```shell +system:serviceaccount::default +``` + +例如,如果要将 API 的 kube-system 完整权限中的默认服务帐户授予,则可以将此行添加到策略文件中: + +```json +{"apiVersion":"abac.authorization.kubernetes.io/v1beta1","kind":"Policy","spec":{"user":"system:serviceaccount:kube-system:default","namespace":"*","resource":"*","apiGroup":"*"}} +``` + +需要重新启动 apitorver 以获取新的策略行. + +{% endcapture %} +{% include templates/concept.md %} From c35043d0fed86b6f744b8a02ad40cd3f19437ab7 Mon Sep 17 00:00:00 2001 From: Dragons Date: Mon, 10 Jul 2017 21:54:48 +0800 Subject: [PATCH 14/19] templates-concept-pr --- cn/_includes/templates/concept.md | 32 +++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 cn/_includes/templates/concept.md diff --git a/cn/_includes/templates/concept.md b/cn/_includes/templates/concept.md new file mode 100644 index 0000000000..cfd2c8eae9 --- /dev/null +++ b/cn/_includes/templates/concept.md @@ -0,0 +1,32 @@ +{% if overview %} + +{{ overview }} + +{% else %} + +{% include templates/_errorthrower.md missing_block='overview' purpose='provides an overview of this concept.' %} + +{% endif %} + +* TOC +{:toc} + +{% if body %} + +{{ body }} + +{% else %} + +{% include templates/_errorthrower.md missing_block='body' purpose='supplies the body of the page content.' %} + +{% endif %} + + +{% if whatsnext %} + +## 开始下一步 + +{{ whatsnext }} + +{% endif %} + From 77b1039aec0feadeb93ae3b3da8b6173bac8f716 Mon Sep 17 00:00:00 2001 From: Dragons Date: Mon, 10 Jul 2017 22:20:51 +0800 Subject: [PATCH 15/19] admin-authorization-index-pr --- cn/docs/admin/authorization/index.md | 155 +++++++++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 cn/docs/admin/authorization/index.md diff --git a/cn/docs/admin/authorization/index.md b/cn/docs/admin/authorization/index.md new file mode 100644 index 0000000000..fdf788fd1c --- /dev/null +++ b/cn/docs/admin/authorization/index.md @@ -0,0 +1,155 @@ +--- +assignees: +- erictune +- lavalamp +- deads2k +- liggitt +title: 概述 +--- + +{% capture overview %} + +学习有关 Kubernetes 授权的更多信息,包括有关使用支持的授权模块创建策略的详细信息。 + +{% endcapture %} + +{% capture body %} + +在 Kubernetes 里,您必须经过身份验证(登录),才能授权您的请求(授予访问权限).。有关认证的信息,请参阅[访问控制概述](/docs/admin/access-the-api/)。 + +Kubernetes 提供通用的 REST API 请求。这意味着 Kubernetes 授权可以与现有的组织或云提供商的访问控制系统一起使用,该系统可以处理除 Kubernetes API 之外的其他 API。 + +## 确定请求是允许还是被拒绝 +Kubernetes 使用 API​​ 服务器授权 API 请求。它根据所有策略评估所有请求属性,并允许或拒绝请求。某些策略必须允许 API 请求的所有部分继续进行,这意味着默认情况下是拒绝权限。 + +(虽然 Kubernetes 使用 API ​​服务器,访问控制和依赖特定类型对象的特定领域策略由 Admission 控制器处理。) + +当配置多个授权模块时,按顺序检查每个模块,如果有任何模块授权请求,则可以继续执行该请求。如果所有模块拒绝请求,则拒绝该请求(HTTP状态代码403)。 + +## 查看您的请求属性 + +Kubernetes 仅查看以下API请求属性: + +* **user** - 验证期间提供的 `user` 字符串 +* **group** - 认证用户所属的组名列表 +* **“extra"** - 由认证层提供的任意字符串键到字符串值的映射 +* **API** - 指示请求是否用于API资源 +* **Request path** - 诸如`/api`或`/healthz`的其他非资源端点的路径(请参阅[kubectl](#kubectl)). +* **API request verb** - API 动词 `get`,`list`,`create`,`update`,`patch`,`watch`,`proxy`,`redirect`,`delete`和`deletecollection`用于资源请求。要确定资源 API 端点的请求动词,请参阅**确定下面的请求动词**. +* **HTTP request verb** - HTTP动词`get`,`post`,`put`和`delete`用于非资源请求 +* **Resource** - 正在访问的资源的ID或名称(仅适用于资源请求) + --* 对于使用`get`, `update`, `patch`, 和 `delete`动词的资源请求,您必须提供资源名称。 +* **Subresource** - 正在访问的子资源(仅用于资源请求) +* **Namespace** - 正在被访问的对象的命名空间(仅针对命名空间的资源请求) +* **API group** - 正在访问的API组(仅用于资源请求). 一个空字符串指定[核心 API 组](/docs/api/). + +## 确定请求动词 + +要确定资源 API 端点的请求动词,请查看所使用的HTTP动词以及请求是否对单个资源或资源集合进行操作: + +HTTP动词| 请求动词 +---------- | --------------- +POST | 创建 +GET,HEAD | 获取(个人资源),列表(集合) +PUT | 更新 +PATCH | 补丁 +DELETE| 删除(个人资源),删除(收藏) + +Kubernetes 有时会使用专门的动词检查授权以获得额外的权限。例如: + +* [PodSecurityPolicy](/docs/concepts/policy/pod-security-policy/)在`extensions` API组中的`podsecuritypolicies`资源上检查`use`动词的授权。 +* [RBAC](/docs/admin/authorization/rbac/#privilege-escalation-prevention-and-bootstrapping) 在`rbac.authorization.k8s.io` API组中的`roles`和`clusterroles`资源上检查`bind`动词的授权。 +* [认证](/docs/admin/authentication/) 在核心API组中的`users`,`groups`和`serviceaccounts`上的`impersonate`动词的授权以及`authentication.k8s.io` API组中的`userextras`进行层次检查。 + +## 授权模块 +* **ABAC模式** - 基于属性的访问控制(ABAC)定义了访问控制范例,通过使用将属性组合在一起的策略来授予用户访问权限。策略可以使用任何类型的属性(用户属性,资源属性,对象,环境属性等)。要了解有关使用ABAC模式的更多信息,请参阅[ABAC模式](/docs/admin/authorization/abac/) +* **RBAC模式** - 基于角色的访问控制(RBAC)是一种根据企业内个人用户的角色来调整对计算机或网络资源的访问的方法。在这种情况下,访问是单个用户执行特定任务(例如查看,创建或修改文件)的能力。要了解有关使用RBAC模式的更多信息,请参阅[RBAC模式](/docs/admin/authorization/rbac/) +*当指定 "RBAC"(基于角色的访问控制)使用 "rbac.authorization.k8s.io" API组来驱动授权决定时,允许管理员通过Kubernetes API动态配置权限策略. +.. *截至1.6 RBAC模式是测试版. +.. *要启用RBAC,请使用 `--authorization-mode=RBAC` 启动 apiserver. +* **Webhook模式** - WebHook 是HTTP回调:发生事件时发生的HTTP POST; 通过HTTP POST简单的事件通知. 实施 WebHooks 的 Web 应用程序将在某些事情发生时向URL发送消息. 要了解有关使用Webhook模式的更多信息,请参阅[Webhook模式](/docs/admin/authorization/webhook/) +* **自定义模块** - 您可以创建使用Kubernetes的自定义模块. 要了解更多信息,请参阅下面的**自定义模块**。 + +### 自定义模块 +可以相当容易地开发其他实现,APIserver 调用 Authorizer 接口: + +```go +type Authorizer interface { + Authorize(a Attributes) error +} +``` + +以确定是否允许每个API操作. + +授权插件是实现此接口的模块.授权插件代码位于 `pkg/auth/authorizer/$MODULENAME` 中。 + +授权模块可以完全实现,也可以拨出远程授权服务。 授权模块可以实现自己的缓存,以减少具有相同或相似参数的重复授权调用的成本。 开发人员应该考虑缓存和撤销权限之间的交互。 + +#### 检查API访问 + +Kubernetes 将 `subjectaccessreviews.v1.authorization.k8s.io` 资源公开为允许外部访问API授权者决策的普通资源。 无论您选择使用哪个授权器,您都可以使用`SubjectAccessReview`发出一个`POST`,就像webhook授权器的`apis/authorization.k8s.io/v1/subjectaccessreviews` 端点一样,并回复一个响应。 例如: + + +```bash +kubectl create --v=8 -f - << __EOF__ +{ + "apiVersion": "authorization.k8s.io/v1", + "kind": "SubjectAccessReview", + "spec": { + "resourceAttributes": { + "namespace": "kittensandponies", + "verb": "get", + "group": "unicorn.example.org", + "resource": "pods" + }, + "user": "jane", + "group": [ + "group1", + "group2" + ], + "extra": { + "scopes": [ + "openid", + "profile" + ] + } + } +} +__EOF__ + +--- snip lots of output --- + +I0913 08:12:31.362873 27425 request.go:908] Response Body: {"kind":"SubjectAccessReview","apiVersion":"authorization.k8s.io/v1","metadata":{"creationTimestamp":null},"spec":{"resourceAttributes":{"namespace":"kittensandponies","verb":"GET","group":"unicorn.example.org","resource":"pods"},"user":"jane","group":["group1","group2"],"extra":{"scopes":["openid","profile"]}},"status":{"allowed":true}} +subjectaccessreview "" created +``` + +这对于调试访问问题非常有用,因为您可以使用此资源来确定授权者授予哪些访问权限。 + +## 为您的授权模块使用标志 + +您的策略中必须包含一个标志,以指出您的策略包含哪个授权模块: + +可以使用以下标志: + - `--authorization-mode=ABAC` 基于属性的访问控制(ABAC)模式允许您使用本地文件配置策略。 + - `--authorization-mode=RBAC` 基于角色的访问控制(RBAC)模式允许您使用Kubernetes API创建和存储策略. + - `--authorization-mode=Webhook` WebHook是一种HTTP回调模式,允许您使用远程REST管理授权。 + - `--authorization-mode=AlwaysDeny` 此标志阻止所有请求. 仅使用此标志进行测试。 + - `--authorization-mode=AlwaysAllow` 此标志允许所有请求. 只有在您不需要API请求授权的情况下才能使用此标志。 + +您可以选择多个授权模块. 如果其中一种模式为 `AlwaysAllow`,则覆盖其他模式,并允许所有API请求。 + +## 版本控制 + +对于版本 1.2,配置了 kube-up.sh 创建的集群,以便任何请求都不需要授权。 + +从版本 1.3 开始,配置由 kube-up.sh 创建的集群,使得 ABAC 授权模块处于启用状态。但是,其输入文件最初设置为允许所有用户执行所有操作,集群管理员需要编辑该文件,或者配置不同的授权器来限制用户可以执行的操作。 + +{% endcapture %} +{% capture whatsnext %} + +* 要学习有关身份验证的更多信息,请参阅**身份验证**[控制访问 Kubernetes API](docs/admin/access-the-api/)。 +* 要了解有关入学管理的更多信息,请参阅[使用 Admission 控制器](docs/admin/admission-controllers/)。 +* +{% endcapture %} + +{% include templates/concept.md %} From f4ad2b179f5970d3e0dd7d0267644654882ff05c Mon Sep 17 00:00:00 2001 From: Dragons Date: Tue, 15 Aug 2017 10:47:31 +0800 Subject: [PATCH 16/19] kubernetes-concepts-overview-components-pr-update-fix --- cn/docs/admin/authorization/abac.md | 4 ++-- cn/docs/concepts/overview/components.md | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/cn/docs/admin/authorization/abac.md b/cn/docs/admin/authorization/abac.md index a0759a7be1..c1b7187432 100644 --- a/cn/docs/admin/authorization/abac.md +++ b/cn/docs/admin/authorization/abac.md @@ -9,7 +9,7 @@ title: ABAC 模式 {% capture overview %} -基于属性的访问控制(ABAC)定义了访问控制范例,其中通过使用将属性组合在一起的策略来向用户授予访问权限。 +基于属性的访问控制(Attribute-based access control - ABAC)定义了访问控制范例,其中通过使用将属性组合在一起的策略来向用户授予访问权限。 {% endcapture %} @@ -21,7 +21,7 @@ title: ABAC 模式 此文件是 JSON 格式[每行都是一个JSON对象](http://jsonlines.org/),不应存在封闭的列表或映射,每行只有一个映射。 -每一行都是一个 "策略对象",策略对象是具有以下映射的属性: +每一行都是一个 "策略对象",策略对象是具有以下映射的属性: - 版本控制属性: - `apiVersion`,字符串类型: 有效值为"abac.authorization.kubernetes.io/v1beta1",允许版本控制和转换策略格式。 diff --git a/cn/docs/concepts/overview/components.md b/cn/docs/concepts/overview/components.md index a19cb92854..1db0b84346 100644 --- a/cn/docs/concepts/overview/components.md +++ b/cn/docs/concepts/overview/components.md @@ -28,22 +28,22 @@ Master 组件可以在集群中的任何节点上运行。然而,为了简单 ### kube-controller-manager -[kube-controller-manager](/docs/admin/kube-controller-manager)运行控制器,它们是处理集群中常规任务的后台线程。逻辑上,每个控制器是一个单独的进程,但为了降低复杂性,它们都被编译成单个二进制文件,并在单个进程中运行。 +[kube-controller-manager](/docs/admin/kube-controller-manager)运行控制器,它们是处理集群中常规任务的后台线程。逻辑上,每个控制器是一个单独的进程,但为了降低复杂性,它们都被编译成独立的可执行文件,并在单个进程中运行。 这些控制器包括: * 节点控制器: 当节点移除时,负责注意和响应。 * 副本控制器: 负责维护系统中每个副本控制器对象正确数量的 Pod。 -* 端点控制器: 填充 Endpoints 对象(即连接 Services & Pods)。 +* 端点控制器: 填充 端点(Endpoints) 对象(即连接 Services & Pods)。 * 服务帐户和令牌控制器: 为新的命名空间创建默认帐户和 API 访问令牌. -### 云控制器管理器 +### 云控制器管理器-(cloud-controller-manager) -云控制器管理器是用于与底层云提供商交互的控制器。云控制器管理器二进制是 Kubernetes v1.6 版本中引入的 Alpha 功能。 +cloud-controller-manager 是用于与底层云提供商交互的控制器。云控制器管理器二进制是 Kubernetes v1.6 版本中引入的 Alpha 功能。 -云控制器管理器仅运行云提供商特定的控制器循环。您必须在 kube-controller-manager 中禁用这些控制器循环,您可以通过在启动 kube-controller-manager 时将 `--cloud-provider` 标志设置为`external`来禁用控制器循环。 +cloud-controller-manager 仅运行云提供商特定的控制器循环。您必须在 kube-controller-manager 中禁用这些控制器循环,您可以通过在启动 kube-controller-manager 时将 `--cloud-provider` 标志设置为`external`来禁用控制器循环。 -云控制器管理器允许云供应商代码和 Kubernetes 核心彼此独立发展,在以前的版本中,Kubernetes 核心代码依赖于云提供商特定的功能代码。在未来的版本中,云供应商的特定代码应由云供应商自己维护,并与运行 Kubernetes 的云控制器管理器相关联。 +cloud-controller-manager 允许云供应商代码和 Kubernetes 核心彼此独立发展,在以前的版本中,Kubernetes 核心代码依赖于云提供商特定的功能代码。在未来的版本中,云供应商的特定代码应由云供应商自己维护,并与运行 Kubernetes 的云控制器管理器相关联。 以下控制器具有云提供商依赖关系: @@ -52,9 +52,9 @@ Master 组件可以在集群中的任何节点上运行。然而,为了简单 * 服务控制器: 用于创建,更新和删除云提供商负载平衡器 * 数据卷控制器: 用于创建,附加和装载卷,并与云提供商进行交互以协调卷 -### kube-scheduler +### 调度器 - (kube-scheduler) -[kube-scheduler](/docs/admin/kube-scheduler)观看没有分配节点的新创建的 Pod,选择一个节点供他们运行。 +[kube-scheduler](/docs/admin/kube-scheduler)监视没有分配节点的新创建的 Pod,选择一个节点供他们运行。 ### 插件 From a25b597805324987c1885404d2ae157c57e904b1 Mon Sep 17 00:00:00 2001 From: Dragons Date: Sat, 23 Sep 2017 09:16:39 +0800 Subject: [PATCH 17/19] concepts-overview-components-pr-fix --- cn/docs/concepts/overview/components.md | 32 ++++++++++++------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/cn/docs/concepts/overview/components.md b/cn/docs/concepts/overview/components.md index 1db0b84346..897ea8b42c 100644 --- a/cn/docs/concepts/overview/components.md +++ b/cn/docs/concepts/overview/components.md @@ -56,32 +56,32 @@ cloud-controller-manager 允许云供应商代码和 Kubernetes 核心彼此独 [kube-scheduler](/docs/admin/kube-scheduler)监视没有分配节点的新创建的 Pod,选择一个节点供他们运行。 -### 插件 +### 插件(addons) -插件是实现集群功能的 Pod 和 Service。 Pods 可能通过 Deployments,ReplicationControllers 管理。命名空间的插件对象被创建在 `kube-system` 命名空间。 +插件是实现集群功能的 Pod 和 Service。 Pods 可以通过 Deployments,ReplicationControllers 管理。插件对象本身是受命名空间限制的,被创建于 `kube-system` 命名空间。 Addon 管理器用于创建和维护附加资源. 有关详细信息,请参阅[here](http://releases.k8s.io/HEAD/cluster/addons). #### DNS -虽然其他插件并不是严格要求的,但所有 Kubernetes 集群都应该具有[Cluster DNS](/docs/concepts/services-networking/dns-pod-service/),许多示例依赖于它。 +虽然其他插件并不是必需的,但所有 Kubernetes 集群都应该具有[Cluster DNS](/docs/concepts/services-networking/dns-pod-service/),许多示例依赖于它。 -Cluster DNS是一个 DNS 服务器,除了您的环境中的其他 DNS 服务器,它为 Kubernetes 服务提供DNS记录。 +Cluster DNS 是一个 DNS 服务器,和您部署环境中的其他 DNS 服务器一起工作,为 Kubernetes 服务提供DNS记录。 Kubernetes 启动的容器自动将 DNS 服务器包含在 DNS 搜索中。 #### 用户界面 -kube-ui 提供了集群状态的只读概述。有关更多信息,请参阅[使用HTTP代理访问 Kubernetes API](/docs/tasks/access-kubernetes-api/http-proxy-access-api/) +dashboard 提供了集群状态的只读概述。有关更多信息,请参阅[使用HTTP代理访问 Kubernetes API](/docs/tasks/access-kubernetes-api/http-proxy-access-api/) #### 容器资源监控 -[容器资源监控](/docs/user-guide/monitoring)记录关于中央数据库中的容器的通用时间序列指标,并提供用于浏览该数据的 UI。 +[容器资源监控](/docs/user-guide/monitoring)将关于容器的一些常见的时间序列度量值保存到一个集中的数据库中,并提供用于浏览这些数据的界面。 -#### 集群级日志记录 +#### 集群层面日志 -[Cluster-level logging](/docs/user-guide/logging/overview) 负责使用搜索/浏览界面将容器日志保存到中央日志存储。 +[Cluster-level logging](/docs/user-guide/logging/overview) 机制负责将容器的日志数据保存到一个集中的日志存储中,该存储能够提供搜索和浏览接口。 ## 节点组件 @@ -89,13 +89,13 @@ kube-ui 提供了集群状态的只读概述。有关更多信息,请参阅[ ### kubelet -[kubelet](/docs/admin/kubelet)是 Master 节点代理,它监视已分配给其节点的 Pod(通过 apiserver 或通过本地配置文件)和: +[kubelet](/docs/admin/kubelet)是主要的节点代理,它监测已分配给其节点的 Pod(通过 apiserver 或通过本地配置文件),提供如下的功能: -* 安装 Pod 的所需数据卷(Volume)。 +* 挂载 Pod 所需要的数据卷(Volume)。 * 下载 Pod 的 secrets。 -* 通过 Docker码 运行(或通过 rkt)运行 Pod 的容器。 -* 定期对容器生命周期进行探测。 -* 如果需要,通过创建 *mirror pod* 将报告状态报告回系统的其余部分。 +* 通过 Docker 运行(或通过 rkt)运行 Pod 的容器。 +* 周期性的对容器生命周期进行探测。 +* 如果需要,通过创建 *mirror pod* 将 Pod 的状态报告回系统的其余部分。 * 将节点的状态报告回系统的其余部分。 ### kube-proxy @@ -109,15 +109,15 @@ Docker 用于运行容器。 ### rkt -实验中支持 rkt 运行容器作为 Docker 的替代方案。 +支持 rkt 运行容器作为 Docker 的试验性替代方案。 ### supervisord -supervisord 是一个轻量级的过程监控和控制系统,可以用来保证 kubelet 和 docker 运行。 +supervisord 是一个轻量级的过程监控系统,可以用来保证 kubelet 和 docker 运行。 ### fluentd -fluentd 是一个守护进程,它有助于提供[cluster-level logging](#cluster-level-logging) 集群层级的日志。 +fluentd 是一个守护进程,它有助于提供[cluster-level logging](#cluster-level-logging) 集群层面的日志。 {% endcapture %} From 255e3eb83df5356b9ba4000906f5b162e3926ccf Mon Sep 17 00:00:00 2001 From: Dragons Date: Tue, 26 Sep 2017 10:30:48 +0800 Subject: [PATCH 18/19] concepts-overview-components-fix --- cn/docs/concepts/overview/components.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cn/docs/concepts/overview/components.md b/cn/docs/concepts/overview/components.md index 897ea8b42c..344d25bcfe 100644 --- a/cn/docs/concepts/overview/components.md +++ b/cn/docs/concepts/overview/components.md @@ -81,7 +81,7 @@ dashboard 提供了集群状态的只读概述。有关更多信息,请参阅[ #### 集群层面日志 -[Cluster-level logging](/docs/user-guide/logging/overview) 机制负责将容器的日志数据保存到一个集中的日志存储中,该存储能够提供搜索和浏览接口。 +[集群层面日志](/docs/user-guide/logging/overview) 机制负责将容器的日志数据保存到一个集中的日志存储中,该存储能够提供搜索和浏览接口。 ## 节点组件 @@ -89,13 +89,13 @@ dashboard 提供了集群状态的只读概述。有关更多信息,请参阅[ ### kubelet -[kubelet](/docs/admin/kubelet)是主要的节点代理,它监测已分配给其节点的 Pod(通过 apiserver 或通过本地配置文件),提供如下的功能: +[kubelet](/docs/admin/kubelet)是主要的节点代理,它监测已分配给其节点的 Pod(通过 apiserver 或通过本地配置文件),提供如下功能: * 挂载 Pod 所需要的数据卷(Volume)。 * 下载 Pod 的 secrets。 * 通过 Docker 运行(或通过 rkt)运行 Pod 的容器。 * 周期性的对容器生命周期进行探测。 -* 如果需要,通过创建 *mirror pod* 将 Pod 的状态报告回系统的其余部分。 +* 如果需要,通过创建 *镜像 Pod(Mirror Pod)* 将 Pod 的状态报告回系统的其余部分。 * 将节点的状态报告回系统的其余部分。 ### kube-proxy @@ -113,7 +113,7 @@ Docker 用于运行容器。 ### supervisord -supervisord 是一个轻量级的过程监控系统,可以用来保证 kubelet 和 docker 运行。 +supervisord 是一个轻量级的进程监控系统,可以用来保证 kubelet 和 docker 运行。 ### fluentd From e8d9bb60f48c3c445effab21c861e2d92732b39e Mon Sep 17 00:00:00 2001 From: Dragons Date: Tue, 26 Sep 2017 10:59:22 +0800 Subject: [PATCH 19/19] concepts-overview-components+abac-fix --- cn/docs/admin/authorization/abac.md | 2 +- cn/docs/concepts/overview/components.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cn/docs/admin/authorization/abac.md b/cn/docs/admin/authorization/abac.md index c1b7187432..1db4103ed8 100644 --- a/cn/docs/admin/authorization/abac.md +++ b/cn/docs/admin/authorization/abac.md @@ -75,7 +75,7 @@ title: ABAC 模式 Kubectl 使用 api-server 的 `/api` 和 `/apis` 端点进行协商客户端/服务器版本。 通过创建/更新来验证发送到API的对象操作,kubectl 查询某些 swagger 资源。 对于API版本"v1", 那就是`/swaggerapi/api/v1` & `/swaggerapi/ experimental/v1`。 -当使用 ABAC 授权时,这些特殊资源必须明确通过策略中的 `nonResourcePath` 属性暴露出来(参见下面的[examples](#examples)): +当使用 ABAC 授权时,这些特殊资源必须明确通过策略中的 `nonResourcePath` 属性暴露出来(参见下面的[例子](#examples)): * `/api`,`/api/*`,`/apis`和`/apis/*` 用于 API 版本协商. * `/version` 通过 `kubectl version` 检索服务器版本. diff --git a/cn/docs/concepts/overview/components.md b/cn/docs/concepts/overview/components.md index 344d25bcfe..8275ba4df6 100644 --- a/cn/docs/concepts/overview/components.md +++ b/cn/docs/concepts/overview/components.md @@ -117,7 +117,7 @@ supervisord 是一个轻量级的进程监控系统,可以用来保证 kubelet ### fluentd -fluentd 是一个守护进程,它有助于提供[cluster-level logging](#cluster-level-logging) 集群层面的日志。 +fluentd 是一个守护进程,它有助于提供[集群层面日志](#cluster-level-logging) 集群层面的日志。 {% endcapture %}