From 3f8bb31bd858d4f3488fc368f0c44a02c78af1ca Mon Sep 17 00:00:00 2001 From: AdamDang Date: Sun, 13 Jan 2019 17:44:49 +0800 Subject: [PATCH] =?UTF-8?q?zh-trans:/docs/concepts/overview/object-managem?= =?UTF-8?q?ent-kubectl/imperative=E2=80=A6=20(#12151)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * zh-trans:/docs/concepts/overview/object-management-kubectl/imperative-config.md zh-trans:/docs/concepts/overview/object-management-kubectl/imperative-config.md * Update imperative-config.md --- .../imperative-config.md | 262 ++++++++++++++++++ 1 file changed, 262 insertions(+) create mode 100644 content/zh/docs/concepts/overview/object-management-kubectl/imperative-config.md diff --git a/content/zh/docs/concepts/overview/object-management-kubectl/imperative-config.md b/content/zh/docs/concepts/overview/object-management-kubectl/imperative-config.md new file mode 100644 index 0000000000..ac923edef9 --- /dev/null +++ b/content/zh/docs/concepts/overview/object-management-kubectl/imperative-config.md @@ -0,0 +1,262 @@ +--- +title: 使用配置文件指令式管理 Kubernetes 对象 +content_template: templates/concept +weight: 30 +--- + + + +{{% capture overview %}} + +通过使用 `kubectl` 命令行工具和 yaml 或 json 格式编写的对象配置文件,用户可以创建、更新和删除 Kubernetes 对象。 +本文档介绍如何使用配置文件定义和管理对象。 +{{% /capture %}} + +{{% capture body %}} + + +## 取舍权衡 + + + +`kubectl` 工具支持三种对象管理: + + +* 指令性命令 +* 指令性对象配置 +* 声明式对象配置 + + +请参阅[Kubernetes 对象管理](/docs/concepts/overview/object-management-kubectl/overview/) 以了解每种对象管理的优缺点。 + + +## 怎样创建对象 + + + +可以使用 `kubectl create -f` 从配置文件创建对象。 +有关详细信息,请参阅[Kubernetes API 参考](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/)。 + +- `kubectl create -f ` + + +## 怎样更新对象 + +{{< warning >}} + +使用 `replace` 命令更新对象时,系统将会删除配置文件的 spec 中未指定的所有内容。 +对于部分上由集群来管理的对象而言,不要使用这种对象管理方式。 + +例如,对于 `LoadBalancer` 类型的服务而言,其 `externalIPs` 字段值是独立于配置文件进行管理的。 +独立管理的字段必须复制到配置文件中,以防止被 `replace` 操作删除。 +{{< /warning >}} + + +您可以使用 `kubectl replace -f` 命令基于配置文件来更新活跃状态的对象。 + +- `kubectl replace -f ` + + +## 怎样删除对象 + + + +您可以使用 `kubectl delete -f` 命令来删除配置文件中描述的对象。 + +- `kubectl delete -f ` + + +## 怎样查看对象 + + + +您可以使用 `kubectl get -f` 命令来查看配置文件中描述的对象的信息。 + +- `kubectl get -f -o yaml` + + + +指定了 `-o yaml` 参数将会打印完整的对象配置。 +使用 `kubectl get -h` 命令查看选项列表。 + + +## 限制 + + +当每个对象的配置都完整的定义和记录在它的配置文件中时,`create`、`replace` 和 `delete` 命令就能正常使用。 +然而,当一个存活态的对象被更新、并且更新的内容没有被合入该对象的配置文件时,下次再执行 `replace` 命令将导致更新的内容丢失。 +如果控制器(如 HorizontalPodAutoscaler)直接更新存活态的对象,就会发生上面的情况。 +下面是个例子: + + + +1. 从配置文件创建对象。 +1. 另外一个资源更新这个对象的一些字段。 +1. 从配置文件中替换(replace)该对象。第二步中另外的资源对该对象所做的更新将丢失。 + + +如果您需要对同一对象支持多个写者,那么可以使用 `kubectl apply` 命令管理该对象。 + + +## 通过 URL 创建和编辑对象而不保存配置 + + + +假设您知道一个对象配置文件的 URL。 +您可以在对象被创建之前使用 `kubectl create --edit` 命令来更改它的配置。 +这对于指向那些读者可修改配置文件的教程和任务特别有用。 + +```sh +kubectl create -f --edit +``` + + +## 从指令性命令迁移到指令性对象配置 + + +从指令性命令迁移到指令性对象配置包括几个手动步骤。 + + +1. 将存活态的对象导出为本地对象配置文件: +```sh +kubectl get / -o yaml --export > _.yaml +``` +1. 手动从对象配置文件中移除状态信息。 +1. 对于后续的对象管理,只使用 `replace`。 +```sh +kubectl replace -f _.yaml +``` + + +## 定义控制器选择器和 PodTemplate 标签 + +{{< warning >}} + +强烈不建议更新控制器的选择器。 +{{< /warning >}} + + +建议的方法是定义一个单一的、不变的 PodTemplate 标签,该标签仅由控制器选择器使用,没有其他语义意义。 + + +标签示例: + +```yaml +selector: + matchLabels: + controller-selector: "extensions/v1beta1/deployment/nginx" +template: + metadata: + labels: + controller-selector: "extensions/v1beta1/deployment/nginx" +``` + +{{% /capture %}} + +{{% capture whatsnext %}} + + +- [使用指令性命令管理 Kubernetes 对象](/docs/concepts/overview/object-management-kubectl/imperative-command/) +- [使用对象配置文件(声明式)管理 Kubernetes 对象](/docs/concepts/overview/object-management-kubectl/declarative-config/) +- [Kubectl 命令参考](/docs/reference/generated/kubectl/kubectl/) +- [Kubernetes API 参考](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/) +{{% /capture %}} + +