From db3a74b95a30fb39c9acd208159b56ae3379a8c5 Mon Sep 17 00:00:00 2001 From: Hypo Date: Sun, 23 Jun 2019 09:33:15 +0800 Subject: [PATCH] Update translation of file run-single-instance-stateful-application.md (#14979) * update sample code in run-single-instance-stateful-application.md * Update translation * fix * Update document format * fix code style * fix yaml format --- ...un-single-instance-stateful-application.md | 159 +++++++----------- 1 file changed, 58 insertions(+), 101 deletions(-) diff --git a/content/zh/docs/tasks/run-application/run-single-instance-stateful-application.md b/content/zh/docs/tasks/run-application/run-single-instance-stateful-application.md index 7d0bfb87e6c5c..bd4c6164047a8 100644 --- a/content/zh/docs/tasks/run-application/run-single-instance-stateful-application.md +++ b/content/zh/docs/tasks/run-application/run-single-instance-stateful-application.md @@ -5,16 +5,16 @@ content_template: templates/tutorial {{% capture overview %}} -本文介绍在Kubernetes中使用PersistentVolume和Deployment如何运行一个单实例有状态应用. 该应用是MySQL. +本文介绍在 Kubernetes 中使用 PersistentVolume 和 Deployment 如何运行一个单实例有状态应用. 该应用是 MySQL. {{% /capture %}} {{% capture objectives %}} -* 在环境中通过磁盘创建一个PersistentVolume. -* 创建一个MySQL Deployment. -* 在集群内以一个已知的DNS名将MySQL暴露给其他pods. +* 在环境中通过磁盘创建一个 PersistentVolume. +* 创建一个 MySQL Deployment. +* 在集群内以一个已知的 DNS 名将 MySQL 暴露给其他 pods. {{% /capture %}} @@ -23,59 +23,39 @@ content_template: templates/tutorial * {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -* 为了数据持久性我们将在环境上通过磁盘创建一个持久卷. 环境支持的类型见这里[here](/docs/user-guide/persistent-volumes/#types-of-persistent-volumes). 本篇文档将介绍 `GCEPersistentDisk` . `GCEPersistentDisk`卷只能工作在Google Compute Engine平台上. +* {{< include "default-storage-class-prereqs.md" >}} {{% /capture %}} {{% capture lessoncontent %}} -## 在环境中设置一个磁盘 - -你可以为有状态的应用使用任何类型的持久卷. 有关支持环境的磁盘列表,请参考持久卷类型[Types of Persistent Volumes](/docs/user-guide/persistent-volumes/#types-of-persistent-volumes). 对于Google Compute Engine, 请运行: - -``` -gcloud compute disks create --size=20GB mysql-disk -``` - - -接下来创建一个指向刚创建的 `mysql-disk`磁盘的PersistentVolume. 下面是一个PersistentVolume的配置文件,它指向上面创建的Compute Engine磁盘: - -{{< code file="gce-volume.yaml" >}} - -注意`pdName: mysql-disk` 这行与Compute Engine环境中的磁盘名称相匹配. 有关为其 -他环境编写PersistentVolume配置文件的详细信息,请参见持久卷[Persistent Volumes](/docs/concepts/storage/persistent-volumes/). - - -创建持久卷: - -``` -kubectl create -f https://k8s.io/docs/tasks/run-application/gce-volume.yaml -``` +## 部署 MySQL +通过创建 Kubernetes Deployment 并使用 PersistentVolumeClaim 将其连接到现已存在的 PersistentVolume 上来运行一个有状态的应用. 例如, 下面这个 YAML 文件描述了一个运行 MySQL +并引用 PersistentVolumeClaim 的 Deployment. 该文件定义了一个 volume 其挂载目录为 `/var/lib/mysql`, 然后创建一个大小为 20G 的卷的 PersistentVolumeClaim. 此申领可以通过任 +何符合需求的已有卷来满足, 或者被动态分配. -## 部署MySQL -通过创建Kubernetes Deployment并使用PersistentVolumeClaim将其连接到现已存在的PersistentVolume上来运行一个有状态的应用. 例如, 下面这个YAML文件描述了一个运行MySQL -并引用PersistentVolumeClaim的Deployment. 该文件定义了一个volume其挂载目录为/var/lib/mysql, 然后创建一个内存为20G的卷的PersistentVolumeClaim. 此申领可以通过任 -何符合需求的卷来满足, 在本例中满足上面创建的卷. - - -注意: 在配置的yaml文件中定义密码的做法是不安全的. 具体安全解决方案请参考 +注意: 在配置的 yaml 文件中定义密码的做法是不安全的. 具体安全解决方案请参考 [Kubernetes Secrets](/docs/concepts/configuration/secret/). -{{< code file="mysql-deployment.yaml" >}} +{{< codenew file="application/mysql/mysql-deployment.yaml" >}} +{{< codenew file="application/mysql/mysql-pv.yaml" >}} + +1. 部署 YAML 文件中定义的 PV 和 PVC: -1. 部署YAML文件中定义的内容: + kubectl apply -f https://k8s.io/examples/application/mysql/mysql-pv.yaml - kubectl create -f https://k8s.io/docs/tasks/run-application/mysql-deployment.yaml +1. 部署 YAML 文件中定义的内容: + kubectl apply -f https://k8s.io/examples/application/mysql/mysql-deployment.yaml -1. 展示Deployment相关信息: +1. 展示 Deployment 相关信息: - kubectl describe deployment mysql + kubectl describe deployment mysql Name: mysql Namespace: default @@ -101,77 +81,57 @@ kubectl create -f https://k8s.io/docs/tasks/run-application/gce-volume.yaml Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: mysql-pv-claim ReadOnly: false - Conditions: - Type Status Reason - ---- ------ ------ - Available False MinimumReplicasUnavailable - Progressing True ReplicaSetUpdated - OldReplicaSets: - NewReplicaSet: mysql-63082529 (1/1 replicas created) - Events: - FirstSeen LastSeen Count From SubobjectPath Type Reason Message - --------- -------- ----- ---- ------------- -------- ------ ------- - 33s 33s 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set mysql-63082529 to 1 + Conditions: + Type Status Reason + ---- ------ ------ + Available False MinimumReplicasUnavailable + Progressing True ReplicaSetUpdated + OldReplicaSets: + NewReplicaSet: mysql-63082529 (1/1 replicas created) + Events: + FirstSeen LastSeen Count From SubobjectPath Type Reason Message + --------- -------- ----- ---- ------------- -------- ------ ------- + 33s 33s 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set mysql-63082529 to 1 -1. 列举出Deployment创建的pods: +1. 列举出 Deployment 创建的 pods: - kubectl get pods -l app=mysql + kubectl get pods -l app=mysql NAME READY STATUS RESTARTS AGE mysql-63082529-2z3ki 1/1 Running 0 3m +1. 查看 PersistentVolumeClaim: -1. 查看持久卷: - - kubectl describe pv mysql-pv - - Name: mysql-pv - Labels: - Status: Bound - Claim: default/mysql-pv-claim - Reclaim Policy: Retain - Access Modes: RWO - Capacity: 20Gi - Message: - Source: - Type: GCEPersistentDisk (a Persistent Disk resource in Google Compute Engine) - PDName: mysql-disk - FSType: ext4 - Partition: 0 - ReadOnly: false - No events. - - -1. 查看PersistentVolumeClaim: - - kubectl describe pvc mysql-pv-claim + kubectl describe pvc mysql-pv-claim Name: mysql-pv-claim Namespace: default + StorageClass: Status: Bound - Volume: mysql-pv + Volume: mysql-pv-volume Labels: + Annotations: pv.kubernetes.io/bind-completed=yes + pv.kubernetes.io/bound-by-controller=yes Capacity: 20Gi Access Modes: RWO - No events. - + Events: -## 访问MySQL实例 +## 访问 MySQL 实例 -前面YAML文件中创建了一个允许集群内其他pods访问数据库的服务. 该服务中选项 -`clusterIP: None` 让服务DNS名称直接解析为Pod的IP地址. 当在一个服务下只有一个pod -并且不打算增加pods的数量这是最好的. +前面 YAML 文件中创建了一个允许集群内其他 pods 访问数据库的服务. 该服务中选项 +`clusterIP: None` 让服务 DNS 名称直接解析为 Pod 的 IP 地址. 当在一个服务下只有一个 pod +并且不打算增加 pods 的数量这是最好的. -运行MySQL客户端以连接到服务器: +运行 MySQL 客户端以连接到服务器: ``` -kubectl run -it --rm --image=mysql:5.6 mysql-client -- mysql -h -p +kubectl run -it --rm --image=mysql:5.6 --restart=Never mysql-client -- mysql -h mysql -ppassword ``` -此命令在集群内创建一个新的Pod并运行MySQL客户端,并通过服务将其连接到服务器.如果连接成功,你就知道有状态的MySQL database正处于运行状态. +此命令在集群内创建一个新的 Pod 并运行 MySQL 客户端,并通过 Service 将其连接到服务器.如果连接成功,你就知道有状态的 MySQL 数据库正处于运行状态. ``` Waiting for pod default/mysql-client-274442439-zyp6i to be running, status is Pending, pod ready: false @@ -183,16 +143,16 @@ mysql> ## 更新 -Deployment中镜像或其他部分同往常一样可以通过 `kubectl apply` 命令更新. 以下是 +Deployment 中镜像或其他部分同往常一样可以通过 `kubectl apply` 命令更新. 以下是 特定于有状态应用的一些注意事项: -* 不要弹性伸缩. 弹性伸缩仅适用于单实例应用. 下层的PersistentVolume仅只能挂载一个pod. 对于集群级有状态应用, 请参考StatefulSet文档 +* 不要弹性伸缩. 弹性伸缩仅适用于单实例应用. 下层的 PersistentVolume 仅只能挂载一个 pod. 对于集群级有状态应用, 请参考 StatefulSet 文档 [StatefulSet documentation](/docs/concepts/workloads/controllers/statefulset/). -* 在Deployment的YAML文件中使用 `strategy:` `type: Recreate` . 该选项指示Kubernetes不使用滚动升级. 滚动升级将无法工作, 由于一次不能运行多个pod. 在更新配置文件 -创建一个新的pod前 `Recreate`策略将先停止第一个pod. +* 在 Deployment 的 YAML 文件中使用 `strategy:` `type: Recreate` . 该选项指示 Kubernetes 不使用滚动升级. 滚动升级将无法工作, 由于一次不能运行多个 pod. 在更新配置文件 +创建一个新的 pod 前 `Recreate` 策略将先停止第一个 pod. -## 删除deployment +## 删除 Deployment 通过名称删除部署的对象: @@ -200,27 +160,24 @@ Deployment中镜像或其他部分同往常一样可以通过 `kubectl apply` ``` kubectl delete deployment,svc mysql kubectl delete pvc mysql-pv-claim -kubectl delete pv mysql-pv +kubectl delete pv mysql-pv-volume ``` -如果使用Compute Engine磁盘,也可以使用如下命令: - -``` -gcloud compute disks delete mysql-disk -``` +如果通过手动的方式分配 PersistentVolume, 那么也需要手动的删除它,以及释放下层资源. +如果是用过动态分配 PersistentVolume 的方式,在删除 PersistentVolumeClaim 后 PersistentVolume 将被自动的删除. 一些存储服务(比如 EBS 和 PD)也会在 PersistentVolume 被删除时自动回收下层资源. {{% /capture %}} {{% capture whatsnext %}} -* 了解更多Deployment对象请参考 [Deployment objects](/docs/concepts/workloads/controllers/deployment/). +* 了解更多 Deployment 对象请参考 [Deployment objects](/docs/concepts/workloads/controllers/deployment/). -* 了解更多Deployment应用请参考 [Deploying applications](/docs/user-guide/deploying-applications/) +* 了解更多 Deployment 应用请参考 [Deploying applications](/docs/user-guide/deploying-applications/) -* kubectl run文档请参考[kubectl run documentation](/docs/user-guide/kubectl/v1.6/#run) +* kubectl run 文档请参考[kubectl run documentation](/docs/reference/generated/kubectl/kubectl-commands/#run) -* 卷和持久卷请参考[Volumes](/docs/concepts/storage/volumes/) and [Persistent Volumes](/docs/concepts/storage/persistent-volumes/) +* 卷和持久卷请参考 [Volumes](/docs/concepts/storage/volumes/) 和 [Persistent Volumes](/docs/concepts/storage/persistent-volumes/) {{% /capture %}}