replace zh to /zh in content/zh/docs/tutorials/ directory
parent
5888082a2f
commit
cb5a3cd3f2
|
@ -16,17 +16,17 @@ content_template: templates/concept
|
||||||
|
|
||||||
{{% capture overview %}}
|
{{% capture overview %}}
|
||||||
|
|
||||||
Kubernetes 文档的这一部分包含教程。一个教程展示了如何完成一个比单个[任务](zh/docs/tasks/)更大的目标。
|
Kubernetes 文档的这一部分包含教程。一个教程展示了如何完成一个比单个[任务](/zh/docs/tasks/)更大的目标。
|
||||||
通常一个教程有几个部分,每个部分都有一系列步骤。在浏览每个教程之前,
|
通常一个教程有几个部分,每个部分都有一系列步骤。在浏览每个教程之前,
|
||||||
您可能希望将[标准化术语表](zh/docs/reference/glossary/)页面添加到书签,供以后参考。
|
您可能希望将[标准化术语表](/zh/docs/reference/glossary/)页面添加到书签,供以后参考。
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
This section of the Kubernetes documentation contains tutorials.
|
This section of the Kubernetes documentation contains tutorials.
|
||||||
A tutorial shows how to accomplish a goal that is larger than a single
|
A tutorial shows how to accomplish a goal that is larger than a single
|
||||||
[task](zh/docs/tasks/). Typically a tutorial has several sections,
|
[task](/docs/tasks/). Typically a tutorial has several sections,
|
||||||
each of which has a sequence of steps.
|
each of which has a sequence of steps.
|
||||||
Before walking through each tutorial, you may want to bookmark the
|
Before walking through each tutorial, you may want to bookmark the
|
||||||
[Standardized Glossary](zh/docs/reference/glossary/) page for later references.
|
[Standardized Glossary](/docs/reference/glossary/) page for later references.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
{{% /capture %}}
|
{{% /capture %}}
|
||||||
|
@ -39,10 +39,10 @@ Before walking through each tutorial, you may want to bookmark the
|
||||||
## Basics
|
## Basics
|
||||||
-->
|
-->
|
||||||
|
|
||||||
* [Kubernetes 基础知识](zh/docs/tutorials/Kubernetes-Basics/)是一个深入的交互式教程,帮助您理解 Kubernetes 系统,并尝试一些基本的 Kubernetes 特性。
|
* [Kubernetes 基础知识](/zh/docs/tutorials/Kubernetes-Basics/)是一个深入的交互式教程,帮助您理解 Kubernetes 系统,并尝试一些基本的 Kubernetes 特性。
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
* [Kubernetes Basics](zh/docs/tutorials/kubernetes-basics/) is an in-depth interactive tutorial that helps you understand the Kubernetes system and try out some basic Kubernetes features.
|
* [Kubernetes Basics](/docs/tutorials/kubernetes-basics/) is an in-depth interactive tutorial that helps you understand the Kubernetes system and try out some basic Kubernetes features.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
* [使用 Kubernetes (Udacity) 的可伸缩微服务](https://www.udacity.com/course/scalable-microservices-with-kubernetes--ud615)
|
* [使用 Kubernetes (Udacity) 的可伸缩微服务](https://www.udacity.com/course/scalable-microservices-with-kubernetes--ud615)
|
||||||
|
@ -57,10 +57,10 @@ Before walking through each tutorial, you may want to bookmark the
|
||||||
* [Introduction to Kubernetes (edX)](https://www.edx.org/course/introduction-kubernetes-linuxfoundationx-lfs158x#)
|
* [Introduction to Kubernetes (edX)](https://www.edx.org/course/introduction-kubernetes-linuxfoundationx-lfs158x#)
|
||||||
-->
|
-->
|
||||||
|
|
||||||
* [你好 Minikube](zh/docs/tutorials/hello-minikube/)
|
* [你好 Minikube](/zh/docs/tutorials/hello-minikube/)
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
* [Hello Minikube](zh/docs/tutorials/hello-minikube/)
|
* [Hello Minikube]/docs/tutorials/hello-minikube/)
|
||||||
-->
|
-->
|
||||||
|
|
||||||
## 配置
|
## 配置
|
||||||
|
@ -69,10 +69,10 @@ Before walking through each tutorial, you may want to bookmark the
|
||||||
## Configuration
|
## Configuration
|
||||||
-->
|
-->
|
||||||
|
|
||||||
* [使用一个 ConfigMap 配置 Redis](zh/docs/tutorials/configuration/configure-redis-using-configmap/)
|
* [使用一个 ConfigMap 配置 Redis](/zh/docs/tutorials/configuration/configure-redis-using-configmap/)
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
* [Configuring Redis Using a ConfigMap](zh/docs/tutorials/configuration/configure-redis-using-configmap/)
|
* [Configuring Redis Using a ConfigMap](/docs/tutorials/configuration/configure-redis-using-configmap/)
|
||||||
-->
|
-->
|
||||||
|
|
||||||
## 无状态应用程序
|
## 无状态应用程序
|
||||||
|
@ -81,16 +81,16 @@ Before walking through each tutorial, you may want to bookmark the
|
||||||
## Stateless Applications
|
## Stateless Applications
|
||||||
-->
|
-->
|
||||||
|
|
||||||
* [公开外部 IP 地址访问集群中的应用程序](zh/docs/tutorials/stateless-application/expose-external-ip-address/)
|
* [公开外部 IP 地址访问集群中的应用程序](/zh/docs/tutorials/stateless-application/expose-external-ip-address/)
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
* [Exposing an External IP Address to Access an Application in a Cluster](zh/docs/tutorials/stateless-application/expose-external-ip-address/)
|
* [Exposing an External IP Address to Access an Application in a Cluster](/docs/tutorials/stateless-application/expose-external-ip-address/)
|
||||||
-->
|
-->
|
||||||
|
|
||||||
* [示例:使用 Redis 部署 PHP 留言板应用程序](zh/docs/tutorials/stateless-application/guestbook/)
|
* [示例:使用 Redis 部署 PHP 留言板应用程序](/zh/docs/tutorials/stateless-application/guestbook/)
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
* [Example: Deploying PHP Guestbook application with Redis](zh/docs/tutorials/stateless-application/guestbook/)
|
* [Example: Deploying PHP Guestbook application with Redis](/docs/tutorials/stateless-application/guestbook/)
|
||||||
-->
|
-->
|
||||||
|
|
||||||
## 有状态应用程序
|
## 有状态应用程序
|
||||||
|
@ -99,28 +99,28 @@ Before walking through each tutorial, you may want to bookmark the
|
||||||
## Stateful Applications
|
## Stateful Applications
|
||||||
-->
|
-->
|
||||||
|
|
||||||
* [StatefulSet 基础](zh/docs/tutorials/stateful-application/basic-stateful-set/)
|
* [StatefulSet 基础](/zh/docs/tutorials/stateful-application/basic-stateful-set/)
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
* [StatefulSet Basics](zh/docs/tutorials/stateful-application/basic-stateful-set/)
|
* [StatefulSet Basics](/docs/tutorials/stateful-application/basic-stateful-set/)
|
||||||
-->
|
-->
|
||||||
|
|
||||||
* [示例:WordPress 和 MySQL 使用持久卷](zh/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/)
|
* [示例:WordPress 和 MySQL 使用持久卷](/zh/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/)
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
* [Example: WordPress and MySQL with Persistent Volumes](zh/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/)
|
* [Example: WordPress and MySQL with Persistent Volumes](/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/)
|
||||||
-->
|
-->
|
||||||
|
|
||||||
* [示例:使用有状态集部署 Cassandra](zh/docs/tutorials/stateful-application/cassandra/)
|
* [示例:使用有状态集部署 Cassandra](/zh/docs/tutorials/stateful-application/cassandra/)
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
* [Example: Deploying Cassandra with Stateful Sets](zh/docs/tutorials/stateful-application/cassandra/)
|
* [Example: Deploying Cassandra with Stateful Sets](/docs/tutorials/stateful-application/cassandra/)
|
||||||
-->
|
-->
|
||||||
|
|
||||||
* [运行 ZooKeeper,CP 分布式系统](zh/docs/tutorials/stateful-application/zookeeper/)
|
* [运行 ZooKeeper,CP 分布式系统](/zh/docs/tutorials/stateful-application/zookeeper/)
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
* [Running ZooKeeper, A CP Distributed System](zh/docs/tutorials/stateful-application/zookeeper/)
|
* [Running ZooKeeper, A CP Distributed System](/docs/tutorials/stateful-application/zookeeper/)
|
||||||
-->
|
-->
|
||||||
|
|
||||||
## CI/CD 管道
|
## CI/CD 管道
|
||||||
|
@ -155,33 +155,33 @@ Before walking through each tutorial, you may want to bookmark the
|
||||||
|
|
||||||
## 集群
|
## 集群
|
||||||
|
|
||||||
* [AppArmor](zh/docs/tutorials/clusters/apparmor/)
|
* [AppArmor](/zh/docs/tutorials/clusters/apparmor/)
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
## Clusters
|
## Clusters
|
||||||
|
|
||||||
* [AppArmor](zh/docs/tutorials/clusters/apparmor/)
|
* [AppArmor](/docs/tutorials/clusters/apparmor/)
|
||||||
-->
|
-->
|
||||||
|
|
||||||
## 服务
|
## 服务
|
||||||
|
|
||||||
* [使用源 IP](zh/docs/tutorials/services/source-ip/)
|
* [使用源 IP](/zh/docs/tutorials/services/source-ip/)
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
## Services
|
## Services
|
||||||
|
|
||||||
* [Using Source IP](zh/docs/tutorials/services/source-ip/)
|
* [Using Source IP](/docs/tutorials/services/source-ip/)
|
||||||
-->
|
-->
|
||||||
|
|
||||||
{{% /capture %}}
|
{{% /capture %}}
|
||||||
|
|
||||||
{{% capture whatsnext %}}
|
{{% capture whatsnext %}}
|
||||||
|
|
||||||
如果您想编写教程,请参阅[使用页面模板](zh/docs/home/contribute/page-templates/)
|
如果您想编写教程,请参阅[使用页面模板](/zh/docs/home/contribute/page-templates/)
|
||||||
以获取有关教程页面类型和教程模板的信息。
|
以获取有关教程页面类型和教程模板的信息。
|
||||||
<!--
|
<!--
|
||||||
If you would like to write a tutorial, see
|
If you would like to write a tutorial, see
|
||||||
[Using Page Templates](zh/docs/home/contribute/page-templates/)
|
[Using Page Templates](/docs/home/contribute/page-templates/)
|
||||||
for information about the tutorial page type and the tutorial template.
|
for information about the tutorial page type and the tutorial template.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
|
|
@ -416,7 +416,7 @@ Events:
|
||||||
nodes. There are lots of ways to setup the profiles though, such as: -->
|
nodes. There are lots of ways to setup the profiles though, such as: -->
|
||||||
Kubernetes 目前不提供任何本地机制来将 AppArmor 配置文件加载到节点上。有很多方法可以设置配置文件,例如:
|
Kubernetes 目前不提供任何本地机制来将 AppArmor 配置文件加载到节点上。有很多方法可以设置配置文件,例如:
|
||||||
|
|
||||||
<!-- * Through a [DaemonSet](/zh/docs/concepts/workloads/controllers/daemonset/) that runs a Pod on each node to
|
<!-- * Through a [DaemonSet](/docs/concepts/workloads/controllers/daemonset/) that runs a Pod on each node to
|
||||||
ensure the correct profiles are loaded. An example implementation can be found
|
ensure the correct profiles are loaded. An example implementation can be found
|
||||||
[here](https://git.k8s.io/kubernetes/test/images/apparmor-loader).
|
[here](https://git.k8s.io/kubernetes/test/images/apparmor-loader).
|
||||||
* At node initialization time, using your node initialization scripts (e.g. Salt, Ansible, etc.) or
|
* At node initialization time, using your node initialization scripts (e.g. Salt, Ansible, etc.) or
|
||||||
|
@ -430,7 +430,7 @@ Kubernetes 目前不提供任何本地机制来将 AppArmor 配置文件加载
|
||||||
<!-- The scheduler is not aware of which profiles are loaded onto which node, so the full set of profiles
|
<!-- The scheduler is not aware of which profiles are loaded onto which node, so the full set of profiles
|
||||||
must be loaded onto every node. An alternative approach is to add a node label for each profile (or
|
must be loaded onto every node. An alternative approach is to add a node label for each profile (or
|
||||||
class of profiles) on the node, and use a
|
class of profiles) on the node, and use a
|
||||||
[node selector](/zh/docs/concepts/configuration/assign-pod-node/) to ensure the Pod is run on a
|
[node selector](/docs/concepts/configuration/assign-pod-node/) to ensure the Pod is run on a
|
||||||
node with the required profile. -->
|
node with the required profile. -->
|
||||||
调度程序不知道哪些配置文件加载到哪个节点上,因此必须将全套配置文件加载到每个节点上。另一种方法是为节点上的每个配置文件(或配置文件类)添加节点标签,并使用[节点选择器](/zh/docs/concepts/configuration/assign pod node/)确保 Pod 在具有所需配置文件的节点上运行。
|
调度程序不知道哪些配置文件加载到哪个节点上,因此必须将全套配置文件加载到每个节点上。另一种方法是为节点上的每个配置文件(或配置文件类)添加节点标签,并使用[节点选择器](/zh/docs/concepts/configuration/assign pod node/)确保 Pod 在具有所需配置文件的节点上运行。
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ content_template: templates/tutorial
|
||||||
{{% capture overview %}}
|
{{% capture overview %}}
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
This page provides a real world example of how to configure Redis using a ConfigMap and builds upon the [Configure Containers Using a ConfigMap](/zh/docs/tasks/configure-pod-container/configure-pod-configmap/) task.
|
This page provides a real world example of how to configure Redis using a ConfigMap and builds upon the [Configure Containers Using a ConfigMap](/docs/tasks/configure-pod-container/configure-pod-configmap/) task.
|
||||||
-->
|
-->
|
||||||
这篇文档基于[使用 ConfigMap 来配置 Containers](/zh/docs/tasks/configure-pod-container/configure-pod-configmap/) 这个任务,提供了一个使用 ConfigMap 来配置 Redis 的真实案例。
|
这篇文档基于[使用 ConfigMap 来配置 Containers](/zh/docs/tasks/configure-pod-container/configure-pod-configmap/) 这个任务,提供了一个使用 ConfigMap 来配置 Redis 的真实案例。
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ This page provides a real world example of how to configure Redis using a Config
|
||||||
* {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
|
* {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
|
||||||
<!--
|
<!--
|
||||||
* The example shown on this page works with `kubectl` 1.14 and above.
|
* The example shown on this page works with `kubectl` 1.14 and above.
|
||||||
* Understand [Configure Containers Using a ConfigMap](/zh/docs/tasks/configure-pod-container/configure-pod-configmap/).
|
* Understand [Configure Containers Using a ConfigMap](/docs/tasks/configure-pod-container/configure-pod-configmap/).
|
||||||
-->
|
-->
|
||||||
* 此页面上显示的示例适用于 `kubectl` 1.14和在其以上的版本。
|
* 此页面上显示的示例适用于 `kubectl` 1.14和在其以上的版本。
|
||||||
* 理解[使用ConfigMap来配置Containers](/zh/docs/tasks/configure-pod-container/configure-pod-configmap/)。
|
* 理解[使用ConfigMap来配置Containers](/zh/docs/tasks/configure-pod-container/configure-pod-configmap/)。
|
||||||
|
@ -156,7 +156,7 @@ kubectl delete pod redis
|
||||||
{{% capture whatsnext %}}
|
{{% capture whatsnext %}}
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
* Learn more about [ConfigMaps](/zh/docs/tasks/configure-pod-container/configure-pod-configmap/).
|
* Learn more about [ConfigMaps](/docs/tasks/configure-pod-container/configure-pod-configmap/).
|
||||||
-->
|
-->
|
||||||
* 了解有关 [ConfigMaps](/zh/docs/tasks/configure-pod-container/configure-pod-configmap/)的更多信息。
|
* 了解有关 [ConfigMaps](/zh/docs/tasks/configure-pod-container/configure-pod-configmap/)的更多信息。
|
||||||
|
|
||||||
|
|
|
@ -33,16 +33,16 @@ card:
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
This tutorial shows you how to run a simple Hello World Node.js app
|
This tutorial shows you how to run a simple Hello World Node.js app
|
||||||
on Kubernetes using [Minikube](zh/docs/setup/learning-environment/minikube) and Katacoda.
|
on Kubernetes using [Minikube](/docs/setup/learning-environment/minikube) and Katacoda.
|
||||||
Katacoda provides a free, in-browser Kubernetes environment.
|
Katacoda provides a free, in-browser Kubernetes environment.
|
||||||
-->
|
-->
|
||||||
本教程向您展示如何使用 [Minikube](zh/docs/setup/learning-environment/minikube) 和 Katacoda 在 Kubernetes 上运行一个简单的 “Hello World” Node.js 应用程序。Katacoda 提供免费的浏览器内 Kubernetes 环境。
|
本教程向您展示如何使用 [Minikube](/zh/docs/setup/learning-environment/minikube) 和 Katacoda 在 Kubernetes 上运行一个简单的 “Hello World” Node.js 应用程序。Katacoda 提供免费的浏览器内 Kubernetes 环境。
|
||||||
|
|
||||||
{{< note >}}
|
{{< note >}}
|
||||||
<!--
|
<!--
|
||||||
You can also follow this tutorial if you've installed [Minikube locally](zh/docs/tasks/tools/install-minikube/).
|
You can also follow this tutorial if you've installed [Minikube locally](/docs/tasks/tools/install-minikube/).
|
||||||
-->
|
-->
|
||||||
如果您已在本地安装 [Minikube](zh/docs/tasks/tools/install-minikube/),也可以按照本教程操作。
|
如果您已在本地安装 [Minikube](/zh/docs/tasks/tools/install-minikube/),也可以按照本教程操作。
|
||||||
|
|
||||||
{{< /note >}}
|
{{< /note >}}
|
||||||
|
|
||||||
|
@ -117,17 +117,17 @@ For more information on the `docker build` command, read the [Docker documentati
|
||||||
|
|
||||||
## Create a Deployment
|
## Create a Deployment
|
||||||
|
|
||||||
A Kubernetes [*Pod*](zh/docs/concepts/workloads/pods/pod/) is a group of one or more Containers,
|
A Kubernetes [*Pod*](/docs/concepts/workloads/pods/pod/) is a group of one or more Containers,
|
||||||
tied together for the purposes of administration and networking. The Pod in this
|
tied together for the purposes of administration and networking. The Pod in this
|
||||||
tutorial has only one Container. A Kubernetes
|
tutorial has only one Container. A Kubernetes
|
||||||
[*Deployment*](zh/docs/concepts/workloads/controllers/deployment/) checks on the health of your
|
[*Deployment*](/docs/concepts/workloads/controllers/deployment/) checks on the health of your
|
||||||
Pod and restarts the Pod's Container if it terminates. Deployments are the
|
Pod and restarts the Pod's Container if it terminates. Deployments are the
|
||||||
recommended way to manage the creation and scaling of Pods.
|
recommended way to manage the creation and scaling of Pods.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
## 创建 Deployment
|
## 创建 Deployment
|
||||||
|
|
||||||
Kubernetes [*Pod*](zh/docs/concepts/workloads/pods/pod/) 是由一个或多个为了管理和联网而绑定在一起的容器构成的组。本教程中的 Pod 只有一个容器。Kubernetes [*Deployment*](zh/docs/concepts/workloads/controllers/deployment/) 检查 Pod 的健康状况,并在 Pod 中的容器终止的情况下重新启动新的容器。Deployment 是管理 Pod 创建和扩展的推荐方法。
|
Kubernetes [*Pod*](/zh/docs/concepts/workloads/pods/pod/) 是由一个或多个为了管理和联网而绑定在一起的容器构成的组。本教程中的 Pod 只有一个容器。Kubernetes [*Deployment*](/zh/docs/concepts/workloads/controllers/deployment/) 检查 Pod 的健康状况,并在 Pod 中的容器终止的情况下重新启动新的容器。Deployment 是管理 Pod 创建和扩展的推荐方法。
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
1. Use the `kubectl create` command to create a Deployment that manages a Pod. The
|
1. Use the `kubectl create` command to create a Deployment that manages a Pod. The
|
||||||
|
@ -203,9 +203,9 @@ Pod runs a Container based on the provided Docker image.
|
||||||
```
|
```
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
{{< note >}}For more information about `kubectl`commands, see the [kubectl overview](zh/docs/user-guide/kubectl-overview/).{{< /note >}}
|
{{< note >}}For more information about `kubectl`commands, see the [kubectl overview](/docs/user-guide/kubectl-overview/).{{< /note >}}
|
||||||
-->
|
-->
|
||||||
{{< note >}}有关 kubectl 命令的更多信息,请参阅 [kubectl 概述](zh/docs/user-guide/kubectl-overview/)。{{< /note >}}
|
{{< note >}}有关 kubectl 命令的更多信息,请参阅 [kubectl 概述](/zh/docs/user-guide/kubectl-overview/)。{{< /note >}}
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
## Create a Service
|
## Create a Service
|
||||||
|
@ -213,12 +213,12 @@ Pod runs a Container based on the provided Docker image.
|
||||||
By default, the Pod is only accessible by its internal IP address within the
|
By default, the Pod is only accessible by its internal IP address within the
|
||||||
Kubernetes cluster. To make the `hello-node` Container accessible from outside the
|
Kubernetes cluster. To make the `hello-node` Container accessible from outside the
|
||||||
Kubernetes virtual network, you have to expose the Pod as a
|
Kubernetes virtual network, you have to expose the Pod as a
|
||||||
Kubernetes [*Service*](zh/docs/concepts/services-networking/service/).
|
Kubernetes [*Service*](/docs/concepts/services-networking/service/).
|
||||||
-->
|
-->
|
||||||
|
|
||||||
## 创建 Service
|
## 创建 Service
|
||||||
|
|
||||||
默认情况下,Pod 只能通过 Kubernetes 集群中的内部 IP 地址访问。要使得 `hello-node` 容器可以从 Kubernetes 虚拟网络的外部访问,您必须将 Pod 暴露为 Kubernetes [*Service*](zh/docs/concepts/services-networking/service/)。
|
默认情况下,Pod 只能通过 Kubernetes 集群中的内部 IP 地址访问。要使得 `hello-node` 容器可以从 Kubernetes 虚拟网络的外部访问,您必须将 Pod 暴露为 Kubernetes [*Service*](/zh/docs/concepts/services-networking/service/)。
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
1. Expose the Pod to the public internet using the `kubectl expose` command:
|
1. Expose the Pod to the public internet using the `kubectl expose` command:
|
||||||
|
@ -447,12 +447,12 @@ minikube delete
|
||||||
{{% capture whatsnext %}}
|
{{% capture whatsnext %}}
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
* Learn more about [Deployment objects](zh/docs/concepts/workloads/controllers/deployment/).
|
* Learn more about [Deployment objects](/docs/concepts/workloads/controllers/deployment/).
|
||||||
* Learn more about [Deploying applications](zh/docs/tasks/run-application/run-stateless-application-deployment/).
|
* Learn more about [Deploying applications](/docs/tasks/run-application/run-stateless-application-deployment/).
|
||||||
* Learn more about [Service objects](zh/docs/concepts/services-networking/service/).
|
* Learn more about [Service objects](/docs/concepts/services-networking/service/).
|
||||||
-->
|
-->
|
||||||
* 进一步了解 [Deployment 对象](zh/docs/concepts/workloads/controllers/deployment/)。
|
* 进一步了解 [Deployment 对象](/zh/docs/concepts/workloads/controllers/deployment/)。
|
||||||
* 学习更多关于 [部署应用](zh/docs/tasks/run-application/run-stateless-application-deployment/)。
|
* 学习更多关于 [部署应用](/zh/docs/tasks/run-application/run-stateless-application-deployment/)。
|
||||||
* 学习更多关于 [Service 对象](zh/docs/concepts/services-networking/service/)。
|
* 学习更多关于 [Service 对象](/zh/docs/concepts/services-networking/service/)。
|
||||||
|
|
||||||
{{% /capture %}}
|
{{% /capture %}}
|
||||||
|
|
|
@ -24,8 +24,8 @@ Kubernetes 集群中运行的应用通过 Service 抽象来互相查找、通信
|
||||||
* [NAT](https://en.wikipedia.org/wiki/Network_address_translation): 网络地址转换
|
* [NAT](https://en.wikipedia.org/wiki/Network_address_translation): 网络地址转换
|
||||||
* [Source NAT](https://en.wikipedia.org/wiki/Network_address_translation#SNAT): 替换数据包的源 IP, 通常为节点的 IP
|
* [Source NAT](https://en.wikipedia.org/wiki/Network_address_translation#SNAT): 替换数据包的源 IP, 通常为节点的 IP
|
||||||
* [Destination NAT](https://en.wikipedia.org/wiki/Network_address_translation#DNAT): 替换数据包的目的 IP, 通常为 Pod 的 IP
|
* [Destination NAT](https://en.wikipedia.org/wiki/Network_address_translation#DNAT): 替换数据包的目的 IP, 通常为 Pod 的 IP
|
||||||
* [VIP](zh/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies): 一个虚拟 IP, 例如分配给每个 Kubernetes Service 的 IP
|
* [VIP](/zh/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies): 一个虚拟 IP, 例如分配给每个 Kubernetes Service 的 IP
|
||||||
* [Kube-proxy](zh/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies): 一个网络守护程序,在每个节点上协调 Service VIP 管理
|
* [Kube-proxy](/zh/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies): 一个网络守护程序,在每个节点上协调 Service VIP 管理
|
||||||
|
|
||||||
|
|
||||||
## 准备工作
|
## 准备工作
|
||||||
|
@ -59,7 +59,7 @@ deployment.apps/source-ip-app created
|
||||||
## Type=ClusterIP 类型 Services 的 Source IP
|
## Type=ClusterIP 类型 Services 的 Source IP
|
||||||
|
|
||||||
|
|
||||||
如果你的 kube-proxy 运行在 [iptables 模式](zh/docs/user-guide/services/#proxy-mode-iptables)下,从集群内部发送到 ClusterIP 的包永远不会进行源地址 NAT,这从 Kubernetes 1.2 开始是默认选项。Kube-proxy 通过一个 `proxyMode` endpoint 暴露它的模式。
|
如果你的 kube-proxy 运行在 [iptables 模式](/zh/docs/user-guide/services/#proxy-mode-iptables)下,从集群内部发送到 ClusterIP 的包永远不会进行源地址 NAT,这从 Kubernetes 1.2 开始是默认选项。Kube-proxy 通过一个 `proxyMode` endpoint 暴露它的模式。
|
||||||
|
|
||||||
```console
|
```console
|
||||||
kubectl get nodes
|
kubectl get nodes
|
||||||
|
@ -136,7 +136,7 @@ command=GET
|
||||||
## Type=NodePort 类型 Services 的 Source IP
|
## Type=NodePort 类型 Services 的 Source IP
|
||||||
|
|
||||||
|
|
||||||
从 Kubernetes 1.5 开始,发送给类型为 [Type=NodePort](zh/docs/user-guide/services/#type-nodeport) Services 的数据包默认进行源地址 NAT。你可以通过创建一个 `NodePort` Service 来进行测试:
|
从 Kubernetes 1.5 开始,发送给类型为 [Type=NodePort](/zh/docs/user-guide/services/#type-nodeport) Services 的数据包默认进行源地址 NAT。你可以通过创建一个 `NodePort` Service 来进行测试:
|
||||||
|
|
||||||
```console
|
```console
|
||||||
kubectl expose deployment source-ip-app --name=nodeport --port=80 --target-port=8080 --type=NodePort
|
kubectl expose deployment source-ip-app --name=nodeport --port=80 --target-port=8080 --type=NodePort
|
||||||
|
@ -189,7 +189,7 @@ client_address=10.240.0.3
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
为了防止这种情况发生,Kubernetes 提供了一个特性来保留客户端的源 IP 地址[(点击此处查看可用特性)](zh/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip)。设置 `service.spec.externalTrafficPolicy` 的值为 `Local`,请求就只会被代理到本地 endpoints 而不会被转发到其它节点。这样就保留了最初的源 IP 地址。如果没有本地 endpoints,发送到这个节点的数据包将会被丢弃。这样在应用到数据包的任何包处理规则下,你都能依赖这个正确的 source-ip 使数据包通过并到达 endpoint。
|
为了防止这种情况发生,Kubernetes 提供了一个特性来保留客户端的源 IP 地址[(点击此处查看可用特性)](/zh/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip)。设置 `service.spec.externalTrafficPolicy` 的值为 `Local`,请求就只会被代理到本地 endpoints 而不会被转发到其它节点。这样就保留了最初的源 IP 地址。如果没有本地 endpoints,发送到这个节点的数据包将会被丢弃。这样在应用到数据包的任何包处理规则下,你都能依赖这个正确的 source-ip 使数据包通过并到达 endpoint。
|
||||||
|
|
||||||
|
|
||||||
设置 `service.spec.externalTrafficPolicy` 字段如下:
|
设置 `service.spec.externalTrafficPolicy` 字段如下:
|
||||||
|
@ -244,7 +244,7 @@ client_address=104.132.1.79
|
||||||
## Type=LoadBalancer 类型 Services 的 Source IP
|
## Type=LoadBalancer 类型 Services 的 Source IP
|
||||||
|
|
||||||
|
|
||||||
从Kubernetes1.5开始,发送给类型为 [Type=LoadBalancer](zh/docs/user-guide/services/#type-nodeport) Services 的数据包默认进行源地址 NAT,这是因为所有处于 `Ready` 状态的可调度 Kubernetes 节点对于负载均衡的流量都是符合条件的。所以如果数据包到达一个没有 endpoint 的节点,系统将把这个包代理到*有* endpoint 的节点,并替换数据包的源 IP 为节点的 IP(如前面章节所述)。
|
从Kubernetes1.5开始,发送给类型为 [Type=LoadBalancer](/zh/docs/user-guide/services/#type-nodeport) Services 的数据包默认进行源地址 NAT,这是因为所有处于 `Ready` 状态的可调度 Kubernetes 节点对于负载均衡的流量都是符合条件的。所以如果数据包到达一个没有 endpoint 的节点,系统将把这个包代理到*有* endpoint 的节点,并替换数据包的源 IP 为节点的 IP(如前面章节所述)。
|
||||||
|
|
||||||
|
|
||||||
你可以通过在一个 loadbalancer 上暴露这个 source-ip-app 来进行测试。
|
你可以通过在一个 loadbalancer 上暴露这个 source-ip-app 来进行测试。
|
||||||
|
@ -390,6 +390,6 @@ $ kubectl delete deployment source-ip-app
|
||||||
|
|
||||||
{{% capture whatsnext %}}
|
{{% capture whatsnext %}}
|
||||||
|
|
||||||
* 学习更多关于 [通过 services 连接应用](zh/docs/concepts/services-networking/connect-applications-service/)
|
* 学习更多关于 [通过 services 连接应用](/zh/docs/concepts/services-networking/connect-applications-service/)
|
||||||
* 学习更多关于 [负载均衡](zh/docs/user-guide/load-balancer)
|
* 学习更多关于 [负载均衡](/zh/docs/user-guide/load-balancer)
|
||||||
{{% /capture %}}
|
{{% /capture %}}
|
||||||
|
|
|
@ -15,11 +15,11 @@ approvers:
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
This tutorial provides an introduction to managing applications with
|
This tutorial provides an introduction to managing applications with
|
||||||
[StatefulSets](zh/docs/concepts/workloads/controllers/statefulset/). It
|
[StatefulSets](/docs/concepts/workloads/controllers/statefulset/). It
|
||||||
demonstrates how to create, delete, scale, and update the Pods of StatefulSets.
|
demonstrates how to create, delete, scale, and update the Pods of StatefulSets.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
本教程介绍如何了使用 [StatefulSets](zh/docs/concepts/abstractions/controllers/statefulsets/) 来管理应用。演示了如何创建、删除、扩容/缩容和更新 StatefulSets 的 Pods。
|
本教程介绍如何了使用 [StatefulSets](/zh/docs/concepts/abstractions/controllers/statefulsets/) 来管理应用。演示了如何创建、删除、扩容/缩容和更新 StatefulSets 的 Pods。
|
||||||
|
|
||||||
{{% /capture %}}
|
{{% /capture %}}
|
||||||
|
|
||||||
|
@ -32,13 +32,13 @@ following Kubernetes concepts.
|
||||||
|
|
||||||
在开始本教程之前,你应该熟悉以下 Kubernetes 的概念:
|
在开始本教程之前,你应该熟悉以下 Kubernetes 的概念:
|
||||||
|
|
||||||
* [Pods](zh/docs/user-guide/pods/single-container/)
|
* [Pods](/zh/docs/user-guide/pods/single-container/)
|
||||||
* [Cluster DNS](zh/docs/concepts/services-networking/dns-pod-service/)
|
* [Cluster DNS](/zh/docs/concepts/services-networking/dns-pod-service/)
|
||||||
* [Headless Services](zh/docs/concepts/services-networking/service/#headless-services)
|
* [Headless Services](/zh/docs/concepts/services-networking/service/#headless-services)
|
||||||
* [PersistentVolumes](zh/docs/concepts/storage/persistent-volumes/)
|
* [PersistentVolumes](/zh/docs/concepts/storage/persistent-volumes/)
|
||||||
* [PersistentVolume Provisioning](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/staging/persistent-volume-provisioning/)
|
* [PersistentVolume Provisioning](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/staging/persistent-volume-provisioning/)
|
||||||
* [StatefulSets](zh/docs/concepts/workloads/controllers/statefulset/)
|
* [StatefulSets](/zh/docs/concepts/workloads/controllers/statefulset/)
|
||||||
* [kubectl CLI](zh/docs/user-guide/kubectl/)
|
* [kubectl CLI](/zh/docs/user-guide/kubectl/)
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
This tutorial assumes that your cluster is configured to dynamically provision
|
This tutorial assumes that your cluster is configured to dynamically provision
|
||||||
|
@ -87,7 +87,7 @@ StatefulSets 旨在与有状态的应用及分布式系统一起使用。然而
|
||||||
## 创建 StatefulSet
|
## 创建 StatefulSet
|
||||||
|
|
||||||
|
|
||||||
作为开始,使用如下示例创建一个 StatefulSet。它和 [StatefulSets](zh/docs/concepts/abstractions/controllers/statefulsets/) 概念中的示例相似。它创建了一个 [Headless Service](zh/docs/user-guide/services/#headless-services) `nginx` 用来发布 StatefulSet `web` 中的 Pod 的 IP 地址。
|
作为开始,使用如下示例创建一个 StatefulSet。它和 [StatefulSets](/zh/docs/concepts/abstractions/controllers/statefulsets/) 概念中的示例相似。它创建了一个 [Headless Service](/zh/docs/user-guide/services/#headless-services) `nginx` 用来发布 StatefulSet `web` 中的 Pod 的 IP 地址。
|
||||||
|
|
||||||
{{< codenew file="application/web/web.yaml" >}}
|
{{< codenew file="application/web/web.yaml" >}}
|
||||||
|
|
||||||
|
@ -95,14 +95,14 @@ StatefulSets 旨在与有状态的应用及分布式系统一起使用。然而
|
||||||
Download the example above, and save it to a file named `web.yaml`
|
Download the example above, and save it to a file named `web.yaml`
|
||||||
|
|
||||||
You will need to use two terminal windows. In the first terminal, use
|
You will need to use two terminal windows. In the first terminal, use
|
||||||
[`kubectl get`](zh/docs/reference/generated/kubectl/kubectl-commands/#get) to watch the creation
|
[`kubectl get`](/docs/reference/generated/kubectl/kubectl-commands/#get) to watch the creation
|
||||||
of the StatefulSet's Pods.
|
of the StatefulSet's Pods.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
下载上面的例子并保存为文件 `web.yaml`。
|
下载上面的例子并保存为文件 `web.yaml`。
|
||||||
|
|
||||||
|
|
||||||
你需要使用两个终端窗口。在第一个终端中,使用 [`kubectl get`](zh/docs/user-guide/kubectl/{{< param "version" >}}/#get) 来查看 StatefulSet 的 Pods 的创建情况。
|
你需要使用两个终端窗口。在第一个终端中,使用 [`kubectl get`](/zh/docs/user-guide/kubectl/{{< param "version" >}}/#get) 来查看 StatefulSet 的 Pods 的创建情况。
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
kubectl get pods -w -l app=nginx
|
kubectl get pods -w -l app=nginx
|
||||||
|
@ -110,11 +110,11 @@ kubectl get pods -w -l app=nginx
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
In the second terminal, use
|
In the second terminal, use
|
||||||
[`kubectl apply`](zh/docs/reference/generated/kubectl/kubectl-commands/#apply) to create the
|
[`kubectl apply`](/docs/reference/generated/kubectl/kubectl-commands/#apply) to create the
|
||||||
Headless Service and StatefulSet defined in `web.yaml`.
|
Headless Service and StatefulSet defined in `web.yaml`.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
在另一个终端中,使用 [`kubectl apply`](zh/docs/reference/generated/kubectl/kubectl-commands/#apply)来创建定义在 `web.yaml` 中的 Headless Service 和 StatefulSet。
|
在另一个终端中,使用 [`kubectl apply`](/zh/docs/reference/generated/kubectl/kubectl-commands/#apply)来创建定义在 `web.yaml` 中的 Headless Service 和 StatefulSet。
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
kubectl apply -f web.yaml
|
kubectl apply -f web.yaml
|
||||||
|
@ -170,9 +170,9 @@ web-1 1/1 Running 0 18s
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Notice that the `web-1` Pod is not launched until the `web-0` Pod is
|
Notice that the `web-1` Pod is not launched until the `web-0` Pod is
|
||||||
[Running and Ready](zh/docs/user-guide/pod-states).
|
[Running and Ready](/docs/user-guide/pod-states).
|
||||||
-->
|
-->
|
||||||
请注意在 `web-0` Pod 处于 [Running和Ready](zh/docs/user-guide/pod-states) 状态后 `web-1` Pod 才会被启动。
|
请注意在 `web-0` Pod 处于 [Running和Ready](/zh/docs/user-guide/pod-states) 状态后 `web-1` Pod 才会被启动。
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
## Pods in a StatefulSet
|
## Pods in a StatefulSet
|
||||||
|
@ -205,7 +205,7 @@ web-1 1/1 Running 0 1m
|
||||||
```
|
```
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
As mentioned in the [StatefulSets](zh/docs/concepts/workloads/controllers/statefulset/)
|
As mentioned in the [StatefulSets](/docs/concepts/workloads/controllers/statefulset/)
|
||||||
concept, the Pods in a StatefulSet have a sticky, unique identity. This identity
|
concept, the Pods in a StatefulSet have a sticky, unique identity. This identity
|
||||||
is based on a unique ordinal index that is assigned to each Pod by the
|
is based on a unique ordinal index that is assigned to each Pod by the
|
||||||
StatefulSet controller. The Pods' names take the form
|
StatefulSet controller. The Pods' names take the form
|
||||||
|
@ -215,15 +215,15 @@ replicas, it creates two Pods, `web-0` and `web-1`.
|
||||||
### Using Stable Network Identities
|
### Using Stable Network Identities
|
||||||
|
|
||||||
Each Pod has a stable hostname based on its ordinal index. Use
|
Each Pod has a stable hostname based on its ordinal index. Use
|
||||||
[`kubectl exec`](zh/docs/reference/generated/kubectl/kubectl-commands/#exec) to execute the
|
[`kubectl exec`](/docs/reference/generated/kubectl/kubectl-commands/#exec) to execute the
|
||||||
`hostname` command in each Pod.
|
`hostname` command in each Pod.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
如同 [StatefulSets](zh/docs/concepts/abstractions/controllers/statefulsets/) 概念中所提到的,StatefulSet 中的 Pod 拥有一个具有黏性的、独一无二的身份标志。这个标志基于 StatefulSet 控制器分配给每个 Pod 的唯一顺序索引。Pod 的名称的形式为`<statefulset name>-<ordinal index>`。`web`StatefulSet 拥有两个副本,所以它创建了两个 Pod:`web-0`和`web-1`。
|
如同 [StatefulSets](/zh/docs/concepts/abstractions/controllers/statefulsets/) 概念中所提到的,StatefulSet 中的 Pod 拥有一个具有黏性的、独一无二的身份标志。这个标志基于 StatefulSet 控制器分配给每个 Pod 的唯一顺序索引。Pod 的名称的形式为`<statefulset name>-<ordinal index>`。`web`StatefulSet 拥有两个副本,所以它创建了两个 Pod:`web-0`和`web-1`。
|
||||||
|
|
||||||
### 使用稳定的网络身份标识
|
### 使用稳定的网络身份标识
|
||||||
|
|
||||||
每个 Pod 都拥有一个基于其顺序索引的稳定的主机名。使用[`kubectl exec`](zh/docs/reference/generated/kubectl/kubectl-commands/#exec)在每个 Pod 中执行`hostname`。
|
每个 Pod 都拥有一个基于其顺序索引的稳定的主机名。使用[`kubectl exec`](/zh/docs/reference/generated/kubectl/kubectl-commands/#exec)在每个 Pod 中执行`hostname`。
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
for i in 0 1; do kubectl exec web-$i -- sh -c 'hostname'; done
|
for i in 0 1; do kubectl exec web-$i -- sh -c 'hostname'; done
|
||||||
|
@ -232,13 +232,13 @@ web-1
|
||||||
```
|
```
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Use [`kubectl run`](zh/docs/reference/generated/kubectl/kubectl-commands/#run) to execute
|
Use [`kubectl run`](/docs/reference/generated/kubectl/kubectl-commands/#run) to execute
|
||||||
a container that provides the `nslookup` command from the `dnsutils` package.
|
a container that provides the `nslookup` command from the `dnsutils` package.
|
||||||
Using `nslookup` on the Pods' hostnames, you can examine their in-cluster DNS
|
Using `nslookup` on the Pods' hostnames, you can examine their in-cluster DNS
|
||||||
addresses.
|
addresses.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
使用 [`kubectl run`](zh/docs/reference/generated/kubectl/kubectl-commands/#run) 运行一个提供 `nslookup` 命令的容器,该命令来自于 `dnsutils` 包。通过对 Pod 的主机名执行 `nslookup`,你可以检查他们在集群内部的 DNS 地址。
|
使用 [`kubectl run`](/zh/docs/reference/generated/kubectl/kubectl-commands/#run) 运行一个提供 `nslookup` 命令的容器,该命令来自于 `dnsutils` 包。通过对 Pod 的主机名执行 `nslookup`,你可以检查他们在集群内部的 DNS 地址。
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
kubectl run -i --tty --image busybox:1.28 dns-test --restart=Never --rm
|
kubectl run -i --tty --image busybox:1.28 dns-test --restart=Never --rm
|
||||||
|
@ -274,11 +274,11 @@ kubectl get pod -w -l app=nginx
|
||||||
```
|
```
|
||||||
<!--
|
<!--
|
||||||
In a second terminal, use
|
In a second terminal, use
|
||||||
[`kubectl delete`](zh/docs/reference/generated/kubectl/kubectl-commands/#delete) to delete all
|
[`kubectl delete`](/docs/reference/generated/kubectl/kubectl-commands/#delete) to delete all
|
||||||
the Pods in the StatefulSet.
|
the Pods in the StatefulSet.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
在另一个终端中使用 [`kubectl delete`](zh/docs/reference/generated/kubectl/kubectl-commands/#delete) 删除 StatefulSet 中所有的 Pod。
|
在另一个终端中使用 [`kubectl delete`](/zh/docs/reference/generated/kubectl/kubectl-commands/#delete) 删除 StatefulSet 中所有的 Pod。
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
kubectl delete pod -l app=nginx
|
kubectl delete pod -l app=nginx
|
||||||
|
@ -382,7 +382,7 @@ www-web-1 Bound pvc-15c79307-b507-11e6-932f-42010a800002 1Gi RWO
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
The StatefulSet controller created two PersistentVolumeClaims that are
|
The StatefulSet controller created two PersistentVolumeClaims that are
|
||||||
bound to two [PersistentVolumes](zh/docs/concepts/storage/persistent-volumes/). As the cluster used in this tutorial is configured to dynamically provision
|
bound to two [PersistentVolumes](/docs/concepts/storage/persistent-volumes/). As the cluster used in this tutorial is configured to dynamically provision
|
||||||
PersistentVolumes, the PersistentVolumes were created and bound automatically.
|
PersistentVolumes, the PersistentVolumes were created and bound automatically.
|
||||||
|
|
||||||
The NGINX webservers, by default, will serve an index file at
|
The NGINX webservers, by default, will serve an index file at
|
||||||
|
@ -394,7 +394,7 @@ Write the Pods' hostnames to their `index.html` files and verify that the NGINX
|
||||||
webservers serve the hostnames.
|
webservers serve the hostnames.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
StatefulSet 控制器创建了两个 PersistentVolumeClaims,绑定到两个 [PersistentVolumes](zh/docs/concepts/storage/volumes/)。由于本教程使用的集群配置为动态提供 PersistentVolume,所有的 PersistentVolume 都是自动创建和绑定的。
|
StatefulSet 控制器创建了两个 PersistentVolumeClaims,绑定到两个 [PersistentVolumes](/zh/docs/concepts/storage/volumes/)。由于本教程使用的集群配置为动态提供 PersistentVolume,所有的 PersistentVolume 都是自动创建和绑定的。
|
||||||
|
|
||||||
|
|
||||||
NGINX web 服务器默认会加载位于 `/usr/share/nginx/html/index.html` 的 index 文件。StatefulSets `spec` 中的 `volumeMounts` 字段保证了 `/usr/share/nginx/html` 文件夹由一个 PersistentVolume 支持。
|
NGINX web 服务器默认会加载位于 `/usr/share/nginx/html/index.html` 的 index 文件。StatefulSets `spec` 中的 `volumeMounts` 字段保证了 `/usr/share/nginx/html` 文件夹由一个 PersistentVolume 支持。
|
||||||
|
@ -491,8 +491,8 @@ mounted to the appropriate mount points.
|
||||||
## Scaling a StatefulSet
|
## Scaling a StatefulSet
|
||||||
Scaling a StatefulSet refers to increasing or decreasing the number of replicas.
|
Scaling a StatefulSet refers to increasing or decreasing the number of replicas.
|
||||||
This is accomplished by updating the `replicas` field. You can use either
|
This is accomplished by updating the `replicas` field. You can use either
|
||||||
[`kubectl scale`](zh/docs/reference/generated/kubectl/kubectl-commands/#scale) or
|
[`kubectl scale`](/docs/reference/generated/kubectl/kubectl-commands/#scale) or
|
||||||
[`kubectl patch`](zh/docs/reference/generated/kubectl/kubectl-commands/#patch) to scale a StatefulSet.
|
[`kubectl patch`](/docs/reference/generated/kubectl/kubectl-commands/#patch) to scale a StatefulSet.
|
||||||
|
|
||||||
### Scaling Up
|
### Scaling Up
|
||||||
|
|
||||||
|
@ -504,7 +504,7 @@ In one terminal window, watch the Pods in the StatefulSet.
|
||||||
|
|
||||||
## 扩容/缩容 StatefulSet
|
## 扩容/缩容 StatefulSet
|
||||||
|
|
||||||
扩容/缩容 StatefulSet 指增加或减少它的副本数。这通过更新 `replicas` 字段完成。你可以使用[`kubectl scale`](zh/docs/user-guide/kubectl/{{< param "version" >}}/#scale) 或者[`kubectl patch`](zh/docs/user-guide/kubectl/{{< param "version" >}}/#patch)来扩容/缩容一个 StatefulSet。
|
扩容/缩容 StatefulSet 指增加或减少它的副本数。这通过更新 `replicas` 字段完成。你可以使用[`kubectl scale`](/zh/docs/user-guide/kubectl/{{< param "version" >}}/#scale) 或者[`kubectl patch`](/zh/docs/user-guide/kubectl/{{< param "version" >}}/#patch)来扩容/缩容一个 StatefulSet。
|
||||||
|
|
||||||
|
|
||||||
### 扩容
|
### 扩容
|
||||||
|
@ -1071,13 +1071,13 @@ kubectl get pods -w -l app=nginx
|
||||||
```
|
```
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Use [`kubectl delete`](zh/docs/reference/generated/kubectl/kubectl-commands/#delete) to delete the
|
Use [`kubectl delete`](/docs/reference/generated/kubectl/kubectl-commands/#delete) to delete the
|
||||||
StatefulSet. Make sure to supply the `--cascade=false` parameter to the
|
StatefulSet. Make sure to supply the `--cascade=false` parameter to the
|
||||||
command. This parameter tells Kubernetes to only delete the StatefulSet, and to
|
command. This parameter tells Kubernetes to only delete the StatefulSet, and to
|
||||||
not delete any of its Pods.
|
not delete any of its Pods.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
使用 [`kubectl delete`](zh/docs/reference/generated/kubectl/kubectl-commands/#delete) 删除 StatefulSet。请确保提供了 `--cascade=false` 参数给命令。这个参数告诉 Kubernetes 只删除 StatefulSet 而不要删除它的任何 Pod。
|
使用 [`kubectl delete`](/zh/docs/reference/generated/kubectl/kubectl-commands/#delete) 删除 StatefulSet。请确保提供了 `--cascade=false` 参数给命令。这个参数告诉 Kubernetes 只删除 StatefulSet 而不要删除它的任何 Pod。
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
kubectl delete statefulset web --cascade=false
|
kubectl delete statefulset web --cascade=false
|
||||||
|
|
|
@ -28,18 +28,18 @@ title: "Example: Deploying Cassandra with Stateful Sets"
|
||||||
|
|
||||||
本示例也使用了Kubernetes的一些核心组件:
|
本示例也使用了Kubernetes的一些核心组件:
|
||||||
|
|
||||||
- [_Pods_](zh/docs/user-guide/pods)
|
- [_Pods_](/zh/docs/user-guide/pods)
|
||||||
- [ _Services_](zh/docs/user-guide/services)
|
- [ _Services_](/zh/docs/user-guide/services)
|
||||||
- [_Replication Controllers_](zh/docs/user-guide/replication-controller)
|
- [_Replication Controllers_](/zh/docs/user-guide/replication-controller)
|
||||||
- [_Stateful Sets_](zh/docs/concepts/workloads/controllers/statefulset/)
|
- [_Stateful Sets_](/zh/docs/concepts/workloads/controllers/statefulset/)
|
||||||
- [_Daemon Sets_](zh/docs/admin/daemons)
|
- [_Daemon Sets_](/zh/docs/admin/daemons)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 准备工作
|
## 准备工作
|
||||||
|
|
||||||
|
|
||||||
本示例假设你已经安装运行了一个 Kubernetes集群(版本 >=1.2),并且还在某个路径下安装了 [`kubectl`](zh/docs/tasks/tools/install-kubectl/) 命令行工具。请查看 [getting started guides](zh/docs/getting-started-guides/) 获取关于你的平台的安装说明。
|
本示例假设你已经安装运行了一个 Kubernetes集群(版本 >=1.2),并且还在某个路径下安装了 [`kubectl`](/zh/docs/tasks/tools/install-kubectl/) 命令行工具。请查看 [getting started guides](/zh/docs/getting-started-guides/) 获取关于你的平台的安装说明。
|
||||||
|
|
||||||
|
|
||||||
本示例还需要一些代码和配置文件。为了避免手动输入,你可以 `git clone` Kubernetes 源到你本地。
|
本示例还需要一些代码和配置文件。为了避免手动输入,你可以 `git clone` Kubernetes 源到你本地。
|
||||||
|
@ -133,7 +133,7 @@ kubectl delete daemonset cassandra
|
||||||
## 步骤 1:创建 Cassandra Headless Service
|
## 步骤 1:创建 Cassandra Headless Service
|
||||||
|
|
||||||
|
|
||||||
Kubernetes _[Service](zh/docs/user-guide/services)_ 描述一组执行同样任务的 [_Pod_](zh/docs/user-guide/pods)。在 Kubernetes 中,一个应用的原子调度单位是一个 Pod:一个或多个_必须_调度到相同主机上的容器。
|
Kubernetes _[Service](/zh/docs/user-guide/services)_ 描述一组执行同样任务的 [_Pod_](/zh/docs/user-guide/pods)。在 Kubernetes 中,一个应用的原子调度单位是一个 Pod:一个或多个_必须_调度到相同主机上的容器。
|
||||||
|
|
||||||
这个 Service 用于在 Kubernetes 集群内部进行 Cassandra 客户端和 Cassandra Pod 之间的 DNS 查找。
|
这个 Service 用于在 Kubernetes 集群内部进行 Cassandra 客户端和 Cassandra Pod 之间的 DNS 查找。
|
||||||
|
|
||||||
|
@ -354,7 +354,7 @@ $ kubectl exec cassandra-0 -- cqlsh -e 'desc keyspaces'
|
||||||
system_traces system_schema system_auth system system_distributed
|
system_traces system_schema system_auth system system_distributed
|
||||||
```
|
```
|
||||||
|
|
||||||
你需要使用 `kubectl edit` 来增加或减小 Cassandra StatefulSet 的大小。你可以在[文档](zh/docs/user-guide/kubectl/kubectl_edit) 中找到更多关于 `edit` 命令的信息。
|
你需要使用 `kubectl edit` 来增加或减小 Cassandra StatefulSet 的大小。你可以在[文档](/zh/docs/user-guide/kubectl/kubectl_edit) 中找到更多关于 `edit` 命令的信息。
|
||||||
|
|
||||||
使用以下命令编辑 StatefulSet。
|
使用以下命令编辑 StatefulSet。
|
||||||
|
|
||||||
|
@ -429,7 +429,7 @@ $ grace=$(kubectl get po cassandra-0 -o=jsonpath='{.spec.terminationGracePeriodS
|
||||||
## 步骤 5:使用 Replication Controller 创建 Cassandra 节点 pod
|
## 步骤 5:使用 Replication Controller 创建 Cassandra 节点 pod
|
||||||
|
|
||||||
|
|
||||||
Kubernetes _[Replication Controller](zh/docs/user-guide/replication-controller)_ 负责复制一个完全相同的 pod 集合。像 Service 一样,它具有一个 selector query,用来识别它的集合成员。和 Service 不一样的是,它还具有一个期望的副本数,并且会通过创建或删除 Pod 来保证 Pod 的数量满足它期望的状态。
|
Kubernetes _[Replication Controller](/zh/docs/user-guide/replication-controller)_ 负责复制一个完全相同的 pod 集合。像 Service 一样,它具有一个 selector query,用来识别它的集合成员。和 Service 不一样的是,它还具有一个期望的副本数,并且会通过创建或删除 Pod 来保证 Pod 的数量满足它期望的状态。
|
||||||
|
|
||||||
和我们刚才定义的 Service 一起,Replication Controller 能够让我们轻松的构建一个复制的、可扩展的 Cassandra 集群。
|
和我们刚才定义的 Service 一起,Replication Controller 能够让我们轻松的构建一个复制的、可扩展的 Cassandra 集群。
|
||||||
|
|
||||||
|
@ -639,7 +639,7 @@ $ kubectl delete rc cassandra
|
||||||
## 步骤 8:使用 DaemonSet 替换 Replication Controller
|
## 步骤 8:使用 DaemonSet 替换 Replication Controller
|
||||||
|
|
||||||
|
|
||||||
在 Kubernetes中,[_DaemonSet_](zh/docs/admin/daemons) 能够将 pod 一对一的分布到 Kubernetes 节点上。和 _ReplicationController_ 相同的是它也有一个用于识别它的集合成员的 selector query。但和 _ReplicationController_ 不同的是,它拥有一个节点 selector,用于限制基于模板的 pod 可以调度的节点。并且 pod 的复制不是基于一个设置的数量,而是为每一个节点分配一个 pod。
|
在 Kubernetes中,[_DaemonSet_](/zh/docs/admin/daemons) 能够将 pod 一对一的分布到 Kubernetes 节点上。和 _ReplicationController_ 相同的是它也有一个用于识别它的集合成员的 selector query。但和 _ReplicationController_ 不同的是,它拥有一个节点 selector,用于限制基于模板的 pod 可以调度的节点。并且 pod 的复制不是基于一个设置的数量,而是为每一个节点分配一个 pod。
|
||||||
|
|
||||||
示范用例:当部署到云平台时,预期情况是实例是短暂的并且随时可能终止。Cassandra 被搭建成为在各个节点间复制数据以便于实现数据冗余。这样的话,即使一个实例终止了,存储在它上面的数据却没有,并且集群会通过重新复制数据到其它运行节点来作为响应。
|
示范用例:当部署到云平台时,预期情况是实例是短暂的并且随时可能终止。Cassandra 被搭建成为在各个节点间复制数据以便于实现数据冗余。这样的话,即使一个实例终止了,存储在它上面的数据却没有,并且集群会通过重新复制数据到其它运行节点来作为响应。
|
||||||
|
|
||||||
|
@ -802,6 +802,6 @@ $ kubectl delete daemonset cassandra
|
||||||
|
|
||||||
查看本示例的 [image](https://github.com/kubernetes/examples/tree/master/cassandra/image) 目录,了解如何构建容器的 docker 镜像及其内容。
|
查看本示例的 [image](https://github.com/kubernetes/examples/tree/master/cassandra/image) 目录,了解如何构建容器的 docker 镜像及其内容。
|
||||||
|
|
||||||
你可能还注意到我们设置了一些 Cassandra 参数(`MAX_HEAP_SIZE`和`HEAP_NEWSIZE`),并且增加了关于 [namespace](zh/docs/user-guide/namespaces) 的信息。我们还告诉 Kubernetes 容器暴露了 `CQL` 和 `Thrift` API 端口。最后,我们告诉集群管理器我们需要 0.1 cpu(0.1 核)。
|
你可能还注意到我们设置了一些 Cassandra 参数(`MAX_HEAP_SIZE`和`HEAP_NEWSIZE`),并且增加了关于 [namespace](/zh/docs/user-guide/namespaces) 的信息。我们还告诉 Kubernetes 容器暴露了 `CQL` 和 `Thrift` API 端口。最后,我们告诉集群管理器我们需要 0.1 cpu(0.1 核)。
|
||||||
|
|
||||||
[!Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/cassandra/README.md?pixel)]()
|
[!Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/cassandra/README.md?pixel)]()
|
||||||
|
|
|
@ -20,11 +20,11 @@ This tutorial shows you how to deploy a WordPress site and a MySQL database usin
|
||||||
|
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
A [PersistentVolume](zh/docs/concepts/storage/persistent-volumes/)(PV)is a piece of storage in the cluster that has been manually provisioned by an administrator, or dynamically provisioned by Kubernetes using a [StorageClass](zh/docs/concepts/storage/storage-classes). A [PersistentVolumeClaim](zh/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims)(PVC)is a request for storage by a user that can be fulfilled by a PV. PersistentVolumes and PersistentVolumeClaims are independent from Pod lifecycles and preserve data through restarting, rescheduling, and even deleting Pods.
|
A [PersistentVolume](/docs/concepts/storage/persistent-volumes/)(PV)is a piece of storage in the cluster that has been manually provisioned by an administrator, or dynamically provisioned by Kubernetes using a [StorageClass](/docs/concepts/storage/storage-classes). A [PersistentVolumeClaim](/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims)(PVC)is a request for storage by a user that can be fulfilled by a PV. PersistentVolumes and PersistentVolumeClaims are independent from Pod lifecycles and preserve data through restarting, rescheduling, and even deleting Pods.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
[PersistentVolume](zh/docs/concepts/storage/persistent-volumes/)(PV)是一块集群里由管理员手动提供,或 kubernetes 通过 [StorageClass](zh/docs/concepts/storage/storage-classes) 动态创建的存储。
|
[PersistentVolume](/zh/docs/concepts/storage/persistent-volumes/)(PV)是一块集群里由管理员手动提供,或 kubernetes 通过 [StorageClass](/zh/docs/concepts/storage/storage-classes) 动态创建的存储。
|
||||||
[PersistentVolumeClaim](zh/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims)(PVC)是一个满足对 PV 存储需要的请求。PersistentVolumes 和 PersistentVolumeClaims 是独立于 Pod 生命周期而在 Pod 重启,重新调度甚至删除过程中保存数据。
|
[PersistentVolumeClaim](/zh/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims)(PVC)是一个满足对 PV 存储需要的请求。PersistentVolumes 和 PersistentVolumeClaims 是独立于 Pod 生命周期而在 Pod 重启,重新调度甚至删除过程中保存数据。
|
||||||
|
|
||||||
{{< warning >}}
|
{{< warning >}}
|
||||||
<!--
|
<!--
|
||||||
|
@ -146,12 +146,12 @@ If you are bringing up a cluster that needs to use the `hostPath` provisioner, t
|
||||||
### 创建 Secret 生成器
|
### 创建 Secret 生成器
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
A [Secret](zh/docs/concepts/configuration/secret/) is an object that stores a piece of sensitive data like a password or key. Since 1.14, `kubectl` supports the management of Kubernetes objects using a kustomization file. You can create a Secret by generators in `kustomization.yaml`.
|
A [Secret](/docs/concepts/configuration/secret/) is an object that stores a piece of sensitive data like a password or key. Since 1.14, `kubectl` supports the management of Kubernetes objects using a kustomization file. You can create a Secret by generators in `kustomization.yaml`.
|
||||||
|
|
||||||
Add a Secret generator in `kustomization.yaml` from the following command. You will need to replace `YOUR_PASSWORD` with the password you want to use.
|
Add a Secret generator in `kustomization.yaml` from the following command. You will need to replace `YOUR_PASSWORD` with the password you want to use.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
A [Secret](zh/docs/concepts/configuration/secret/) 是存储诸如密码或密钥之类的敏感数据的对象。从 1.14 开始,`kubectl`支持使用 kustomization 文件管理 Kubernetes 对象。您可以通过`kustomization.yaml`中的生成器创建一个 Secret。
|
A [Secret](/zh/docs/concepts/configuration/secret/) 是存储诸如密码或密钥之类的敏感数据的对象。从 1.14 开始,`kubectl`支持使用 kustomization 文件管理 Kubernetes 对象。您可以通过`kustomization.yaml`中的生成器创建一个 Secret。
|
||||||
|
|
||||||
通过以下命令在`kustomization.yaml`中添加一个 Secret 生成器。您需要用您要使用的密码替换`YOUR_PASSWORD`。
|
通过以下命令在`kustomization.yaml`中添加一个 Secret 生成器。您需要用您要使用的密码替换`YOUR_PASSWORD`。
|
||||||
|
|
||||||
|
@ -453,24 +453,16 @@ Do not leave your WordPress installation on this page. If another user finds it,
|
||||||
|
|
||||||
{{% capture whatsnext %}}
|
{{% capture whatsnext %}}
|
||||||
|
|
||||||
* Learn more about [Introspection and Debugging](zh/docs/tasks/debug-application-cluster/debug-application-introspection/)
|
<!--
|
||||||
* Learn more about [Jobs](zh/docs/concepts/workloads/controllers/jobs-run-to-completion/)
|
* Learn more about [Introspection and Debugging](/docs/tasks/debug-application-cluster/debug-application-introspection/)
|
||||||
* Learn more about [Port Forwarding](zh/docs/tasks/access-application-cluster/port-forward-access-application-cluster/)
|
* Learn more about [Jobs](/docs/concepts/workloads/controllers/jobs-run-to-completion/)
|
||||||
* Learn how to [Get a Shell to a Container](zh/docs/tasks/debug-application-cluster/get-shell-running-container/)
|
* Learn more about [Port Forwarding](/docs/tasks/access-application-cluster/port-forward-access-application-cluster/)
|
||||||
|
* Learn how to [Get a Shell to a Container](/docs/tasks/debug-application-cluster/get-shell-running-container/)
|
||||||
-->
|
-->
|
||||||
1. 运行以下命令以删除您的 Secret,Deployments,Services 和 PersistentVolumeClaims:
|
|
||||||
|
|
||||||
```shell
|
* 了解更多关于 [Introspection and Debugging](/zh/docs/tasks/debug-application-cluster/debug-application-introspection/)
|
||||||
kubectl delete -k ./
|
* 了解更多关于 [Jobs](/zh/docs/concepts/workloads/controllers/jobs-run-to-completion/)
|
||||||
```
|
* 了解更多关于 [Port Forwarding](/zh/docs/tasks/access-application-cluster/port-forward-access-application-cluster/)
|
||||||
|
* 了解如何 [Get a Shell to a Container](/zh/docs/tasks/debug-application-cluster/get-shell-running-container/)
|
||||||
{{% /capture %}}
|
|
||||||
|
|
||||||
{{% capture whatsnext %}}
|
|
||||||
|
|
||||||
* 了解更多关于 [Introspection and Debugging](zh/docs/tasks/debug-application-cluster/debug-application-introspection/)
|
|
||||||
* 了解更多关于 [Jobs](zh/docs/concepts/workloads/controllers/jobs-run-to-completion/)
|
|
||||||
* 了解更多关于 [Port Forwarding](zh/docs/tasks/access-application-cluster/port-forward-access-application-cluster/)
|
|
||||||
* 了解如何 [Get a Shell to a Container](zh/docs/tasks/debug-application-cluster/get-shell-running-container/)
|
|
||||||
|
|
||||||
{{% /capture %}}
|
{{% /capture %}}
|
||||||
|
|
|
@ -14,23 +14,23 @@ content_template: templates/tutorial
|
||||||
|
|
||||||
{{% capture overview %}}
|
{{% capture overview %}}
|
||||||
|
|
||||||
本教程展示了在 Kubernetes 上使用 [PodDisruptionBudgets](zh/docs/admin/disruptions/#specifying-a-poddisruptionbudget) 和 [PodAntiAffinity](zh/docs/user-guide/node-selection/#inter-pod-affinity-and-anti-affinity-beta-feature) 特性运行 [Apache Zookeeper](https://zookeeper.apache.org)。
|
本教程展示了在 Kubernetes 上使用 [PodDisruptionBudgets](/zh/docs/admin/disruptions/#specifying-a-poddisruptionbudget) 和 [PodAntiAffinity](/zh/docs/user-guide/node-selection/#inter-pod-affinity-and-anti-affinity-beta-feature) 特性运行 [Apache Zookeeper](https://zookeeper.apache.org)。
|
||||||
{{% /capture %}}
|
{{% /capture %}}
|
||||||
|
|
||||||
{{% capture prerequisites %}}
|
{{% capture prerequisites %}}
|
||||||
|
|
||||||
在开始本教程前,你应该熟悉以下 Kubernetes 概念。
|
在开始本教程前,你应该熟悉以下 Kubernetes 概念。
|
||||||
|
|
||||||
* [Pods](zh/docs/user-guide/pods/single-container/)
|
* [Pods](/zh/docs/user-guide/pods/single-container/)
|
||||||
* [Cluster DNS](zh/docs/concepts/services-networking/dns-pod-service/)
|
* [Cluster DNS](/zh/docs/concepts/services-networking/dns-pod-service/)
|
||||||
* [Headless Services](zh/docs/concepts/services-networking/service/#headless-services)
|
* [Headless Services](/zh/docs/concepts/services-networking/service/#headless-services)
|
||||||
* [PersistentVolumes](zh/docs/concepts/storage/volumes/)
|
* [PersistentVolumes](/zh/docs/concepts/storage/volumes/)
|
||||||
* [PersistentVolume Provisioning](http://releases.k8s.io/{{< param "githubbranch" >}}/examples/persistent-volume-provisioning/)
|
* [PersistentVolume Provisioning](http://releases.k8s.io/{{< param "githubbranch" >}}/examples/persistent-volume-provisioning/)
|
||||||
* [ConfigMaps](zh/docs/tasks/configure-pod-container/configure-pod-configmap/)
|
* [ConfigMaps](/zh/docs/tasks/configure-pod-container/configure-pod-configmap/)
|
||||||
* [StatefulSets](zh/docs/concepts/abstractions/controllers/statefulsets/)
|
* [StatefulSets](/zh/docs/concepts/abstractions/controllers/statefulsets/)
|
||||||
* [PodDisruptionBudgets](zh/docs/admin/disruptions/#specifying-a-poddisruptionbudget)
|
* [PodDisruptionBudgets](/zh/docs/admin/disruptions/#specifying-a-poddisruptionbudget)
|
||||||
* [PodAntiAffinity](zh/docs/user-guide/node-selection/#inter-pod-affinity-and-anti-affinity-beta-feature)
|
* [PodAntiAffinity](/zh/docs/user-guide/node-selection/#inter-pod-affinity-and-anti-affinity-beta-feature)
|
||||||
* [kubectl CLI](zh/docs/user-guide/kubectl)
|
* [kubectl CLI](/zh/docs/user-guide/kubectl)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -69,14 +69,14 @@ ZooKeeper 在内存中保存它们的整个状态机,但是每个改变都被
|
||||||
|
|
||||||
|
|
||||||
下面的清单包含一个
|
下面的清单包含一个
|
||||||
[Headless Service](zh/docs/concepts/services-networking/service/#headless-services),
|
[Headless Service](/zh/docs/concepts/services-networking/service/#headless-services),
|
||||||
一个 [Service](zh/docs/concepts/services-networking/service/),
|
一个 [Service](/zh/docs/concepts/services-networking/service/),
|
||||||
一个 [PodDisruptionBudget](zh/docs/concepts/workloads/pods/disruptions//#specifying-a-poddisruptionbudget),
|
一个 [PodDisruptionBudget](/zh/docs/concepts/workloads/pods/disruptions//#specifying-a-poddisruptionbudget),
|
||||||
和一个 [StatefulSet](zh/docs/concepts/workloads/controllers/statefulset/)。
|
和一个 [StatefulSet](/zh/docs/concepts/workloads/controllers/statefulset/)。
|
||||||
|
|
||||||
{{< codenew file="application/zookeeper/zookeeper.yaml" >}}
|
{{< codenew file="application/zookeeper/zookeeper.yaml" >}}
|
||||||
|
|
||||||
打开一个命令行终端,使用 [`kubectl apply`](zh/docs/reference/generated/kubectl/kubectl-commands/#apply)
|
打开一个命令行终端,使用 [`kubectl apply`](/zh/docs/reference/generated/kubectl/kubectl-commands/#apply)
|
||||||
创建这个清单。
|
创建这个清单。
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
|
@ -92,7 +92,7 @@ poddisruptionbudget.policy/zk-pdb created
|
||||||
statefulset.apps/zk created
|
statefulset.apps/zk created
|
||||||
```
|
```
|
||||||
|
|
||||||
使用 [`kubectl get`](zh/docs/user-guide/kubectl/{{< param "version" >}}/#get) 查看 StatefulSet 控制器创建的 Pods。
|
使用 [`kubectl get`](/zh/docs/user-guide/kubectl/{{< param "version" >}}/#get) 查看 StatefulSet 控制器创建的 Pods。
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
kubectl get pods -w -l app=zk
|
kubectl get pods -w -l app=zk
|
||||||
|
@ -130,7 +130,7 @@ StatefulSet 控制器创建了3个 Pods,每个 Pod 包含一个 [ZooKeeper 3.4
|
||||||
由于在匿名网络中没有用于选举 leader 的终止算法,Zab 要求显式的进行成员关系配置,以执行 leader 选举。Ensemble 中的每个服务都需要具有一个独一无二的标识符,所有的服务均需要知道标识符的全集,并且每个标志都需要和一个网络地址相关联。
|
由于在匿名网络中没有用于选举 leader 的终止算法,Zab 要求显式的进行成员关系配置,以执行 leader 选举。Ensemble 中的每个服务都需要具有一个独一无二的标识符,所有的服务均需要知道标识符的全集,并且每个标志都需要和一个网络地址相关联。
|
||||||
|
|
||||||
|
|
||||||
使用 [`kubectl exec`](zh/docs/user-guide/kubectl/{{< param "version" >}}/#exec) 获取 `zk` StatefulSet 中 Pods 的主机名。
|
使用 [`kubectl exec`](/zh/docs/user-guide/kubectl/{{< param "version" >}}/#exec) 获取 `zk` StatefulSet 中 Pods 的主机名。
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
for i in 0 1 2; do kubectl exec zk-$i -- hostname; done
|
for i in 0 1 2; do kubectl exec zk-$i -- hostname; done
|
||||||
|
@ -184,7 +184,7 @@ zk-2.zk-headless.default.svc.cluster.local
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
[Kubernetes DNS](zh/docs/concepts/services-networking/dns-pod-service/) 中的 A 记录将 FQDNs 解析成为 Pods 的 IP 地址。如果 Pods 被调度,这个 A 记录将会使用 Pods 的新 IP 地址更新,但 A 记录的名称不会改变。
|
[Kubernetes DNS](/zh/docs/concepts/services-networking/dns-pod-service/) 中的 A 记录将 FQDNs 解析成为 Pods 的 IP 地址。如果 Pods 被调度,这个 A 记录将会使用 Pods 的新 IP 地址更新,但 A 记录的名称不会改变。
|
||||||
|
|
||||||
|
|
||||||
ZooKeeper 在一个名为 `zoo.cfg` 的文件中保存它的应用配置。使用 `kubectl exec` 在 `zk-0` Pod 中查看 `zoo.cfg` 文件的内容。
|
ZooKeeper 在一个名为 `zoo.cfg` 的文件中保存它的应用配置。使用 `kubectl exec` 在 `zk-0` Pod 中查看 `zoo.cfg` 文件的内容。
|
||||||
|
@ -320,7 +320,7 @@ numChildren = 0
|
||||||
如同在 [ZooKeeper 基础](#zookeeper-basics) 一节所提到的,ZooKeeper 提交所有的条目到一个持久 WAL,并周期性的将内存快照写入存储介质。对于使用一致性协议实现一个复制状态机的应用来说,使用 WALs 提供持久化是一种常用的技术,对于普通的存储应用也是如此。
|
如同在 [ZooKeeper 基础](#zookeeper-basics) 一节所提到的,ZooKeeper 提交所有的条目到一个持久 WAL,并周期性的将内存快照写入存储介质。对于使用一致性协议实现一个复制状态机的应用来说,使用 WALs 提供持久化是一种常用的技术,对于普通的存储应用也是如此。
|
||||||
|
|
||||||
|
|
||||||
使用 [`kubectl delete`](zh/docs/user-guide/kubectl/{{< param "version" >}}/#delete) 删除 `zk` StatefulSet。
|
使用 [`kubectl delete`](/zh/docs/user-guide/kubectl/{{< param "version" >}}/#delete) 删除 `zk` StatefulSet。
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
kubectl delete statefulset zk
|
kubectl delete statefulset zk
|
||||||
|
@ -641,7 +641,7 @@ log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-
|
||||||
这是在容器里安全记录日志的最简单的方法。由于应用的日志被写入标准输出,Kubernetes 将会为你处理日志轮转。Kubernetes 还实现了一个智能保存策略,保证写入标准输出和标准错误流的应用日志不会耗尽本地存储媒介。
|
这是在容器里安全记录日志的最简单的方法。由于应用的日志被写入标准输出,Kubernetes 将会为你处理日志轮转。Kubernetes 还实现了一个智能保存策略,保证写入标准输出和标准错误流的应用日志不会耗尽本地存储媒介。
|
||||||
|
|
||||||
|
|
||||||
使用 [`kubectl logs`](zh/docs/user-guide/kubectl/{{< param "version" >}}/#logs) 从一个 Pod 中取回最后几行日志。
|
使用 [`kubectl logs`](/zh/docs/user-guide/kubectl/{{< param "version" >}}/#logs) 从一个 Pod 中取回最后几行日志。
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
kubectl logs zk-0 --tail 20
|
kubectl logs zk-0 --tail 20
|
||||||
|
@ -679,7 +679,7 @@ kubectl logs zk-0 --tail 20
|
||||||
### 配置非特权用户
|
### 配置非特权用户
|
||||||
|
|
||||||
|
|
||||||
在容器中允许应用以特权用户运行这条最佳实践是值得商讨的。如果你的组织要求应用以非特权用户运行,你可以使用 [SecurityContext](zh/docs/tasks/configure-pod-container/security-context/) 控制运行容器入口点的用户。
|
在容器中允许应用以特权用户运行这条最佳实践是值得商讨的。如果你的组织要求应用以非特权用户运行,你可以使用 [SecurityContext](/zh/docs/tasks/configure-pod-container/security-context/) 控制运行容器入口点的用户。
|
||||||
|
|
||||||
|
|
||||||
`zk` StatefulSet 的 Pod 的 `template` 包含了一个 SecurityContext。
|
`zk` StatefulSet 的 Pod 的 `template` 包含了一个 SecurityContext。
|
||||||
|
@ -736,7 +736,7 @@ drwxr-sr-x 3 zookeeper zookeeper 4096 Dec 5 20:45 /var/lib/zookeeper/data
|
||||||
### 处理进程故障
|
### 处理进程故障
|
||||||
|
|
||||||
|
|
||||||
[Restart Policies](zh/docs/user-guide/pod-states/#restartpolicy) 控制 Kubernetes 如何处理一个 Pod 中容器入口点的进程故障。对于 StatefulSet 中的 Pods 来说,Always 是唯一合适的 RestartPolicy,这也是默认值。你应该**绝不**覆盖 stateful 应用的默认策略。
|
[Restart Policies](/zh/docs/user-guide/pod-states/#restartpolicy) 控制 Kubernetes 如何处理一个 Pod 中容器入口点的进程故障。对于 StatefulSet 中的 Pods 来说,Always 是唯一合适的 RestartPolicy,这也是默认值。你应该**绝不**覆盖 stateful 应用的默认策略。
|
||||||
|
|
||||||
|
|
||||||
检查 `zk-0` Pod 中运行的 ZooKeeper 服务的进程树。
|
检查 `zk-0` Pod 中运行的 ZooKeeper 服务的进程树。
|
||||||
|
@ -947,7 +947,7 @@ kubectl get nodes
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
使用 [`kubectl cordon`](zh/docs/user-guide/kubectl/{{< param "version" >}}/#cordon) cordon 你的集群中除4个节点以外的所有节点。
|
使用 [`kubectl cordon`](/zh/docs/user-guide/kubectl/{{< param "version" >}}/#cordon) cordon 你的集群中除4个节点以外的所有节点。
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
kubectl cordon < node name >
|
kubectl cordon < node name >
|
||||||
|
@ -987,7 +987,7 @@ kubernetes-minion-group-i4c4
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
使用 [`kubectl drain`](zh/docs/user-guide/kubectl/{{< param "version" >}}/#drain) 来 cordon 和 drain `zk-0` Pod 调度的节点。
|
使用 [`kubectl drain`](/zh/docs/user-guide/kubectl/{{< param "version" >}}/#drain) 来 cordon 和 drain `zk-0` Pod 调度的节点。
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
kubectl drain $(kubectl get pod zk-0 --template {{.spec.nodeName}}) --ignore-daemonsets --force --delete-local-data
|
kubectl drain $(kubectl get pod zk-0 --template {{.spec.nodeName}}) --ignore-daemonsets --force --delete-local-data
|
||||||
|
@ -1102,7 +1102,7 @@ numChildren = 0
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
使用 [`kubectl uncordon`](zh/docs/user-guide/kubectl/{{< param "version" >}}/#uncordon) 来取消对第一个节点的隔离。
|
使用 [`kubectl uncordon`](/zh/docs/user-guide/kubectl/{{< param "version" >}}/#uncordon) 来取消对第一个节点的隔离。
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
kubectl uncordon kubernetes-minion-group-pb41
|
kubectl uncordon kubernetes-minion-group-pb41
|
||||||
|
|
|
@ -26,21 +26,21 @@ external IP address.
|
||||||
{{% capture prerequisites %}}
|
{{% capture prerequisites %}}
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
* Install [kubectl](zh/docs/tasks/tools/install-kubectl/).
|
* Install [kubectl](/docs/tasks/tools/install-kubectl/).
|
||||||
|
|
||||||
* Use a cloud provider like Google Kubernetes Engine or Amazon Web Services to
|
* Use a cloud provider like Google Kubernetes Engine or Amazon Web Services to
|
||||||
create a Kubernetes cluster. This tutorial creates an
|
create a Kubernetes cluster. This tutorial creates an
|
||||||
[external load balancer](zh/docs/tasks/access-application-cluster/create-external-load-balancer/),
|
[external load balancer](/docs/tasks/access-application-cluster/create-external-load-balancer/),
|
||||||
which requires a cloud provider.
|
which requires a cloud provider.
|
||||||
|
|
||||||
* Configure `kubectl` to communicate with your Kubernetes API server. For
|
* Configure `kubectl` to communicate with your Kubernetes API server. For
|
||||||
instructions, see the documentation for your cloud provider.
|
instructions, see the documentation for your cloud provider.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
* 安装 [kubectl](zh/docs/tasks/tools/install-kubectl/).
|
* 安装 [kubectl](/zh/docs/tasks/tools/install-kubectl/).
|
||||||
|
|
||||||
* 使用 Google Kubernetes Engine 或 Amazon Web Services 等云供应商创建 Kubernetes 群集。
|
* 使用 Google Kubernetes Engine 或 Amazon Web Services 等云供应商创建 Kubernetes 群集。
|
||||||
本教程创建了一个[外部负载均衡器](zh/docs/tasks/access-application-cluster/create-external-load-balancer/),需要云供应商。
|
本教程创建了一个[外部负载均衡器](/zh/docs/tasks/access-application-cluster/create-external-load-balancer/),需要云供应商。
|
||||||
|
|
||||||
* 配置 `kubectl` 与 Kubernetes API 服务器通信。有关说明,请参阅云供应商文档。
|
* 配置 `kubectl` 与 Kubernetes API 服务器通信。有关说明,请参阅云供应商文档。
|
||||||
|
|
||||||
|
@ -79,16 +79,16 @@ external IP address.
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
The preceding command creates a
|
The preceding command creates a
|
||||||
[Deployment](zh/docs/concepts/workloads/controllers/deployment/)
|
[Deployment](/docs/concepts/workloads/controllers/deployment/)
|
||||||
object and an associated
|
object and an associated
|
||||||
[ReplicaSet](zh/docs/concepts/workloads/controllers/replicaset/)
|
[ReplicaSet](/docs/concepts/workloads/controllers/replicaset/)
|
||||||
object. The ReplicaSet has five
|
object. The ReplicaSet has five
|
||||||
[Pods](zh/docs/concepts/workloads/pods/pod/),
|
[Pods](/docs/concepts/workloads/pods/pod/),
|
||||||
each of which runs the Hello World application.
|
each of which runs the Hello World application.
|
||||||
-->
|
-->
|
||||||
前面的命令创建一个 [Deployment](zh/docs/concepts/workloads/controllers/deployment/)
|
前面的命令创建一个 [Deployment](/zh/docs/concepts/workloads/controllers/deployment/)
|
||||||
对象和一个关联的 [ReplicaSet](zh/docs/concepts/workloads/controllers/replicaset/)对象。
|
对象和一个关联的 [ReplicaSet](/zh/docs/concepts/workloads/controllers/replicaset/)对象。
|
||||||
ReplicaSet 有五个 [Pod](zh/docs/concepts/workloads/pods/pod/),每个都运行 Hello World 应用程序。
|
ReplicaSet 有五个 [Pod](/zh/docs/concepts/workloads/pods/pod/),每个都运行 Hello World 应用程序。
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
1. Display information about the Deployment:
|
1. Display information about the Deployment:
|
||||||
|
@ -249,9 +249,9 @@ the Hello World application, enter this command:
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Learn more about
|
Learn more about
|
||||||
[connecting applications with services](zh/docs/concepts/services-networking/connect-applications-service/).
|
[connecting applications with services](/docs/concepts/services-networking/connect-applications-service/).
|
||||||
-->
|
-->
|
||||||
|
|
||||||
了解更多关于[将应用程序与服务连接](zh/docs/concepts/services-networking/connect-applications-service/)。
|
了解更多关于[将应用程序与服务连接](/zh/docs/concepts/services-networking/connect-applications-service/)。
|
||||||
|
|
||||||
{{% /capture %}}
|
{{% /capture %}}
|
||||||
|
|
|
@ -143,9 +143,9 @@ Replace POD-NAME with the name of your Pod.
|
||||||
### 创建 Redis 主节点的服务
|
### 创建 Redis 主节点的服务
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
The guestbook applications needs to communicate to the Redis master to write its data. You need to apply a [Service](zh/docs/concepts/services-networking/service/) to proxy the traffic to the Redis master Pod. A Service defines a policy to access the Pods.
|
The guestbook applications needs to communicate to the Redis master to write its data. You need to apply a [Service](/docs/concepts/services-networking/service/) to proxy the traffic to the Redis master Pod. A Service defines a policy to access the Pods.
|
||||||
-->
|
-->
|
||||||
留言板应用程序需要往 Redis 主节点中写数据。因此,需要创建 [Service](zh/docs/concepts/services-networking/service/) 来代理 Redis 主节点 Pod 的流量。Service 定义了访问 Pod 的策略。
|
留言板应用程序需要往 Redis 主节点中写数据。因此,需要创建 [Service](/zh/docs/concepts/services-networking/service/) 来代理 Redis 主节点 Pod 的流量。Service 定义了访问 Pod 的策略。
|
||||||
|
|
||||||
{{< codenew file="application/guestbook/redis-master-service.yaml" >}}
|
{{< codenew file="application/guestbook/redis-master-service.yaml" >}}
|
||||||
|
|
||||||
|
@ -349,10 +349,10 @@ The guestbook application has a web frontend serving the HTTP requests written i
|
||||||
### 创建前端服务
|
### 创建前端服务
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
The `redis-slave` and `redis-master` Services you applied are only accessible within the container cluster because the default type for a Service is [ClusterIP](zh/docs/concepts/services-networking/service/#publishing-services---service-types). `ClusterIP` provides a single IP address for the set of Pods the Service is pointing to. This IP address is accessible only within the cluster.
|
The `redis-slave` and `redis-master` Services you applied are only accessible within the container cluster because the default type for a Service is [ClusterIP](/docs/concepts/services-networking/service/#publishing-services---service-types). `ClusterIP` provides a single IP address for the set of Pods the Service is pointing to. This IP address is accessible only within the cluster.
|
||||||
-->
|
-->
|
||||||
应用的 `redis-slave` 和 `redis-master` 服务只能在容器集群中访问,因为服务的默认类型是
|
应用的 `redis-slave` 和 `redis-master` 服务只能在容器集群中访问,因为服务的默认类型是
|
||||||
[ClusterIP](zh/docs/concepts/Services-networking/Service/#publishingservices-Service-types)。`ClusterIP` 为服务指向的 Pod 集提供一个 IP 地址。这个 IP 地址只能在集群中访问。
|
[ClusterIP](/zh/docs/concepts/Services-networking/Service/#publishingservices-Service-types)。`ClusterIP` 为服务指向的 Pod 集提供一个 IP 地址。这个 IP 地址只能在集群中访问。
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
If you want guests to be able to access your guestbook, you must configure the frontend Service to be externally visible, so a client can request the Service from outside the container cluster. Minikube can only expose Services through `NodePort`.
|
If you want guests to be able to access your guestbook, you must configure the frontend Service to be externally visible, so a client can request the Service from outside the container cluster. Minikube can only expose Services through `NodePort`.
|
||||||
|
@ -607,16 +607,16 @@ Deleting the Deployments and Services also deletes any running Pods. Use labels
|
||||||
{{% capture whatsnext %}}
|
{{% capture whatsnext %}}
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
* Complete the [Kubernetes Basics](zh/docs/tutorials/kubernetes-basics/) Interactive Tutorials
|
* Complete the [Kubernetes Basics](/docs/tutorials/kubernetes-basics/) Interactive Tutorials
|
||||||
* Use Kubernetes to create a blog using [Persistent Volumes for MySQL and Wordpress](zh/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/#visit-your-new-wordpress-blog)
|
* Use Kubernetes to create a blog using [Persistent Volumes for MySQL and Wordpress](/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/#visit-your-new-wordpress-blog)
|
||||||
* Read more about [connecting applications](zh/docs/concepts/services-networking/connect-applications-service/)
|
* Read more about [connecting applications](/docs/concepts/services-networking/connect-applications-service/)
|
||||||
* Read more about [Managing Resources](zh/docs/concepts/cluster-administration/manage-deployment/#using-labels-effectively)
|
* Read more about [Managing Resources](/docs/concepts/cluster-administration/manage-deployment/#using-labels-effectively)
|
||||||
-->
|
-->
|
||||||
|
|
||||||
* 完成 [Kubernetes Basics](zh/docs/tutorials/kubernetes-basics/) 交互式教程
|
* 完成 [Kubernetes Basics](/zh/docs/tutorials/kubernetes-basics/) 交互式教程
|
||||||
* 使用 Kubernetes 创建一个博客,使用 [MySQL 和 Wordpress 的持久卷](zh/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/#visit-your-new-wordpress-blog)
|
* 使用 Kubernetes 创建一个博客,使用 [MySQL 和 Wordpress 的持久卷](/zh/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/#visit-your-new-wordpress-blog)
|
||||||
* 阅读更多关于[连接应用程序](zh/docs/concepts/services-networking/connect-applications-service/)
|
* 阅读更多关于[连接应用程序](/zh/docs/concepts/services-networking/connect-applications-service/)
|
||||||
* 阅读更多关于[管理资源](zh/docs/concepts/cluster-administration/manage-deployment/#using-labels-effectively)
|
* 阅读更多关于[管理资源](/zh/docs/concepts/cluster-administration/manage-deployment/#using-labels-effectively)
|
||||||
|
|
||||||
{{% /capture %}}
|
{{% /capture %}}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue