From 0dbeb6d1bf902c45a9571754ff26100b3533538b Mon Sep 17 00:00:00 2001 From: Dragons Date: Fri, 23 Jun 2017 05:39:41 +0800 Subject: [PATCH] whatisk8s - Chinese version (#3243) * whatisk8s * kubernetes-basics tutorials * Update whatisk8s.md * Update what-is-kubernetes.md --- cn/README.md | 18 +++ cn/_includes/user-guide-content-moved.md | 2 + .../concepts/overview/what-is-kubernetes.md | 119 +++++++++++++++ .../cluster-interactive.html | 35 +++++ .../kubernetes-basics/cluster-intro.html | 110 ++++++++++++++ .../kubernetes-basics/deploy-interactive.html | 39 +++++ .../kubernetes-basics/deploy-intro.html | 108 +++++++++++++ .../explore-interactive.html | 39 +++++ .../kubernetes-basics/explore-intro.html | 142 ++++++++++++++++++ .../kubernetes-basics/expose-interactive.html | 36 +++++ .../kubernetes-basics/expose-intro.html | 138 +++++++++++++++++ .../tutorials/kubernetes-basics/index.html | 106 +++++++++++++ .../kubernetes-basics/scale-interactive.html | 38 +++++ .../kubernetes-basics/scale-intro.html | 120 +++++++++++++++ .../kubernetes-basics/update-interactive.html | 31 ++++ .../kubernetes-basics/update-intro.html | 135 +++++++++++++++++ cn/docs/whatisk8s.md | 9 ++ 17 files changed, 1225 insertions(+) create mode 100644 cn/README.md create mode 100644 cn/_includes/user-guide-content-moved.md create mode 100644 cn/docs/concepts/overview/what-is-kubernetes.md create mode 100755 cn/docs/tutorials/kubernetes-basics/cluster-interactive.html create mode 100755 cn/docs/tutorials/kubernetes-basics/cluster-intro.html create mode 100755 cn/docs/tutorials/kubernetes-basics/deploy-interactive.html create mode 100755 cn/docs/tutorials/kubernetes-basics/deploy-intro.html create mode 100755 cn/docs/tutorials/kubernetes-basics/explore-interactive.html create mode 100755 cn/docs/tutorials/kubernetes-basics/explore-intro.html create mode 100755 cn/docs/tutorials/kubernetes-basics/expose-interactive.html create mode 100755 cn/docs/tutorials/kubernetes-basics/expose-intro.html create mode 100755 cn/docs/tutorials/kubernetes-basics/index.html create mode 100755 cn/docs/tutorials/kubernetes-basics/scale-interactive.html create mode 100755 cn/docs/tutorials/kubernetes-basics/scale-intro.html create mode 100755 cn/docs/tutorials/kubernetes-basics/update-interactive.html create mode 100755 cn/docs/tutorials/kubernetes-basics/update-intro.html create mode 100644 cn/docs/whatisk8s.md diff --git a/cn/README.md b/cn/README.md new file mode 100644 index 0000000000..5e645ff3cc --- /dev/null +++ b/cn/README.md @@ -0,0 +1,18 @@ +## 如何参与 Kubernetes 文档汉化工作 + +我们非常欢迎,非常希望您参与 Kubernetes 文档汉化做出贡献。 + +您可以单击屏幕右上角的 **Fork** 按钮,在您的 Github 账户中创建一外名为 *fork* 的存储库副本。在您的分支中进行更改,当您准备好将这些更改发送给我们时,请转到您的仓库创建新的 pull 请求,让我们知道这一点。 + +关于更多的贡献信息,请参阅: + +* [贡献于 Kubernetes 文档](http://kubernetes.io/editdocs/) +* [创建文档拉取请求](http://kubernetes.io/docs/contribute/create-pull-request/) +* [写一个新的话题](http://kubernetes.io/docs/contribute/write-new-topic/) +* [暂停您的文档更改](http://kubernetes.io/docs/contribute/stage-documentation-changes/) +* [更用页面模板](http://kubernetes.io/docs/contribute/page-templates/) +* [文档样式指南](http://kubernetes.io/docs/contribute/style-guide/) + +## 谢谢您! + +Kubernetes 在社区参与中茁壮成长,我们非常感谢您对我们的网站和文档的贡献! diff --git a/cn/_includes/user-guide-content-moved.md b/cn/_includes/user-guide-content-moved.md new file mode 100644 index 0000000000..a7ac1fb2fd --- /dev/null +++ b/cn/_includes/user-guide-content-moved.md @@ -0,0 +1,2 @@ +Kubernetes 文档的 [用户指南](/docs/user-guide/) 部分中的主题将被移动到 [任务](/docs/tasks/)、[教程](/docs/tutorials/)和 +[概念](/docs/concepts) 部分。 本主题的内容已转移到: diff --git a/cn/docs/concepts/overview/what-is-kubernetes.md b/cn/docs/concepts/overview/what-is-kubernetes.md new file mode 100644 index 0000000000..3a651964f6 --- /dev/null +++ b/cn/docs/concepts/overview/what-is-kubernetes.md @@ -0,0 +1,119 @@ +--- +assignees: +- k8s-merge-robot + +title: 认识 Kubernetes? +--- + +Kubernetes 是一个 [开源的容器调度平台,它可以自动化应用容器的部署、扩展和操作](http://www.slideshare.net/BrianGrant11/wso2con-us-2015-kubernetes-a-platform-for-automating-deployment-scaling-and-operations) 可以跨主机集群, 提供以容器为中心的基础架构。 + +使用 Kubernetes, 您可以快速高效地响应客户需求: + + - 快速、可预测地部署您的应用程序 + - 拥有即时扩展应用程序的能力 + - 不影响现有业务的情况下,无缝地发布新功能。 + - 优化您的硬件资源,降低您的拥有成本 + +我们的目标是构建一个软件和工具的生态系统,以减轻您在公共云或私有云运行应用程序的负担。 + +#### Kubernetes 具有如下特点: + +* **便携性**: 无论公有云、私有云、混合云还是多云架构都全面支持 +* **可扩展**: 它是模块化、可插拔、可挂载、可组合的,支持各种形式的扩展 +* **自修复**: 它可以自保持应用状态、可自重启、自复制、自缩放的,通过声明式语法提供了强大的自修复能力 + +Kubernetes 项目由 Google 公司在 2014 年启动。Kubernetes 建立在 [Google 公司超过十余年的运维经验基础之上,Google 所有的应用都运行在容器上](https://research.google.com/pubs/pub43438.html), 再与社区中最好的想法和实践相结合,也许它是最受欢迎的容器平台。 + +##### 准备好 [开始](/docs/getting-started-guides/)? + +## 为什么是容器? + +查看此文,可以了解为什么您要使用容器 [容器](http://aucouranton.com/2014/06/13/linux-containers-parallels-lxc-openvz-docker-and-more/)? + +![为什么是容器?](/images/docs/why_containers.svg) + +*传统* 部署应用程序的方式,一般是使用操作系统自带的包管理器在主机上安装应用依赖,之后再安装应用程序。这无疑将应用程序的可执行文件、应用的配置、应用依赖库和应用的生命周期与宿主机操作系统进行了紧耦合。在此情境下,可以通过构建不可改变的虚拟机镜像版本,通过镜像版本实现可预测的发布和回滚,但是虚拟机实在是太重量级了,且镜像体积太庞大,便捷性差。 + +*新方式* 是基于操作系统级虚拟化而不是硬件级虚拟化方法来部署容器。容器之间彼此隔离并与主机隔离:它们具有自己的文件系统,不能看到彼此的进程,并且它们所使用的计算资源是可以被限制的。它们比虚拟机更容易构建,并且因为它们与底层基础架构和主机文件系统隔离,所以它们可以跨云和操作系统快速分发。 + +由于容器体积小且启动快,因此可以在每个容器镜像中打包一个应用程序。这种一对一的应用镜像关系拥有很多好处。使用容器,不需要与外部的基础架构环境绑定, 因为每一个应用程序不需要外部依赖,更不需要与外部的基础架构环境依赖。完美解决了从开发到生产环境的一致性问题。 + +类似地,容器比虚拟机更加透明,这有助于监测和管理。真实的情况是,容器进程的生命周期由基础设施管理,而容器内的进程对外是隐藏的。最后,每个应用程序用容器封装,管理容器部署就等同于管理应用程序部署。 + +容器好处摘要: + +* **敏捷的应用程序创建和部署**: + 与虚拟机镜像相比,容器镜像更容易创建,提升了硬件的使用效率。 +* **持续开发、集成和部署**: + 提供可靠与频繁的容器镜像构建和部署,可以很方便及快速的回滚 (由于镜像不可变性). +* **关注开发与运维的分离**: + 在构建/发布时创建应用程序容器镜像,从而将应用程序与基础架构分离。 +* **开发、测试和生产环境的一致性**: + 在笔记本电脑上运行与云中一样。 +* **云和操作系统的可移植性**: + 可运行在 Ubuntu, RHEL, CoreOS, 内部部署, Google 容器引擎和其他任何地方。 +* **以应用为中心的管理**: + 提升了操作系统的抽象级别,以便在使用逻辑资源的操作系统上运行应用程序。 +* **松耦合、分布式、弹性伸缩 [微服务](http://martinfowler.com/articles/microservices.html)**: + 应用程序被分成更小,更独立的部分,可以动态部署和管理 - 而不是巨型单体应用运行在专用的大型机。 +* **资源隔离**: + 通过对应用进行资源隔离,可以很容易的预测应用程序性能。 +* **资源利用**: + 高效率和高密度。 + +#### 为什么我们需要 Kubernetes,它能做什么? + +最基础的,Kubernetes 可以在物理或虚拟机集群上调度和运行应用程序容器。然而,Kubernetes 还允许开发人员从物理和虚拟机'脱离',从以**主机为中心**的基础架构转移到以**容器为中心**的基础架构,这样可以提供容器固有的全部优点和益处。Kubernetes 提供了基础设施来构建一个真正以**容器为中心**的开发环境。 + +Kubernetes 满足了生产中运行应用程序的许多常见的需求,例如: + +* [Pod](/docs/user-guide/pods/) 提供复合应用并保留一个应用一个容器的容器模型, +* [挂载外部存储](/docs/user-guide/volumes/), +* [Secret管理](/docs/user-guide/secrets/), +* [应用健康检查](/docs/user-guide/production-pods/#liveness-and-readiness-probes-aka-health-checks), +* [副本应用实例](/docs/user-guide/replication-controller/), +* [横向自动扩缩容](/docs/user-guide/horizontal-pod-autoscaling/), +* [服务发现](/docs/user-guide/connecting-applications/), +* [负载均衡](/docs/user-guide/services/), +* [滚动更新](/docs/user-guide/update-demo/), +* [资源监测](/docs/user-guide/monitoring/), +* [日志采集和存储](/docs/user-guide/logging/overview/), +* [支持自检和调试](/docs/user-guide/introspection-and-debugging/), +* [认证和鉴权](/docs/admin/authorization/). + +这提供了平台即服务 (PAAS) 的简单性以及基础架构即服务 (IAAS) 的灵活性,并促进跨基础设施供应商的可移植性。 + +有关详细信息,请参阅 [用户指南](/docs/user-guide/). + +#### 为什么 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/)。 + +这种 [设计](https://github.com/kubernetes/kubernetes/blob/{{page.githubbranch}}/docs/design/principles.md) 使得许多其他系统可以构建在 Kubernetes 之上。 + +#### Kubernetes 不是什么: + +Kubernetes 不是一个传统意义上,包罗万象的 PaaS (平台即服务) 系统。我们保留用户选择的自由,这非常重要。 + +* Kubernetes 不限制支持的应用程序类型。 它不插手应用程序框架 (例如 [Wildfly](http://wildfly.org/)), 不限制支持的语言运行时 (例如 Java, Python, Ruby),只迎合符合 [12种因素的应用程序](http://12factor.net/),也不区分"应用程序"与"服务"。Kubernetes 旨在支持极其多样化的工作负载,包括无状态、有状态和数据处理工作负载。如果应用可以在容器中运行,它就可以在 Kubernetes 上运行。 +* Kubernetes 不提供作为内置服务的中间件 (例如 消息中间件)、数据处理框架 (例如 Spark)、数据库 (例如 mysql)或集群存储系统 (例如 Ceph)。这些应用可以运行在 Kubernetes 上。 +* Kubernetes 没有提供点击即部署的服务市场 +* Kubernetes 从源代码到镜像都是非垄断的。 它不部署源代码且不构建您的应用程序。 持续集成 (CI) 工作流是一个不同用户和项目都有自己需求和偏好的领域。 所以我们支持在 Kubernetes 分层的 CI 工作流,但不指定它应该如何工作。 +* Kubernetes 允许用户选择其他的日志记录,监控和告警系统 (虽然我们提供一些集成作为概念验证) +* Kubernetes 不提供或授权一个全面的应用程序配置语言/系统 (例如 [jsonnet](https://github.com/google/jsonnet)). +* Kubernetes 不提供也不采用任何全面机器配置、保养、管理或自我修复系统 + +另一方面,许多 PaaS 系统*运行*在 Kubernetes 上面,例如 [Openshift](https://github.com/openshift/origin), [Deis](http://deis.io/), and [Eldarion](http://eldarion.cloud/)。 您也可以自定义您自己的 PaaS, 与您选择的 CI 系统集成,或与 Kubernetes 一起使用: 将您的容器镜像部署到 Kubernetes。 + +由于 Kubernetes 在应用级别而不仅仅在硬件级别上运行,因此它提供 PaaS 产品通用的一些功能,例如部署、扩展、负载均衡、日志记录、监控等。但是,Kubernetes 不是单一的,默认解决方案是可选和可插拔的。 + +此处,Kubernetes 不仅仅是一个 "编排系统";它消除了编排的需要。 "编排"技术定义的是工作流的执行: 从 A 到 B,然后到 C。相反,Kubernetes 是包括一套独立、可组合的控制过程,通过声明式语法使其连续地朝着期望状态驱动当前状态。 不需要告诉它具体从 A 到 C 的过程,只要告诉到 C 的状态即可。 也不需要集中控制;该方法更类似于"编舞"。这使得系统更容易使用并且更强大、更可靠、更具弹性和可扩展性。 + +#### *Kubernetes* 是什么意思? K8s? + +名称 **Kubernetes** 源于希腊语,意为 "舵手" 或 "飞行员", 且是英文 "governor" 和 ["cybernetic"](http://www.etymonline.com/index.php?term=cybernetics)的词根。 **K8s** 是通过将 8 个字母 "ubernete" 替换为 8 而导出的缩写。另外,在中文里,k8s 的发音与 Kubernetes 的发音比较接近。 + diff --git a/cn/docs/tutorials/kubernetes-basics/cluster-interactive.html b/cn/docs/tutorials/kubernetes-basics/cluster-interactive.html new file mode 100755 index 0000000000..e1b1613bdb --- /dev/null +++ b/cn/docs/tutorials/kubernetes-basics/cluster-interactive.html @@ -0,0 +1,35 @@ +--- +title: 交互式教程 - 创建集群 +--- + + + + + + + + + + +
+ +
+ +
+
+ To interact with the Terminal, please use the desktop/tablet version +
+
+
+ + +
+ +
+ + + diff --git a/cn/docs/tutorials/kubernetes-basics/cluster-intro.html b/cn/docs/tutorials/kubernetes-basics/cluster-intro.html new file mode 100755 index 0000000000..3c1057f422 --- /dev/null +++ b/cn/docs/tutorials/kubernetes-basics/cluster-intro.html @@ -0,0 +1,110 @@ +--- +redirect_from: +- "/docs/tutorials/getting-started/create-cluster/" +- "/docs/tutorials/getting-started/create-cluster.html" +title: 使用 Minikube 创建一个集群 +--- + + + + + + + + + +
+ +
+ +
+ +
+

目标

+
    +
  • 了解什么是 Kubernetes 集群
  • +
  • 了解什么是 Minikube
  • +
  • 使用在线终端启动 Kubernetes 集群
  • +
+
+ +
+

Kubernetes 集群

+

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

+

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

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

+
+ +
+
+

概要:

+
    +
  • Kubernetes 集群
  • +
  • Minikube
  • +
+
+
+

+ Kubernetes 是一个生产级的开源平台,用于协调计算机集群内部和跨计算机集群的应用程序容器的分发(调度)和运行。 +

+
+
+
+
+ +
+
+

集群图

+
+
+ +
+
+

+
+
+
+ +
+
+

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

+

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

+ +
+
+
+

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

+
+
+
+ +
+
+

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

+ +

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

+ +

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

+ +
+
+
+ + + +
+ +
+ + + diff --git a/cn/docs/tutorials/kubernetes-basics/deploy-interactive.html b/cn/docs/tutorials/kubernetes-basics/deploy-interactive.html new file mode 100755 index 0000000000..707538a45e --- /dev/null +++ b/cn/docs/tutorials/kubernetes-basics/deploy-interactive.html @@ -0,0 +1,39 @@ +--- +title: 交互式教程 - 部署应用程序 +--- + + + + + + + + + + +
+ +
+ +
+
+
+ To interact with the Terminal, please use the desktop/tablet version +
+ +
+
+ +
+ + +
+ +
+ + + diff --git a/cn/docs/tutorials/kubernetes-basics/deploy-intro.html b/cn/docs/tutorials/kubernetes-basics/deploy-intro.html new file mode 100755 index 0000000000..ecd024ca40 --- /dev/null +++ b/cn/docs/tutorials/kubernetes-basics/deploy-intro.html @@ -0,0 +1,108 @@ +--- +title: 使用 kubectl 创建部署 +--- + + + + + + + + + +
+ +
+ +
+ +
+

目标

+
    +
  • 了解应用程序部署
  • +
  • 使用 kubectl 在 Kubernetes 上部署您的第一个应用程序
  • +
+
+ +
+

Kubernetes 部署

+

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

+ +

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

+ +

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

+ +
+ +
+
+

概要:

+
    +
  • Deployments
  • +
  • Kubectl
  • +
+
+
+

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

+
+
+
+
+ +
+
+

在 Kubernetes 上部署您的第一个应用程序

+
+
+ +
+
+

+
+
+
+ +
+
+ +

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

+ +

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

+ + + + +
+
+
+

应用程序需要打包成支持的容器格式之一,以便部署在 Kubernetes 上。

+
+
+
+ +
+
+

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

+ +

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

+ +
+
+
+ + + +
+ +
+ + + diff --git a/cn/docs/tutorials/kubernetes-basics/explore-interactive.html b/cn/docs/tutorials/kubernetes-basics/explore-interactive.html new file mode 100755 index 0000000000..821e6930c1 --- /dev/null +++ b/cn/docs/tutorials/kubernetes-basics/explore-interactive.html @@ -0,0 +1,39 @@ +--- +title: 交互式教程 - 应用程序探索 +--- + + + + + + + + + + +
+ +
+ +
+
+ +
+ To interact with the Terminal, please use the desktop/tablet version +
+ +
+
+
+ + +
+ +
+ + + diff --git a/cn/docs/tutorials/kubernetes-basics/explore-intro.html b/cn/docs/tutorials/kubernetes-basics/explore-intro.html new file mode 100755 index 0000000000..4e2d1416f6 --- /dev/null +++ b/cn/docs/tutorials/kubernetes-basics/explore-intro.html @@ -0,0 +1,142 @@ +--- +title: 查看 Pods 和 Nodes +--- + + + + + + + + + + +
+ +
+ +
+ +
+

目标

+
    +
  • 了解 Kubernetes Pods
  • +
  • 了解 Kubernetes Nodes
  • +
  • 已部署应用故障排除
  • +
+
+ +
+

Kubernetes Pods

+

当您在模块 2中创建部署时,Kubernetes 创建了一个 Pod 来托管您的应用程序实例。Pod 是一个 Kubernetes 的资源抽象,表示一个或多个应用容器 (例如 Docker 或 rkt) 组,以及一些用于这些容器的共享资源。这些资源包括:

+
    +
  • 共享存储,如卷
  • +
  • 网络,作为唯一的集群 IP 地址
  • +
  • 每个容器如何运行的信息,例如容器镜像版本或要使用的特定端口
  • +
+

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

+ +

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

+ +
+
+
+

概要:

+
    +
  • Pods
  • +
  • Nodes
  • +
  • Kubectl 主要命令
  • +
+
+
+

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

+
+
+
+
+ +
+
+

Pods 概览

+
+
+ +
+
+

+
+
+
+ +
+
+

Nodes

+

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

+ +

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

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

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

+
+
+
+ +
+ +
+
+

Node 概述

+
+
+ +
+
+

+
+
+
+ +
+
+

使用 kubectl 进行故障排除

+

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

+
    +
  • kubectl get - 列出可用资源
  • +
  • kubectl describe - 显示有关资源的详细信息
  • +
  • kubectl logs - 从 Pod 中的容器打印日志
  • +
  • kubectl exec - 在 Pod 中的容器执行命令
  • +
+ +

您可以使用这些命令来查看应用程序部署的时间,它们当前的状态,运行的位置及其配置。

+ +

现在我们更多地了解了集群组件和命令行交互,接下来,一起来探索分析我们的应用程序。

+ +
+
+
+

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

+
+
+
+
+ + + +
+ +
+ + + diff --git a/cn/docs/tutorials/kubernetes-basics/expose-interactive.html b/cn/docs/tutorials/kubernetes-basics/expose-interactive.html new file mode 100755 index 0000000000..4cae319edf --- /dev/null +++ b/cn/docs/tutorials/kubernetes-basics/expose-interactive.html @@ -0,0 +1,36 @@ +--- +title: 交互性教程 - 应用外部可见 +--- + + + + + + + + + + +
+ +
+ +
+
+ To interact with the Terminal, please use the desktop/tablet version +
+
+
+
+ + +
+ +
+ + + diff --git a/cn/docs/tutorials/kubernetes-basics/expose-intro.html b/cn/docs/tutorials/kubernetes-basics/expose-intro.html new file mode 100755 index 0000000000..b70e1d2de1 --- /dev/null +++ b/cn/docs/tutorials/kubernetes-basics/expose-intro.html @@ -0,0 +1,138 @@ +--- +title: 使用服务让您的应用程序外部可见 +--- + + + + + + + + + +
+ +
+ +
+ +
+

目标

+
    +
  • 了解 Kubernetes 服务
  • +
  • 了解 Kubernetes 标签
  • +
  • 应用程序在 Kubernetes 外部可见
  • +
+
+ +
+

Kubernetes Services

+ +

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

+ +

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

+
    +
  • LoadBalancer - 提供公有 IP 地址 (在 GCP 或 AWS 上运行 Kubernetes 通常使用此方式)
  • +
  • NodePort - 使用 NAT 在集群的每个 Node 节点的同一端口让服务可见。(所有 Kubernetes 集群和 Minikube 中都可用此方式)
  • +
+
+
+
+

摘要:

+
    +
  • Pod 流量外部可见
  • +
  • Pods 流量负载均衡
  • +
  • 使用标签
  • +
+
+
+

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

+
+
+
+
+ +
+
+

Services 概述

+
+
+ +
+
+

+
+
+
+ +
+
+ +

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

+ +

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

+ +

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

+ +
+
+
+

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

+
+
+
+ +
+ +
+
+

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

+
    +
  • 生产环境 (生产、测试、开发)
  • +
  • 应用程序版本 (beta、v1.3)
  • +
  • 服务类型 (前端、后端、数据库)
  • +
+
+
+
+

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

+
+
+
+
+
+
+

Labels

+
+
+ +
+
+

+
+
+
+
+
+ +

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

+ +

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

+
+
+
+ + +
+ +
+ + + diff --git a/cn/docs/tutorials/kubernetes-basics/index.html b/cn/docs/tutorials/kubernetes-basics/index.html new file mode 100755 index 0000000000..856a6dcc28 --- /dev/null +++ b/cn/docs/tutorials/kubernetes-basics/index.html @@ -0,0 +1,106 @@ +--- +title: 概述 +--- + + + + + + + + + +
+ +
+ +
+
+

Kubernetes 基础

+

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

+

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

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

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

+
+
+ +
+ +
+
+

Kubernetes 可以为您做些什么?

+

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

+
+
+ +
+

Kubernetes 基础模块

+
+ +
+ +
+
+ +
+
+ +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ +
+ +
+ +
+ +
+ + + diff --git a/cn/docs/tutorials/kubernetes-basics/scale-interactive.html b/cn/docs/tutorials/kubernetes-basics/scale-interactive.html new file mode 100755 index 0000000000..dd03ef220d --- /dev/null +++ b/cn/docs/tutorials/kubernetes-basics/scale-interactive.html @@ -0,0 +1,38 @@ +--- +title: 交互式教程 - 扩展您的应用程序 +--- + + + + + + + + + + +
+ +
+ +
+
+ To interact with the Terminal, please use the desktop/tablet version +
+
+
+
+ + +
+ + + +
+ + + diff --git a/cn/docs/tutorials/kubernetes-basics/scale-intro.html b/cn/docs/tutorials/kubernetes-basics/scale-intro.html new file mode 100755 index 0000000000..28ec8ec033 --- /dev/null +++ b/cn/docs/tutorials/kubernetes-basics/scale-intro.html @@ -0,0 +1,120 @@ +--- +title: 运行应用程序的多个实例 +--- + + + + + + + + + +
+ +
+ +
+ +
+

目标

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

缩放应用程序

+ +

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

+ +

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

+ +
+
+
+

摘要:

+
    +
  • Deployment 的缩放
  • +
+
+
+

您可以使用 kubectl run 命令的 --replicas 参数,在创建 Deployment 时指定多个实例。

+
+
+
+
+ +
+
+

Scaling 概述

+
+
+ +
+
+
+ +
+
+ +
+ +
+
+ +

扩展 Deployment 将确保新创建的 Pods 会调度到可用资源的 Node 节点上,收缩会保证 Pods 数量减少至新的所需状态。 Kubernetes 还支持 Pods 的 自动缩放版 ,但不在本教程范围之内。收缩到零也是可以的,此时它将终止指定 Deployment 的所有 Pod。

+ +

运行应用程序的多个实例需要一种将流量分发给所有实例的方法。服务有内置的负载均衡器,可将网络流量分配给 Deployment 暴露的所有 Pods。服务通过使用 endpoints 持续监控运行的 Pods,以确保流量仅发送到可用的 Pods。

+ +
+
+
+

通过更改 Deployment 中的副本数可以实现伸缩应用程序。

+
+
+
+ +
+ +
+
+

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

+
+
+
+ + + +
+ +
+ + + diff --git a/cn/docs/tutorials/kubernetes-basics/update-interactive.html b/cn/docs/tutorials/kubernetes-basics/update-interactive.html new file mode 100755 index 0000000000..c38ba6c6f5 --- /dev/null +++ b/cn/docs/tutorials/kubernetes-basics/update-interactive.html @@ -0,0 +1,31 @@ +--- +title: 交互式教程 - 更新您的应用程序 +--- + + + + + + + + + + +
+ +
+ +
+
+ To interact with the Terminal, please use the desktop/tablet version +
+
+
+
+ +
+ +
+ + + diff --git a/cn/docs/tutorials/kubernetes-basics/update-intro.html b/cn/docs/tutorials/kubernetes-basics/update-intro.html new file mode 100755 index 0000000000..18289e04df --- /dev/null +++ b/cn/docs/tutorials/kubernetes-basics/update-intro.html @@ -0,0 +1,135 @@ +--- +title: 执行滚动更新 +--- + + + + + + + + + +
+ +
+ +
+ +
+

目标

+
    +
  • 使用 kubectl 执行滚动更新
  • +
+
+ +
+

更新应用程序

+ +

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

+ +

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

+ +
+
+
+

摘要:

+
    +
  • 更新应用程序
  • +
+
+
+

滚动更新允许通过使用新的 Pods 实例逐个更新来实现零停机的部署更新。

+
+
+
+
+ +
+
+

滚动更新概述

+
+
+
+
+
+ +
+
+
+ +
+
+ +

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

+ +

滚动更新允许以下操作:

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

如果部署外部可见,则服务将在更新期间将流量负载均衡到可用的 Pod。

+
+
+
+ +
+ +
+
+

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

+
+
+
+ + + +
+ +
+ + + diff --git a/cn/docs/whatisk8s.md b/cn/docs/whatisk8s.md new file mode 100644 index 0000000000..61432c6991 --- /dev/null +++ b/cn/docs/whatisk8s.md @@ -0,0 +1,9 @@ +--- +assignees: +- k8s-merge-robot +title: 认识 Kubernetes? +--- + +{% include user-guide-content-moved.md %} + +[认识 Kubernetes?](/docs/concepts/overview/what-is-kubernetes/)