From cef03f403191203f090d8f24e647e2f8cb53d4cc Mon Sep 17 00:00:00 2001 From: bscheller-iso <49907033+bscheller-iso@users.noreply.github.com> Date: Fri, 8 Nov 2019 17:44:15 +0100 Subject: [PATCH 01/66] Update _index.md (#17126) rework of the german translation based on the english version --- content/de/docs/concepts/_index.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/content/de/docs/concepts/_index.md b/content/de/docs/concepts/_index.md index c938d28207e4a..b8fc0272dbac5 100644 --- a/content/de/docs/concepts/_index.md +++ b/content/de/docs/concepts/_index.md @@ -7,7 +7,7 @@ weight: 40 {{% capture overview %}} -Im Abschnitt Konzepte erfahren Sie mehr über die Teile des Kubernetes-Systems und die Abstraktionen, die Kubernetes zur Darstellung Ihres Clusters verwendet, und Sie erhalten ein tieferes Verständnis der Funktionsweise von Kubernetes. +Im Abschnitt Konzepte erfahren Sie mehr über die Bestandteile des Kubernetes-Systems und die Abstraktionen, die Kubernetes zur Verwaltung Ihres Clusters zur Verfügung stellt. Sie erhalten zudem ein tieferes Verständnis der Funktionsweise von Kubernetes. {{% /capture %}} @@ -16,9 +16,9 @@ Im Abschnitt Konzepte erfahren Sie mehr über die Teile des Kubernetes-Systems u ## Überblick Um mit Kubernetes zu arbeiten, verwenden Sie *Kubernetes-API-Objekte*, um den *gewünschten Status Ihres Clusters* zu beschreiben: -welche Anwendungen oder anderen Workloads Sie ausführen möchten, welche Containerimages sie verwenden, die Anzahl der Replikate, welche Netzwerk- und Festplattenressourcen Sie zur Verfügung stellen möchten, und vieles mehr. Sie legen den gewünschten Status fest, indem Sie Objekte mithilfe der Kubernetes-API erstellen, normalerweise über die Befehlszeilenschnittstelle `kubectl`. Sie können die Kubernetes-API auch direkt verwenden, um mit dem Cluster zu interagieren und den gewünschten Status festzulegen oder zu ändern. +welche Anwendungen oder anderen Workloads Sie ausführen möchten, welche Containerimages sie verwenden, die Anzahl der Replikate, welche Netzwerk- und Festplattenressourcen Sie zur Verfügung stellen möchten, und vieles mehr. Sie legen den gewünschten Status fest, indem Sie Objekte mithilfe der Kubernetes-API erstellen. Dies geschieht normalerweise über die Befehlszeilenschnittstelle `kubectl`. Sie können die Kubernetes-API auch direkt verwenden, um mit dem Cluster zu interagieren und den gewünschten Status festzulegen oder zu ändern. -Sobald Sie den gewünschten Status eingestellt haben, wird das *Kubernetes Control Plane* dafür sorgen, dass der aktuelle Status des Clusters mit dem gewünschten Status übereinstimmt. Zu diesem Zweck führt Kubernetes verschiedene Aufgaben automatisch aus, z. B. Starten oder Neustarten von Containern, Skalieren der Anzahl der Repliken einer bestimmten Anwendung und vieles mehr. Das Kubernetes Control Plane besteht aus einer Reihe von Prozessen, die in Ihrem Cluster ausgeführt werden: +Sobald Sie den gewünschten Status eingestellt haben, wird das *Kubernetes Control Plane* dafür sorgen, dass der aktuelle Status des Clusters mit dem gewünschten Status übereinstimmt. Zu diesem Zweck führt Kubernetes verschiedene Aufgaben automatisch aus, z. B. das Starten oder Neustarten von Containern, Skalieren der Anzahl der Repliken einer bestimmten Anwendung und vieles mehr. Das Kubernetes Control Plane besteht aus einer Reihe von Prozessen, die in Ihrem Cluster ausgeführt werden: * Der **Kubernetes Master** bestehet aus drei Prozessen, die auf einem einzelnen Node in Ihrem Cluster ausgeführt werden, der als Master-Node bezeichnet wird. Diese Prozesse sind:[kube-apiserver](/docs/admin/kube-apiserver/), [kube-controller-manager](/docs/admin/kube-controller-manager/) und [kube-scheduler](/docs/admin/kube-scheduler/). * Jeder einzelne Node in Ihrem Cluster, welcher nicht der Master ist, führt zwei Prozesse aus: @@ -27,16 +27,16 @@ Sobald Sie den gewünschten Status eingestellt haben, wird das *Kubernetes Contr ## Kubernetes Objects -Kubernetes enthält eine Reihe von Abstraktionen, die den Status Ihres Systems darstellen: implementierte containerisierte Anwendungen und Workloads, die zugehörigen Netzwerk- und Festplattenressourcen sowie weitere Informationen zu den Aufgaben Ihres Clusters. Diese Abstraktionen werden durch Objekte in der Kubernetes-API dargestellt; Lesen Sie [Kubernetes Objects Überblick](/docs/concepts/abstractions/overview/) für weitere Details. +Kubernetes enthält eine Reihe von Abstraktionen, die den Status Ihres Systems darstellen: im Container eingesetzte Anwendungen und Workloads, die zugehörigen Netzwerk- und Festplattenressourcen sowie weitere Informationen zu den Aufgaben Ihres Clusters. Diese Abstraktionen werden durch Objekte in der Kubernetes-API dargestellt; Lesen Sie [Kubernetes Objects Überblick](/docs/concepts/abstractions/overview/) für weitere Details. -Die grundlegenden Objekte von Kubernetes umfassen: +Die Basisobjekte von Kubernetes umfassen: * [Pod](/docs/concepts/workloads/pods/pod-overview/) * [Service](/docs/concepts/services-networking/service/) * [Volume](/docs/concepts/storage/volumes/) * [Namespace](/docs/concepts/overview/working-with-objects/namespaces/) -Darüber hinaus enthält Kubernetes eine Reihe von Abstraktionen auf höherer Ebene, die als Controller bezeichnet werden. Controller bauen auf den Basisobjekten auf und bieten zusätzliche Funktionen und Komfortfunktionen. Sie beinhalten: +Darüber hinaus enthält Kubernetes Abstraktionen auf höherer Ebene, die als Controller bezeichnet werden. Controller bauen auf den Basisobjekten auf und bieten zusätzliche Funktionen und Komfortfunktionen. Sie beinhalten: * [ReplicaSet](/docs/concepts/workloads/controllers/replicaset/) * [Deployment](/docs/concepts/workloads/controllers/deployment/) @@ -46,19 +46,19 @@ Darüber hinaus enthält Kubernetes eine Reihe von Abstraktionen auf höherer Eb ## Kubernetes Control Plane -Die verschiedenen Teile der Kubernetes-Steuerungsebene (Control Plane), wie der Kubernetes Master- und der Kubelet-Prozess, bestimmen, wie Kubernetes mit Ihrem Cluster kommuniziert. Das Control Plane führt ein Inventar aller Kubernetes-Objekte im System und führt fortlaufende Steuerkreise aus, um den Status dieser Objekte zu verwalten. Zu jeder Zeit reagieren die Steuerkreise des Control Plane auf Änderungen im Cluster und arbeiten daran, dass der tatsächliche Status aller Objekte im System mit dem gewünschten Status, den Sie definiert haben, übereinstimmt. +Die verschiedenen Teile der Kubernetes-Steuerungsebene (Control Plane), wie der Kubernetes Master- und der Kubelet-Prozess, bestimmen, wie Kubernetes mit Ihrem Cluster kommuniziert. Das Control Plane verwaltet ein Inventar aller Kubernetes-Objekte im System und führt kontinuierlich Kontrollschleifen aus, um den Status dieser Objekte zu verwalten. Zu jeder Zeit reagieren die Kontrollschleifen des Control Plane auf Änderungen im Cluster und arbeiten daran, dass der tatsächliche Status aller Objekte im System mit dem von Ihnen definierten Status übereinstimmt. -Wenn Sie beispielsweise mit der Kubernetes-API ein Deployment-Objekt erstellen, geben Sie einen neuen gewünschten Status für das System an. Das Kubernetes Control Plane zeichnet die Objekterstellung auf und führt Ihre Anweisungen aus, indem es die erforderlichen Anwendungen startet und sie für auf den Cluster-Nodes plant--Dadurch wird der tatsächliche Status des Clusters an den gewünschten Status angepasst. +Wenn Sie beispielsweise mit der Kubernetes-API ein Deployment-Objekt erstellen, geben Sie einen neuen gewünschten Status für das System an. Das Kubernetes Control Plane zeichnet die Objekterstellung auf und führt Ihre Anweisungen aus, indem es die erforderlichen Anwendungen startet und Sie für auf den Cluster-Nodes plant - Dadurch wird der tatsächliche Status des Clusters an den gewünschten Status angepasst. ### Kubernetes Master -Der Kubernetes-Master ist für die Aufrechterhaltung des gewünschten Status für Ihren Cluster verantwortlich. Wenn Sie mit Kubernetes interagieren, beispielsweise mit dem Kommanduzeilen-Tool `kubectl`, kommunizieren Sie mit dem Kubernetes-Master Ihres Clusters. +Der Kubernetes-Master ist für Erhalt des gewünschten Status Ihres Clusters verantwortlich. Wenn Sie mit Kubernetes interagieren, beispielsweise mit dem Kommanduzeilen-Tool `kubectl`, kommunizieren Sie mit dem Kubernetes-Master Ihres Clusters. -> Der "Master" bezieht sich auf eine Reihe von Prozessen, die den Clusterstatus verwalten. Normalerweise werden diese Prozesse alle auf einem einzigen Node im Cluster ausgeführt. Dieser Node wird auch als Master bezeichnet. Der Master kann repliziert werden um Verfügbarkeit und Redundanz zu erhöhen. +> Der Begriff "Master" bezeichnet dabei eine Reihe von Prozessen, die den Clusterstatus verwalten. Normalerweise werden diese Prozesse alle auf einem einzigen Node im Cluster ausgeführt. Dieser Node wird auch als Master bezeichnet. Der Master kann repliziert werden, um die Verfügbarkeit und Redundanz zu erhöhen. ### Kubernetes Nodes -Die Nodes in einem Cluster sind die Maschinen (VMs, physische Server usw.), auf denen Ihre Anwendungen und Cloud-Workflows ausgeführt werden. Der Kubernetes-Master steuert jeden Master. Sie werden selten direkt mit Nodes interagieren. +Die Nodes in einem Cluster sind die Maschinen (VMs, physische Server usw.), auf denen Ihre Anwendungen und Cloud-Workflows ausgeführt werden. Der Kubernetes-Master steuert jeden Node; Sie werden selten direkt mit Nodes interagieren. #### Objekt Metadata From 580b1d66fb286154bf2dd7365aeb89f08be0bc08 Mon Sep 17 00:00:00 2001 From: Luis Cacho Date: Fri, 8 Nov 2019 11:10:52 -0600 Subject: [PATCH 02/66] Add content/es/docs/reference/glossary/label.md (#17218) * Add content/es/docs/reference/glossary/label.md * Update content/es/docs/reference/glossary/label.md Co-Authored-By: Rael Garcia * Update content/es/docs/reference/glossary/label.md Co-Authored-By: Rael Garcia * Update content/es/docs/reference/glossary/label.md Co-Authored-By: Rael Garcia * Update content/es/docs/reference/glossary/label.md Co-Authored-By: Rael Garcia * Fixing netifly building error Fixing the section short_description adding a tab on the text --- content/es/docs/reference/glossary/label.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100755 content/es/docs/reference/glossary/label.md diff --git a/content/es/docs/reference/glossary/label.md b/content/es/docs/reference/glossary/label.md new file mode 100755 index 0000000000000..70e206e162ca2 --- /dev/null +++ b/content/es/docs/reference/glossary/label.md @@ -0,0 +1,16 @@ +--- +title: Label +id: label +date: 2019-10-26 +full_link: /docs/concepts/overview/working-with-objects/labels +short_description: > + Metadatos en forma de clave-valor que permite añadir a los objetos atributos que sean relevantes para los usuarios para identificarlos. + +aka: +tags: +- fundamental +--- +Metadatos en forma de clave-valor que permite añadir a los objetos atributos que sean relevantes para los usuarios para identificarlos. + + +Las etiquetas son pares clave-valor que se adhieren a los diferentes objetos, como los {{< glossary_tooltip text="Pods" term_id="pod" >}}, y que se utilizan para identificar, organizar y seleccionar subconjuntos de objetos. From 2f72bb50896bcc6100a63f0b78befca3cddc10b0 Mon Sep 17 00:00:00 2001 From: Oleg Butuzov Date: Fri, 8 Nov 2019 19:30:52 +0200 Subject: [PATCH 03/66] Broken Link fix (#17484) Fixed link to PodDisruptionBudget task. --- .../custom-resources/custom-resource-definitions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions.md b/content/en/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions.md index 56b82d3fb09c7..35f525ffc0cd3 100644 --- a/content/en/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions.md +++ b/content/en/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions.md @@ -1292,7 +1292,7 @@ kubectl get crontabs my-new-cron-object -o jsonpath='{.spec.replicas}' 5 ``` -You can use a [PodDisruptionBudget](docs/tasks/run-application/configure-pdb/) to protect custom resources that have the scale subresource enabled. +You can use a [PodDisruptionBudget](/docs/tasks/run-application/configure-pdb/) to protect custom resources that have the scale subresource enabled. ### Categories From e02326806481aa26e09acb8e55428780bd549c19 Mon Sep 17 00:00:00 2001 From: Tanveer Alam Date: Sat, 9 Nov 2019 05:55:59 +0530 Subject: [PATCH 04/66] Typo, should be extension's instead of extensions (#17373) * Typo, should be extension's instead of extensions In `Extension Patterns` section, `extensions points` should be `extension's points` as it's trying to say `points` belonging to a particular `extension`. * Update content/en/docs/concepts/extend-kubernetes/extend-cluster.md Changed as per tengqm suggestion. Co-Authored-By: Qiming --- content/en/docs/concepts/extend-kubernetes/extend-cluster.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/concepts/extend-kubernetes/extend-cluster.md b/content/en/docs/concepts/extend-kubernetes/extend-cluster.md index f5ecad2286e9b..2b5aa1b67678f 100644 --- a/content/en/docs/concepts/extend-kubernetes/extend-cluster.md +++ b/content/en/docs/concepts/extend-kubernetes/extend-cluster.md @@ -79,7 +79,7 @@ and [Network Plugins](/docs/concepts/cluster-administration/network-plugins/)) and by kubectl. -Below is a diagram showing how the extensions points interact with the +Below is a diagram showing how the extension points interact with the Kubernetes control plane. From 306d3f0ca221c934074a85befb1251a7a153081c Mon Sep 17 00:00:00 2001 From: umemotoryo Date: Sun, 10 Nov 2019 21:05:39 +0900 Subject: [PATCH 05/66] =?UTF-8?q?Fix=20font=20style=20*=E3=83=95=E3=82=A3?= =?UTF-8?q?=E3=83=AB=E3=82=BF=E3=83=BC*=20to=20=5F=E3=83=95=E3=82=A3?= =?UTF-8?q?=E3=83=AB=E3=82=BF=E3=83=BC=5F=20(#17513)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../concepts/overview/working-with-objects/field-selectors.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/ja/docs/concepts/overview/working-with-objects/field-selectors.md b/content/ja/docs/concepts/overview/working-with-objects/field-selectors.md index 98d03bfec67dd..86bce27e071f3 100644 --- a/content/ja/docs/concepts/overview/working-with-objects/field-selectors.md +++ b/content/ja/docs/concepts/overview/working-with-objects/field-selectors.md @@ -17,7 +17,7 @@ kubectl get pods --field-selector status.phase=Running ``` {{< note >}} -フィールドセレクターは本質的にリソースの*フィルター*となります。デフォルトでは、セレクター/フィルターが指定されていない場合は、全てのタイプのリソースが取得されます。これは、下記の2つの`kubectl`クエリが同じであることを意味します。 +フィールドセレクターは本質的にリソースの _フィルター_ となります。デフォルトでは、セレクター/フィルターが指定されていない場合は、全てのタイプのリソースが取得されます。これは、下記の2つの`kubectl`クエリが同じであることを意味します。 ```shell kubectl get pods @@ -61,4 +61,4 @@ kubectl get pods --field-selector=status.phase!=Running,spec.restartPolicy=Alway ```shell kubectl get statefulsets,services --field-selector metadata.namespace!=default -``` \ No newline at end of file +``` From 69964e85291defe717f48273db59b374db0f9212 Mon Sep 17 00:00:00 2001 From: Jin Hase Date: Sun, 10 Nov 2019 21:47:39 +0900 Subject: [PATCH 06/66] Modify terminated-pod-gc-threshold explanation in Japanese (#15272) (#17422) * Modify terminated-pod-gc-threshold explanation in Japanese (#15272) * Correct the word "controller" to the correct notation in Japanese Co-Authored-By: Naoki Oketani * Remove unnecessary space --- content/ja/docs/concepts/workloads/pods/pod-lifecycle.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/content/ja/docs/concepts/workloads/pods/pod-lifecycle.md b/content/ja/docs/concepts/workloads/pods/pod-lifecycle.md index 65dfd22a2a7ed..a798653cf3b91 100644 --- a/content/ja/docs/concepts/workloads/pods/pod-lifecycle.md +++ b/content/ja/docs/concepts/workloads/pods/pod-lifecycle.md @@ -214,8 +214,9 @@ kubeletによって再起動される終了したコンテナは、5分後にキ ## Podのライフタイム -一般にPodは誰かが破棄するまで消えません。これは人間またはコントローラかもしれません。 -このルールの唯一の例外は、一定の期間以上の(マスターで`terminated-pod-gc-threshold`によって判断される)SucceededまたはFailedの`phase`を持つPodは期限切れになり自動的に破棄されます。 +一般にPodは人間またはコントローラーが明示的に削除するまで存在します。 +コントロールプレーンは終了状態のPod(SucceededまたはFailedの`phase`を持つ)の数が設定された閾値(kube-controller-manager内の`terminated-pod-gc-threshold`によって定義される)を超えたとき、それらのPodを削除します。 +これはPodが作成されて時間とともに終了するため、リソースリークを避けます。 次の3種類のコントローラがあります。 From 939f3ebd7e49f70fd6aeeaeaff7d389cf35114f3 Mon Sep 17 00:00:00 2001 From: Tim Bannister Date: Tue, 12 Nov 2019 02:08:06 +0000 Subject: [PATCH 07/66] Expand feature gates page (#17535) * Tidy feature gate metadata * Tweak feature gate headings Use sentence case where appropriate * Add feature gate explanation for GA * Add what's next section to feature gate page * Signpost readers to explanation of feature gate stages --- .../feature-gates.md | 35 ++++++++++++------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/content/en/docs/reference/command-line-tools-reference/feature-gates.md b/content/en/docs/reference/command-line-tools-reference/feature-gates.md index 25bf2937ac5d6..15966fc7a03f7 100644 --- a/content/en/docs/reference/command-line-tools-reference/feature-gates.md +++ b/content/en/docs/reference/command-line-tools-reference/feature-gates.md @@ -1,5 +1,4 @@ --- -title: Feature Gates weight: 10 title: Feature Gates content_template: templates/concept @@ -8,15 +7,20 @@ content_template: templates/concept {{% capture overview %}} This page contains an overview of the various feature gates an administrator can specify on different Kubernetes components. + +See [feature stages](#feature-stages) for an explanation of the stages for a feature. {{% /capture %}} {{% capture body %}} ## Overview -Feature gates are a set of key=value pairs that describe alpha or experimental -features. -An administrator can use the `--feature-gates` command line flag on each component -to turn a feature on or off. Each component supports a set of feature gates unique to that component. +Feature gates are a set of key=value pairs that describe Kubernetes features. +You can turn these features on or off using the `--feature-gates` command line flag +on each Kubernetes component. + + +Each Kubernetes component lets you enable or disable a set of feature gates that +are relevant to that component. Use `-h` flag to see a full set of feature gates for all components. To set feature gates for a component, such as kubelet, use the `--feature-gates` flag assigned to a list of feature pairs: @@ -32,9 +36,11 @@ different Kubernetes components. - The "Until" column, if not empty, contains the last Kubernetes release in which you can still use a feature gate. - If a feature is in the Alpha or Beta state, you can find the feature listed - in the Alpha/Beta feature gate table. -- If a feature is stable (GA) or deprecated, you can find all stages for that feature listed - in the GA/Deprecated feature gate table. + in the [Alpha/Beta feature gate table](#feature-gates-for-alpha-or-beta-features). +- If a feature is stable you can find all stages for that feature listed in the + [Graduated/Deprecated feature gate table](#feature-gates-for graduated-or-deprecated-features). +- The [Graduated/Deprecated feature gate table](#feature-gates-for graduated-or-deprecated-features). + also lists deprecated and withdrawn features. ### Feature gates for Alpha or Beta features @@ -240,9 +246,9 @@ different Kubernetes components. | `VolumeSubpath` | `true` | GA | 1.13 | - | {{< /table >}} -## Using a Feature +## Using a feature -### Feature Stages +### Feature stages A feature can be in *Alpha*, *Beta* or *GA* stage. An *Alpha* feature means: @@ -273,12 +279,13 @@ Please do try *Beta* features and give feedback on them! After they exit beta, it may not be practical for us to make more changes. {{< /note >}} -A *GA* feature is also referred to as a *stable* feature. It means: +A *General Availability* (GA) feature is also referred to as a *stable* feature. It means: +* The feature is always enabled; you cannot disable it. * The corresponding feature gate is no longer needed. * Stable versions of features will appear in released software for many subsequent versions. -### Feature Gates +## List of feature gates {#feature-gates} Each feature gate is designed for enabling/disabling a specific feature: @@ -443,3 +450,7 @@ Each feature gate is designed for enabling/disabling a specific feature: - `WinOverlay`: Allows kube-proxy to run in overlay mode for Windows. {{% /capture %}} +{{% capture whatsnext %}} +* The [deprecation policy](/docs/reference/using-api/deprecation-policy/) for Kubernetes explains + the project's approach to removing features and components. +{{% /capture %}} From 66dde86d0a64041d1010b348da80ea6a21ad6745 Mon Sep 17 00:00:00 2001 From: Oleg Butuzov Date: Tue, 12 Nov 2019 04:14:06 +0200 Subject: [PATCH 08/66] fix - broken link (#17530) Fix for broken link at admission-conrollers page. https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#runtimeclass --- .../docs/reference/access-authn-authz/admission-controllers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/reference/access-authn-authz/admission-controllers.md b/content/en/docs/reference/access-authn-authz/admission-controllers.md index 47e23d0abefe0..1e4a2ed7d0497 100644 --- a/content/en/docs/reference/access-authn-authz/admission-controllers.md +++ b/content/en/docs/reference/access-authn-authz/admission-controllers.md @@ -607,7 +607,7 @@ See the [resourceQuota design doc](https://git.k8s.io/community/contributors/des ### RuntimeClass {#runtimeclass} {{< feature-state for_k8s_version="v1.16" state="alpha" >}} -For [RuntimeClass](docs/concepts/containers/runtime-class/) definitions which describe an overhead associated with running a pod, +For [RuntimeClass](/docs/concepts/containers/runtime-class/) definitions which describe an overhead associated with running a pod, this admission controller will set the pod.Spec.Overhead field accordingly. See also [Pod Overhead](/docs/concepts/configuration/pod-overhead/) From 6008b3d3fc26630f85e4416a175ba8b2e1b45c4d Mon Sep 17 00:00:00 2001 From: tom1299 Date: Tue, 12 Nov 2019 03:16:08 +0100 Subject: [PATCH 09/66] Fix deprecation warning on example execution (#17522) Fix for the deprecation warning when executing the command: ```bash $ kubectl run hello --schedule="*/1 * * * *" --restart=OnFailure --image=busybox -- /bin/sh -c "date; echo Hello from the Kubernetes cluster" kubectl run --generator=cronjob/v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead. ``` --- content/en/docs/tasks/job/automated-tasks-with-cron-jobs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/tasks/job/automated-tasks-with-cron-jobs.md b/content/en/docs/tasks/job/automated-tasks-with-cron-jobs.md index ed6b2ab15eae9..575541c1a254b 100644 --- a/content/en/docs/tasks/job/automated-tasks-with-cron-jobs.md +++ b/content/en/docs/tasks/job/automated-tasks-with-cron-jobs.md @@ -61,7 +61,7 @@ cronjob.batch/hello created Alternatively, you can use `kubectl run` to create a cron job without writing a full config: ```shell -kubectl run hello --schedule="*/1 * * * *" --restart=OnFailure --image=busybox -- /bin/sh -c "date; echo Hello from the Kubernetes cluster" +kubectl run --generator=run-pod/v1 hello --schedule="*/1 * * * *" --restart=OnFailure --image=busybox -- /bin/sh -c "date; echo Hello from the Kubernetes cluster" ``` After creating the cron job, get its status using this command: From eb6a2bb7b2eaed541d33e9a73234d45c1ac3c8ca Mon Sep 17 00:00:00 2001 From: Luzhenxing Date: Tue, 12 Nov 2019 10:18:06 +0800 Subject: [PATCH 10/66] remove feature gate (#17502) --- content/en/docs/concepts/storage/volume-pvc-datasource.md | 7 ------- 1 file changed, 7 deletions(-) diff --git a/content/en/docs/concepts/storage/volume-pvc-datasource.md b/content/en/docs/concepts/storage/volume-pvc-datasource.md index 75fb15f8151e0..85774f4eb6fac 100644 --- a/content/en/docs/concepts/storage/volume-pvc-datasource.md +++ b/content/en/docs/concepts/storage/volume-pvc-datasource.md @@ -14,13 +14,6 @@ weight: 30 {{< feature-state for_k8s_version="v1.16" state="beta" >}} This document describes the concept of cloning existing CSI Volumes in Kubernetes. Familiarity with [Volumes](/docs/concepts/storage/volumes) is suggested. -This feature requires VolumePVCDataSource feature gate to be enabled: - -``` ---feature-gates=VolumePVCDataSource=true -``` - - {{% /capture %}} From 77b22e7fcda00f830b8ec567f2715b634f1b6d7d Mon Sep 17 00:00:00 2001 From: Tim Bannister Date: Tue, 12 Nov 2019 02:20:06 +0000 Subject: [PATCH 11/66] =?UTF-8?q?Tidy=20=E2=80=9Cclean=20up=20local=20stat?= =?UTF-8?q?e=E2=80=9D=20for=20Minikube=20install=20(#17506)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/en/docs/tasks/tools/install-minikube.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/content/en/docs/tasks/tools/install-minikube.md b/content/en/docs/tasks/tools/install-minikube.md index 671a8b4fdcefd..6eee60f67d784 100644 --- a/content/en/docs/tasks/tools/install-minikube.md +++ b/content/en/docs/tasks/tools/install-minikube.md @@ -186,19 +186,19 @@ To install Minikube manually on Windows, download [`minikube-windows-amd64`](htt {{% /capture %}} -## Cleanup local state +## Clean up local state {#cleanup-local-state} -If you have previously installed minikube, and run: +If you have previously installed Minikube, and run: ```shell minikube start ``` -And this command returns an error: -```shell +and `minikube start` returned an error: +``` machine does not exist ``` -You need to clear minikube's local state: +then you need to clear minikube's local state: ```shell minikube delete ``` From aa6131020c7d4cc3378044bf5d72b7e7e4f3bcf0 Mon Sep 17 00:00:00 2001 From: Tim Bannister Date: Tue, 12 Nov 2019 02:22:07 +0000 Subject: [PATCH 12/66] Take kube-proxy features for granted (#17483) All supported Kubernetes versions offer all kube-proxy features previously listed. --- content/en/docs/concepts/services-networking/service.md | 8 -------- 1 file changed, 8 deletions(-) diff --git a/content/en/docs/concepts/services-networking/service.md b/content/en/docs/concepts/services-networking/service.md index 7a586e346b190..ed8be0d8941af 100644 --- a/content/en/docs/concepts/services-networking/service.md +++ b/content/en/docs/concepts/services-networking/service.md @@ -220,14 +220,6 @@ There are a few reasons for using proxying for Services: on the DNS records could impose a high load on DNS that then becomes difficult to manage. -### Version compatibility - -Since Kubernetes v1.0 you have been able to use the -[userspace proxy mode](#proxy-mode-userspace). -Kubernetes v1.1 added iptables mode proxying, and in Kubernetes v1.2 the -iptables mode for kube-proxy became the default. -Kubernetes v1.8 added ipvs proxy mode. - ### User space proxy mode {#proxy-mode-userspace} In this mode, kube-proxy watches the Kubernetes master for the addition and From 66243a6dc255cf84dff06c7ddb00e19e2d8c5759 Mon Sep 17 00:00:00 2001 From: CRC <6834943+christophercarney@users.noreply.github.com> Date: Mon, 11 Nov 2019 21:24:06 -0500 Subject: [PATCH 13/66] Update label selectors caution about OR operator (#17477) --- .../en/docs/concepts/overview/working-with-objects/labels.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/content/en/docs/concepts/overview/working-with-objects/labels.md b/content/en/docs/concepts/overview/working-with-objects/labels.md index e8ca6f02c80ab..606b0f3f67669 100644 --- a/content/en/docs/concepts/overview/working-with-objects/labels.md +++ b/content/en/docs/concepts/overview/working-with-objects/labels.md @@ -92,6 +92,10 @@ them. For some API types, such as ReplicaSets, the label selectors of two instances must not overlap within a namespace, or the controller can see that as conflicting instructions and fail to determine how many replicas should be present. {{< /note >}} +{{< caution >}} +For both equality-based and set-based conditions there is no logical _OR_ (`||`) operator. Ensure your filter statements are structured accordingly. +{{< /caution >}} + ### _Equality-based_ requirement _Equality-_ or _inequality-based_ requirements allow filtering by label keys and values. Matching objects must satisfy all of the specified label constraints, though they may have additional labels as well. From d8c8d74f795d05f2ab1414648af009d32b97c931 Mon Sep 17 00:00:00 2001 From: vasu1124 Date: Tue, 12 Nov 2019 03:26:07 +0100 Subject: [PATCH 14/66] Updated Gardener line (#17525) * Updated Gardener line * Update Gardener line in solutions table --- content/en/docs/setup/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/setup/_index.md b/content/en/docs/setup/_index.md index 7dbb7d0d43ac2..22bbe2c792d99 100644 --- a/content/en/docs/setup/_index.md +++ b/content/en/docs/setup/_index.md @@ -83,7 +83,7 @@ The following production environment solutions table lists the providers and the | [Docker Enterprise](https://www.docker.com/products/docker-enterprise) | |✔ | ✔ | | | ✔ | [Fedora (Multi Node)](https://kubernetes.io/docs/getting-started-guides/fedora/flannel_multi_node_cluster/)  | | | | | ✔ | ✔ | [Fedora (Single Node)](https://kubernetes.io/docs/getting-started-guides/fedora/fedora_manual_config/)  | | | | | | ✔ -| [Gardener](https://gardener.cloud/) | ✔ | ✔ | ✔ (via OpenStack) | ✔ | | +| [Gardener](https://gardener.cloud/) | ✔ | ✔ | ✔ | ✔ | ✔ | [Custom Extensions](https://github.com/gardener/gardener/blob/master/docs/extensions/overview.md) | | [Giant Swarm](https://giantswarm.io/) | ✔ | ✔ | ✔ | | | [Google](https://cloud.google.com/) | [Google Kubernetes Engine (GKE)](https://cloud.google.com/kubernetes-engine/) | [Google Compute Engine (GCE)](https://cloud.google.com/compute/)|[GKE On-Prem](https://cloud.google.com/gke-on-prem/) | | | | | | | | | [IBM](https://www.ibm.com/in-en/cloud) | [IBM Cloud Kubernetes Service](https://cloud.ibm.com/kubernetes/catalog/cluster)| |[IBM Cloud Private](https://www.ibm.com/in-en/cloud/private) | | From a3f671a816d3ee65f3a62c48d65aee0cf260dce2 Mon Sep 17 00:00:00 2001 From: Oleg Butuzov Date: Tue, 12 Nov 2019 04:28:06 +0200 Subject: [PATCH 15/66] fix - broken link (#17529) Fix for brokenlink at kubeadm upgrade page https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-upgrade/ (see link "certificate management documentation" ) --- .../en/docs/reference/setup-tools/kubeadm/kubeadm-upgrade.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/reference/setup-tools/kubeadm/kubeadm-upgrade.md b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-upgrade.md index da1d46de29588..31c2f11d9c0c4 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/kubeadm-upgrade.md +++ b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-upgrade.md @@ -25,7 +25,7 @@ To use kube-dns with upgrades in Kubernetes v1.13.0 and later please follow [thi In Kubernetes v1.15.0 and later, `kubeadm upgrade apply` and `kubeadm upgrade node` will also automatically renew the kubeadm managed certificates on this node, including those stored in kubeconfig files. To opt-out, it is possible to pass the flag `--certificate-renewal=false`. For more details about certificate -renewal see the [certificate management documentation](docs/tasks/administer-cluster/kubeadm/kubeadm-certs). +renewal see the [certificate management documentation](/docs/tasks/administer-cluster/kubeadm/kubeadm-certs). {{< note >}} The commands `kubeadm upgrade apply` and `kubeadm upgrade plan` have a legacy `--config` From 7f9f9d9fbeb163241687fcc6e04098596de00910 Mon Sep 17 00:00:00 2001 From: Sascha Grunert Date: Tue, 12 Nov 2019 03:30:07 +0100 Subject: [PATCH 16/66] Update AppArmor requirement section (#17531) Mainly all runtimes support AppArmor from now on, so we should update the documentation accordingly. Signed-off-by: Sascha Grunert --- .../en/docs/tutorials/clusters/apparmor.md | 20 +++++-------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/content/en/docs/tutorials/clusters/apparmor.md b/content/en/docs/tutorials/clusters/apparmor.md index 2d1894b545d0e..184b50ec6e717 100644 --- a/content/en/docs/tutorials/clusters/apparmor.md +++ b/content/en/docs/tutorials/clusters/apparmor.md @@ -73,21 +73,11 @@ Make sure: tested with the upstream version, and does not promise support for other features. {{< /note >}} -3. Container runtime is Docker -- Currently the only Kubernetes-supported container runtime that - also supports AppArmor is Docker. As more runtimes add AppArmor support, the options will be - expanded. You can verify that your nodes are running docker with: - - ```shell - kubectl get nodes -o=jsonpath=$'{range .items[*]}{@.metadata.name}: {@.status.nodeInfo.containerRuntimeVersion}\n{end}' - ``` - ``` - gke-test-default-pool-239f5d02-gyn2: docker://1.11.2 - gke-test-default-pool-239f5d02-x1kf: docker://1.11.2 - gke-test-default-pool-239f5d02-xwux: docker://1.11.2 - ``` - - If the Kubelet contains AppArmor support (>= v1.4), it will refuse to run a Pod with AppArmor - options if the runtime is not Docker. +3. Container runtime supports AppArmor -- Currently all common Kubernetes-supported container + runtimes should support AppArmor, like {{< glossary_tooltip term_id="docker">}}, + {{< glossary_tooltip term_id="cri-o" >}} or {{< glossary_tooltip term_id="containerd" >}}. + Please refer to the corresponding runtime documentation and verify that the cluster fulfills + the requirements to use AppArmor. 4. Profile is loaded -- AppArmor is applied to a Pod by specifying an AppArmor profile that each container should be run with. If any of the specified profiles is not already loaded in the From 18a606211a9bb4015c9d82e856f651a995828a8a Mon Sep 17 00:00:00 2001 From: Luzhenxing Date: Tue, 12 Nov 2019 10:32:06 +0800 Subject: [PATCH 17/66] change version to param (#17540) --- content/en/docs/concepts/configuration/secret.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/concepts/configuration/secret.md b/content/en/docs/concepts/configuration/secret.md index bd9490ffd08e3..471f5e6c0f495 100644 --- a/content/en/docs/concepts/configuration/secret.md +++ b/content/en/docs/concepts/configuration/secret.md @@ -124,7 +124,7 @@ See [decoding a secret](#decoding-a-secret) for how to see the contents of a sec You can also create a Secret in a file first, in json or yaml format, and then create that object. The -[Secret](/docs/reference/generated/kubernetes-api/v1.12/#secret-v1-core) contains two maps: +[Secret](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#secret-v1-core) contains two maps: data and stringData. The data field is used to store arbitrary data, encoded using base64. The stringData field is provided for convenience, and allows you to provide secret data as unencoded strings. From f54a7ad16fffccbad2799433b43a3a4e1bff29d4 Mon Sep 17 00:00:00 2001 From: Mitesh Jain <47820816+miteshskj@users.noreply.github.com> Date: Tue, 12 Nov 2019 14:32:10 +0530 Subject: [PATCH 18/66] Fix #17250 - Add details for TaintNodesByCondition. (#17313) * Add details for TaintNodesByCondition. * Add glossary tip for taints and improve wording for TaintNodesByCondition. --- .../reference/access-authn-authz/admission-controllers.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/content/en/docs/reference/access-authn-authz/admission-controllers.md b/content/en/docs/reference/access-authn-authz/admission-controllers.md index 1e4a2ed7d0497..282b9ec0125e6 100644 --- a/content/en/docs/reference/access-authn-authz/admission-controllers.md +++ b/content/en/docs/reference/access-authn-authz/admission-controllers.md @@ -626,6 +626,10 @@ We strongly recommend using this admission controller if you intend to make use The `StorageObjectInUseProtection` plugin adds the `kubernetes.io/pvc-protection` or `kubernetes.io/pv-protection` finalizers to newly created Persistent Volume Claims (PVCs) or Persistent Volumes (PV). In case a user deletes a PVC or PV the PVC or PV is not removed until the finalizer is removed from the PVC or PV by PVC or PV Protection Controller. Refer to the [Storage Object in Use Protection](/docs/concepts/storage/persistent-volumes/#storage-object-in-use-protection) for more detailed information. +### TaintNodesByCondition {#taintnodesbycondition} {{< feature-state for_k8s_version="v1.12" state="beta" >}} + +This admission controller {{< glossary_tooltip text="taints" term_id="taint" >}} newly created Nodes as `NotReady` and `NoSchedule`. That tainting avoids a race condition that could cause Pods to be scheduled on new Nodes before their taints were updated to accurately reflect their reported conditions. + ### ValidatingAdmissionWebhook {#validatingadmissionwebhook} {{< feature-state for_k8s_version="v1.13" state="beta" >}} This admission controller calls any validating webhooks which match the request. Matching From f222648ebfb24406541cbbd15d5bded0179df817 Mon Sep 17 00:00:00 2001 From: Mitesh Jain <47820816+miteshskj@users.noreply.github.com> Date: Tue, 12 Nov 2019 14:34:07 +0530 Subject: [PATCH 19/66] Remove reference of unsupported k8s versions for CPUManager. (#17330) * Remove reference of unsupported k8s versions for CPUManager. * Update note for none-policy and add links. * Remove redundant note for alpha version. --- .../administer-cluster/cpu-management-policies.md | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/content/en/docs/tasks/administer-cluster/cpu-management-policies.md b/content/en/docs/tasks/administer-cluster/cpu-management-policies.md index 313e468636dc5..c1dd6a6f8ccc0 100644 --- a/content/en/docs/tasks/administer-cluster/cpu-management-policies.md +++ b/content/en/docs/tasks/administer-cluster/cpu-management-policies.md @@ -9,7 +9,7 @@ content_template: templates/task {{% capture overview %}} -{{< feature-state state="beta" >}} +{{< feature-state for_k8s_version="v1.12" state="beta" >}} Kubernetes keeps many aspects of how pods execute on nodes abstracted from the user. This is by design.  However, some workloads require @@ -44,14 +44,11 @@ management policies to determine some placement preferences on the node. ### Configuration -The CPU Manager is an alpha feature in Kubernetes v1.8. It was enabled by -default as a beta feature since v1.10. - The CPU Manager policy is set with the `--cpu-manager-policy` kubelet option. There are two supported policies: -* `none`: the default, which represents the existing scheduling behavior. -* `static`: allows pods with certain resource characteristics to be +* [`none`](#none-policy): the default policy. +* [`static`](#static-policy): allows pods with certain resource characteristics to be granted increased CPU affinity and exclusivity on the node. The CPU manager periodically writes resource updates through the CRI in @@ -78,11 +75,6 @@ using the [cpuset cgroup controller](https://www.kernel.org/doc/Documentation/cg System services such as the container runtime and the kubelet itself can continue to run on these exclusive CPUs.  The exclusivity only extends to other pods. {{< /note >}} -{{< note >}} -The alpha version of this policy does not guarantee static -exclusive allocations across Kubelet restarts. -{{< /note >}} - {{< note >}} CPU Manager doesn't support offlining and onlining of CPUs at runtime. Also, if the set of online CPUs changes on the node, From 04a42af74801ef51ca4923499b6fd705980f5969 Mon Sep 17 00:00:00 2001 From: Oleg Butuzov Date: Wed, 13 Nov 2019 03:08:11 +0200 Subject: [PATCH 20/66] Returning Cert Manager mention. (#17551) Affected URL https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/ Cert Manager mention was removed in kubernetes/website@8781518d as part of the merge conflict resolving. * Links to cert manager placed back (so we wouldn't see again `[cert-manager][cert-manager]` in article text). * In addition link to cert manager documentation is updated to official website (its still readthedocs but, its official by stand of team behind of the cert-manager) --- .../en/docs/tasks/administer-cluster/kubeadm/kubeadm-certs.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-certs.md b/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-certs.md index 494c02061b7fb..0569615321b25 100644 --- a/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-certs.md +++ b/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-certs.md @@ -141,7 +141,7 @@ If you're creating a new cluster, you can use a kubeadm [configuration file][con cluster-signing-key-file: /etc/kubernetes/pki/ca.key ``` -[cert-manager-issuer]: https://cert-manager.readthedocs.io/en/latest/tutorials/ca/creating-ca-issuer.html +[cert-manager-issuer]: https://docs.cert-manager.io/en/latest/tasks/issuers/setup-ca.html [kcm]: /docs/reference/command-line-tools-reference/kube-controller-manager/ [config]: https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2 @@ -212,6 +212,7 @@ It is the responsibility of the CA to specify [the correct cert usages][cert-tab After a certificate is signed using your preferred method, the certificate and the private key must be copied to the PKI directory (by default `/etc/kubernetes/pki`). +[cert-manager]: https://github.com/jetstack/cert-manager [openssl-ca]: https://superuser.com/questions/738612/openssl-ca-keyusage-extension [cfssl-usages]: https://github.com/cloudflare/cfssl/blob/master/doc/cmd/cfssl.txt#L170 [certs]: /docs/setup/best-practices/certificates/ From 16316ee1cac0c94f6f7949298990193a0041b274 Mon Sep 17 00:00:00 2001 From: Marc Bihlmaier <30314040+rdxmb@users.noreply.github.com> Date: Wed, 13 Nov 2019 02:12:11 +0100 Subject: [PATCH 21/66] Update kubeadm-upgrade.md (#17310) [BUGFIX] add fix missing command --- .../en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade.md b/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade.md index 43cb73a31dc25..fb5f47715b454 100644 --- a/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade.md +++ b/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade.md @@ -376,7 +376,7 @@ The `STATUS` column should show `Ready` for all your nodes, and the version numb If `kubeadm upgrade` fails and does not roll back, for example because of an unexpected shutdown during execution, you can run `kubeadm upgrade` again. This command is idempotent and eventually makes sure that the actual state is the desired state you declare. -To recover from a bad state, you can also run `kubeadm upgrade --force` without changing the version that your cluster is running. +To recover from a bad state, you can also run `kubeadm upgrade apply --force` without changing the version that your cluster is running. ## How it works From 49599227f2e59c19086e065a787b061ba09c39c3 Mon Sep 17 00:00:00 2001 From: diguage Date: Wed, 13 Nov 2019 09:20:11 +0800 Subject: [PATCH 22/66] update doc for client-go (#16937) --- .../docs/tasks/access-application-cluster/access-cluster.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/en/docs/tasks/access-application-cluster/access-cluster.md b/content/en/docs/tasks/access-application-cluster/access-cluster.md index c7598381b27cc..a460d9a989e14 100644 --- a/content/en/docs/tasks/access-application-cluster/access-cluster.md +++ b/content/en/docs/tasks/access-application-cluster/access-cluster.md @@ -155,8 +155,8 @@ client libraries. ### Go client -* To get the library, run the following command: `go get k8s.io/client-go//kubernetes`, see [INSTALL.md](https://github.com/kubernetes/client-go/blob/master/INSTALL.md#for-the-casual-user) for detailed installation instructions. See [https://github.com/kubernetes/client-go](https://github.com/kubernetes/client-go#compatibility-matrix) to see which versions are supported. -* Write an application atop of the client-go clients. Note that client-go defines its own API objects, so if needed, please import API definitions from client-go rather than from the main repository, e.g., `import "k8s.io/client-go/1.4/pkg/api/v1"` is correct. +* To get the library, run the following command: `go get k8s.io/client-go@kubernetes-`, see [INSTALL.md](https://github.com/kubernetes/client-go/blob/master/INSTALL.md#for-the-casual-user) for detailed installation instructions. See [https://github.com/kubernetes/client-go](https://github.com/kubernetes/client-go#compatibility-matrix) to see which versions are supported. +* Write an application atop of the client-go clients. Note that client-go defines its own API objects, so if needed, please import API definitions from client-go rather than from the main repository, e.g., `import "k8s.io/client-go/kubernetes"` is correct. The Go client can use the same [kubeconfig file](/docs/concepts/cluster-administration/authenticate-across-clusters-kubeconfig/) as the kubectl CLI does to locate and authenticate to the apiserver. See this [example](https://git.k8s.io/client-go/examples/out-of-cluster-client-configuration/main.go). From cb5153f1dfcb8f68a42bb86a88fe7ed8bc899724 Mon Sep 17 00:00:00 2001 From: Luzhenxing Date: Wed, 13 Nov 2019 09:22:11 +0800 Subject: [PATCH 23/66] remove OutOfDisk from node condition (#16879) --- content/en/docs/concepts/architecture/nodes.md | 1 - 1 file changed, 1 deletion(-) diff --git a/content/en/docs/concepts/architecture/nodes.md b/content/en/docs/concepts/architecture/nodes.md index f4bcb9dc41571..6a7118ca792e0 100644 --- a/content/en/docs/concepts/architecture/nodes.md +++ b/content/en/docs/concepts/architecture/nodes.md @@ -51,7 +51,6 @@ The `conditions` field describes the status of all `Running` nodes. Examples of | Node Condition | Description | |----------------|-------------| -| `OutOfDisk` | `True` if there is insufficient free space on the node for adding new pods, otherwise `False` | | `Ready` | `True` if the node is healthy and ready to accept pods, `False` if the node is not healthy and is not accepting pods, and `Unknown` if the node controller has not heard from the node in the last `node-monitor-grace-period` (default is 40 seconds) | | `MemoryPressure` | `True` if pressure exists on the node memory -- that is, if the node memory is low; otherwise `False` | | `PIDPressure` | `True` if pressure exists on the processes -- that is, if there are too many processes on the node; otherwise `False` | From 16a0204771f203c0955a5b24fb2db7f3a8782439 Mon Sep 17 00:00:00 2001 From: Oleg Butuzov Date: Wed, 13 Nov 2019 03:44:11 +0200 Subject: [PATCH 24/66] Link to `PodOverhead` conficuration page fix. (#17543) Issue page https://kubernetes.io/docs/concepts/containers/runtime-class/ --- content/en/docs/concepts/containers/runtime-class.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/concepts/containers/runtime-class.md b/content/en/docs/concepts/containers/runtime-class.md index 188afe5caecd4..4177d203a4bf0 100644 --- a/content/en/docs/concepts/containers/runtime-class.md +++ b/content/en/docs/concepts/containers/runtime-class.md @@ -176,7 +176,7 @@ Nodes](/docs/concepts/configuration/assign-pod-node/). {{< feature-state for_k8s_version="v1.16" state="alpha" >}} As of Kubernetes v1.16, RuntimeClass includes support for specifying overhead associated with -running a pod, as part of the [`PodOverhead`](/docs/concepts/configuration/pod-overhead.md) feature. +running a pod, as part of the [`PodOverhead`](/docs/concepts/configuration/pod-overhead/) feature. To use `PodOverhead`, you must have the PodOverhead [feature gate](/docs/reference/command-line-tools-reference/feature-gates/) enabled (it is off by default). From 504951ef77eaabce834ce3d0737e3e91df4d7cd7 Mon Sep 17 00:00:00 2001 From: Masa Taniguchi Date: Wed, 13 Nov 2019 12:22:11 +0900 Subject: [PATCH 25/66] ja-trans: content/ja/case-studies/appdirect (#16639) --- .../appdirect/appdirect_featured_logo.png | Bin 0 -> 5645 bytes content/ja/case-studies/appdirect/index.html | 70 ++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 content/ja/case-studies/appdirect/appdirect_featured_logo.png create mode 100644 content/ja/case-studies/appdirect/index.html diff --git a/content/ja/case-studies/appdirect/appdirect_featured_logo.png b/content/ja/case-studies/appdirect/appdirect_featured_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..724a8a75684f03e1c3b02ac0c85d924c6c7805ee GIT binary patch literal 5645 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 KRSJ}!JpTtL)KVA# literal 0 HcmV?d00001 diff --git a/content/ja/case-studies/appdirect/index.html b/content/ja/case-studies/appdirect/index.html new file mode 100644 index 0000000000000..687560aee7c9e --- /dev/null +++ b/content/ja/case-studies/appdirect/index.html @@ -0,0 +1,70 @@ +--- +title: AppDirect ケーススタディ + +linkTitle: AppDirect +case_study_styles: true +cid: caseStudies +css: /css/style_case_studies.css +logo: appdirect_featured_logo.png +featured: true +weight: 4 +quote: > + 私たちはたくさんの人からの関心を得るためにさまざまな戦略を試みています。Kubernetesとクラウドネイティブ技術は、いまやデファクトのエコシステムとみなされています。 +--- + +
+

ケーススタディ:
AppDirect:AppDirectはいかにしてKubernetessを活用し、エンジニアリングスタッフが10倍になるほどの成長を後押ししたのか
+ +

+ +
+ +
企業名  AppDirect     所在地  カリフォルニア州サンフランシスコ     業界 ソフトウェア +
+ +
+
+
+
+

課題

AppDirect はクラウドベースの製品やサービス向けにエンドツーエンドのeコマースプラットフォームを提供しています。2014年、ソフトウェア開発ディレクターであるPierre-Alexandre LacerteがAppDirectで働き始めた時、同社は「Tomcatベースのインフラにモノリシックなアプリケーションをデプロイしていて、リリースプロセス全体が必要以上に複雑になっていました」と彼は振り返ります。「たくさんのマニュアルステップがありました。1人のエンジニアがある機能を構築し、それから別のチームがその変更を取り込むといった具合です。 +そのため、提供までのパイプラインにボトルネックがあったのです。」 +これと同時に、エンジニアリングチームが大きくなっていき、その成長を後押しし加速する上でも、より良いインフラが必要であることに同社は気づいたのです。 +

ソリューション

Lacerteは言います。「私のアイデアは、チームがサービスをもっと高速にデプロイできる環境を作ろうぜ、というものです。そうすれば彼らも『そうだね、モノリスはもう建てたくないしサービスを構築したいよ』と言うでしょう。」 +彼らは、2016年初めKubernetes の採用を決定するにあたり、他のいくつかのテクノロジーを調査・検討し、プロトタイプを作りました。 Lacerteのチームはこのプラットフォームへの監視のためにPrometheus +モニタリングツールを統合しました。この次にあるのはトレーシングです。今やAppDirectは本番環境で50以上のマイクロサービス、15のKubernetesクラスターをAWS 上や世界中のオンプレミス環境で展開しています。

インパクト

Kubernetesプラットフォームは、エンジニアリングチームのここ数年の10倍成長を後押ししてきました。 +彼らが継続的に機能追加しているという事実と相まって「この新たなインフラがなければ、我々は大幅なスローダウンを強いられていたと思います」と、Lacerte氏は述べています。Kubernetesとサービス化へ移行していくことは、SCPコマンドを用いた、カスタムメイドで不安定なシェルスクリプトへの依存性を弱め、非常に高速になったことを意味していました。 +新しいバージョンをデプロイする時間は4時間から数分間に短縮されました。 +こういったことに加え同社は、開発者たちが自らのサービスとして仕立て上げるよう、数多くの努力をしてきました。「新しいサービスを始めるのにJira のチケットや他のチームとのミーティングはもはや必要ないのです」とLacerte氏は言います。 +以前、週あたり1〜30だった同社のデプロイ数は、いまや週1,600デプロイにまでなっています。 +また、同社はビジネスアワーにおけるトラフィックの増加に応じ、自社のマーケットプレイスや課金周りのモノリシックだったシステムを従来のEC2ホストからKubernetesに移し、オートスケール機能を活用することと併せてコスト削減を実現できました。 +
+
+
+
+
「計り知れないほどのエンジニアリング文化のシフトでしたが、規模とスピードを考えるとそのメリットは否定できません。」

- AppDirect ソフトウェア開発 ディレクター Pierre-Alexandre Lacerte
+
+
+
+

AppDirect は2009年以来、クラウドベースの製品やサービス向けのエンドツーエンドのeコマースプラットフォームによって、ComcastやGoDaddyといった組織がデジタルサプライチェーンをシンプルにすることに役立ってきました。


2014年にソフトウェア開発ディレクターのPierre-Alexandre Lacerteが働き始めたとき、AppDirectでは「tomcatベースのインフラにモノリシックなアプリケーションをデプロイしていて、リリースプロセス全体が必要以上に複雑なものとなっていました」と彼は振り返ります。「たくさんのマニュアルステップがありました。1人のエンジニアがある機能を構築し、Pull requestを作成、そしてQAもしくは別のエンジニアの手によってその機能を検証する、といった具合でした。さらにこれがマージされれば、また別の誰かがデプロイ作業の面倒をみることになるでしょう。そのため、提供までのパイプラインにボトルネックがいくつもありました。」

これと同時に、40人のエンジニアリングチームが大きくなっていくにつれ、その成長を後押しし加速する上でも、より良いインフラが必要となってくることに同社は気づいたのです。そのころプラットフォーム チームの一員であったLacerteには、Node.jsSpring Boot Javaといった、異なるフレームワークや言語を使いたいといった声が複数のチームから聞こえてくるようになってきました。同社の成長とスピードを両立するには、(チームが自律的に動き、自らがデプロイし、稼働中のサービスに責任を持てるような)よりよいインフラやシステムがこの会社には必要だということに彼はすぐに気づいたのです。
+
+
+
「正しいタイミングで正しい判断ができました。Kubernetesとクラウドネイティブ技術は、いまやデファクトのエコシステムとみなされています。スケールアウトしていく中で直面する新たな難題に取り組むにはどこに注力すべきか、私たちはわかっています。このコミュニティーはとても活発で、当社の優秀なチームをすばらしく補完してくれています。」

- AppDirect ソフトウェア開発者 Alexandre Gervais
+
+
+
Lacerteは当初から言っていました。「私のアイデアは、チームがサービスをもっと高速にデプロイできる環境を作ろう、というものです。そうすれば彼らもこう言うでしょう『そうだよ、モノリスを建てるなんてもうしたくないしサービスを構築したいんだ』と」(Lacerteは2019年に同社を退社)。

Lacerteのグループは運用チームと連携することで同社の AWSのインフラにより多くアクセスし、コントロールするようになりました。そして、いくつかのオーケストレーションテクノロジーのプロトタイプを作り始めたのです。「当時を振り返ると、Kubernetesはちょっとアンダーグラウンドというか、それほど知られていなかったように思います。」と彼は言います。「しかし、コミュニティーやPull requestの数、GitHub上でのスピードなどをよく見てみると勢いが増してきていることがわかりました。他のテクノロジーよりも管理がはるかに簡単であることもわかりました。」彼らは、Kubernetes上で ChefTerraform によるプロビジョニングを用いながら最初のいくつかのサービスを開発しました。その後さらにサービスも、自動化されるところも増えました。「韓国、オーストラリア、ドイツ、そしてアメリカ、私たちのクラスターは世界中にあります。」とLacerteは言います。「自動化は私たちにとって極めて重要です。」今彼らは大部分でKopsを使っていて、いくつかのクラウドプロバイダーから提供されるマネージドKubernetesサービスも視野に入れていれています。

今もモノリスは存在してはいますが、コミットや機能はどんどん少なくなってきています。あらゆるチームがこの新たなインフラ上でデプロイしていて、それらはサービスとして提供されるのが一般的です。今やAppDirectは本番環境で50以上のマイクロサービス、15のKubernetesクラスターをAWS上や世界中のオンプレミス環境で展開しています。

Kubernetesプラットフォームがデプロイ時間に非常に大きなインパクトを与えたことから、Lacerteの戦略が究極的に機能しました。カスタムメイドで不安定だった、SCPコマンドを用いたシェルスクリプトに対する依存性を弱めることで、新しいバージョンをデプロイする時間は4時間から数分にまで短縮されるようになったのです。こういったことに加え同社は、開発者たちが自らのサービスとして仕立て上げるよう、数多くの努力をしてきました。「新しいサービスを始めるのに、 Jiraのチケットや他のチームとのミーティングはもはや必要ないのです」とLacerteは言います。以前、週あたり1〜30だった同社のデプロイ数は、いまや週1,600デプロイにまでなっています。 +
+
+
+
「この新たなインフラがなければ、我々は大幅なスローダウンを強いられていたと思います。」

- AppDirect ソフトウェア開発 ディレクター Pierre-Alexandre Lacerte
+
+ +
+ +
さらに、Kubernetesプラットフォームは、エンジニアリングチームがこの数年で10倍も拡大したことを後押してきたともいえます。「AppDirectのコアバリューの1つとして掲げている『Ownership』には、モノリシックなコードベースに依存しないでサービス提供ができる、当社の能力が反映されていると思います。」とLacerteとこの取り組みに参加したソフトウェア開発者のAlexandre Gervaisは述べています。「いまや小さなチームでも当社のビジネスドメインモデルの非常に重要な部分を所有(own)しています。彼らは、コードベース全体についての知識は限られていますが、専門領域として切り離された形でチームをオペレーションしているのです。こういったやり方が、複雑性を緩和することに繋がっています。」彼らが継続的に機能追加しているという事実と相まって「この新たなインフラがなければ、我々は大幅なスローダウンを強いられていたと思います。」と、Lacerte氏は述べています。同社はビジネスアワーにおけるトラフィックの増加に応じ、自社のマーケットプレイスや課金周りのモノリシックだったシステムを従来のEC2ホストからKubernetesに移し、オートスケール機能を活用することと併せてコスト削減を実現することもできました

AppDirectのクラウドネイティブなスタックにはgRPCFluentdも含まれていて、そして今このチームはOpenCensusの立ち上げに取り組んでいるところです。このプラットフォームはすでにPrometheus で統合させているので、「どこかのチームがなんらかのサービスをデプロイするときには、通知、アラートやコンフィグ情報を受け取ることになります」とLacerteは言います。「たとえば、テスト環境ではSlackでメッセージが受け取れればいいですが、本番環境ではSlack メッセージと併せ呼び出しもしてもらいたいです。なので私たちはPagerDutyとのインテグレーションも行っています。サービスにおけるチームのオーナーシップが増していっているのです。」
+ +
+
「私たちは、『ブランチにコードをプッシュする』だけのカルチャーから、コードベースを越えた、刺激的な新しい責務に移行しました。機能や設定のデプロイ、アプリケーションとビジネスメトリクスのモニタリング、そして機能停止が起きた場合の電話サポートなどがそれにあたります。それは計り知れないほどのエンジニアリング文化のシフトでしたが、規模とスピードを考えるとそのメリットは否定できません。」

- AppDirect ソフトウェア開発 ディレクター Pierre-Alexandre Lacerte
+
+ +
もちろんそれは、より多くの責任も意味しています。「私たちはエンジニアに視野を広げるように依頼しました」とGervaisは言います。「私たちは、『ブランチにコードをプッシュする』だけのカルチャーから、コードベースを越えた、刺激的な新しい責務へ移行しました。機能やコンフィグのデプロイ、アプリケーションとビジネスメトリクスのモニタリング、そして機能停止が起きた場合の電話サポートなどがそれにあたります。「それは計り知れないほどのエンジニアリング文化のシフトでしたが、規模とスピードを考えるとそのメリットは否定できません。」

エンジニアリングのレベルが上がり続けるにつれて、プラットフォームチームは新たな課題を抱えることになります。Kubernetesプラットフォームが誰からでもアクセス可能で簡単に利用できる、それを確実にしていくことが求められるのです。「チームにより多くの人を追加したとき、彼らが効率的で生産的であり、プラットフォームの強化の仕方を知っていることを確実にするにはどうすればいいでしょうか?」とLacerteは問います。そのために、私たちにはエバンジェリストがいて、ドキュメントを用意して、いくつかのプロジェクトの事例を紹介できるようにしているのです。なので実際にデモをして、AMA(Ask Me Anything: 何でも聞いてほしい)セッションを設けるのです。私たちはたくさんの人からの関心を得るためにさまざまな戦略を試みています。」

Kubernetesの3年半もの旅を振り返り、GervaisはAppDirectが「正しいタイミングで正しい判断ができた」と感じています。「Kubernetesとクラウドネイティブ技術は、いまやデファクトのエコシステムとみなされています。スケールアウトしていく中で直面する新たな難題に取り組むにはどこに注力すべきか、私たちはわかっています。このコミュニティーはとても活発で、当社の優秀なチームをすばらしく補完してくれています。前進していくために私たちが注力すべきなのは、エコシステムから恩恵を受けながら、日々のオペレーションにビジネス的な付加価値を提供していくことでしょう。」
+
From 75c0e190c40737e2d61b8ba6350ff226f2aa7919 Mon Sep 17 00:00:00 2001 From: Oleg Butuzov Date: Wed, 13 Nov 2019 07:00:11 +0200 Subject: [PATCH 26/66] Link to the "Pod Overhead" configuration page fixed. (#17544) Issue available at https://kubernetes.io/ko/docs/concepts/containers/runtime-class/ and introduced by original English documentation (see kubernetes/website#17543) --- content/ko/docs/concepts/containers/runtime-class.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/ko/docs/concepts/containers/runtime-class.md b/content/ko/docs/concepts/containers/runtime-class.md index 71995aa22cce3..925854f667c59 100644 --- a/content/ko/docs/concepts/containers/runtime-class.md +++ b/content/ko/docs/concepts/containers/runtime-class.md @@ -171,7 +171,7 @@ https://github.com/kubernetes-sigs/cri-o/blob/master/cmd/crio/config.go {{< feature-state for_k8s_version="v1.16" state="alpha" >}} 쿠버네티스 v1.16 부터는, 런타임 클래스에는 구동 중인 파드와 관련된 오버헤드를 -지정할 수 있는 기능이 [`PodOverhead`](/docs/concepts/configuration/pod-overhead.md) 기능을 통해 지원된다. +지정할 수 있는 기능이 [`PodOverhead`](/docs/concepts/configuration/pod-overhead) 기능을 통해 지원된다. `PodOverhead`를 사용하려면, PodOverhead [기능 게이트](/docs/reference/command-line-tools-reference/feature-gates/)를 활성화 시켜야 한다. (기본 값으로는 비활성화 되어 있다.) From c1c108f044c00a2adc7073ef112490f13f6f0f09 Mon Sep 17 00:00:00 2001 From: SataQiu <1527062125@qq.com> Date: Wed, 13 Nov 2019 16:43:11 +0800 Subject: [PATCH 27/66] kubeadm: clarify the usage of kubeadm commands in our external etcd guide (#17541) --- .../tools/kubeadm/setup-ha-etcd-with-kubeadm.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/content/en/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm.md b/content/en/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm.md index 24adbbea628e4..b1f7f6bb801b4 100644 --- a/content/en/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm.md +++ b/content/en/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm.md @@ -8,6 +8,14 @@ weight: 70 {{% capture overview %}} +{{< note >}} +While kubeadm is being used as the management tool for external etcd nodes +in this guide, please note that kubeadm does not plan to support certificate rotation +or upgrades for such nodes. The long term plan is to empower the tool +[etcdadm](https://github.com/kubernetes-sigs/etcdadm) to manage these +aspects. +{{< /note >}} + Kubeadm defaults to running a single member etcd cluster in a static pod managed by the kubelet on the control plane node. This is not a high availability setup as the etcd cluster contains only one member and cannot sustain any members From ab1a66f158b3db9b0f4e94f0ac2055cd6eb6bf3b Mon Sep 17 00:00:00 2001 From: Supriya Sirbi Date: Wed, 13 Nov 2019 16:15:12 +0530 Subject: [PATCH 28/66] #13332 No diagram on /concepts/overview/components/ (#17157) * #13332 No diagram on /concepts/overview/components/ * Added Components of Kubernetes png file * Added svg file --- .../en/docs/concepts/overview/components.md | 5 + .../images/docs/components-of-kubernetes.png | Bin 0 -> 275571 bytes .../images/docs/components-of-kubernetes.svg | 1325 +++++++++++++++++ 3 files changed, 1330 insertions(+) create mode 100644 static/images/docs/components-of-kubernetes.png create mode 100644 static/images/docs/components-of-kubernetes.svg diff --git a/content/en/docs/concepts/overview/components.md b/content/en/docs/concepts/overview/components.md index cd2dd8e934d98..bf83ed3762a88 100644 --- a/content/en/docs/concepts/overview/components.md +++ b/content/en/docs/concepts/overview/components.md @@ -15,6 +15,11 @@ When you deploy Kubernetes, you get a cluster. This document outlines the various components you need to have a complete and working Kubernetes cluster. + +Here's the diagram of a Kubernetes cluster with all the components tied together. + +![Components of Kubernetes](/images/docs/components-of-kubernetes.png) + {{% /capture %}} {{% capture body %}} diff --git a/static/images/docs/components-of-kubernetes.png b/static/images/docs/components-of-kubernetes.png new file mode 100644 index 0000000000000000000000000000000000000000..e56dc79c7a624a2d958c5220c0f8d25f599335d2 GIT binary patch literal 275571 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 0ad8dbb133ec33bef6a9ea65d45a653cc0bd3400 Mon Sep 17 00:00:00 2001 From: Lucas CHERIFI Date: Wed, 13 Nov 2019 14:21:12 +0100 Subject: [PATCH 29/66] No need cask (#17536) Brew is able to install minikube without using cask. --- content/fr/docs/tasks/tools/install-minikube.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/fr/docs/tasks/tools/install-minikube.md b/content/fr/docs/tasks/tools/install-minikube.md index ae9f6ab54adb4..9304bab77af6a 100644 --- a/content/fr/docs/tasks/tools/install-minikube.md +++ b/content/fr/docs/tasks/tools/install-minikube.md @@ -76,7 +76,7 @@ Minikube supporte également une option `--vm-driver=none` qui exécute les comp La façon la plus simple d'installer Minikube sur macOS est d'utiliser [Homebrew](https://brew.sh): ```shell -brew cask install minikube +brew install minikube ``` Vous pouvez aussi l'installer sur macOS en téléchargeant un binaire statique: From f74e1d7a92c00e9a4954c90d3947d5b1ab1a2b73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20Burr=C3=A9?= Date: Wed, 13 Nov 2019 21:21:25 +0100 Subject: [PATCH 30/66] Updating the latest svcat versions in repo (#17564) * Updating the latest svcat versions in repo * using helm 3.0.0 --- .../service-catalog/install-service-catalog-using-helm.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/content/en/docs/tasks/service-catalog/install-service-catalog-using-helm.md b/content/en/docs/tasks/service-catalog/install-service-catalog-using-helm.md index 90572b0b88721..a4d94110f0ac9 100644 --- a/content/en/docs/tasks/service-catalog/install-service-catalog-using-helm.md +++ b/content/en/docs/tasks/service-catalog/install-service-catalog-using-helm.md @@ -45,8 +45,9 @@ helm search service-catalog If the installation was successful, the command should output the following: ``` -NAME VERSION DESCRIPTION -svc-cat/catalog 0.0.1 service-catalog API server and controller-manag... +NAME CHART VERSION APP VERSION DESCRIPTION +svc-cat/catalog 0.2.1 service-catalog API server and controller-manager helm chart +svc-cat/catalog-v0.2 0.2.2 service-catalog API server and controller-manager helm chart ``` ## Enable RBAC From 1f60267d158651431c69f96938703dde7524acb5 Mon Sep 17 00:00:00 2001 From: Oleg Butuzov Date: Thu, 14 Nov 2019 02:27:36 +0200 Subject: [PATCH 31/66] Release Notes (correction) (#17559) The link to the CRD page ( check link in CustomResourceDefaulting description of Beta section) corrected. --- content/en/docs/setup/release/notes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/setup/release/notes.md b/content/en/docs/setup/release/notes.md index c8680d50a0063..eaf15ce102320 100644 --- a/content/en/docs/setup/release/notes.md +++ b/content/en/docs/setup/release/notes.md @@ -241,7 +241,7 @@ The main themes of this release are: With WatchBookmark feature, clients are able to request watch events with BOOKMARK type. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. ([#79786](https://github.com/kubernetes/kubernetes/pull/79786), [@wojtek-t](https://github.com/wojtek-t)) - The server-side apply feature is now beta ([#81956](https://github.com/kubernetes/kubernetes/pull/81956), [@apelisse](https://github.com/apelisse)) - Server-side apply will now use the openapi provided in the CRD validation field to help figure out how to correctly merge objects and update ownership. ([#77354](https://github.com/kubernetes/kubernetes/pull/77354), [@jennybuckley](https://github.com/jennybuckley)) -- The `CustomResourceDefaulting` feature is promoted to beta and enabled by default. Defaults may be specified in structural schemas via the `apiextensions.k8s.io/v1` API. See https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/#specifying-a-structural-schema for details. ([#81872](https://github.com/kubernetes/kubernetes/pull/81872), [@sttts](https://github.com/sttts)) +- The `CustomResourceDefaulting` feature is promoted to beta and enabled by default. Defaults may be specified in structural schemas via the `apiextensions.k8s.io/v1` API. See https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/#specifying-a-structural-schema for details. ([#81872](https://github.com/kubernetes/kubernetes/pull/81872), [@sttts](https://github.com/sttts)) - Finalizer Protection for Service LoadBalancers is now in beta (enabled by default). This feature ensures the Service resource is not fully deleted until the correlating load balancer resources are deleted. ([#81691](https://github.com/kubernetes/kubernetes/pull/81691), [@MrHohn](https://github.com/MrHohn)) - Graduating Windows GMSA support from alpha to beta ([#82110](https://github.com/kubernetes/kubernetes/pull/82110), [@wk8](https://github.com/wk8)) From 453437bd3a48611032d32085bb23898473c753f1 Mon Sep 17 00:00:00 2001 From: Oleg Butuzov Date: Thu, 14 Nov 2019 03:09:36 +0200 Subject: [PATCH 32/66] PVCProtection related conent cleanup (#17558) After PVCProtection was deprecated in kubernetes/website@be48fb38e9a was removed task used to describe concept of it. Link wasn't removed everywhere (this PR removes it) and was living in site documentation since then. In Addition from tasks.yaml removed link pvc-protection articles (also not exists). --- .../docs/reference/command-line-tools-reference/feature-gates.md | 1 - 1 file changed, 1 deletion(-) diff --git a/content/en/docs/reference/command-line-tools-reference/feature-gates.md b/content/en/docs/reference/command-line-tools-reference/feature-gates.md index 15966fc7a03f7..dc87666abe43c 100644 --- a/content/en/docs/reference/command-line-tools-reference/feature-gates.md +++ b/content/en/docs/reference/command-line-tools-reference/feature-gates.md @@ -397,7 +397,6 @@ Each feature gate is designed for enabling/disabling a specific feature: - `ProcMountType`: Enables control over ProcMountType for containers. - `PVCProtection`: Enable the prevention of a PersistentVolumeClaim (PVC) from being deleted when it is still used by any Pod. - More details can be found [here](/docs/tasks/administer-cluster/storage-object-in-use-protection/). - `QOSReserved`: Allows resource reservations at the QoS level preventing pods at lower QoS levels from bursting into resources requested at higher QoS levels (memory only for now). - `ResourceLimitsPriorityFunction`: Enable a scheduler priority function that From 354935a07d0efa265e56ad1c5cd96b5bffe99c30 Mon Sep 17 00:00:00 2001 From: nralpaca <57569427+nralpaca@users.noreply.github.com> Date: Thu, 14 Nov 2019 13:09:35 +0900 Subject: [PATCH 33/66] Update images.md (#17567) Docer -> Docker Fixed Typo. --- content/ko/docs/concepts/containers/images.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/ko/docs/concepts/containers/images.md b/content/ko/docs/concepts/containers/images.md index 09143afa7d73d..d1abb8cbd6e3c 100644 --- a/content/ko/docs/concepts/containers/images.md +++ b/content/ko/docs/concepts/containers/images.md @@ -279,7 +279,7 @@ GCE 및 자동 노드 교체를 수행하는 다른 클라우드 제공자에 kubectl create secret docker-registry --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL ``` -만약 Docer 자격 증명 파일이 이미 존재한다면, 위의 명령을 사용하지 않고, +만약 Docker 자격 증명 파일이 이미 존재한다면, 위의 명령을 사용하지 않고, 자격 증명 파일을 쿠버네티스 시크릿으로 가져올 수 있다. [기존 Docker 자격 증명으로 시크릿 생성](/docs/tasks/configure-pod-container/pull-image-private-registry/#registry-secret-existing-credentials)에서 관련 방법을 설명하고 있다. `kubectl create secret docker-registry`는 From 7b3f45f56a365cce8744bb4087d3db27e8f86167 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20L=C3=A9one?= Date: Thu, 14 Nov 2019 10:27:35 +0100 Subject: [PATCH 34/66] Translate a contribute to French (#13398) * Translate a contribute to French * Corrections --- .../contribute/style/content-organization.md | 144 ++++++ .../style/hugo-shortcodes/example1.md | 9 + .../style/hugo-shortcodes/example2.md | 5 + .../contribute/style/hugo-shortcodes/index.md | 221 ++++++++++ .../style/hugo-shortcodes/podtemplate.json | 22 + .../docs/contribute/style/page-templates.md | 197 +++++++++ .../fr/docs/contribute/style/style-guide.md | 415 ++++++++++++++++++ .../docs/contribute/style/write-new-topic.md | 154 +++++++ 8 files changed, 1167 insertions(+) create mode 100644 content/fr/docs/contribute/style/content-organization.md create mode 100644 content/fr/docs/contribute/style/hugo-shortcodes/example1.md create mode 100644 content/fr/docs/contribute/style/hugo-shortcodes/example2.md create mode 100644 content/fr/docs/contribute/style/hugo-shortcodes/index.md create mode 100644 content/fr/docs/contribute/style/hugo-shortcodes/podtemplate.json create mode 100644 content/fr/docs/contribute/style/page-templates.md create mode 100644 content/fr/docs/contribute/style/style-guide.md create mode 100644 content/fr/docs/contribute/style/write-new-topic.md diff --git a/content/fr/docs/contribute/style/content-organization.md b/content/fr/docs/contribute/style/content-organization.md new file mode 100644 index 0000000000000..fd0efdad0737b --- /dev/null +++ b/content/fr/docs/contribute/style/content-organization.md @@ -0,0 +1,144 @@ +--- +title: Organisation du contenu +content_template: templates/concept +weight: 40 +--- + + +{{% capture overview %}} + +Ce site utilise Hugo. +Dans Hugo, l'[organisation du contenu](https://gohugo.io/content-management/organization/) est un concept de base. + +{{% /capture %}} + +{{% capture body %}} + +{{% note %}} +**Astuce Hugo:** Démarrez Hugo avec `hugo server --navigateToChanged` pour les sessions d'édition de contenu. +{{% /note %}} + +## Listes de pages + +### Ordre des pages + +Le menu latéral de la documentation, le navigateur de la page de documentation, etc. sont listés selon l'ordre de tri par défaut de Hugo, qui trie par poids (à partir de 1), par date (la plus récente en premier), et enfin par titre du lien. + +Si vous voulez déplacer une page ou une section vers le haut, placez un poids dans l'entête de la page : + +```yaml +title: My Page +weight: 10 +``` + +{{% note %}} +Pour les poids de page, il peut être judicieux de ne pas utiliser 1, 2, 3..., mais un autre intervalle, disons 10, 20, 30... Ceci vous permet d'insérer des pages où vous voulez plus tard. +{{% /note %}} + +### Menu principal de la documentation + +Le menu principal `Documentation` est construit à partir des sections ci-dessous `docs/` avec le drapeau `main_menu` placé dans l'entête du fichier de contenu de la section `_index.md' : + +```yaml +main_menu: true +``` + +Notez que le titre du lien est récupéré à partir du `linkTitle` de la page, donc si vous voulez qu'il soit différent du titre, changez-le dans le fichier du contenu cible : + +```yaml +main_menu: true +title: Page Title +linkTitle: Title used in links +``` + +{{% note %}} +Ce qui précède doit être fait par langue. +Si vous ne voyez pas votre section dans le menu, c'est probablement parce qu'elle n'est pas identifiée comme une section par Hugo. +Créez un fichier de contenu `_index.md` dans le dossier de la section. +{{% /note %}} + +### Menu latéral de documentation + +Le menu latéral de la barre de documentation est construit à partir de l'arborescence _de la section courante_ commençant sous `docs/`. + +Il affichera toutes les sections et leurs pages. + +Si vous ne voulez pas lister une section ou une page, mettez l'option `toc_hide` à `true` dans l'entête : + +```yaml +toc_hide: true +``` + +Lorsque vous naviguez vers une section contenant du contenu, la section ou la page spécifique (par exemple `_index.md`) est affichée. +Sinon, la première page à l'intérieur de cette section est affichée. + +### Navigateur de documentation + +Le navigateur de page sur la page d'accueil de la documentation est construit en utilisant toutes les sections et pages qui sont directement sous la section `docs`. + +Si vous ne voulez pas lister une section ou une page, mettez l'option `toc_hide` à `true` dans la partie avant : + +```yaml +toc_hide: true +``` + +### Menu principal + +Les liens du site dans le menu en haut à droite -- et aussi dans le pied de page -- sont construits par des recherches de pages. +C'est pour s'assurer que la page existe réellement. +Ainsi, si la section `case-studies` n'existe pas dans un site (langue), le lien n'apparaitra pas. + +## Paquets de pages + +In addition to standalone content pages (Markdown files), Hugo supports [Page Bundles](https://gohugo.io/content-management/page-bundles/). + +One example is [Custom Hugo Shortcodes](/docs/contribute/style/hugo-shortcodes/). +On considère qu'il s'agit d'un "paquet de feuilles". +Tout ce qui se trouve sous le répertoire, y compris le fichier `index.md', fera partie du paquet. +Cela inclut également les liens relatifs aux pages, les images qui peuvent être traitées, etc : + +```bash +en/docs/home/contribute/includes +├── example1.md +├── example2.md +├── index.md +└── podtemplate.json +``` + +Un autre exemple largement utilisé est celui du paquet `includes`. +Il définit `headless : true` dans l'entête, ce qui signifie qu'il n'obtient pas son propre URL. +Il n'est utilisé que dans d'autres pages. + +```bash +en/includes +├── default-storage-class-prereqs.md +├── federated-task-tutorial-prereqs.md +├── index.md +├── partner-script.js +├── partner-style.css +├── task-tutorial-prereqs.md +├── user-guide-content-moved.md +└── user-guide-migration-notice.md +``` + +Quelques notes importantes sur les fichiers dans les paquets : + +* Pour les paquets traduits, tous les fichiers non contenus manquants seront hérités des fichiers de langue anglaise. + Cela permet d'éviter les doublons. +* Tous les fichiers d'un bundle sont ce que Hugo appelle `Resources` et vous pouvez fournir des métadonnées par langue, comme les paramètres et le titre, même s'il ne prend pas en charge les entêtes (fichiers YAML etc.). + Voir [Page Resources Metadata](https://gohugo.io/content-management/page-resources/#page-resources-metadata). +* La valeur que vous obtenez de `.RelPermalink` d'un `Resource` est relative à la page. + Voir [Permalinks](https://gohugo.io/content-management/urls/#permalinks). + +## Styles + +La source `SASS` des feuilles de style pour ce site est stockée sous `src/sass` et peut être construite avec `make sass` (notez que Hugo aura bientôt le support `SASS`, voir . + +{{% /capture %}} + +{{% capture whatsnext %}} + +* [Hugo shortcodes personnalisés](/docs/contribute/style/hugo-shortcodes/) +* [Style guide](/docs/contribute/style/style-guide) + +{{% /capture %}} diff --git a/content/fr/docs/contribute/style/hugo-shortcodes/example1.md b/content/fr/docs/contribute/style/hugo-shortcodes/example1.md new file mode 100644 index 0000000000000..5892ad466f53b --- /dev/null +++ b/content/fr/docs/contribute/style/hugo-shortcodes/example1.md @@ -0,0 +1,9 @@ +--- +title: Exemple #1 +--- + +Ceci est un fichier de contenu **exemple** à l'intérieur du paquet de feuilles **includes**. + +{{< note >}} +Les fichiers de contenu inclus peuvent également contenir des codes abrégés. +{{< /note >}} \ No newline at end of file diff --git a/content/fr/docs/contribute/style/hugo-shortcodes/example2.md b/content/fr/docs/contribute/style/hugo-shortcodes/example2.md new file mode 100644 index 0000000000000..3c0021add5f5b --- /dev/null +++ b/content/fr/docs/contribute/style/hugo-shortcodes/example2.md @@ -0,0 +1,5 @@ +--- +title: Example #1 +--- + +Ceci est un autre **exemple** fichier de contenu à l'intérieur du paquet de feuilles **includes**. diff --git a/content/fr/docs/contribute/style/hugo-shortcodes/index.md b/content/fr/docs/contribute/style/hugo-shortcodes/index.md new file mode 100644 index 0000000000000..359066ba8ac7f --- /dev/null +++ b/content/fr/docs/contribute/style/hugo-shortcodes/index.md @@ -0,0 +1,221 @@ +--- +title: Hugo Shortcodes personnalisés +content_template: templates/concept +--- + +{{% capture overview %}} + +Cette page explique les shortcodes Hugo personnalisés pouvant être utilisés dans la documentation de Kubernetes Markdown. + +En savoir plus sur shortcodes dans la [documentation Hugo](https://gohugo.io/content-management/shortcodes). +{{% /capture %}} + +{{% capture body %}} + +## Etat de la fonctionnalité + +Dans une page de Markdown (fichier `.md`) de ce site, vous pouvez ajouter un code court pour afficher la version et l'état de la fonction documentée. + +### Feature state demo + +Ci-dessous se trouve une démo de l'extrait d'état de la fonctionnalité, qui affiche la fonctionnalité comme stable dans Kubernetes version 1.10. + +``` +{{}} +``` + +Rend à : + +{{< feature-state for_k8s_version="v1.10" state="stable" >}} + +Les valeurs valides pour `state` sont : + +* alpha +* beta +* deprecated +* stable + +### Feature state code + +La version de Kubernetes affichée par défaut est celle de la page ou du site. +Ceci peut être modifié en passant le paramètre for_k8s_version shortcode. + +```` +{{}} +```` + +Rend à : + +{{< feature-state for_k8s_version="v1.10" state="stable" >}} + +#### Alpha feature + +```` +{{}} +```` + +Rend à : + +{{< feature-state state="alpha" >}} + +#### Beta feature + +```` +{{}} +```` + +Rend à : + +{{< feature-state state="beta" >}} + +#### Stable feature + +```` +{{}} +```` + +Rend à : + +{{< feature-state state="stable" >}} + +#### Deprecated feature + +```` +{{}} +```` + +Rend à : + +{{< feature-state state="deprecated" >}} + +## Glossaire + +Vous pouvez faire référence à des termes du glossaire avec une inclusion qui met à jour et remplace automatiquement le contenu avec les liens pertinents de [notre glossaire](/fr/docs/reference/glossary/). +When the term is moused-over by someone using the online documentation, the glossary entry displays a tooltip. + +The raw data for glossary terms is stored at [https://github.com/kubernetes/website/tree/master/content/en/docs/reference/glossary](https://github.com/kubernetes/website/tree/master/content/en/docs/reference/glossary), with a content file for each glossary term. + +### Démonstration du glossaire + +Par exemple, le snippet suivant est rendu à {{< glossary_tooltip text="cluster" term_id="cluster" >}} avec une infobulle : + +````liquid +{{}} +```` + +## Tabs + +Dans une page de démarque (fichier `.md`) de ce site, vous pouvez ajouter un jeu d'onglets pour afficher plusieurs saveurs d'une solution donnée. + +The `tabs` shortcode takes these parameters: + +* `name`: Le nom tel qu'il apparaît sur l'onglet. +* `codelang`: Si vous fournissez un contenu interne au shortcode `tab`, vous pouvez indiquer à Hugo quel langage de code utiliser pour activer la coloration syntaxique. +* `include`: Le fichier à inclure dans l'onglet. + Si l'onglet vit dans un Hugo [leaf bundle](https://gohugo.io/content-management/page-bundles/#leaf-bundles), le fichier -- qui peut être n'importe quel type MIME supporté par Hugo -- est recherché dans le bundle lui-même. + Si ce n'est pas le cas, la page de contenu qui doit être incluse est recherchée par rapport à la page en cours. + Notez qu'avec le `include`, vous n'avez pas de contenu interne de shortcode et devez utiliser la syntaxe de fermeture automatique. + Par exemple, {{}}. + La langue doit être spécifiée sous `codelang` ou la langue est prise en compte en fonction du nom du fichier. + Les fichiers non contenus sont mis en surbrillance par défaut. +* Si votre contenu interne est Markdown, vous devez utiliser le délimiteur `%` pour entourer l'onglet. + Par exemple, `{{%/* tab name="Tab 1" %}}This is **markdown**{{% /tab */%}}` +* Vous pouvez combiner les variations mentionnées ci-dessus dans un ensemble d'onglets. + +Ci-dessous se trouve une démo du raccourci des onglets. + +{{< note >}} +L'onglet **name** d'une définition `tabs` doit être unique dans une page de contenu. +{{< /note >}} + +### Tabs demo: Code highlighting + +```go-text-template +{{}} +{{{< tab name="Tab 1" codelang="bash" >}} +echo "This is tab 1." +{{< /tab >}} +{{< tab name="Tab 2" codelang="go" >}} +println "This is tab 2." +{{< /tab >}}} +{{< /tabs */>}} +``` + +Rend à: + +{{< tabs name="tab_with_code" >}} +{{< tab name="Tab 1" codelang="bash" >}} +echo "This is tab 1." +{{< /tab >}} +{{< tab name="Tab 2" codelang="go" >}} +println "This is tab 2." +{{< /tab >}} +{{< /tabs >}} + +### Tabs demo: Inline Markdown and HTML + +```go-html-template +{{}} +{{% tab name="Markdown" %}} +This is **some markdown.** +{{< note >}} +It can even contain shortcodes. +{{< /note >}} +{{% /tab %}} +{{< tab name="HTML" >}} +

+{{< /tab >}} +{{< /tabs */>}} +``` + +Rend à: + +{{< tabs name="tab_with_md" >}} +{{% tab name="Markdown" %}} +This is **some markdown.** + +{{< note >}} +Il peut même contenir des shortcodes. +{{< /note >}} + +{{% /tab %}} +{{< tab name="HTML" >}} +
+

Plain HTML

+

This is some plain HTML.

+
+{{< /tab >}} +{{< /tabs >}} + +### Tabs demo: File include + +```go-text-template +{{}} +{{< tab name="Content File #1" include="example1" />}} +{{< tab name="Content File #2" include="example2" />}} +{{< tab name="JSON File" include="podtemplate" />}} +{{< /tabs */>}} +``` + +Rend à: + +{{< tabs name="tab_with_file_include" >}} +{{< tab name="Content File #1" include="example1" />}} +{{< tab name="Content File #2" include="example2" />}} +{{< tab name="JSON File" include="podtemplate" />}} +{{< /tabs >}} + +{{% /capture %}} + +{{% capture whatsnext %}} + +* En savoir plus sur [Hugo](https://gohugo.io/). +* En savoir plus sur [écrire un nouveau sujet](/docs/home/contribute/write-new-topic/). +* En savoir plus sur [l'utilisation des page templates](/docs/home/contribute/page-templates/). +* En savoir plus sur [staging your changes](/docs/home/contribute/stage-documentation-changes/) +* En savoir plus sur [créer une pull request](/docs/home/contribute/create-pull-request/). + +{{% /capture %}} diff --git a/content/fr/docs/contribute/style/hugo-shortcodes/podtemplate.json b/content/fr/docs/contribute/style/hugo-shortcodes/podtemplate.json new file mode 100644 index 0000000000000..dd18fd8fae6e9 --- /dev/null +++ b/content/fr/docs/contribute/style/hugo-shortcodes/podtemplate.json @@ -0,0 +1,22 @@ +{ + "apiVersion": "v1", + "kind": "PodTemplate", + "metadata": { + "name": "nginx" + }, + "template": { + "metadata": { + "labels": { + "name": "nginx" + }, + "generateName": "nginx-" + }, + "spec": { + "containers": [{ + "name": "nginx", + "image": "dockerfile/nginx", + "ports": [{"containerPort": 80}] + }] + } + } +} diff --git a/content/fr/docs/contribute/style/page-templates.md b/content/fr/docs/contribute/style/page-templates.md new file mode 100644 index 0000000000000..17cfdec6d1338 --- /dev/null +++ b/content/fr/docs/contribute/style/page-templates.md @@ -0,0 +1,197 @@ +--- +title: Utilisation des modèles de page +content_template: templates/concept +weight: 30 +card: + name: contribute + weight: 30 +--- + +{{% capture overview %}} + +Lorsque vous ajoutez de nouveaux sujets, appliquez-leur l'un des templates suivants. +Ceci standardise l'expérience utilisateur d'une page donnée. + +Les templates de page sont dans le répertoire [`layouts/partials/templates`](https://git.k8s.io/website/layouts/partials/templates) du dépôt [`kubernetes/website`](https://github.com/kubernetes/website). + +{{< note >}} +Chaque nouveau sujet doit utiliser un modèle. +Si vous n'êtes pas sûr du modèle à utiliser pour un nouveau sujet, commencez par un [template concept](#concept-template). +{{< /note >}} + +{{% /capture %}} + +{{% capture body %}} + +## Concept template + +Une page de concept explique certains aspects de Kubernetes. +Par exemple, une page conceptuelle peut décrire l'objet Kubernetes `Deployment` et expliquer le rôle qu'il joue en tant qu'application une fois qu'il est déployé, dimensionné et mis à jour. +Généralement, les pages conceptuelles n'incluent pas de séquences d'étapes, mais fournissent plutôt des liens vers des tâches ou des tutoriels. + +Pour écrire une nouvelle page concept, créez un fichier Markdown dans un sous-répertoire du répertoire `/content/fr/docs/concepts`, avec les caractéristiques suivantes : + +- Dans l'entête YAML de la page, définissez `content_template: templates/concept`. +- Dans le corps de la page, définissez les variables `capture` requises et les variables optionnelles que vous voulez inclure : + + | Variable | Required? | + |---------------|-----------| + | overview | yes | + | body | yes | + | whatsnext | no | + + Le corps de la page ressemblera à ceci (supprimez toutes les captures optionnelles dont vous n'avez pas besoin) : + + ``` + {{%/* capture overview */%}} + + {{%/* /capture */%}} + + {{%/* capture body */%}} + + {{%/* /capture */%}} + + {{%/* capture whatsnext */%}} + + {{%/* /capture */%}} + ``` + +- Remplissez chaque section de contenu. Suivez ces lignes directrices : + - Organiser le contenu avec les rubriques H2 et H3. + - Pour `overview`, définir le contexte du sujet à l'aide d'un seul paragraphe. + - Pour `body`, expliquer le concept. + - Pour `whatsnext`, fournir une liste à puces de sujets (5 au maximum) pour en apprendre davantage sur le concept. + +[Annotations](/docs/concepts/overview/working-with-objects/annotations/) est un exemple publié du template de concept. +Cette page utilise également le modèle de concept. + +## Template de tâche + +Une page de tâches montre comment faire une seule chose, généralement en donnant une courte séquence d'étapes. +Les pages de tâches ont une explication minimale, mais fournissent souvent des liens vers des sujets conceptuels qui fournissent un contexte et des connaissances connexes. + +Pour écrire une nouvelle page de tâches, créez un fichier Markdown dans un sous-répertoire du répertoire `/content/fr/docs/tasks`, avec les caractéristiques suivantes : + +- Dans l'entête YAML de la page, définissez `content_template: templates/task`. +- Dans le corps de la page, définissez les variables `capture` requises et les variables optionnelles que vous voulez inclure : + + | Variable | Required? | + |---------------|-----------| + | overview | yes | + | prerequisites | yes | + | steps | no | + | discussion | no | + | whatsnext | no | + + Le corps de la page ressemblera à ceci (supprimez toutes les captures optionnelles dont vous n'avez pas besoin) : + + ``` + {{%/* capture overview */%}} + + {{%/* /capture */%}} + + {{%/* capture prerequisites */%}} + + {{}} {{}} + + {{%/* /capture */%}} + + {{%/* capture steps */%}} + + {{%/* /capture */%}} + + {{%/* capture discussion */%}} + + {{%/* /capture */%}} + + {{%/* capture whatsnext */%}} + + {{%/* /capture */%}} + ``` + +- Dans chaque section, écrivez votre contenu. + Suivez les directives suivantes : + - Utilisez un minimum d'en-têtes H2 (avec deux caractères `#` en tête de liste). + Les sections elles-mêmes sont intitulées automatiquement par le modèle. + - Pour `overview`, utilisez un paragraphe pour définir le contexte de l'ensemble du sujet. + - Pour `prerequisites`, utiliser des listes à puces dans la mesure du possible. + Commencez à ajouter des prérequis supplémentaires sous la balise `include`. + Les conditions préalables par défaut incluent un cluster Kubernetes en cours d'exécution. + - Pour `steps`, utiliser des listes numérotées. + - Pour la discussion, utilisez le contenu normal pour développer l'information couverte dans la section `steps`. + - Pour `whatsnext`, donnez une liste de 5 sujets au maximum qui peuvent être intéressant à lire ensuite. + +Voici un exemple de sujet publié qui utilise le template de tasks [Using an HTTP proxy to access the Kubernetes API](/docs/tasks/access-kubernetes-api/http-proxy-access-api). + +## Tutorial template + +Une page de tutoriel montre comment atteindre un objectif qui est plus grand qu'une seule tâche. +Typiquement, une page de tutoriel comporte plusieurs sections, chacune d'entre elles ayant une séquence d'étapes. +Par exemple, un tutoriel pourrait fournir un aperçu d'un exemple de code qui illustre une certaine caractéristique de Kubernetes. +Les didacticiels peuvent inclure des explications au niveau de la surface, mais devraient être reliés à des sujets connexes sur les concepts pour des explications approfondies. + +Pour écrire une nouvelle page de tutoriel, créez un fichier Markdown dans un sous-répertoire du répertoire `/content/fr/docs/tutorials`, avec les caractéristiques suivantes : + +- Dans l'entête YAML de la page, définissez `content_template: templates/tutorial`. +- Dans le corps de la page, définissez les variables `capture` requises et les variables optionnelles que vous voulez inclure : + + | Variable | Required? | + |---------------|-----------| + | overview | yes | + | prerequisites | yes | + | objectives | yes | + | lessoncontent | yes | + | cleanup | no | + | whatsnext | no | + + Le corps de la page ressemblera à ceci (supprimez toutes les captures optionnelles dont vous n'avez pas besoin) : + + ``` + {{%/* capture overview */%}} + + {{%/* /capture */%}} + + {{%/* capture prerequisites */%}} + + {{}} {{}} + + {{%/* /capture */%}} + + {{%/* capture objectives */%}} + + {{%/* /capture */%}} + + {{%/* capture lessoncontent */%}} + + {{%/* /capture */%}} + + {{%/* capture cleanup */%}} + + {{%/* /capture */%}} + + {{%/* capture whatsnext */%}} + + {{%/* /capture */%}} + ``` + +- Dans chaque section, écrivez votre contenu. Suivez les directives suivantes : + - Utilisez un minimum d'en-têtes H2 (avec deux caractères `#` en tête de liste). + Les sections elles-mêmes sont intitulées automatiquement par le template. + - Pour `overview`, utiliser un paragraphe pour définir le contexte de l'ensemble du sujet. + - Pour `prerequisites`, utiliser des listes à puces dans la mesure du possible. + Ajoutez des prérequis supplémentaires en dessous de ceux inclus par défaut. + - Pour `objectives`, utiliser des listes à puces. + - Pour `lessoncontent`, utiliser un mélange de listes numérotées et de contenu narratif, le cas échéant. + - Pour `cleanup`, utiliser des listes numérotées pour décrire les étapes de nettoyage de l'état du cluster une fois la tâche terminée. + - Pour `whatsnext`, Donnez une liste de 5 sujets au maximum qu'il serait intéressant à lire ensuite. + +Voici un exemple de sujet publié qui utilise le modèle de tutoriel [Running a Stateless Application Using a Deployment](/docs/tutorials/stateless-application/run-stateless-application-deployment/). + +{{% /capture %}} + +{{% capture whatsnext %}} + +- En savoir plus sur le [style guide](/docs/contribute/style/style-guide/) +- En savoir plus sur l'[organisation des contenus](/docs/contribute/style/content-organization/) + +{{% /capture %}} diff --git a/content/fr/docs/contribute/style/style-guide.md b/content/fr/docs/contribute/style/style-guide.md new file mode 100644 index 0000000000000..27b530d0b65cb --- /dev/null +++ b/content/fr/docs/contribute/style/style-guide.md @@ -0,0 +1,415 @@ +--- +title: Documentation Style Guide +linktitle: Style guide +content_template: templates/concept +weight: 10 +card: + name: contribute + weight: 20 + title: Documentation Style Guide +--- + +{{% capture overview %}} +Cette page donne des directives de style d'écriture pour la documentation de Kubernetes. +Ce sont des lignes directrices, pas des règles. +Faites preuve de discernement et n'hésitez pas à proposer des modifications à ce document dans le cadre d'une pull request. + +Pour plus d'informations sur la création de nouveau contenu pour les documents Kubernetes, suivez les instructions sur[l'utilisation des templates](/fr/docs/contribute/style/page-templates/) et [création d'une pull request de documentation](/fr/docs/contribute/start/#improve-existing-content). +{{% /capture %}} + +{{% capture body %}} + +{{< note >}} +La documentation de Kubernetes utilise [Blackfriday Markdown Renderer](https://github.com/russross/blackfriday) ainsi que quelques [Hugo Shortcodes](/docs/home/contribute/includes/) pour prendre en charge les entrées de glossaire, les onglets et la représentation de l'état des fonctionnalités. +{{< /note >}} + +## Language + +La documentation de Kubernetes utilise l'anglais américain comme langue de référence. + +## Normes de formatage de la documentation + +### Utilisez le camel case pour les objets d'API + +Lorsque vous faites référence à un objet API, utilisez les mêmes lettres majuscules et minuscules que celles utilisées dans le nom d'objet réel. +Typiquement, les noms des objets de l'API utilisent le [camel case](https://en.wikipedia.org/wiki/Camel_case). + +Ne divisez pas le nom de l'objet API en mots séparés. +Par exemple, utilisez PodTemplateList, et pas Pod Template List. + +Référez-vous aux objets de l'API sans dire "objet", à moins que l'omission de "objet" n'entraîne une construction maladroite. + +| À faire | À éviter | +|--------------------------------------------------|-------------------------------------------| +| Le Pod dispose de deux conteneurs. | La pod a deux conteneurs. | +| Le Deployment est responsable de ce qui suit ... | L'objet Déployment est responsable de ... | +| Une PodList est une liste de Pod. | Une Pod List est une liste de pods. | +| Les deux ContainerPorts ... | Les deux objets ContainerPort ... | +| Les deux objets ContainerStateTerminated ... | Les deux ContainerStateTerminateds ... | + +### Use angle brackets for placeholders + +Use angle brackets for placeholders. +Tell the reader what a placeholder represents. + +1. Affiche des informations sur un Pod : + + kubectl describe pod + + where `` is the name of one of your Pods. + +### Use bold for user interface elements + +| À faire | À éviter | +|-------------------------|-----------------------| +| Cliquez sur **Fork**. | Cliquez sur "Fork". | +| Sélectionnez **Other**. | Sélectionnez 'Other'. | + +### Utiliser l'italique pour définir ou introduire de nouveaux termes. + +| À faire | À éviter | +|---------------------------------------------|-----------------------------------------------| +| Un _cluster_ est un ensemble de nœuds ... | Un "cluster" est un ensemble de nœuds ... | +| Ces composantes forment le _control plane_. | Ces composantes forment le **control plane**. | + +### Utiliser un style de code pour les noms de fichiers, les répertoires et les chemins d'accès + + + + + + +
À faireÀ éviter
Open the envars.yaml file.Open the envars.yaml file.
Aller dans le répertoire /docs/tutorials.Go to the /docs/tutorials directory.
Open the /_data/concepts.yaml file.Open the /_data/concepts.yaml file.
+ +### Utiliser la norme internationale pour la ponctuation entre guillemets + +| À faire | À éviter | +|-------------------------------------------------|-------------------------------------------------| +| events are recorded with an associated "stage". | events are recorded with an associated "stage." | +| The copy is called a "fork". | The copy is called a "fork." | + +## Inline code formatting + +### Use code style for inline code and commands + +For inline code in an HTML document, use the `` tag. In a Markdown document, use the backtick (`). + + + + + + +
À faireÀ éviter
The kubectl run command creates a Deployment.The "kubectl run" command creates a Deployment.
For declarative management, use kubectl apply.For declarative management, use "kubectl apply".
Enclose code samples with triple backticks. (```)Enclose code samples with any other syntax.
+ +{{< note >}} +Le site Web prend en charge la coloration syntaxique pour les échantillons de code, mais la spécification d'une langue est facultative. +{{< /note >}} + +### Utiliser le style de code pour les noms de champs d'objets + + + + + +
À faireÀ éviter
Set the value of the replicas field in the configuration file.Définissez la valeur du champ "replicas" dans le fichier de configuration.
The value of the exec field is an ExecAction object.La valeur du champ "exec" est un objet ExecAction.
+ +### Utiliser le style normal pour les chaînes de caractères et les valeurs de champs entiers + +Pour les valeurs de champ de type chaîne de caractères ou entier, utilisez un style normal sans guillemets. + +| À faire | À éviter | +|----------------------------------------------------------|---------------------------------------------------------------------| +| Set the value of imagePullPolicy to Always. | Set the value of imagePullPolicy to "Always". | +| Set the value of image to nginx:1.8. | Set the value of image to nginx:1.8. | +| Set the value of the replicas field to 2. | Set the value of the replicas field to 2. | + +## Code snippet formatting + +### Ne pas inclure l'invite de commande + +| À faire | À éviter | +|------------------|--------------------| +| kubectl get pods | $ kubectl get pods | + +### Séparer les commandes de la sortie + +Vérifiez que le Pod fonctionne sur le nœud que vous avez choisi : + + kubectl get pods --output=wide + +La sortie est similaire à celle-ci : + + NAME READY STATUS RESTARTS AGE IP NODE + nginx 1/1 Running 0 13s 10.200.0.4 worker0 + +### Versioning Kubernetes examples + +Code examples and configuration examples that include version information should be consistent with the accompanying text. + +If the information is version specific, the Kubernetes version needs to be defined in the `prerequisites` section of the [Task template](/docs/contribute/style/page-templates/#task-template) or the [Tutorial template] (/docs/contribute/style/page-templates/#tutorial-template). +Once the page is saved, the `prerequisites` section is shown as **Before you begin**. + +Pour spécifier la version de Kubernetes pour une tâche ou une page de tutoriel, incluez `min-kubernetes-server-version` dans l'entête de la page. + +Si l'exemple YAML se trouve dans un fichier autonome, recherchez et passez en revue les sujets qui l'incluent comme référence. +Vérifiez que toutes les rubriques utilisant le YAML autonome ont les informations de version appropriées définies. +Si un fichier YAML autonome n'est référencé à partir d'aucun sujet, pensez à le supprimer au lieu de le mettre à jour. + +Par exemple, si vous écrivez un tutoriel pertinent pour Kubernetes version 1.8, la première partie de votre fichier de démarque doit ressembler à ceci : + +```yaml +--- +title: +min-kubernetes-server-version: v1.8 +--- +``` + +Dans les exemples de code et de configuration, n'incluez pas de commentaires sur les versions alternatives. +Veillez à ne pas inclure d'énoncés incorrects dans vos exemples sous forme de commentaires, tels que : + +```yaml +apiVersion: v1 # earlier versions use... +kind: Pod +... +``` + +## Liste de mots Kubernetes.io + +Une liste de termes et de mots spécifiques à Kubernetes à utiliser de manière cohérente sur le site. + +| Term | Usage | +|------------|-----------------------------------------------------| +| Kubernetes | Kubernetes a toujours une majuscule. | +| Docker | Docker a toujours une majuscule. | +| SIG Docs | SIG Docs plutôt que SIG-DOCS ou d'autres variantes. | + +## Shortcodes + +Hugo [Shortcodes](https://gohugo.io/content-management/shortcodes) help create different rhetorical appeal levels. +Notre documentation prend en charge trois shortcodes différents dans cette catégorie : **Note** {{}}, **Mise en garde** {{}}, et **Avertissement** {{}}. + +1. Entourez le texte d'un raccourci d'ouverture et de fermeture. + +2. Utilisez la syntaxe suivante pour appliquer un style : + + ``` + {{}} + Il n'est pas nécessaire d'inclure un préfixe ; le shortcode fournit automatiquement (Note:, Caution:, etc.). + {{}} + ``` + +La sortie est : + +{{< note >}} +Le préfixe que vous choisissez est le même que le texte de la balise. +{{< /note >}} + +### Note + +Utilisez {{}} pour mettre en surbrillance un conseil ou une information qu'il peut être utile de connaître. + +Par exemple : + +``` +{{}} +Vous pouvez _toujours_ utiliser Markdown à l'intérieur de ces légendes. +{{}} +``` + +La sortie est : + +{{< note >}} +Vous pouvez _toujours_ utiliser Markdown à l'intérieur de ces légendes. +{{< /note >}} + +### Mise en garde + +Utilisez {{}} pour attirer l'attention sur une information importante afin d'éviter les pièges. + +Par exemple : + +``` +{{}} +Le style de légende ne s'applique qu'à la ligne directement au-dessus de la balise. +{{}} +``` + +La sortie est : + +{{< caution >}} +Le style de légende ne s'applique qu'à la ligne directement au-dessus de la balise. +{{< /caution >}} + +### Avertissement + +Utilisez {{}} pour indiquer un danger ou une information cruciale à suivre. + +Par exemple : + +``` +{{}} +Méfiez-vous. +{{}} +``` + +La sortie est : + +{{< warning >}} +Méfiez-vous. +{{< /warning >}} + +### Katacoda Embedded Live Environment + +Ce bouton permet aux utilisateurs d'exécuter Minikube dans leur navigateur en utilisant le [Katacoda Terminal](https://www.katacoda.com/embed/panel). +Il abaisse le seuil d'entrée en permettant aux utilisateurs d'utiliser Minikube en un seul clic au lieu de passer par l'ensemble du processus d'installation Minikube et Kubectl localement. + +The Embedded Live Environment is configured to run `minikube start` and lets users complete tutorials in the same window as the documentation. + +{{< caution >}} +La session est limitée à 15 minutes. +{{< /caution >}} + +For example: + +``` +{{}} +``` + +La sortie est : + +{{< kat-button >}} + +## Common Shortcode Issues + +### Ordered Lists + +Un Shortcode interrompra les listes numérotées à moins que vous ne mettiez une indentation de 4 espaces avant l'avis et l'étiquette. + +Par exemple : + + 1. Préchauffer le four à 350˚F + + 1. Préparer la pâte et la verser dans un moule à charnière. + {{}}**Note:** Graisser la casserole pour de meilleurs résultats.{{}} + + 1. Cuire au four de 20 à 25 minutes ou jusqu'à ce que ce soit pris. + +La sortie est : + +1. Préchauffer le four à 350˚F + +1. Préparer la pâte et la verser dans un moule à charnière. + + {{< note >}}Graisser la casserole pour de meilleurs résultats.{{< /note >}} + +1. Cuire au four de 20 à 25 minutes ou jusqu'à ce que ce soit pris. + +### Expressions Includes + +Les Shortcodes dans les expressions d'include brisera la compilation du site. +Vous devez les insérer dans le document parent, avant et après avoir appelé l'include. +Par exemple : + +``` +{{}} +{{}} +{{}} +``` + +## Meilleures pratiques en matière de contenu + +Cette section contient des suggestions de pratiques exemplaires pour un contenu clair, concis et cohérent. + +### Utiliser le présent + +| À faire | À éviter | +|--------------------------------|----------------------------------| +| Cette commande lance un proxy. | Cette commande lancera un proxy. | + +Exception : Utilisez le futur ou le passé s'il est nécessaire pour transmettre le sens correct. + +### Utiliser la voix active + +| À faire | À éviter | +|------------------------------------------------------|-----------------------------------------------------------| +| Vous pouvez explorer l'API à l'aide d'un navigateur. | L'API peut être explorée à l'aide d'un navigateur. | +| Le fichier YAML spécifie le nombre de répliques. | Le nombre de répliques est spécifié dans le fichier YAML. | + +Exception : Utilisez la voix passive si la voix active conduit à une construction maladroite. + +### Utiliser un langage simple et direct + +Utilisez un langage simple et direct. +Évitez d'utiliser des expressions inutiles, comme "s'il vous plaît". + +| À faire | À éviter | +|-----------------------------------|-----------------------------------------------------------| +| Pour créer un ReplicaSet, ... | Afin de créer un ReplicaSet, ... | +| Voir le fichier de configuration. | Veuillez consulter le fichier de configuration. | +| Voir les Pods. | Avec cette prochaine commande, nous allons voir les Pods. | + +### S'adresser au lecteur en tant que "vous" + +| À faire | À éviter | +|------------------------------------------------|---------------------------------------------| +| Vous pouvez créer un déploiement en ... | Nous allons créer un déploiement en ... | +| Dans l'édition précédente, vous pouvez voir... | Dans la sortie précédente, on peut voir ... | + +### Évitez les phrases latines + +Préférez les termes français aux abréviations latines. + +| À faire | À éviter | +|-------------------|-----------| +| Par exemple, ... | e.g., ... | +| C'est à dire, ... | i.e., ... | + +Exception : Utilisez "etc." pour et cetera. + +## Tendances à éviter + +### Évitez d'utiliser "nous" + +L'utilisation du "nous" dans une phrase peut prêter à confusion, car le lecteur pourrait ne pas savoir s'ils font partie du "nous" que vous décrivez. + +| À faire | À éviter | +|-------------------------------------------------------|-----------------------------------------------------------| +| La version 1.4 comprend ... | Dans la version 1.4, nous avons ajouté ... | +| Kubernetes offre une nouvelle fonctionnalité pour ... | Nous proposons une nouvelle fonctionnalité ... | +| Cette page vous apprend à utiliser les Pods. | Dans cette page, nous allons en savoir plus sur les Pods. | + +### Évitez le jargon et les expressions idiomatiques + +Certains lecteurs parlent le français comme seconde langue. +Évitez le jargon et les expressions idiomatiques pour les aider à mieux comprendre. + +| À faire | À éviter | +|---------------------------|----------------------------| +| En interne, ... | Sous le capot, ... | +| Créer un nouveau cluster. | Monter un nouveau cluster. | + +### Évitez les déclarations sur l'avenir + +Évitez de faire des promesses ou de donner des conseils sur l'avenir. +Si vous avez besoin de parler d'une fonctionnalité alpha, placez le texte sous un titre qui l'identifie comme une fonctionnalité alpha. + +### Évitez les déclarations qui seront bientôt périmées + +Évitez les mots comme "actuellement" et "nouveau". +Une caractéristique qui est nouvelle aujourd'hui pourrait ne pas être considérée comme nouvelle dans quelques mois. + +| À faire | À éviter | +|-------------------------------------|-------------------------------------------------------| +| Dans la version 1.4, ... | Dans la version actuelle, ... | +| La fonction de fédération offre ... | La nouvelle fonctionnalité de la Fédération offre ... | + +{{% /capture %}} + +{{% capture whatsnext %}} + +* En savoir plus sur [writing a new topic](/docs/home/contribute/write-new-topic/). +* En savoir plus sur [using page templates](/docs/home/contribute/page-templates/). +* En savoir plus sur [staging your changes](/docs/home/contribute/stage-documentation-changes/) +* En savoir plus sur [creating a pull request](/docs/home/contribute/create-pull-request/). + +{{% /capture %}} diff --git a/content/fr/docs/contribute/style/write-new-topic.md b/content/fr/docs/contribute/style/write-new-topic.md new file mode 100644 index 0000000000000..d5f1575b1c2ac --- /dev/null +++ b/content/fr/docs/contribute/style/write-new-topic.md @@ -0,0 +1,154 @@ +--- +title: Rédiger une nouveau sujet +content_template: templates/task +weight: 20 +--- + +{{% capture overview %}} +Cette page montre comment créer un nouveau sujet pour la documentation Kubernetes. +{{% /capture %}} + +{{% capture prerequisites %}} +Créez un fork du dépôt de la documentation de Kubernetes comme décrit dans [Commencez à contribuer](/fr/docs/contribute/start/). +{{% /capture %}} + +{{% capture steps %}} + +## Choisir un type de page + +Alors que vous vous préparez à écrire un nouveau sujet, pensez au type de page qui convient le mieux à votre contenu : + + + + + + + + + + + + + + + + + + +
ConceptUne page de concept explique certains aspects de Kubernetes. Par exemple, une page conceptuelle pourrait décrire l'objet Kubernetes `Déploiement` et expliquer le rôle qu'il joue en tant qu'application pendant son déploiement, sa mise à l'échelle, ou sa mise à jour. Généralement, les pages conceptuelles n'incluent pas de séquences d'étapes, mais fournissent plutôt des liens vers des tâches ou des tutoriels. Pour un exemple de sujet de concept, voir Noeuds.
TâcheUne page de tâches montre comment faire une seule chose. L'idée est de donner aux lecteurs une séquence d'étapes qu'ils peuvent suivre en lisant la page. Une page de tâches peut être courte ou longue, à condition qu'elle reste concentrée sur un domaine. Dans une page de tâches, il est acceptable de mélanger de brèves explications avec les étapes à effectuer, mais si vous avez besoin de fournir une longue explication, vous devriez le faire dans un sujet de concept. Les tâches et les concepts connexes devraient être reliés les uns aux autres. Pour un exemple d'une courte page de tâches, consultez Configurer un pod en utilisant un volume pour le stockage +. Pour un exemple de page de tâches plus longue, voir Configure Liveness and Readiness Probes
TutorielUne page de tutoriel montre comment atteindre un objectif qui relie plusieurs fonctionnalités de Kubernetes. Un tutoriel peut fournir plusieurs séquences d'étapes que les lecteurs peuvent suivre en lisant la page. Ou il peut fournir des explications sur des éléments de code connexes. Par exemple, un tutoriel pourrait fournir un aperçu d'un exemple de code. Un tutoriel peut inclure de brèves explications sur les caractéristiques de Kubernetes qui sont liées entre elles, mais devrait comporter des liens vers des sujets de concepts connexes pour une explication approfondie des caractéristiques individuelles.
+ +Utilisez un modèle pour chaque nouvelle page. +Chaque type de page a un [template](/docs/contribute/style/page-templates/) que vous pouvez utiliser lorsque vous écrivez votre sujet. +L'utilisation de templates permet d'assurer la cohérence entre les sujets d'un type donné. + +## Choisir un titre et un nom de fichier + +Choisissez un titre qui contient les mots-clés que vous voulez que les moteurs de recherche trouvent. +Créez un nom de fichier qui utilise les mots de votre titre séparés par des tirets. +Par exemple, le sujet avec titre [Using an HTTP Proxy to Access the Kubernetes API](/docs/tasks/access-kubernetes-api/http-proxy-access-api/) has filename `http-proxy-access-api.md`. +Vous n'avez pas besoin de mettre "kubernetes" dans le nom du fichier, car "kubernetes" est déjà dans l'URL du sujet, par exemple : + + /docs/tasks/access-kubernetes-api/http-proxy-access-api/ + +## Ajout du titre du sujet à l'entête + +Dans votre sujet, insérez un champ `title` dans l'entête [frontmatter](https://jekyllrb.com/docs/frontmatter/). +L'entête est le bloc YAML qui se trouve entre les lignes à trois tirets en haut de la page. +En voici un exemple : + + --- + title: Using an HTTP Proxy to Access the Kubernetes API + --- + +## Choisir un répertoire + +En fonction de votre type de page, placez votre nouveau fichier dans un sous-répertoire de l'un d'entre eux : + +* /content/en/docs/tasks/ +* /content/en/docs/tutorials/ +* /content/en/docs/concepts/ + +Vous pouvez placer votre fichier dans un sous-répertoire existant ou en créer un nouveau. + +## Placer votre sujet dans la table des matières + +La table des matières est construite dynamiquement en utilisant la structure de répertoire de la source de documentation. +Les répertoires de niveau supérieur sous `/content/fr/docs/` créent une navigation de niveau supérieur, et les sous-répertoires ont chacun des entrées dans la table des matières. + +Chaque sous-répertoire possède un fichier `_index.md`, qui représente la page d'accueil du contenu d'un sous-répertoire donné. +Le `_index.md` n'a pas besoin d'un template. +Il peut contenir une vue d'ensemble du contenu des rubriques du sous-répertoire. + +Les autres fichiers d'un répertoire sont triés par ordre alphabétique par défaut. +Ce n'est presque jamais le meilleur ordre. +Pour contrôler le tri relatif des sujets dans un sous-répertoire, définissez la clé `weight:` front-matter sur un entier. +Généralement, nous utilisons des multiples de 10, pour tenir compte de l'ajout de sujets plus tard. +Par exemple, un sujet ayant un poids de `10` sera précédé d'un sujet ayant un poids de `20`. + +## Intégrer du code dans votre sujet + +Si vous voulez inclure du code dans votre sujet, vous pouvez incorporer le code dans votre fichier directement à l'aide de l'option de syntaxe de bloc de code de markdown. +Ceci est recommandé dans les cas suivants (liste non exhaustive) : + +* Le code indique la sortie d'une commande telle que `kubectl get deploy mydeployment -o json | jq '.status'`. +* Le code n'est pas assez générique pour que les utilisateurs puissent l'essayer. + Par exemple, vous pouvez intégrer le fichier YAML pour créer un Pod qui dépend d'une implementation [Flexvolume](/docs/concepts/storage/volumes#flexvolume) spécifique. +* Le code est un exemple incomplet parce qu'il a pour but de mettre en évidence une partie d'un fichier plus volumineux. + Par exemple, lorsque vous décrivez des façons de personnaliser l'attribut [PodSecurityPolicy](/docs/tasks/administer-cluster/sysctl-cluster/#podsecuritypolicy) pour certaines raisons, vous pouvez fournir un court snippet directement dans le fichier. +* Le code n'est pas destiné à être testé par les utilisateurs pour d'autres raisons. + Par exemple, lorsque vous décrivez comment un nouvel attribut doit être ajouté à une ressource à l'aide de la commande `kubectl edit`, vous pouvez fournir un court exemple qui inclut seulement l'attribut à ajouter. + +## Inclure le code d'un autre fichier + +Une autre façon d'inclure du code dans votre sujet est de créer un nouveau fichier d'exemple complet (ou un groupe de fichiers d'exemple), puis de référencer l'exemple de votre sujet. +Utilisez cette méthode pour inclure des exemples de fichiers YAML lorsque l'échantillon est générique et réutilisable, et que vous voulez favoriser leur utilisation. + +Lors de l'ajout d'un nouveau fichier d'exemple autonome, tel qu'un fichier YAML, placez le code dans l'un des sous-répertoires `/examples/` où `` est la langue utilisé dans votre page. +Dans votre fichier, utilisez le shortcode `codenew` : + +
{{< codenew file="<RELPATH>/my-example-yaml>" >}}
+ +où `` est le chemin vers le fichier à inclure, relatif au répertoire `examples`. +Le shortcode Hugo suivant fait référence à un fichier YAML situé sur `/content/en/examples/pods/storage/gce-volume.yaml`. + +```none +{{}} +``` + +{{< note >}} +Pour afficher les shortcodes Hugo bruts comme dans l'exemple ci-dessus et empêcher Hugo de les interpréter, utilisez des commentaires de style C directement après les caractères `<` et avant les caractères `>`. +Voir le code de cette page pour un exemple. +{{< /note >}} + +## Montrer comment créer un objet API à partir d'un fichier de configuration + +Si vous avez besoin de démontrer comment créer un objet API basé sur un fichier de configuration, placez le fichier de configuration dans l'un des sous-répertoires sous `/examples`. + +Dans votre sujet, affichez cette commande : + +``` +kubectl create -f https://k8s.io/examples/pods/storage/gce-volume.yaml +``` + +{{< note >}} +Lors de l'ajout de nouveaux fichiers YAML dans le répertoire `/examples`, assurez-vous que le fichier est également inclus dans le fichier `/examples_test.go`. +La CI pour le site Web exécute automatiquement ce scénario de test lorsque des PRs sont soumises pour s'assurer que tous les exemples réussissent les tests. +{{< /note >}} + +Pour un exemple d'un sujet qui utilise cette technique, voir [Running a Single-Instance Stateful Application](/docs/tutorials/stateful-application/run-stateful-application/). + +## Ajouter des images à un sujet + +Placez les fichiers images dans le répertoire `/images`. +Le format d'image préféré est SVG. + +{{% /capture %}} + +{{% capture whatsnext %}} + +* En savoir plus sur [l'utilisation des templates de pages](/docs/home/contribute/page-templates/). +* En savoir plus sur [le staging de vos changements](/docs/home/contribute/stage-documentation-changes/). +* En savoir plus sur [la création d'une pull request](/docs/home/contribute/create-pull-request/). + +{{% /capture %}} From b2c8c9c1c5df2b094bcb2bee3439f74495b930c7 Mon Sep 17 00:00:00 2001 From: yunxji <50287034+yunxji@users.noreply.github.com> Date: Thu, 14 Nov 2019 20:49:34 +0800 Subject: [PATCH 35/66] Add content about Tencent cloud providers. (#17572) * Modify document format. * Update cloud-controller.md Add content about Tencent cloud providers. * Update cloud-providers.md Add content about Tencent cloud providers. --- .../en/docs/concepts/architecture/cloud-controller.md | 2 ++ .../concepts/cluster-administration/cloud-providers.md | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/content/en/docs/concepts/architecture/cloud-controller.md b/content/en/docs/concepts/architecture/cloud-controller.md index 71947e8282647..6536dc6772694 100644 --- a/content/en/docs/concepts/architecture/cloud-controller.md +++ b/content/en/docs/concepts/architecture/cloud-controller.md @@ -232,6 +232,8 @@ The following cloud providers have implemented CCMs: * [Linode](https://github.com/linode/linode-cloud-controller-manager) * [OpenStack](https://github.com/kubernetes/cloud-provider-openstack) * [Oracle](https://github.com/oracle/oci-cloud-controller-manager) +* [TencentCloud](https://github.com/TencentCloud/tencentcloud-cloud-controller-manager) + ## Cluster Administration diff --git a/content/en/docs/concepts/cluster-administration/cloud-providers.md b/content/en/docs/concepts/cluster-administration/cloud-providers.md index bdbbeecdfa2ba..52765e1034459 100644 --- a/content/en/docs/concepts/cluster-administration/cloud-providers.md +++ b/content/en/docs/concepts/cluster-administration/cloud-providers.md @@ -404,3 +404,12 @@ The IBM Cloud Kubernetes Service provider leverages Kubernetes-native persistent The Baidu cloud provider uses the private IP address of the node (as determined by the kubelet or overridden with `--hostname-override`) as the name of the Kubernetes Node object. Note that the Kubernetes Node name must match the Baidu VM private IP. + +## Tencent Kubernetes Engine + +If you wish to use the external cloud provider, its repository is [TencentCloud/tencentcloud-cloud-controller-manager](https://github.com/TencentCloud/tencentcloud-cloud-controller-manager). + +### Node Name + +The Tencent cloud provider uses the hostname of the node (as determined by the kubelet or overridden with `--hostname-override`) as the name of the Kubernetes Node object. +Note that the Kubernetes Node name must match the Tencent VM private IP. From 9d0cc29bf4c8a5881b5c2c3daffc549299350eb1 Mon Sep 17 00:00:00 2001 From: Nikita Potapenko Date: Fri, 15 Nov 2019 00:15:14 +0200 Subject: [PATCH 36/66] Init Russian localization (#16404) * initial * aisonaku owner * initial. copy minimal en content to ru * i18n strings update * main page, one section * draft main page, setup, minicube * main page * pick up solution * Init russian translate * Translated hello-minikube.md file * tutorials started * russ localization * update config.toml and add README-ru.md * update README.md for the reference to the Russian languge * Update README-ru.md Co-Authored-By: Tim Bannister * Update README-ru.md * Update README-ru.md * concepts overview started * Update owners aliases * Remove duplicate section * Cleanup Remove untraslated files * Add examples * Fix typo * Apply suggestions from code review Co-Authored-By: Alexey Pyltsyn Co-Authored-By: Tim Bannister * partly fixed for comments * Remove partially translated files * Translate remaining strings * Translate base concepts --- OWNERS_ALIASES | 10 + README-ru.md | 80 ++++++ README.md | 1 + config.toml | 13 + content/ru/OWNERS | 13 + content/ru/_common-resources/index.md | 3 + content/ru/_index.html | 62 ++++ content/ru/case-studies/_index.html | 10 + content/ru/docs/_index.md | 70 +++++ content/ru/docs/concepts/_index.md | 75 +++++ content/ru/docs/concepts/overview/_index.md | 4 + .../concepts/overview/what-is-kubernetes.md | 91 ++++++ content/ru/docs/home/_index.md | 58 ++++ .../ru/docs/home/supported-doc-versions.md | 29 ++ content/ru/docs/reference/_index.md | 60 ++++ content/ru/docs/reference/glossary/cluster.md | 17 ++ content/ru/docs/reference/glossary/index.md | 15 + content/ru/docs/setup/_index.md | 81 ++++++ content/ru/docs/setup/custom-cloud/_index.md | 4 + content/ru/docs/tutorials/hello-minikube.md | 265 ++++++++++++++++++ content/ru/examples/minikube/Dockerfile | 4 + content/ru/examples/minikube/server.js | 9 + content/ru/main_index.temp.txt | 82 ++++++ content/ru/setup.temp.txt | 23 ++ i18n/ru.toml | 195 +++++++++++++ 25 files changed, 1274 insertions(+) create mode 100644 README-ru.md create mode 100644 content/ru/OWNERS create mode 100644 content/ru/_common-resources/index.md create mode 100644 content/ru/_index.html create mode 100644 content/ru/case-studies/_index.html create mode 100644 content/ru/docs/_index.md create mode 100644 content/ru/docs/concepts/_index.md create mode 100644 content/ru/docs/concepts/overview/_index.md create mode 100644 content/ru/docs/concepts/overview/what-is-kubernetes.md create mode 100644 content/ru/docs/home/_index.md create mode 100644 content/ru/docs/home/supported-doc-versions.md create mode 100644 content/ru/docs/reference/_index.md create mode 100644 content/ru/docs/reference/glossary/cluster.md create mode 100644 content/ru/docs/reference/glossary/index.md create mode 100644 content/ru/docs/setup/_index.md create mode 100644 content/ru/docs/setup/custom-cloud/_index.md create mode 100644 content/ru/docs/tutorials/hello-minikube.md create mode 100644 content/ru/examples/minikube/Dockerfile create mode 100644 content/ru/examples/minikube/server.js create mode 100644 content/ru/main_index.temp.txt create mode 100644 content/ru/setup.temp.txt create mode 100644 i18n/ru.toml diff --git a/OWNERS_ALIASES b/OWNERS_ALIASES index 721c6048a84a7..de2522a81fda9 100644 --- a/OWNERS_ALIASES +++ b/OWNERS_ALIASES @@ -185,3 +185,13 @@ aliases: sig-docs-vi-reviews: # PR reviews for Vietnamese content - ngtuna - truongnh1992 + sig-docs-ru-owners: # Admins for Russian content + - msheldyakov + - aisonaku + - potapy4 + - dianaabv + sig-docs-ru-reviews: # PR reviews for Russian content + - msheldyakov + - aisonaku + - potapy4 + - dianaabv diff --git a/README-ru.md b/README-ru.md new file mode 100644 index 0000000000000..56d02c95a09e1 --- /dev/null +++ b/README-ru.md @@ -0,0 +1,80 @@ +# Документация по Kubernetes + +[![Build Status](https://api.travis-ci.org/kubernetes/website.svg?branch=master)](https://travis-ci.org/kubernetes/website) +[![GitHub release](https://img.shields.io/github/release/kubernetes/website.svg)](https://github.com/kubernetes/website/releases/latest) + +Добро пожаловать! Данный репозиторий содержит все необходимые файлы для сборки [сайта Kubernetes и документации](https://kubernetes.io/). Мы благодарим вас за старания! + +## Вклад в документацию + +Нажмите на кнопку **Fork** в правом верхнем углу, чтобы создать копию этого репозитория в ваш GitHub-аккаунт. Это копия называется *форк-репозиторием*. Делайте любые изменения в вашем форк-репозитории, и когда вы будете готовы опубликовать изменения, откройте форк-репозиторий и создайте новый пулреквест, чтобы уведомить нас. + +После того, как вы отправите пулреквест, ревьювер Kubernetes даст по нему обратную связь. Вы, как автор пулреквеста, **должны обновить свой пулреквест после его рассмотрения ревьювером Kubernetes.** Вполне возможно, что более одного ревьювера Kubernetes оставят свои комментарии или даже может быть так, что новый комментарий ревьювера Kubernetes будет отличаться от первоначального назначенного ревьювера. Кроме того, в некоторых случаях один из ревьюверов может запросить технический обзор у [технического ревьювера Kubernetes](https://github.com/kubernetes/website/wiki/Tech-reviewers), если это будет необходимо. Ревьюверы сделают все возможное, чтобы как можно оперативно оставить свои предложения и пожелания, но время ответа может варьироваться в зависимости от обстоятельств. + +Узнать подробнее о том, как поучаствовать в документации Kubernetes, вы можете по ссылкам ниже: + +* [Начните вносить свой вклад](https://kubernetes.io/docs/contribute/start/) +* [Просмотр локальных изменений](http://kubernetes.io/docs/contribute/intermediate#view-your-changes-locally) +* [Использование шаблонов страниц](http://kubernetes.io/docs/contribute/style/page-templates/) +* [Руководство по оформлению документации](http://kubernetes.io/docs/contribute/style/style-guide/) +* [Руководство по локализации Kubernetes](https://kubernetes.io/docs/contribute/localization/) + +## `README.md` файлы на других языках +| | | +|---|---| +|[Французский](README-fr.md)|[Корейский](README-ko.md)| +|[Немецкий](README-de.md)|[Португальский](README-pt.md)| +|[Хинди README](README-hi.md)|[Испанский](README-es.md)| +|[Индонезийский](README-id.md)|[Китайский](README-zh.md)| +||| + +## Запуск сайта локально с помощью Docker + +Рекомендованный способ запуска сайта Kubernetes на локальной машине - использовать специальный образ [Docker](https://docker.com), который включает статический генератор сайтов [Hugo](https://gohugo.io). + +> Если вы используете Windows, вам необходимо установить дополнительные инструменты через [Chocolatey](https://chocolatey.org). `choco install make` + +> Если вы хотите запустить сайт локально без Docker, обратитесь к разделу [Запуск сайта с помощью Hugo](#running-the-site-locally-using-hugo) ниже на этой странице. + +Когда Docker [установлен и запущен](https://www.docker.com/get-started), соберите локально Docker-образ `kubernetes-hugo`, выполнив команду в консоли: + +```bash +make docker-image +``` + +После того, как вы собрали образ, можно запустить сайт локально: + +```bash +make docker-serve +``` + +Откройте браузер и перейдите по ссылке http://localhost:1313, чтобы открыть сайт. Если вы редактируете исходные файлы сайта, Hugo автоматически применит изменения и обновит страницу в браузере. + +## Запуск веб-сайта с помощью Hugo {#running-the-site-locally-using-hugo} + +Обратитесь к [официальной документации Hugo](https://gohugo.io/getting-started/installing/), чтобы установить Hugo. Убедитесь, что вы установили правильную версию Hugo, которая устанавливается в переменной окружения `HUGO_VERSION` в файле [`netlify.toml`](netlify.toml#L9). + +После установки Hugo, чтобы запустить сайт, выполните в консоли: + +```bash +make serve +``` + +Эта команда запустит сервер Hugo на порту 1313. Откройте браузер и перейдите по ссылке http://localhost:1313, чтобы открыть сайта. Если вы отредактируете исходные файлы сайта, Hugo автоматически применит изменения и обновит страницу в браузере. + +## Сообщество, обсуждение, вклад и поддержка + +Узнайте, как поучаствовать в жизни сообщества Kubernetes на [странице сообщества](http://kubernetes.io/community/). + +Вы можете связаться с сопровождающими этого проекта по: + +- [Канал в Slack](https://kubernetes.slack.com/messages/sig-docs) +- [Рассылка](https://groups.google.com/forum/#!forum/kubernetes-sig-docs) + +### Нормы поведения + +Участие в сообществе Kubernetes регулируется [нормами поведения Kubernetes](code-of-conduct.md). + +## Спасибо! + +Kubernetes процветает благодаря сообществу и мы ценим ваш вклад в сайт и документацию! diff --git a/README.md b/README.md index dad01b5966134..f403f9e9dee65 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ For more information about contributing to the Kubernetes documentation, see: |[Hindi README](README-hi.md)|[Spanish README](README-es.md)| |[Indonesian README](README-id.md)|[Chinese README](README-zh.md)| |[Japanese README](README-ja.md)|[Vietnamese README](README-vi.md)| +|[Russian README](README-ru.md)| ||| ## Running the website locally using Docker diff --git a/config.toml b/config.toml index 142798e59b110..6e389736b403d 100644 --- a/config.toml +++ b/config.toml @@ -273,3 +273,16 @@ description = "Production-Grade Container Orchestration" languageName = "Vietnamese" contentDir = "content/vi" weight = 12 + +[languages.ru] +title = "Kubernetes" +description = "Production-Grade Container Orchestration" +languageName = "Русский" +weight = 12 +contentDir = "content/ru" + +[languages.ru.params] +time_format_blog = "02.01.2006" +# A list of language codes to look for untranslated content, ordered from left to right. +language_alternatives = ["en"] + diff --git a/content/ru/OWNERS b/content/ru/OWNERS new file mode 100644 index 0000000000000..75da45a4b597b --- /dev/null +++ b/content/ru/OWNERS @@ -0,0 +1,13 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +# This is the localization project for Russia. +# Teams and members are visible at https://github.com/orgs/kubernetes/teams. + +reviewers: +- sig-docs-ru-reviews + +approvers: +- sig-docs-ru-owners + +labels: +- language/ru diff --git a/content/ru/_common-resources/index.md b/content/ru/_common-resources/index.md new file mode 100644 index 0000000000000..3d65eaa0ff97e --- /dev/null +++ b/content/ru/_common-resources/index.md @@ -0,0 +1,3 @@ +--- +headless: true +--- \ No newline at end of file diff --git a/content/ru/_index.html b/content/ru/_index.html new file mode 100644 index 0000000000000..1c9757a63aadb --- /dev/null +++ b/content/ru/_index.html @@ -0,0 +1,62 @@ +--- +title: "Первоклассная оркестрация контейнеров" +abstract: "Автоматизированное развёртывание, масштабирование и управление контейнерами." +cid: home +--- + +{{< deprecationwarning >}} + +{{< blocks/section id="oceanNodes" >}} +{{% blocks/feature image="flower" %}} +### [Kubernetes (K8s)]({{< relref "/docs/concepts/overview/what-is-kubernetes" >}}) - это открытое программное обеспечение для автоматизации развёртывания, масштабирования и управления контейнеризированными приложениями. + +Kubernetes группирует контейнеры, составляющие приложение, в логические единицы для более простого управления и обнаружения. При создании Kubernetes использован [15-тилетний опыт эксплуатации production нагрузок Google](http://queue.acm.org/detail.cfm?id=2898444), совмещённый с лучшими идеями и практиками сообщества. +{{% /blocks/feature %}} + +{{% blocks/feature image="scalable" %}} +#### Глобальный масштаб + +Разработанный на тех же принципах, которые позволяют Google запускать миллиарды контейнеров в неделю, Kubernetes может масштабироваться без увеличения вашей команды поддержки. + +{{% /blocks/feature %}} + +{{% blocks/feature image="blocks" %}} +#### Никогда не перерасти + +Независимо от того, проводите ли вы локальное тестирование или работаете в корпорации, гибкость Kubernetes растёт вместе с вами, обеспечивая бесперебойную и простую доставку приложений независимо от сложности ваших потребностей. + +{{% /blocks/feature %}} + +{{% blocks/feature image="suitcase" %}} +#### Запускайте где угодно + +Kubernetes - ПО с открытым исходным кодом, дающее вам возможность использовать преимущества гибкой (on-premises), гибридной или публичной облачной инфраструктуры, позволяющее без усилий перемещать рабочие нагрузки в соответствии с вашими потребностями. + +{{% /blocks/feature %}} + +{{< /blocks/section >}} + +{{< blocks/section id="video" background-image="kub_video_banner_homepage" >}} +
+
+ + +
+{{< /blocks/section >}} + +{{< blocks/kubernetes-features >}} + +{{< blocks/case-studies >}} diff --git a/content/ru/case-studies/_index.html b/content/ru/case-studies/_index.html new file mode 100644 index 0000000000000..403e423b0cc4d --- /dev/null +++ b/content/ru/case-studies/_index.html @@ -0,0 +1,10 @@ +--- +title: Примеры использования +linkTitle: Примеры использования +bigheader: Примеры использования Kubernetes +abstract: Подборка пользователей, использующих Kubernetes в производстве. +layout: basic +class: gridPage +cid: caseStudies +--- + diff --git a/content/ru/docs/_index.md b/content/ru/docs/_index.md new file mode 100644 index 0000000000000..2e77a74bdda92 --- /dev/null +++ b/content/ru/docs/_index.md @@ -0,0 +1,70 @@ + --- +title: Руководства +main_menu: true +weight: 60 +content_template: templates/concept +--- + +{{% capture overview %}} + +В данном разделе документации Kubernetes можно найти руководства. В каждом руководстве показывано, как достичь определённой цели, а не просто выполнить одно задание (/docs/tasks/). Большинство уроков состоят из нескольких разделов, каждая из которых включает в себя последовательность шагов для выполнения. Перед тем как приступить к выполнению уроков, может быть полезно сохранить [Стандартизированный Словарь](/docs/reference/glossary/) для последующих обращений. + +{{% /capture %}} + +{{% capture body %}} + +## Основы + +* [Основы Kubernetes](/docs/tutorials/kubernetes-basics/) - глубокое инерактивное руководства, направленный на понимание системы Kubernetes и предлагающий попробовать некоторые основные возможности Kubernetes. + +* [Масштабируемые микросервисы с Kubernetes (Udacity)](https://www.udacity.com/course/scalable-microservices-with-kubernetes--ud615) + +* [Введение в Kubernetes (edX)](https://www.edx.org/course/introduction-kubernetes-linuxfoundationx-lfs158x#) + +* [Hello Minikube](/docs/tutorials/hello-minikube/) + +## Конфигурирование + +* [Конфигурирование Redis с использованием ConfigMap](/docs/tutorials/configuration/configure-redis-using-configmap/) + +## Stateless приложения + +* [Установка внешнего IP Address для получения доступа к приложению в кластере](/docs/tutorials/stateless-application/expose-external-ip-address/) + +* [Пример: развёртывание приложения "Гостевая книга" на PHP с использованием Redis](/docs/tutorials/stateless-application/guestbook/) + +## Stateful приложения + +* [Основы StatefulSet](/docs/tutorials/stateful-application/basic-stateful-set/) + +* [Пример: WordPress и MySQL с персистентным хранилищем](/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/) + +* [Пример: Развёртывание Cassandra с Stateful Sets](/docs/tutorials/stateful-application/cassandra/) + +* [Запуск ZooKeeper, A CP Distributed System](/docs/tutorials/stateful-application/zookeeper/) + +## CI/CD пайплайн + +* [Настройка CI/CD пайплайна с Kubernetes Часть 1: Обзор](https://www.linux.com/blog/learn/chapter/Intro-to-Kubernetes/2017/5/set-cicd-pipeline-kubernetes-part-1-overview) + +* [Настройка CI/CD пайплайна с подом Jenkins в Kubernetes (Часть 2)](https://www.linux.com/blog/learn/chapter/Intro-to-Kubernetes/2017/6/set-cicd-pipeline-jenkins-pod-kubernetes-part-2) + +* [Запуск и масштабирование приложения распределённого кроссворда с CI/CD в KubernetesR (Часть 3)](https://www.linux.com/blog/learn/chapter/intro-to-kubernetes/2017/6/run-and-scale-distributed-crossword-puzzle-app-cicd-kubernetes-part-3) + +* [Настройка CI/CD для приложения распределённого кроссворда в Kubernetes (Часть 4)](https://www.linux.com/blog/learn/chapter/intro-to-kubernetes/2017/6/set-cicd-distributed-crossword-puzzle-app-kubernetes-part-4) + +## Clusters + +* [AppArmor](/docs/tutorials/clusters/apparmor/) + +## Services + +* [Использование IP](/docs/tutorials/services/source-ip/) + +{{% /capture %}} + +{{% capture whatsnext %}} + +Если вы хотите создать руководство самостоятельно, обратитесь к странице [Использование шаблонов страниц](/docs/home/contribute/page-templates/), чтобы узнать информацию и посмотреть шаблоны для составлении руководств. + +{{% /capture %}} diff --git a/content/ru/docs/concepts/_index.md b/content/ru/docs/concepts/_index.md new file mode 100644 index 0000000000000..249a0c3e21244 --- /dev/null +++ b/content/ru/docs/concepts/_index.md @@ -0,0 +1,75 @@ +--- +title: Концепции +main_menu: true +content_template: templates/concept +weight: 40 +--- + +{{% capture overview %}} + +Раздел "Концепции" поможет вам узнать о частях системы Kubernetes и об абстракциях, которые Kubernetes использует для представления ваших {{< glossary_tooltip text="кластеров" term_id="cluster" length="all" >}}, и помогает вам глубже понять, как работает Kubernetes. + +{{% /capture %}} + +{{% capture body %}} + +## Обзор + +Чтобы работать с Kubernetes, вы используете *объекты Kubernetes API* для описания *желаемого состояния вашего кластера*: какие приложения или другие рабочие нагрузки вы хотите запустить, какие образы контейнеров они используют, количество реплик, какие сетевые и дисковые ресурсы вы хотите использовать и сделать доступными и многое другое. Вы устанавливаете желаемое состояние, создавая объекты с помощью API Kubernetes, обычно через интерфейс командной строки `kubectl`. Вы также можете напрямую использовать API Kubernetes для взаимодействия с кластером и установки или изменения желаемого состояния. + +После того, как вы установили желаемое состояние, *Панель управления Kubernetes* заставляет текущее состояние кластера соответствовать желаемому состоянию с помощью генератора событий жизненного цикла Pod (PLEG). Для этого Kubernetes автоматически выполняет множество задач, таких как запуск или перезапуск контейнеров, масштабирование количества реплик данного приложения и многое другое. Плоскость управления Kubernetes состоит из набора процессов, запущенных в вашем кластере: + +* **Мастер Kubernetes** это коллекция из трех процессов, которые выполняются на одном узле в вашем кластере, который обозначен как главный узел. Это процессы: [kube-apiserver](/docs/admin/kube-apiserver/), [kube-controller-manager](/docs/admin/kube-controller-manager/) и [kube-scheduler](/docs/admin/kube-scheduler/). +* Каждый отдельный неосновной узел в вашем кластере выполняет два процесса: + * **[kubelet](/docs/admin/kubelet/)**, который общается с мастером Kubernetes. + * **[kube-proxy](/docs/admin/kube-proxy/)**, сетевой прокси, который отображает сетевые сервисы Kubernetes на каждом узле. + +## Объекты Kubernetes + +Kubernetes содержит ряд абстракций, которые представляют состояние вашей системы: развернутые контейнеризованные приложения и рабочие нагрузки, связанные с ними сетевые и дисковые ресурсы и другую информацию о том, что делает ваш кластер. Эти абстракции представлены объектами в API Kubernetes. См. [Понимание объектов Kubernetes](/docs/concepts/overview/working-with-objects/kubernetes-objects) для получения более подробной информации. + +Основные объекты Kubernetes включают в себя: + +* [Под](/docs/concepts/workloads/pods/pod-overview/) +* [Сервис](/docs/concepts/services-networking/service/) +* [Том](/docs/concepts/storage/volumes/) +* [Пространства имен](/docs/concepts/overview/working-with-objects/namespaces/) + +Kubernetes также содержит абстракции более высокого уровня, которые опираются на [Контроллеры](/docs/concepts/architecture/controller/) для создания базовых объектов и предоставляют дополнительные функциональные и удобные функции. Они включают: + +* [Развертывание](/docs/concepts/workloads/controllers/deployment/) +* [DaemonSet](/docs/concepts/workloads/controllers/daemonset/) +* [StatefulSet](/docs/concepts/workloads/controllers/statefulset/) +* [ReplicaSet](/docs/concepts/workloads/controllers/replicaset/) +* [Задачи](/docs/concepts/workloads/controllers/jobs-run-to-completion/) + +## Панель управления Kubernetes + +Различные части панели управления Kubernetes, такие как мастер Kubernetes и процессы kubelet, определяют, как Kubernetes взаимодействует с вашим кластером. Панель управления поддерживает запись всех объектов Kubernetes в системе и запускает непрерывные циклы управления для управления состоянием этих объектов. В любой момент времени сервисы панели управления будут реагировать на изменения в кластере и работать, чтобы фактическое состояние всех объектов в системе соответствовало желаемому состоянию, которое вы предоставили. + +Например, когда вы используете API Kubernetes для создания развертывания, вы предоставляете новое желаемое состояние для системы. Панель управления Kubernetes записывает создание этого объекта и выполняет ваши инструкции, запуская необходимые приложения и планируя их на узлы кластера - таким образом, чтобы фактическое состояние кластера соответствовало желаемому состоянию. + +### Мастер Kubernetes + +Мастер Kubernetes отвечает за поддержание желаемого состояния для вашего кластера. Когда вы взаимодействуете с Kubernetes, например, используя интерфейс командной строки `kubectl`, вы общаетесь с мастером Kubernetes вашего кластера. + +> "Мастер" относится к совокупности процессов, управляющих состоянием кластера. Обычно все эти процессы выполняются на одном узле в кластере, и этот узел также называется главным. Мастер также может быть реплицирован для доступности и резервирования. + +### Ноды Kubernetes + +Ноды в кластере - это машины (виртуальные машины, физические серверы и т. Д.), На которых работают ваши приложения и облачные рабочие процессы. Мастер Kubernetes контролирует каждую ноду; вы редко будете взаимодействовать с нодами напрямую. + +#### Метаданные объекта + + +* [Аннотации](/docs/concepts/overview/working-with-objects/annotations/) + +{{% /capture %}} + +{{% capture whatsnext %}} + +Если вы хотите описать концепт, см. +[Использование шаблонов страниц](/docs/home/contribute/page-templates/) +для получения информации о типе страницы и шаблоне концепции. + +{{% /capture %}} diff --git a/content/ru/docs/concepts/overview/_index.md b/content/ru/docs/concepts/overview/_index.md new file mode 100644 index 0000000000000..9f9926b4bbac8 --- /dev/null +++ b/content/ru/docs/concepts/overview/_index.md @@ -0,0 +1,4 @@ +--- +title: "Обзор" +weight: 20 +--- \ No newline at end of file diff --git a/content/ru/docs/concepts/overview/what-is-kubernetes.md b/content/ru/docs/concepts/overview/what-is-kubernetes.md new file mode 100644 index 0000000000000..5f4bc4444459c --- /dev/null +++ b/content/ru/docs/concepts/overview/what-is-kubernetes.md @@ -0,0 +1,91 @@ +--- +reviewers: +- bgrant0607 +- mikedanese +title: Что такое Kubernetes +content_template: templates/concept +weight: 10 +card: + name: concepts + weight: 10 +--- + +{{% capture overview %}} +Эта страница посвящена обзору Kubernetes. +{{% /capture %}} + +{{% capture body %}} +Kubernetes - это портативная расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и службами, которая облегчает декларативную настройку и автоматизацию. У платформы есть большая, быстро растущая экосистема. Kubernetes службы, поддержка и инструменты широко доступны. + +Название Kubernetes происходит от греческого, что означает рулевой или штурман. Google открыл проект Kubernetes в 2014 году. Kubernetes базируется на [десятилетнем опыте Google, при работе с масштабными рабочими нагрузками](https://ai.google/research/pubs/pub43438), в сочетании с лучшими в своем классе идеями и практиками сообщества. + +## История +Давайте вернемся назад и посмотрим, почему Kubernetes так полезен. + +![Эволюция развертывания](/images/docs/Container_Evolution.svg) + +**Традиционная эра развертывания:** +Ранее организации запускали приложения на физических серверах. Не было никакого способа определить границы ресурсов для приложений на физическом сервере, и это вызвало проблемы с распределением ресурсов. Например, если несколько приложений выполняются на физическом сервере, могут быть случаи, когда одно приложение будет занимать большую часть ресурсов, и в результате другие приложения будут работать хуже. Решением для этого было бы запустить каждое приложение на другом физическом сервере. Но это не масштабировалось, поскольку ресурсы использовались непрактично, и организациям было дорого поддерживать множество физических серверов. + +**Эра виртуального развертывания:** В качестве решения была введена виртуализация. Это позволило запускать несколько виртуальных машин (ВМ) на одном физическом сервере ЦП. Виртуализация позволяет изолировать приложения между виртуальными машинами и обеспечивает уровень безопасности, поскольку информация одного приложения не может быть свободно доступна другому приложению. + +Виртуализация позволяет лучше использовать ресурсы на физическом сервере и обеспечивает лучшую масштабируемость, поскольку приложение можно легко добавить или обновить, также снижаются затраты на оборудование и многое другое. С помощью виртуализации вы можете представить набор физических ресурсов в виде кластера одноразовых виртуальных машин. + +Каждая виртуальная машина представляет собой полноценную машину, на которой выполняются все компоненты, включая собственную операционную систему, поверх виртуализированного оборудования. + +**Эра контейнеров:** Контейнеры похожи на виртуальные машины, но у них есть свойства изоляции для совместного использования операционной системы (ОС) между приложениями. Поэтому контейнеры считаются легкими. Подобно виртуальной машине, контейнер имеет свою собственную файловую систему, процессор, память, пространство процесса и многое другое. Поскольку они не связаны с базовой инфраструктурой, они переносимы между облаками и дистрибутивами ОС. + +Контейнеры стали популярными, потому что они предоставляют дополнительные преимущества, например: + +* Гибкое создание и развертывание приложений: простота и эффективность создания образа контейнера по сравнению с использованием образа виртуальной машины. +* Непрерывная разработка, интеграция и развертывание: обеспечивает надежную и частую сборку и развертывание образа контейнера с быстрым и простым откатом (благодаря неизменности образа). +* Разделение задач между Dev и Ops: создавайте образы контейнеров приложений во время сборки / релиза, а не во время развертывания, тем самым отделяя приложения от инфраструктуры. +* Наблюдаемость охватывает не только информацию и метрики на уровне ОС, но также информацию о работоспособности приложений и другие сигналы. +* Идентичная окружающая среда при разработке, тестировании и релизе: на ноутбуке работает так же, как и в облаке. +* Переносимость облачных и операционных систем: работает на Ubuntu, RHEL, CoreOS, on-prem, Google Kubernetes Engine и в любом другом месте. +* Управление, ориентированное на приложения: повышает уровень абстракции от запуска ОС на виртуальном оборудовании до запуска приложения в ОС с использованием логических ресурсов. +* Слабосвязанные, распределенные, гибкие, выделенные микроуслуги: приложения разбиты на более мелкие независимые части, которые можно динамически развертывать и управлять ими, а не монолитным стеком, работающим на одной большой специализированной машине. +* Изоляция ресурсов: предсказуемая производительность приложения. +* Грамотное использование ресурсов: высокая эффективность и компактность. + +## Зачем вам Kubernetes и что он может сделать? + +Контейнеры - хороший способ связать и запустить ваши приложения. В производственной среде вам необходимо управлять контейнерами, которые запускают приложения, и обеспечивать отсутствие простоев. Например, если контейнер выходит из строя, необходимо запустить другой контейнер. Не было бы проще, если бы такое поведение обрабатывалось системой? + +Вот тут Kubernetes приходит на помощь! Kubernetes предоставляет вам платформу для гибкой работы распределенных систем. Он заботится о масштабировании и обработке ошибок для вашего приложения, предоставляет шаблоны развертывания и многое другое. Например, Kubernetes может легко управлять canary-развертыванием для вашей системы. + +Kubernetes предоставляет вам: + +* **Мониторинг сервисов и распределение нагрузки** +Kubernetes может обноружить контейнер, используя DNS-имя или собственный IP-адрес. Если трафик в контейнере высокий, Kubernetes может сбалансировать нагрузку и распределить сетевой трафик, чтобы развертывание было стабильным. +* **Орекстрация хранилища** +Kubernetes позволяет вам автоматически смонтировать систему хранения по вашему выбору, такую как локальное хранилище, провайдеры общедоступного облака и многое другое. +* **Автоматическое развертывание и откаты** +Вы можете описать желаемое состояние для ваших развернутых контейнеров, используя Kubernetes, и это может изменить фактическое состояние на желаемое состояние с высокой скоростью. Например, вы можете автоматизировать Kubernetes для создания новых контейнеров для вашего развертывания, удаления существующих контейнеров и распределения всех их ресурсов в новый контейнер. +* **Автоматическое распределение нагрузки** +Вы предоставляете Kubernetes кластерных нод, который он может использовать для запуска контейнерных задач. Вы сообщаете Kubernetes, сколько ЦП и памяти (ОЗУ) требуется каждому контейнеру. Kubernetes может разместить контейнеры на ваших нодах, чтобы наилучшим образом использовать ваши ресурсы. +* **Самоконтроль** +Kubernetes перезапускает контейнеры, которые дают сбой, заменяет контейнеры, убивает контейнеры, которые не отвечают на ваши проверки работоспособности, определенные пользователем, и не показывает их клиентам, пока они не будут готовы к обслуживанию. +* **Управление конфиденциальной информацией и конфигурацией** +Kubernetes позволяет хранить и управлять конфиденциальной информацией, такой как пароли, токены OAuth и ключи ssh. Вы можете развертывать и обновлять конфиденциальную информацию и конфигурацию приложения, не перестраивая образы контейнеров и не раскрывая конфиденциальную информацию в конфигурации стека. + +## Чем Kubernetes не является + +Kubernetes - это не традиционная комплексная система PaaS (платформа как услуга). Поскольку Kubernetes работает на уровне контейнеров, а не на уровне оборудования, он предоставляет некоторые общеприменимые функции, общие для PaaS, такие как развертывание, масштабирование, балансировка нагрузки, ведение журналов и мониторинг. Тем не менее, Kubernetes не является монолитным, и эти решения по умолчанию являются дополнительными и подключаемыми. Kubernetes предоставляет строительные блоки для построения платформы, но сохраняет выбор за пользователем и гибкость там, где это важно. + +Kubernetes: + +* Не ограничивает типы поддерживаемых приложений. Kubernetes стремится поддерживать чрезвычайно разнообразные рабочие нагрузки, включая рабочие нагрузки без сохранения состояния и обработки данных. Если приложение может работать в контейнере, оно должно отлично работать в Kubernetes. +* Не развертывает исходный код и не создает ваше приложение. Рабочие процессы непрерывной интеграции, доставки и развертывания (CI / CD) определяются культурой и предпочтениями организации, а также техническими требованиями. +* Не предоставляет сервисы уровня приложения, такие как промежуточное программное обеспечение (например, очереди сообщений), платформы обработки данных (например, Spark), базы данных (например, mysql), кэши или кластерные системы хранения (например, Ceph), как встроенные сервисы. Такие компоненты могут работать в Kubernetes и / или могут быть доступны для приложений, работающих в Kubernetes, через переносные механизмы, такие как Open Service Broker. +* Не требует ведения журнала, мониторинга или оповещения. Он обеспечивает некоторые интеграции в качестве доказательства концепции и механизмы для сбора и экспорта метрик. +* Не предоставляет и не требует настройки языка / системы (например, jsonnet). Он предоставляет декларативный API, который может быть нацелен на произвольные формы декларативных спецификаций. +* Не предоставляет и не принимает никаких комплексных систем конфигурации, технического обслуживания, управления или самовосстановления. +* Кроме того, Kubernetes - это не просто система оркестровки. Фактически это устраняет необходимость в оркестровке. Техническое определение оркестровки - это выполнение определенного рабочего процесса: сначала делайте A, затем B, затем C. В отличие от этого, Kubernetes содержит набор независимых, компонуемых процессов управления, которые непрерывно приводят текущее состояние к предоставленному желаемому состоянию. Неважно, как добраться от А до С. Централизованный контроль также не требуется. В результате получается система, которая более проста в использовании и является более мощной, надежной, устойчивой и расширяемой. + +{{% /capture %}} + +{{% capture whatsnext %}} +* Посмотрите на [Компоненты Kubernetes](/docs/concepts/overview/components/) +* Готовы [начать](/docs/setup/)? +{{% /capture %}} diff --git a/content/ru/docs/home/_index.md b/content/ru/docs/home/_index.md new file mode 100644 index 0000000000000..e217224aaffa6 --- /dev/null +++ b/content/ru/docs/home/_index.md @@ -0,0 +1,58 @@ +--- +approvers: +- chenopis +title: Документация по Kubernetes +noedit: true +cid: docsHome +layout: docsportal_home +class: gridPage +linkTitle: "Главная" +main_menu: true +weight: 10 +hide_feedback: true +menu: + main: + title: "Документация" + weight: 20 + post: > +

Научитесь использовать Kubernetes и узнайте основные понятия, изучите примеры и справочную информацию. Также вы можете помочь в создании документации!

+overview: > + Kubernetes - это открытое программное обеспечение для автоматизации развёртывания, масштабирования и управления контейнеризированными приложениями. Проект с открытым исходным кодом размещён на серверах Cloud Native Computing Foundation (CNCF). +cards: +- name: concepts + title: "Основы" + description: "Узнайте о Kubernetes и его фундаментальные понятия." + button: "Начать" + button_path: "/docs/concepts" +- name: tutorials + title: "Попробуйте Kubernetes" + description: "Пройдите серию уроков чтобы узнать, как развернуть приложение в Kubernetes." + button: "Посмотреть уроки" + button_path: "/docs/tutorials" +- name: setup + title: "Настройка кластера" + description: Получить Kubernetes, запущенный с учётом ваших потребностей и ресурсов." + button: "Настройка Kubernetes" + button_path: "/docs/setup" +- name: tasks + title: "Узнайте, как использовать Kubernetes" + description: "Ознакомиться с распространёнными задачами и способами их быстрого решения." + button: "Посмотреть задачи" + button_path: "/docs/tasks" +- name: reference + title: Просмотр справочной информации + description: Обзор терминологии, синтаксиса командной строки, типов ресурсов API и документации по настройке инструментов. + button: Ознакомиться со справочной информацией + button_path: /docs/reference +- name: contribute + title: Внести вклад в документацию + description: Внести свой вклад может любой человек, как начинающий, так и тот, кто уже давно пользуется продуктом. + button: Внести свой вклад в документацию + button_path: /docs/contribute +- name: download + title: Загрузка Kubernetes + description: Если вы хотите установить Kubernetes или обновить Kubernetes до последней версии, обратитесь к списку актуальных версий. +- name: about + title: О документации + description: На сайте можно найти документацию для текущей и четырёх прошлых версий Kubernetes. +--- diff --git a/content/ru/docs/home/supported-doc-versions.md b/content/ru/docs/home/supported-doc-versions.md new file mode 100644 index 0000000000000..9b8b3ff622355 --- /dev/null +++ b/content/ru/docs/home/supported-doc-versions.md @@ -0,0 +1,29 @@ +--- +title: Версии Kubernetes с поддержкой документации +content_template: templates/concept +card: + name: about + weight: 10 + title: Версии с поддержкой документации +--- + +{{% capture overview %}} + +На сайте можно найти документацию для текущей и четырёх прошлых версий Kubernetes. + +{{% /capture %}} + +{{% capture body %}} + +## Текущая версия + +Текущая версия: +[{{< param "version" >}}](/). + +##Предыдущие версии + +{{< versions-other >}} + +{{% /capture %}} + + diff --git a/content/ru/docs/reference/_index.md b/content/ru/docs/reference/_index.md new file mode 100644 index 0000000000000..18ca793bb0c39 --- /dev/null +++ b/content/ru/docs/reference/_index.md @@ -0,0 +1,60 @@ +--- +title: Ссылки +approvers: +- chenopis +linkTitle: "Ссылки" +main_menu: true +weight: 70 +content_template: templates/concept +--- + +{{% capture overview %}} + +Этот раздел документации Kubernetes содержит ссылки. + +{{% /capture %}} + +{{% capture body %}} + +## Ссылки API + +* [Обзор Kubernetes API](/docs/reference/using-api/api-overview/) - Обзор API для Kubernetes. +* Версии Kubernetes API + * [1.16](/docs/reference/generated/kubernetes-api/v1.16/) + * [1.15](/docs/reference/generated/kubernetes-api/v1.15/) + * [1.14](/docs/reference/generated/kubernetes-api/v1.14/) + * [1.13](/docs/reference/generated/kubernetes-api/v1.13/) + * [1.12](/docs/reference/generated/kubernetes-api/v1.12/) + +## Клиентские библиотеки API + +Для вызова API Kubernetes из языка программирования вы можете использовать +[клиентские библиотеки](/docs/reference/using-api/client-libraries/). Официально поддерживаемые клиентские библиотеки: + +- [Клиентская библиотека для Go](https://github.com/kubernetes/client-go/) +- [Клиентская библиотека для Python](https://github.com/kubernetes-client/python) +- [Клиентская библиотека для Java](https://github.com/kubernetes-client/java) +- [Клиентская библиотека для JavaScript](https://github.com/kubernetes-client/javascript) + +## Ссылки CLI + +* [kubectl](/docs/user-guide/kubectl-overview) - Основной инструмент CLI для запуска команд и управления кластерами Kubernetes. + * [JSONPath](/docs/user-guide/jsonpath/) - Документация по синтаксису использования [выражений JSONPath](http://goessner.net/articles/JsonPath/) с kubectl. +* [kubeadm](/docs/admin/kubeadm/) - Инструмент CLI для простого обеспечения безопасного кластера Kubernetes. +* [kubefed](/docs/admin/kubefed/) - Инструмент CLI, чтобы помочь вам администрировать ваши федеративные кластеры. + +## Ссылки на конфигурации + +* [kubelet](/docs/admin/kubelet/) - Основной *агент ноды*, который работает на каждой ноде. Kubelet принимает набор PodSpecs и гарантирует, что описанные контейнеры работают исправно. +* [kube-apiserver](/docs/admin/kube-apiserver/) - REST API, который проверяет и настраивает данные для объектов API, таких как модули, службы, контроллеры и репликации. +* [kube-controller-manager](/docs/admin/kube-controller-manager/) - Демон, который встраивает основные контрольные циклы, поставляемые с Kubernetes. +* [kube-proxy](/docs/admin/kube-proxy/) - Может выполнять простую пересылку запросов TCP/UDP или циклическую переадресацию TCP/UDP через набор бекендов. +* [kube-scheduler](/docs/admin/kube-scheduler/) - Планировщик, который управляет доступностью, производительностью и хранилищем. +* [federation-apiserver](/docs/admin/federation-apiserver/) - Сервер API для федеративных кластеров. +* [federation-controller-manager](/docs/admin/federation-controller-manager/) - Демон, который встраивает основные контрольные циклы, поставляемые с Kubernetes. + +## Дизайн документация + +Архив документации по дизайну для функциональности Kubernetes. Начните с [Архитектура Kubernetes](https://git.k8s.io/community/contributors/design-proposals/architecture/architecture.md) и [Обзор дизайна Kubernetes](https://git.k8s.io/community/contributors/design-proposals). + +{{% /capture %}} diff --git a/content/ru/docs/reference/glossary/cluster.md b/content/ru/docs/reference/glossary/cluster.md new file mode 100644 index 0000000000000..614b42dd98f23 --- /dev/null +++ b/content/ru/docs/reference/glossary/cluster.md @@ -0,0 +1,17 @@ +--- +title: Кластер +id: cluster +date: 2019-06-15 +full_link: +short_description: > + Набор машин, называемых нодами, которые запускают контейнерные приложения, управляемые Kubernetes. Кластер имеет как минимум одну рабочую ноду и хотя бы одну главную ноду. + +aka: +tags: +- fundamental +- operation +--- +Набор машин, называемых нодами, которые запускают контейнерные приложения, управляемые Kubernetes. Кластер имеет как минимум одну рабочую ноду и хотя бы одну главную ноду. + + +Родительские ноды содержат дочерние ноды, являющиеся компонентами приложения. Главные ноды управляют родительскими нодами и модулями в кластере. Несколько главных нод используются для обеспечения отказоустойчивости кластера и высокой доступности. diff --git a/content/ru/docs/reference/glossary/index.md b/content/ru/docs/reference/glossary/index.md new file mode 100644 index 0000000000000..d1233e8bf8e2e --- /dev/null +++ b/content/ru/docs/reference/glossary/index.md @@ -0,0 +1,15 @@ +--- +approvers: +- chenopis +- abiogenesis-now +title: Стандартизированный глоссарий +layout: glossary +noedit: true +default_active_tag: fundamental +weight: 5 +card: + name: reference + weight: 10 + title: Глоссарий +--- + diff --git a/content/ru/docs/setup/_index.md b/content/ru/docs/setup/_index.md new file mode 100644 index 0000000000000..c4b3cc6182f55 --- /dev/null +++ b/content/ru/docs/setup/_index.md @@ -0,0 +1,81 @@ +--- +reviewers: +- brendandburns +- erictune +- mikedanese +no_issue: true +title: Настройка +main_menu: true +weight: 30 +content_template: templates/concept +--- + +{{% capture overview %}} + +Используйте информацию на этой странице, чтобы найти наиболее подходящее для вас решение по установке и настройке. + +Решение о том, как запускать Kubernetes, зависит от доступных ресурсов и необходимого уровня гибкости использования. Запуск Kubernetes возможен практически на чём угодно, от вашего ноутбука или виртуальных машины у облачного провайдера и до физических серверов. Решения позволяют как настроить полностью управляемый кластер запуском единственной команды так и создать пользовательский кластер на физических серверах. + +{{% /capture %}} + +{{% capture body %}} + +## Решения для запуска на локальной машине + +Запуск на локальной машине позволяет легко начать работу с Kubernetes. Можно создавать и тестировать кластер Kubernetes не беспокоясь о трате облачных ресурсов и квотах. + +Вам следует выбрать запуск на локальной машине, если вы: + +* Пробуете или начинаете работу с Kubernetes +* Локально разрабатываете и тестируете кластер + +Выбрать [решение для запуска на локальной машине](/docs/setup/pick-right-solution/#local-machine-solutions). + +## Управляемые решения + +Управляемые решения позволяют надёжно и удобно создавать и поддерживать кластеры Kubernetes. Они настраивают и управляют кластером самостоятельно, не требуя ручного вмешательства. + +Вам следует выбрать управляемое решение, если вы: + +* Хотите получить полностью самоуправляемое решение +* Хотите сконцентрироваться на разработке собственных приложений или сервисов +* Хотите получить высокую доступность, но у вас нет выделенной команды по обеспечению надёжности приложения (SRE). +* Не имеете ресурсов для размещения и мониторинга собственных кластеров + +Выбрать [управляемое решение](/docs/setup/pick-right-solution/#hosted-solutions). + +## Облачные решения "под ключ" + + +Такие решения озволяют создавать кластеры Kubernetes с помощью небольшого количества команд. Эти решения имеют большую поддежку сообществом и активно развиваются. Они могут быть размещены на разнообразных IaaS облачных провайдерах, при этом предлагая большую свободу и гибкость в обмен на приложенные усилия. + +Вам следует выбрать облачное решение "под ключ", если вы": + +* Хотите получить больший контроль над кластерами, чем позволяют размещённые решения +* Хотите получить больше контроля над оперциями Want to take on more operations ownership + +Выбрать [облачное решение "под ключ"](/docs/setup/pick-right-solution/#turnkey-cloud-solutions) + +## Местное резервное решение "под ключ" + +Такие решения позволяют с помощью небольшого количества команд создавать кластеры Kubernetes в ваших внутренних, защищённых облачных сетях. + +Вам следует выбрать местное резервное решение "под ключ", если: + +* Вы хотите развернуть кластер в приватной облачной сети +* У вас есть выделенная команда SRE специалистов +* У вас есть ресурсы для размещения и мониторинга собственных кластеров + +Выбрать [местное резервное решение "под ключ"](/docs/setup/pick-right-solution/#on-premises-turnkey-cloud-solutions). + +## Пользовательские решения + +Пользовательские решения позволяют достичь наибольшей свободы в управлении кластерами, но при этом требуют наибольшей экспертизы. Можно найти такие решения как для размещения на физических серверах, так и у облачных провайдеров на разных операционных системах. + +Выбрать [пользовательское решение](/docs/setup/pick-right-solution/#custom-solutions). + +{{% /capture %}} + +{{% capture whatsnext %}} +Перейти к [выбору подходящего решения](/docs/setup/pick-right-solution/), чтобы ознакомить с полным списком доступных решений. +{{% /capture %}} diff --git a/content/ru/docs/setup/custom-cloud/_index.md b/content/ru/docs/setup/custom-cloud/_index.md new file mode 100644 index 0000000000000..34bd6e9945d12 --- /dev/null +++ b/content/ru/docs/setup/custom-cloud/_index.md @@ -0,0 +1,4 @@ +--- +title: Пользовательские облачные решения +weight: 50 +--- diff --git a/content/ru/docs/tutorials/hello-minikube.md b/content/ru/docs/tutorials/hello-minikube.md new file mode 100644 index 0000000000000..9d01dac2fd17d --- /dev/null +++ b/content/ru/docs/tutorials/hello-minikube.md @@ -0,0 +1,265 @@ +--- +title: Привет Minikube +content_template: templates/tutorial +weight: 5 +menu: + main: + title: "Начало" + weight: 10 + post: > +

Готовы испачкать руки? Создайте простой кластер Kubernetes с запуском "Hello World" на Node.js

+card: + name: tutorials + weight: 10 +--- + +{{% capture overview %}} + +Это руководство покажет вам, как запустить простое Hello World Node.js приложение +на Kubernetes используя [Minikube](/docs/getting-started-guides/minikube) и Katacoda. +Katacoda предоставляет бесплатную, встроенную в браузер Kubernetes среду. + +{{< note >}} +Вы также можете следовать этому руководству, если вы установили [Minikube locally](/docs/tasks/tools/install-minikube/). +{{< /note >}} + +{{% /capture %}} + +{{% capture objectives %}} + +* Разверните hello world приложение в Minikube. +* Запустите приложение. +* Посмотрите логи приложения. + +{{% /capture %}} + +{{% capture prerequisites %}} + +Для этого примера создан образ контейнера, собранный на основе следующих файлов: + +{{< codenew language="js" file="minikube/server.js" >}} + +{{< codenew language="conf" file="minikube/Dockerfile" >}} + +Чтобы получить больше информации по запуску команды `docker build`, ознакомьтесь с [документацией по Docker](https://docs.docker.com/engine/reference/commandline/build/). + +{{% /capture %}} + +{{% capture lessoncontent %}} + +## Создание кластера Minikube + +1. Нажмите **Запуск Терминала** + + {{< kat-button >}} + + {{< note >}}Если у вас локально установлен Minikube, выполните `minikube start`.{{< /note >}} + +2. Откройте панель Kubernetes в браузере: + + ```shell + minikube dashboard + ``` + +3. Только для окружения Katacoda: В верхней части панели нажмите знак "плюч", а затем нажмите на **Select port to view on Host 1** (**Выберите порт для отображения на хосте 1**). + +4. Только для окружения Katacoda: Type `30000`, and then click **Display Port** (**Показать порт**). + +## Создание Deployment + +[*Под*](/docs/concepts/workloads/pods/pod/) Kubernetes - это группа из одного или более контейнеров, связанных друг с другом с целью адмистрирования и организации сети. В данном руководстве под включает в себя один контейнер. [*Deployment*](/docs/concepts/workloads/controllers/deployment/) в Kubernetes проверяет здоровье пода и перезагружает контейнер пода в случае его отказа. Deployment-ы являются рекоммендуемым способом организации создания и масштабирования подов. + +1. Используйте команду `kubectl create` для создание деплоймента для управления подом. Под запускает контейнер на основе предоставленного Docker образа. + + ```shell + kubectl create deployment hello-node --image=gcr.io/hello-minikube-zero-install/hello-node + ``` + +2. Посмотреть информацию о Deployment: + + ```shell + kubectl get deployments + ``` + + Вывод: + + ```shell + NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE + hello-node 1 1 1 1 1m + ``` + +3. Посмотреть информацию о поде: + + ```shell + kubectl get pods + ``` + Вывод: + + ```shell + NAME READY STATUS RESTARTS AGE + hello-node-5f76cf6ccf-br9b5 1/1 Running 0 1m + ``` + +4. Посмотреть события кластера: + + ```shell + kubectl get events + ``` + +5. Посмотреть `kubectl` конфигурацию: + + ```shell + kubectl config view + ``` + + {{< note >}}Больше информации о командах `kubectl` можно найти по ссылке [обзор kubectl](/docs/user-guide/kubectl-overview/).{{< /note >}} + +## Создание сервиса + +По-умолчанию под доступен только при обращении по его внутреннему IP адресу внутри кластера Kubernetes. Чтобы сделать контейнер `hello-node` доступным вне виртульной сети Kubernetes, необходимо представить под как [*сервис*](/docs/concepts/services-networking/service/) Kubernetes. + +1. Представить под для видимости в публичной сети Интернет можно с помощью команды `kubectl expose`: + + ```shell + kubectl expose deployment hello-node --type=LoadBalancer --port=8080 + ``` + + Флаг `--type=LoadBalancer` показывает, что сервис должен быть виден вне кластера. + +2. Посмотреть только что созданный сервис: + + ```shell + kubectl get services + ``` + + Вывод: + + ```shell + NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE + hello-node LoadBalancer 10.108.144.78 8080:30369/TCP 21s + kubernetes ClusterIP 10.96.0.1 443/TCP 23m + ``` + + Для облачных провайдеров, поддерживающих балансировщики нагрузки, для доступа к сервису будет предоставлен внешний IP адрес. В Minikube тип `LoadBalancer` делает сервис доступным при обращении с помощью команды `minikube service`. + +3. Выполните следующую команду: + + ```shell + minikube service hello-node + ``` + +4. Только для окружения Katacoda: Нажмите на знак "Плюс", затем нажмите **Select port to view on Host 1**. + +5. Только для окружения Katacoda: Введите `30369` (порт указан рядом с `8080` в выводе сервиса), затем нажмите ???. + + Откроется окно браузера, в котором запущено ваше приложение и будет отображено сообщение "Hello World". + +## Добавление аддонов + +В Minikube есть набор встроенных аддонов, которые могут быть включены, выключены и открыты в локальном окружении Kubernetes. + +1. Отобразить текущие поддерживаемые аддоны: + + ```shell + minikube addons list + ``` + + Вывод: + + ```shell + addon-manager: enabled + coredns: disabled + dashboard: enabled + default-storageclass: enabled + efk: disabled + freshpod: disabled + heapster: disabled + ingress: disabled + kube-dns: enabled + metrics-server: disabled + nvidia-driver-installer: disabled + nvidia-gpu-device-plugin: disabled + registry: disabled + registry-creds: disabled + storage-provisioner: enabled + ``` + +2. Включить расширение, например, `heapster`: + + ```shell + minikube addons enable heapster + ``` + + Вывод: + + ```shell + heapster was successfully enabled + ``` + +3. Посмотреть Pod и Service, которые вы только что создали: + + ```shell + kubectl get pod,svc -n kube-system + ``` + + Вывод: + + ```shell + NAME READY STATUS RESTARTS AGE + pod/heapster-9jttx 1/1 Running 0 26s + pod/influxdb-grafana-b29w8 2/2 Running 0 26s + pod/kube-addon-manager-minikube 1/1 Running 0 34m + pod/kube-dns-6dcb57bcc8-gv7mw 3/3 Running 0 34m + pod/kubernetes-dashboard-5498ccf677-cgspw 1/1 Running 0 34m + pod/storage-provisioner 1/1 Running 0 34m + + NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE + service/heapster ClusterIP 10.96.241.45 80/TCP 26s + service/kube-dns ClusterIP 10.96.0.10 53/UDP,53/TCP 34m + service/kubernetes-dashboard NodePort 10.109.29.1 80:30000/TCP 34m + service/monitoring-grafana NodePort 10.99.24.54 80:30002/TCP 26s + service/monitoring-influxdb ClusterIP 10.111.169.94 8083/TCP,8086/TCP 26s + ``` + +4. Отключить `heapster`: + + ```shell + minikube addons disable heapster + ``` + + Вывод: + + ```shell + heapster was successfully disabled + ``` + +## Освобождение ресурсов + +Теперь вы можете освободить ресурсы созданного вами кластера: + +```shell +kubectl delete service hello-node +kubectl delete deployment hello-node +``` + +Остановите выполнение виртуальной машины Minikube (опционально): + +```shell +minikube stop +``` + +Удалите виртуальную машину Minikube (опционально): + +```shell +minikube delete +``` + +{{% /capture %}} + +{{% capture whatsnext %}} + +* Больше об [объекте(ах?) деплоймента](/docs/concepts/workloads/controllers/deployment/). +* Большо о [развёртывании приложения](/docs/user-guide/deploying-applications/). +* Больше об [объектах сервиса](/docs/concepts/services-networking/service/). + +{{% /capture %}} diff --git a/content/ru/examples/minikube/Dockerfile b/content/ru/examples/minikube/Dockerfile new file mode 100644 index 0000000000000..1fe745295a47f --- /dev/null +++ b/content/ru/examples/minikube/Dockerfile @@ -0,0 +1,4 @@ +FROM node:6.14.2 +EXPOSE 8080 +COPY server.js . +CMD node server.js diff --git a/content/ru/examples/minikube/server.js b/content/ru/examples/minikube/server.js new file mode 100644 index 0000000000000..62414f6890779 --- /dev/null +++ b/content/ru/examples/minikube/server.js @@ -0,0 +1,9 @@ +var http = require('http'); + +var handleRequest = function(request, response) { + console.log('Получен запрос на URL: ' + request.url); + response.writeHead(200); + response.end('Hello World!'); +}; +var www = http.createServer(handleRequest); +www.listen(8080); diff --git a/content/ru/main_index.temp.txt b/content/ru/main_index.temp.txt new file mode 100644 index 0000000000000..17c643c8e42e6 --- /dev/null +++ b/content/ru/main_index.temp.txt @@ -0,0 +1,82 @@ +Документация Kubernetes +Kubernetes - открытое программное обеспечение для автоматизации развёртывания, масштабирования и управления контейнеризированными приложениями. Проект находится под управлением Cloud Native Computing Foundation (CNCF). + +* Основы +Узнайте о Kubernetes и его фундаментальных концепциях. +- Что такое Kubernetes +- Компоненты Kubernetes +- Kubernetes API +- Понимая Kubernetes +- Объекты +- Оброз Подов + +Перейти к изучению концепций + + +* Попробуйте Kubernetes +С помощью обучающих примеров узнаете, как развернуть приложение в Kubernetes. +- Hello Minikube +- Обзор основ +- Пример Stateless приложения: PHP +- Гостевая книга с использованием Redis +- Пример: добавление логирования и метрик для PHP/Redis приложения +- Гостевая книга +- Пример Stateful приложения: Wordpress c Persistent Volume(?) + +Перейти к просмотру уроков + +* Настройка кластера +Запустите Kubernetes с требуемыми ресурсами. +- (!hosterd)CNCF решения +- Решения Turnkey Cloud +- Решения On-Premises +- Пользовательские решения +- Локальная машина +- Установка инструментов для настройки kubeadm + +Перейти к настройке Kubernetes + + +* Узнайте об использовании Kubernetes +Обзор общих решений и коротких путей их реализации. +- Установка Minikube +- Установка kubectl +- Использование дашборда Web UI +- Настройка доступа к нескольким кластерам +- ... + +Перейти к просмотру задач + +* Просмотр справочной информации +Обзор терминологии, синтаксиса командной строки, типов ресурсов API и документации по настройке инструментов +- Словарь +- Обзор kubectl +- Справочник полезных команд kubectl +- Обзор kubectl +- Обзор API + +Перейти к просмотру справочной информации + +* Внести вклад в документацию +(! исправить)Внести свой вклад может любой человек, как начинающий, так и тот, кто уже давно пользуется продуктом. +- Как начать участие +- Инструкция по оформлению документации +- Использование шаблона страниц +- Перевод документации +- Участие в SIG документации +- Intermediate contributing (что это?) + +Внести свой вклад в документацию + +* Загрузка Kubernetes +Если вы хотите установить Kubernetes или обновить Kubernetes до последней версии, обратитесь к списку актуальных версий. +- Список актуальных версий +- Заметки для срочного обновления +- Сборка релиза + +* О документации +На сайте содержится документация для актуальной и четырёх прошлых версий Kubernetes +- Список версий с документацией + + +(! исправить)Создать задачу diff --git a/content/ru/setup.temp.txt b/content/ru/setup.temp.txt new file mode 100644 index 0000000000000..e1a7d4a8095c0 --- /dev/null +++ b/content/ru/setup.temp.txt @@ -0,0 +1,23 @@ +Настройка +Используйте информацию на этой странице, чтобы найти наиболее подходящее для вас решение по установке и настройке. + +Решение о том, как запускать Kubernetes, зависит от доступных ресурсов и необходимого уровня гибкости использования (?). Запуск Kubernetes возмомжен практически на чём угодно, от вашего ноутбука или виртуальных машины у облачного провайдера и до физических серверов. (!исправить)Решения позволяют как настроить полностью управляемый кластер запуском единственной команды так и создать пользовательский кластер на физических серверах. +- Решения для запуска на локальной машине +- (!hosterd)CNCF решения +- Turnkey - облачные решения +- Turnkey - On-Premises решения +- Пользовательские решения +- Что дальше? + +* Решения для запуска на локальной машине +Запуск на локальной машине позволяет легко начать работу с Kubernetes. Можно создавать и тестировать кластер Kubernetes не беспокоясь о трате облачных ресурсов и квотах. +Вам следует выбрать запуск на локальной машине, если вы: +- Пробуете или начинаете работу с Kubernetes +- Локально разрабатываете и тестируете кластер + +Выбрать решение для запуска на локальной машине + +* Hosted (Нативные?) решения +Hosted решения позволяют надёжно и удобно создавать и поддерживать кластеры Kubernetes. Они настраивают и управляют кластером самостоятельно, не требуя ручного вмешательства. +Вам следует выбрать hosted решение, если вы: +- \ No newline at end of file diff --git a/i18n/ru.toml b/i18n/ru.toml new file mode 100644 index 0000000000000..0c75bff7f8bf4 --- /dev/null +++ b/i18n/ru.toml @@ -0,0 +1,195 @@ +# i18n strings for the Russian (main) site. + +[deprecation_warning] +other = " документация больше не поддерживается. Версия, которую вы сейчас просматриваете, является статической. Актуальную документацию вы можете найти " + +[deprecation_file_warning] +other = "Устаревшая" + +[objectives_heading] +other = "Цели" + +[cleanup_heading] +other = "Очистка" + +[prerequisites_heading] +other = "Прежде чем вы начнете" + +[whatsnext_heading] +other = "Что дальше" + +[feedback_heading] +other = "Обратная связь" + +[feedback_question] +other = "Была ли эта страница полезной?" + +[feedback_yes] +other = "Да" + +[feedback_no] +other = "Нет" + +[latest_version] +other = "последняя версия." + +[version_check_mustbe] +other = "Ваш сервер Kubernetes должен быть версии " + +[version_check_mustbeorlater] +other = "Ваш сервер Kubernetes должен быть версии или позже, чем версия " + +[version_check_tocheck] +other = "Чтобы проверить версию, введите " + +[caution] +other = "Внимание:" + +[note] +other = "Заметка:" + +[warning] +other = "Предупреждение:" + +[main_read_about] +other = "Прочитать о" + +[main_read_more] +other = "Прочитать больше" + +[main_github_invite] +other = "Хотите взломать ядро кодовой базы Kubernetes?" + +[main_github_view_on] +other = "Посмотреть на GitHub" + +[main_github_create_an_issue] +other = "Сообщить о проблеме" + +[main_community_explore] +other = "Познакомиться с сообществом" + +[main_kubernetes_features] +other = "Возможности Kubernetes" + +[main_cncf_project] +other = """Мы являемся CNCF проектом

""" + +[main_kubeweekly_baseline] +other = "Интересуетесь последними новостями Kubernetes? Зарегистрируйтесь в KubeWeekly." + +[main_kubernetes_past_link] +other = "Посмотреть последние новости" + +[main_kubeweekly_signup] +other = "Подписаться" + +[main_contribute] +other = "Внести вклад" + +[main_edit_this_page] +other = "Редактировать эту страницу" + +[main_page_history] +other ="История страницы" + +[main_page_last_modified_on] +other = "Последний раз страница редактировалась" + +[main_by] +other = "by" + +[main_documentation_license] +other = """Авторы Kubernetes | Документация распространяется под лицензией CC BY 4.0""" + +[main_copyright_notice] +other = """The Linux Foundation ®. Все права защищены. The Linux Foundation является зарегистрированной торговой маркой. Список торговых марок The Linux Foundation приведен на нашей странице Trademark Usage""" + +# Labels for the docs portal home page. +[docs_label_browse] +other = "Просмотр документации" + +[docs_label_contributors] +other = "Участники сообщества" + +[docs_label_users] +other = "Пользователи" + +[docs_label_i_am] +other = "Я ..." + +# layouts > blog > pager + +[layouts_blog_pager_prev] +other = "<< Назад" + +[layouts_blog_pager_next] +other = "Вперёд >>" + +# layouts > blog > list + +[layouts_case_studies_list_tell] +other = "Расскажите свою историю" + +# layouts > docs > glossary + +[layouts_docs_glossary_description] +other = "Данный глоссарий должен стать исчерпывающим стандартизированным списком терминологии в Kubernetes. Он включает технические термины, специфичные для K8s, а также более общие термины, которые полезно знать." + +[layouts_docs_glossary_filter] +other = "Фильтрация терминов по тегам" + +[layouts_docs_glossary_select_all] +other = "Выделить всё" + +[layouts_docs_glossary_deselect_all] +other = "Отменить выбор всех тегов" + +[layouts_docs_glossary_aka] +other = "Также известный как" + +[layouts_docs_glossary_click_details_before] +other = "Нажмите на значок" + +[layouts_docs_glossary_click_details_after] +other = "для получения более подробное объяснения по интересующему термину." + +# layouts > docs > search + +[layouts_docs_search_fetching] +other = "Получение результатов.." + +# layouts > partial > feedback + +[layouts_docs_partials_feedback_thanks] +other = "Спасибо за отзыв! Если у вас есть конкретный вопрос об использовании Kubernetes, спрашивайте" + +[layouts_docs_partials_feedback_issue] +other = "Сообщите о проблеме в репозитории GitHub, если вы хотите " + +[layouts_docs_partials_feedback_problem] +other = "сообщить о проблеме" + +[layouts_docs_partials_feedback_or] +other = "или" + +[layouts_docs_partials_feedback_improvement] +other = "предложить улучшение" + +# Community links +[community_twitter_name] +other = "Twitter" +[community_github_name] +other = "GitHub" +[community_slack_name] +other = "Slack" +[community_stack_overflow_name] +other = "Stack Overflow" +[community_forum_name] +other = "Форум" +[community_events_calendar] +other = "Календарь событий" + +# UI elements +[ui_search_placeholder] +other = "Поиск" From 8d14c1572d8d4e09ba41a7288af82bc0a17510a2 Mon Sep 17 00:00:00 2001 From: sivanzcw Date: Sun, 17 Nov 2019 13:35:41 +0800 Subject: [PATCH 37/66] change the expired link about sig-governance (#17605) --- content/en/docs/reference/glossary/sig.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/reference/glossary/sig.md b/content/en/docs/reference/glossary/sig.md index b0a6af0acbd0a..537a6a613b7f7 100755 --- a/content/en/docs/reference/glossary/sig.md +++ b/content/en/docs/reference/glossary/sig.md @@ -15,7 +15,7 @@ tags: Members within a SIG have a shared interest in advancing a specific area, such as architecture, API machinery, or documentation. -SIGs must follow the [SIG Governance](https://github.com/kubernetes/community/blob/master/sig-governance.md) guidelines but can have their own contribution policy and channels of communication. +SIGs must follow the SIG [governance guidelines](https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md), but can have their own contribution policy and channels of communication. For more information, see the [kubernetes/community](https://github.com/kubernetes/community) repo and the current list of [SIGs and Working Groups](https://github.com/kubernetes/community/blob/master/sig-list.md). From 7bf90015f014ea8f7b0fa0792d111cba646913e1 Mon Sep 17 00:00:00 2001 From: Chris Abraham Date: Mon, 18 Nov 2019 03:41:41 +0700 Subject: [PATCH 38/66] swapped in svgs for the remaining pngs on the case studies page (#17615) --- content/en/case-studies/box/box_small.svg | 1 + content/en/case-studies/cern/cern_logo.svg | 1 + layouts/case-studies/list.html | 8 ++++---- static/images/case_studies/story.svg | 1 + 4 files changed, 7 insertions(+), 4 deletions(-) create mode 100644 content/en/case-studies/box/box_small.svg create mode 100644 content/en/case-studies/cern/cern_logo.svg create mode 100644 static/images/case_studies/story.svg diff --git a/content/en/case-studies/box/box_small.svg b/content/en/case-studies/box/box_small.svg new file mode 100644 index 0000000000000..7030785935fc1 --- /dev/null +++ b/content/en/case-studies/box/box_small.svg @@ -0,0 +1 @@ +box \ No newline at end of file diff --git a/content/en/case-studies/cern/cern_logo.svg b/content/en/case-studies/cern/cern_logo.svg new file mode 100644 index 0000000000000..c242aafc136b0 --- /dev/null +++ b/content/en/case-studies/cern/cern_logo.svg @@ -0,0 +1 @@ +cern \ No newline at end of file diff --git a/layouts/case-studies/list.html b/layouts/case-studies/list.html index f8e723c8198d4..97a9c4b4ecf03 100644 --- a/layouts/case-studies/list.html +++ b/layouts/case-studies/list.html @@ -28,8 +28,8 @@

"{{ .Params.quote | html }}"

{{ $img := .Resources.GetMatch "video.png" }} - {{ $small := .Resources.GetMatch "**small*.png" }} - {{ with $small }}{{ .Title }}{{ end }} + {{ $small := .Resources.GetMatch "**small*.svg" }} + {{ with $small }}{{ .Title }}{{ end }}
@@ -52,13 +52,13 @@

{{ .Title }}

{{ $p := . }} {{ with $logo }} - {{ $p.LinkTitle }} + {{ $p.LinkTitle }} {{ else }} {{ errorf "Case Studies: Missing logo for %s. Put a PNG or SVG with the word 'logo' in the filename into %q" $p.LinkTitle $p.File.Dir }} {{ end }} {{ end }} - {{ T + {{ T diff --git a/static/images/case_studies/story.svg b/static/images/case_studies/story.svg new file mode 100644 index 0000000000000..a7f36bc24e7b7 --- /dev/null +++ b/static/images/case_studies/story.svg @@ -0,0 +1 @@ +box_small \ No newline at end of file From 41d5f445b29fdaea834813b0f825ae89f1325b63 Mon Sep 17 00:00:00 2001 From: Dr Nic Williams Date: Mon, 18 Nov 2019 11:27:41 +1000 Subject: [PATCH 39/66] jsonpath example of child with dot in name (#17625) Promoting the solution shown in https://github.com/kubernetes/kubernetes/issues/23386#issuecomment-305348170 to formal documentation. --- content/en/docs/reference/kubectl/jsonpath.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/reference/kubectl/jsonpath.md b/content/en/docs/reference/kubectl/jsonpath.md index f684a34dffdec..ffbe7103c84b8 100644 --- a/content/en/docs/reference/kubectl/jsonpath.md +++ b/content/en/docs/reference/kubectl/jsonpath.md @@ -69,7 +69,7 @@ Function | Description | Example --------------------|---------------------------|-----------------------------------------------------------------|------------------ `text` | the plain text | `kind is {.kind}` | `kind is List` `@` | the current object | `{@}` | the same as input -`.` or `[]` | child operator | `{.kind}` or `{['kind']}` | `List` +`.` or `[]` | child operator | `{.kind}`, `{['kind']}` or `{['name\.type']}` | `List` `..` | recursive descent | `{..name}` | `127.0.0.1 127.0.0.2 myself e2e` `*` | wildcard. Get all objects | `{.items[*].metadata.name}` | `[127.0.0.1 127.0.0.2]` `[start:end:step]` | subscript operator | `{.users[0].name}` | `myself` From d83e5386509036333f6534f53e1717c6356e337b Mon Sep 17 00:00:00 2001 From: Ismail Alidzhikov Date: Mon, 18 Nov 2019 03:33:41 +0200 Subject: [PATCH 40/66] Update k/dashboard to v2.0.0-beta6 (#17608) Signed-off-by: ialidzhikov --- .../docs/tasks/access-application-cluster/web-ui-dashboard.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/tasks/access-application-cluster/web-ui-dashboard.md b/content/en/docs/tasks/access-application-cluster/web-ui-dashboard.md index 803bb4f5dd4c1..ab9c8f086c09c 100644 --- a/content/en/docs/tasks/access-application-cluster/web-ui-dashboard.md +++ b/content/en/docs/tasks/access-application-cluster/web-ui-dashboard.md @@ -30,7 +30,7 @@ Dashboard also provides information on the state of Kubernetes resources in your The Dashboard UI is not deployed by default. To deploy it, run the following command: ``` -kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta4/aio/deploy/recommended.yaml +kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta6/aio/deploy/recommended.yaml ``` ## Accessing the Dashboard UI From 9335df5d494089e4ab4e1eb64fd6839bd68bb0e3 Mon Sep 17 00:00:00 2001 From: chentanjun Date: Mon, 18 Nov 2019 09:35:42 +0800 Subject: [PATCH 41/66] fix-up the broken link (#17601) --- content/en/blog/_posts/2018-07-18-11-ways-not-to-get-hacked.md | 2 +- content/en/case-studies/openAI/index.html | 2 +- content/en/case-studies/squarespace/index.html | 2 +- content/en/case-studies/ygrene/index.html | 2 +- content/en/docs/contribute/participating.md | 2 +- content/en/docs/reference/glossary/helm-chart.md | 2 +- content/en/docs/reference/glossary/istio.md | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/content/en/blog/_posts/2018-07-18-11-ways-not-to-get-hacked.md b/content/en/blog/_posts/2018-07-18-11-ways-not-to-get-hacked.md index fb7cbbd887596..329d81cf56e25 100644 --- a/content/en/blog/_posts/2018-07-18-11-ways-not-to-get-hacked.md +++ b/content/en/blog/_posts/2018-07-18-11-ways-not-to-get-hacked.md @@ -285,7 +285,7 @@ The next stage of security's "cloud native evolution" looks to be **A service mesh is a web of encrypted persistent connections, made between high performance "sidecar" proxy servers like Envoy and Linkerd. It adds traffic management, monitoring, and policy - all without microservice changes.** -Offloading microservice security and networking code to a shared, battle tested set of libraries was already possible with [Linkerd](https://linkerd.io/), and the introduction of [Istio](https://istio.io/) by Google, IBM, and Lyft, has added an alternative in this space. With the addition of [SPIFFE](https://spiffe.io) for per-pod cryptographic identity and a plethora of [other features](https://istio.io/docs/concepts/what-is-istio/overview.html), Istio could simplify the deployment of the next generation of network security. +Offloading microservice security and networking code to a shared, battle tested set of libraries was already possible with [Linkerd](https://linkerd.io/), and the introduction of [Istio](https://istio.io/) by Google, IBM, and Lyft, has added an alternative in this space. With the addition of [SPIFFE](https://spiffe.io) for per-pod cryptographic identity and a plethora of [other features](https://istio.io/docs/concepts/what-is-istio/), Istio could simplify the deployment of the next generation of network security. In "Zero Trust" networks there may be no need for traditional firewalling or Kubernetes network policy, as every interaction occurs over mTLS (mutual TLS), ensuring that both parties are not only communicating securely, but that the identity of both services is known. diff --git a/content/en/case-studies/openAI/index.html b/content/en/case-studies/openAI/index.html index 4814ce6fdbe9e..040f704efa952 100644 --- a/content/en/case-studies/openAI/index.html +++ b/content/en/case-studies/openAI/index.html @@ -93,7 +93,7 @@

From experiments in robotics to old-school video game play research, OpenAI
OpenAI is also benefiting from other technologies in the CNCF cloud-native ecosystem. gRPC is used by many of its systems for communications between different services, and Prometheus is in place "as a debugging tool if things go wrong," says Berner. "We actually haven’t had any real problems in our Kubernetes clusters recently, so I don’t think anyone has looked at our Prometheus monitoring in a while. If something breaks, it will be there."

- One of the things Berner continues to focus on is Kubernetes’ ability to scale, which is essential to deep learning experiments. OpenAI has been able to push one of its Kubernetes clusters on Azure up to more than 2,500 nodes. "I think we’ll probably hit the 5,000-machine number that Kubernetes has been tested at before too long," says Berner, adding, "We’re definitely hiring if you’re excited about working on these things!" + One of the things Berner continues to focus on is Kubernetes’ ability to scale, which is essential to deep learning experiments. OpenAI has been able to push one of its Kubernetes clusters on Azure up to more than 2,500 nodes. "I think we’ll probably hit the 5,000-machine number that Kubernetes has been tested at before too long," says Berner, adding, "We’re definitely hiring if you’re excited about working on these things!"
diff --git a/content/en/case-studies/squarespace/index.html b/content/en/case-studies/squarespace/index.html index 58c5cae5cc288..d2b2a18c92cc5 100644 --- a/content/en/case-studies/squarespace/index.html +++ b/content/en/case-studies/squarespace/index.html @@ -47,7 +47,7 @@

Impact

Since it was started in a dorm room in 2003, Squarespace has made it simple for millions of people to create their own websites.

Behind the scenes, though, the company’s monolithic Java application was making things not so simple for its developers to keep improving the platform. So in 2014, the company decided to "go down the microservices path," says Kevin Lynch, staff engineer on Squarespace’s Site Reliability team. "But we were always deploying our applications in vCenter VMware VMs [in our own data centers]. Microservices solved a problem on the development side, but it pushed that problem to the Infrastructure team. The infrastructure deployment process on our 5,000 VM hosts was slowing everyone down."

After experimenting with another container orchestration platform and "breaking it in very painful ways," Lynch says, the team began experimenting with Kubernetes in mid-2016 and found that it "answered all the questions that we had." Deploying it in the data center rather than the public cloud was their biggest challenge, and at the time, not a lot of other companies were doing that. "We had to figure out how to deploy this in our infrastructure for ourselves, and we had to integrate it with our other applications," says Lynch.

- At the same time, Squarespace’s Network Engineering team was modernizing its networking stack, switching from a traditional layer-two network to a layer-three spine-and-leaf network. "It mapped beautifully with what we wanted to do with Kubernetes," says Lynch. "It gives us the ability to have our servers communicate directly with the top-of-rack switches. We use Calico for CNI networking for Kubernetes, so we can announce all these individual Kubernetes pod IP addresses and have them integrate seamlessly with our other services that are still provisioned in the VMs." + At the same time, Squarespace’s Network Engineering team was modernizing its networking stack, switching from a traditional layer-two network to a layer-three spine-and-leaf network. "It mapped beautifully with what we wanted to do with Kubernetes," says Lynch. "It gives us the ability to have our servers communicate directly with the top-of-rack switches. We use Calico for CNI networking for Kubernetes, so we can announce all these individual Kubernetes pod IP addresses and have them integrate seamlessly with our other services that are still provisioned in the VMs."
diff --git a/content/en/case-studies/ygrene/index.html b/content/en/case-studies/ygrene/index.html index 6f15b7fe9b73f..b57258e52dcdf 100644 --- a/content/en/case-studies/ygrene/index.html +++ b/content/en/case-studies/ygrene/index.html @@ -101,7 +101,7 @@

In less than a decade, Before, deployments typically took three to four hours, and two or three months’ worth of work would be deployed at low-traffic times every week or two weeks. Now, they take five minutes for Kubernetes, and an hour for an overall deploy with smoke testing. And "we’re able to deploy three or four times a week, with just one week’s or two days’ worth of work," Adams says. "We’re deploying during the work week, in the daytime and without any downtime. We had to ask for business approval to take the systems down for 30 minutes to an hour, even in the middle of the night, because people could be doing loans. Now we can deploy, ship code, and migrate databases, all without taking the system down. The company gets new features without worrying that some business will be lost or delayed."

-Cloud native also affected how Ygrene’s 50+ developers and contractors work. Adams and Arnold spent considerable time "teaching people to think distributed out of the box," says Arnold. "We ended up picking what we call the Four S’s of Shipping: safely, securely, stably, and speedily." (For more on the security piece of it, see their
article on their "continuous hacking" strategy.) As for the engineers, says Adams, "they have been able to advance as their software has advanced. I think that at the end of the day, the developers feel better about what they’re doing, and they also feel more connected to the modern software development community."

+Cloud native also affected how Ygrene’s 50+ developers and contractors work. Adams and Arnold spent considerable time "teaching people to think distributed out of the box," says Arnold. "We ended up picking what we call the Four S’s of Shipping: safely, securely, stably, and speedily." (For more on the security piece of it, see their article on their "continuous hacking" strategy.) As for the engineers, says Adams, "they have been able to advance as their software has advanced. I think that at the end of the day, the developers feel better about what they’re doing, and they also feel more connected to the modern software development community."

Looking ahead, Adams is excited to explore more CNCF projects, including SPIFFE and SPIRE. "CNCF has been an amazing incubator for so many projects," he says. "Now we look at its webpage regularly to find out if there are any new, awesome, high-quality projects we can implement into our stack. It’s actually become a hub for us for knowing what software we need to be looking at to make our systems more secure or more scalable." diff --git a/content/en/docs/contribute/participating.md b/content/en/docs/contribute/participating.md index 2ccf4baa8cc1b..c9785388abcac 100644 --- a/content/en/docs/contribute/participating.md +++ b/content/en/docs/contribute/participating.md @@ -261,7 +261,7 @@ the automation uses information from OWNERS files. The Kubernetes project uses an automation tool called prow for automation related to GitHub issues and pull requests. The [Kubernetes website repository](https://github.com/kubernetes/website) uses -two [prow plugins](https://github.com/kubernetes/test-infra/blob/master/prow/plugins.yaml#L210): +two [prow plugins](https://github.com/kubernetes/test-infra/tree/master/prow/plugins): - blunderbuss - approve diff --git a/content/en/docs/reference/glossary/helm-chart.md b/content/en/docs/reference/glossary/helm-chart.md index c189851eeb370..baa8cc5486a58 100755 --- a/content/en/docs/reference/glossary/helm-chart.md +++ b/content/en/docs/reference/glossary/helm-chart.md @@ -2,7 +2,7 @@ title: Helm Chart id: helm-chart date: 2018-04-12 -full_link: https://helm.sh/docs/developing_charts/ +full_link: https://helm.sh/docs/topics/charts/ short_description: > A package of pre-configured Kubernetes resources that can be managed with the Helm tool. diff --git a/content/en/docs/reference/glossary/istio.md b/content/en/docs/reference/glossary/istio.md index 246d53bb15689..fbf29f421c952 100755 --- a/content/en/docs/reference/glossary/istio.md +++ b/content/en/docs/reference/glossary/istio.md @@ -2,7 +2,7 @@ title: Istio id: istio date: 2018-04-12 -full_link: https://istio.io/docs/concepts/what-is-istio/overview.html +full_link: https://istio.io/docs/concepts/what-is-istio/ short_description: > An open platform (not Kubernetes-specific) that provides a uniform way to integrate microservices, manage traffic flow, enforce policies, and aggregate telemetry data. From c346789c3671cc7ed24ed4acb78e36d70fe88c7c Mon Sep 17 00:00:00 2001 From: Luzhenxing Date: Mon, 18 Nov 2019 09:37:42 +0800 Subject: [PATCH 42/66] Use tabs for install section of Kompose (#17600) --- .../translate-compose-kubernetes.md | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/content/en/docs/tasks/configure-pod-container/translate-compose-kubernetes.md b/content/en/docs/tasks/configure-pod-container/translate-compose-kubernetes.md index c5b714d770d20..370e75f6cee92 100644 --- a/content/en/docs/tasks/configure-pod-container/translate-compose-kubernetes.md +++ b/content/en/docs/tasks/configure-pod-container/translate-compose-kubernetes.md @@ -27,7 +27,8 @@ More information can be found on the Kompose website at [http://kompose.io](http We have multiple ways to install Kompose. Our preferred method is downloading the binary from the latest GitHub release. -## GitHub release +{{< tabs name="install_ways" >}} +{{% tab name="GitHub download" %}} Kompose is released via GitHub on a three-week cycle, you can see all current releases on the [GitHub release page](https://github.com/kubernetes/kompose/releases). @@ -47,7 +48,9 @@ sudo mv ./kompose /usr/local/bin/kompose Alternatively, you can download the [tarball](https://github.com/kubernetes/kompose/releases). -## Go + +{{% /tab %}} +{{% tab name="Build from source" %}} Installing using `go get` pulls from the master branch with the latest development changes. @@ -55,7 +58,8 @@ Installing using `go get` pulls from the master branch with the latest developme go get -u github.com/kubernetes/kompose ``` -## CentOS +{{% /tab %}} +{{% tab name="CentOS package" %}} Kompose is in [EPEL](https://fedoraproject.org/wiki/EPEL) CentOS repository. If you don't have [EPEL](https://fedoraproject.org/wiki/EPEL) repository already installed and enabled you can do it by running `sudo yum install epel-release` @@ -66,7 +70,8 @@ If you have [EPEL](https://fedoraproject.org/wiki/EPEL) enabled in your system, sudo yum -y install kompose ``` -## Fedora +{{% /tab %}} +{{% tab name="Fedora package" %}} Kompose is in Fedora 24, 25 and 26 repositories. You can install it just like any other package. @@ -74,7 +79,8 @@ Kompose is in Fedora 24, 25 and 26 repositories. You can install it just like an sudo dnf -y install kompose ``` -## macOS +{{% /tab %}} +{{% tab name="Homebrew (macOS)" %}} On macOS you can install latest release via [Homebrew](https://brew.sh): @@ -82,6 +88,8 @@ On macOS you can install latest release via [Homebrew](https://brew.sh): brew install kompose ``` +{{% /tab %}} +{{< /tabs >}} ## Use Kompose From 6d845b5f0cf3e865f5e6f0742a4a0bc8a930a109 Mon Sep 17 00:00:00 2001 From: Tim Bannister Date: Mon, 18 Nov 2019 01:39:41 +0000 Subject: [PATCH 43/66] Clean up sample output for kubeadm upgrade (#17592) --- .../tasks/administer-cluster/kubeadm/kubeadm-upgrade.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade.md b/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade.md index fb5f47715b454..e8b6ae88aaeab 100644 --- a/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade.md +++ b/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade.md @@ -102,7 +102,7 @@ The upgrade workflow at high level is the following: You should see output similar to this: - ```shell + ``` [upgrade/config] Making sure the configuration is correct: [upgrade/config] Reading configuration from the cluster... [upgrade/config] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml' @@ -151,7 +151,7 @@ The upgrade workflow at high level is the following: You should see output similar to this: - ```shell + ``` [preflight] Running pre-flight checks. [upgrade] Making sure the cluster is healthy: [upgrade/config] Making sure the configuration is correct: @@ -314,7 +314,7 @@ without compromising the minimum required capacity for running your workloads. You should see output similar to this: - ```shell + ``` node/ip-172-31-85-18 cordoned WARNING: ignoring DaemonSet-managed Pods: kube-system/kube-proxy-dj7d7, kube-system/weave-net-z65qx node/ip-172-31-85-18 drained From 3c17c3fefd651b7773bf7945f8ee92660d4ee6c2 Mon Sep 17 00:00:00 2001 From: Tanveer Alam Date: Mon, 18 Nov 2019 07:11:41 +0530 Subject: [PATCH 44/66] Added design doc reference link of PLEG. (#17596) Added reference link for PLEG(`https://github.com/kubernetes/community/blob/master/contributors/design-proposals/node/pod-lifecycle-event-generator.md`), which could be helpful for someone who is interested in knowing more about PLEG. --- content/en/docs/concepts/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/concepts/_index.md b/content/en/docs/concepts/_index.md index 991b5552ce34a..7833bd31d31a3 100644 --- a/content/en/docs/concepts/_index.md +++ b/content/en/docs/concepts/_index.md @@ -17,7 +17,7 @@ The Concepts section helps you learn about the parts of the Kubernetes system an To work with Kubernetes, you use *Kubernetes API objects* to describe your cluster's *desired state*: what applications or other workloads you want to run, what container images they use, the number of replicas, what network and disk resources you want to make available, and more. You set your desired state by creating objects using the Kubernetes API, typically via the command-line interface, `kubectl`. You can also use the Kubernetes API directly to interact with the cluster and set or modify your desired state. -Once you've set your desired state, the *Kubernetes Control Plane* makes the cluster's current state match the desired state via the Pod Lifecycle Event Generator (PLEG). To do so, Kubernetes performs a variety of tasks automatically--such as starting or restarting containers, scaling the number of replicas of a given application, and more. The Kubernetes Control Plane consists of a collection of processes running on your cluster: +Once you've set your desired state, the *Kubernetes Control Plane* makes the cluster's current state match the desired state via the Pod Lifecycle Event Generator ([PLEG](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/node/pod-lifecycle-event-generator.md)). To do so, Kubernetes performs a variety of tasks automatically--such as starting or restarting containers, scaling the number of replicas of a given application, and more. The Kubernetes Control Plane consists of a collection of processes running on your cluster: * The **Kubernetes Master** is a collection of three processes that run on a single node in your cluster, which is designated as the master node. Those processes are: [kube-apiserver](/docs/admin/kube-apiserver/), [kube-controller-manager](/docs/admin/kube-controller-manager/) and [kube-scheduler](/docs/admin/kube-scheduler/). * Each individual non-master node in your cluster runs two processes: From f786b9cb7c483a9081f9ec6e9345a07e67745181 Mon Sep 17 00:00:00 2001 From: Gireesh Puthumana Date: Mon, 18 Nov 2019 07:13:41 +0530 Subject: [PATCH 45/66] fix for https://github.com/kubernetes/website/issues/17597 (#17599) --- .../services-networking/connect-applications-service.md | 4 ++-- .../services-networking/connect-applications-service.md | 4 ++-- .../services-networking/connect-applications-service.md | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/content/en/docs/concepts/services-networking/connect-applications-service.md b/content/en/docs/concepts/services-networking/connect-applications-service.md index 4a1c2b1e8c9b8..13a0352846e04 100644 --- a/content/en/docs/concepts/services-networking/connect-applications-service.md +++ b/content/en/docs/concepts/services-networking/connect-applications-service.md @@ -237,8 +237,8 @@ Till now we have only accessed the nginx server from within the cluster. Before You can acquire all these from the [nginx https example](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/staging/https-nginx/). This requires having go and make tools installed. If you don't want to install those, then follow the manual steps later. In short: ```shell -make keys secret KEY=/tmp/nginx.key CERT=/tmp/nginx.crt SECRET=/tmp/secret.json -kubectl apply -f /tmp/secret.json +make keys KEY=/tmp/nginx.key CERT=/tmp/nginx.crt +kubectl create secret tls nginxsecret --key /tmp/nginx.key --cert /tmp/nginx.crt ``` ``` secret/nginxsecret created diff --git a/content/id/docs/concepts/services-networking/connect-applications-service.md b/content/id/docs/concepts/services-networking/connect-applications-service.md index 5d7684d574230..174c87067bd14 100644 --- a/content/id/docs/concepts/services-networking/connect-applications-service.md +++ b/content/id/docs/concepts/services-networking/connect-applications-service.md @@ -200,8 +200,8 @@ Hingga sekarang kita hanya mengakses *nginx* server dari dalam kluster. Sebelum Kamu dapat melihat semua itu di [contoh nginx https](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/staging/https-nginx/). Contoh ini mengaharuskan kamu melakukan instalasi *go* dan *make*. Jika kamu tidak ingin melakukan instalasi tersebut, ikuti langkah-langkah manualnya nanti, singkatnya: ```shell -make keys secret KEY=/tmp/nginx.key CERT=/tmp/nginx.crt SECRET=/tmp/secret.json -kubectl apply -f /tmp/secret.json +make keys KEY=/tmp/nginx.key CERT=/tmp/nginx.crt +kubectl create secret tls nginxsecret --key /tmp/nginx.key --cert /tmp/nginx.crt ``` ``` secret/nginxsecret created diff --git a/content/zh/docs/concepts/services-networking/connect-applications-service.md b/content/zh/docs/concepts/services-networking/connect-applications-service.md index 6cec8b0ab573e..8c2087156b1b7 100644 --- a/content/zh/docs/concepts/services-networking/connect-applications-service.md +++ b/content/zh/docs/concepts/services-networking/connect-applications-service.md @@ -375,8 +375,8 @@ You can acquire all these from the [nginx https example](https://github.com/kube 可以从 [Nginx https 示例](https://github.com/kubernetes/kubernetes/tree/{{< param "githubbranch" >}}/examples/https-nginx/) 获取所有上述内容,简明示例如下: ```shell -make keys secret KEY=/tmp/nginx.key CERT=/tmp/nginx.crt SECRET=/tmp/secret.json -kubectl apply -f /tmp/secret.json +make keys KEY=/tmp/nginx.key CERT=/tmp/nginx.crt +kubectl create secret tls nginxsecret --key /tmp/nginx.key --cert /tmp/nginx.crt ``` ``` secret/nginxsecret created From 86d3882330cce4846a9f0ea19e85af9916e30a22 Mon Sep 17 00:00:00 2001 From: Luzhenxing Date: Mon, 18 Nov 2019 09:45:42 +0800 Subject: [PATCH 46/66] use a feature-state shortcode (#17602) --- .../en/docs/tasks/administer-cluster/nodelocaldns.md | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/content/en/docs/tasks/administer-cluster/nodelocaldns.md b/content/en/docs/tasks/administer-cluster/nodelocaldns.md index f661336278361..fa4e557785f71 100644 --- a/content/en/docs/tasks/administer-cluster/nodelocaldns.md +++ b/content/en/docs/tasks/administer-cluster/nodelocaldns.md @@ -7,6 +7,7 @@ content_template: templates/task --- {{% capture overview %}} +{{< feature-state for_k8s_version="v1.15" state="beta" >}} This page provides an overview of NodeLocal DNSCache feature in Kubernetes. {{% /capture %}} @@ -58,13 +59,4 @@ This works for e2e clusters created on GCE. On all other environments, the follo Once enabled, node-local-dns Pods will run in the kube-system namespace on each of the cluster nodes. This Pod runs [CoreDNS](https://github.com/coredns/coredns) in cache mode, so all CoreDNS metrics exposed by the different plugins will be available on a per-node basis. -### Feature availability - -The addon can be applied using the yaml specified above in any k8s version. The feature support is as described: - -| k8s version | Feature support | -| :---------: |:-----------:| -| 1.15 | Beta(Not enabled by default) | -| 1.13 | Alpha(Not enabled by default) | - {{% /capture %}} From 8a42721eaea2bb8ad856687dfa6fb7ba077e8287 Mon Sep 17 00:00:00 2001 From: Alejandro Huertas Herrero Date: Mon, 18 Nov 2019 02:47:42 +0100 Subject: [PATCH 47/66] Add OpenNebula documentation link (#17580) --- content/en/docs/setup/_index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/content/en/docs/setup/_index.md b/content/en/docs/setup/_index.md index 22bbe2c792d99..8bbe6e4c02481 100644 --- a/content/en/docs/setup/_index.md +++ b/content/en/docs/setup/_index.md @@ -98,6 +98,7 @@ The following production environment solutions table lists the providers and the | [Mirantis Cloud Platform](https://www.mirantis.com/software/kubernetes/) | | | ✔ | | | | [Nirmata](https://www.nirmata.com/) | | ✔ | ✔ | | | | [Nutanix](https://www.nutanix.com/en) | [Nutanix Karbon](https://www.nutanix.com/products/karbon) | [Nutanix Karbon](https://www.nutanix.com/products/karbon) | | | [Nutanix AHV](https://www.nutanix.com/products/acropolis/virtualization) | +| [OpenNebula](https://www.opennebula.org) |[OpenNebula Kubernetes](https://marketplace.opennebula.systems/docs/service/kubernetes.html) | | | | | | [OpenShift](https://www.openshift.com) |[OpenShift Dedicated](https://www.openshift.com/products/dedicated/) and [OpenShift Online](https://www.openshift.com/products/online/) | | [OpenShift Container Platform](https://www.openshift.com/products/container-platform/) | | [OpenShift Container Platform](https://www.openshift.com/products/container-platform/) |[OpenShift Container Platform](https://www.openshift.com/products/container-platform/) | [Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE)](https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm) | ✔ | ✔ | | | | | [oVirt](https://www.ovirt.org/) | | | | | ✔ | From 834d9e9f03be403eab026e113640d60489092437 Mon Sep 17 00:00:00 2001 From: Oleg Butuzov Date: Mon, 18 Nov 2019 03:49:41 +0200 Subject: [PATCH 48/66] task/hpa example enhancement (#17604) Using removable Pod instead of Deployment in HPA example. --- .../run-application/horizontal-pod-autoscale-walkthrough.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md b/content/en/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md index 51f2e16d479c7..d112ad9abb332 100644 --- a/content/en/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md +++ b/content/en/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md @@ -110,7 +110,7 @@ Now, we will see how the autoscaler reacts to increased load. We will start a container, and send an infinite loop of queries to the php-apache service (please run it in a different terminal): ```shell -kubectl run -i --tty load-generator --image=busybox /bin/sh +kubectl run --generator=run-pod/v1 -it --rm load-generator --image=busybox /bin/sh Hit enter for command prompt From 6ec1a38ed011a5b049faa6a8597e47574720fcd7 Mon Sep 17 00:00:00 2001 From: Mike Dame Date: Sun, 17 Nov 2019 20:51:41 -0500 Subject: [PATCH 49/66] Fix typo CRD field (#17610) --- .../custom-resources/custom-resource-definitions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions.md b/content/en/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions.md index 35f525ffc0cd3..e6584d712cf92 100644 --- a/content/en/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions.md +++ b/content/en/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions.md @@ -255,7 +255,7 @@ A structural schema is an [OpenAPI v3.0 validation schema](/docs/tasks/access-ku * a node with `x-kubernetes-int-or-string: true` * a node with `x-kubernetes-preserve-unknown-fields: true` 2. for each field in an object and each item in an array which is specified within any of `allOf`, `anyOf`, `oneOf` or `not`, the schema also specifies the field/item outside of those logical junctors (compare example 1 and 2). -3. does not set `description`, `type`, `default`, `additionProperties`, `nullable` within an `allOf`, `anyOf`, `oneOf` or `not`, with the exception of the two pattern for `x-kubernetes-int-or-string: true` (see below). +3. does not set `description`, `type`, `default`, `additionalProperties`, `nullable` within an `allOf`, `anyOf`, `oneOf` or `not`, with the exception of the two pattern for `x-kubernetes-int-or-string: true` (see below). 4. if `metadata` is specified, then only restrictions on `metadata.name` and `metadata.generateName` are allowed. From a6a505fb7394ec04ec38da22c85e2e5657337d8a Mon Sep 17 00:00:00 2001 From: yacinelazaar Date: Mon, 18 Nov 2019 02:53:41 +0100 Subject: [PATCH 50/66] Remove instructions to copy Etcd CA key in HA (#17611) * Remove instructions to copy Etcd CA key in HA No need to copy etcd CA key when manually copying certs from first master node to nodes joining the control plane. * ca.key still needed for stacked ETCD Added note to quote/unquote the copying instructions depending on Etcd configuration --- .../production-environment/tools/kubeadm/high-availability.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/content/en/docs/setup/production-environment/tools/kubeadm/high-availability.md b/content/en/docs/setup/production-environment/tools/kubeadm/high-availability.md index 1205ddfef68f0..c93186b28de2e 100644 --- a/content/en/docs/setup/production-environment/tools/kubeadm/high-availability.md +++ b/content/en/docs/setup/production-environment/tools/kubeadm/high-availability.md @@ -345,6 +345,7 @@ SSH is required if you want to control all nodes from a single machine. scp /etc/kubernetes/pki/front-proxy-ca.crt "${USER}"@$host: scp /etc/kubernetes/pki/front-proxy-ca.key "${USER}"@$host: scp /etc/kubernetes/pki/etcd/ca.crt "${USER}"@$host:etcd-ca.crt + # Quote this line if you are using external etcd scp /etc/kubernetes/pki/etcd/ca.key "${USER}"@$host:etcd-ca.key done ``` @@ -368,6 +369,7 @@ SSH is required if you want to control all nodes from a single machine. mv /home/${USER}/front-proxy-ca.crt /etc/kubernetes/pki/ mv /home/${USER}/front-proxy-ca.key /etc/kubernetes/pki/ mv /home/${USER}/etcd-ca.crt /etc/kubernetes/pki/etcd/ca.crt + # Quote this line if you are using external etcd mv /home/${USER}/etcd-ca.key /etc/kubernetes/pki/etcd/ca.key ``` {{% /capture %}} From 31970ef6f9c4d74de879cae7b9c76372dd2d8cfc Mon Sep 17 00:00:00 2001 From: Sascha Grunert Date: Sun, 17 Nov 2019 17:59:41 -0800 Subject: [PATCH 51/66] Fix invalid CRI-O glossary links (#17532) Signed-off-by: Sascha Grunert --- content/en/docs/reference/glossary/cri-o.md | 2 +- content/fr/docs/reference/glossary/cri-o.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/content/en/docs/reference/glossary/cri-o.md b/content/en/docs/reference/glossary/cri-o.md index a5b0ca4a157b9..a2c61e6984c16 100644 --- a/content/en/docs/reference/glossary/cri-o.md +++ b/content/en/docs/reference/glossary/cri-o.md @@ -2,7 +2,7 @@ title: CRI-O id: cri-o date: 2019-05-14 -full_link: https://cri-o.io/docs/ +full_link: https://cri-o.io/#what-is-cri-o short_description: > A lightweight container runtime specifically for Kubernetes diff --git a/content/fr/docs/reference/glossary/cri-o.md b/content/fr/docs/reference/glossary/cri-o.md index 2c39293a8a56f..4e2c6ccf709fc 100644 --- a/content/fr/docs/reference/glossary/cri-o.md +++ b/content/fr/docs/reference/glossary/cri-o.md @@ -2,7 +2,7 @@ title: CRI-O id: cri-o date: 2019-05-14 -full_link: https://cri-o.io/docs/ +full_link: https://cri-o.io/#what-is-cri-o short_description: > Un runtime (environnement d'exécution) de conteneur, léger et spécifiquement conçu pour Kubernetes. From 5a562997a8aae4f992bdabce839335e4e835342b Mon Sep 17 00:00:00 2001 From: Carlos Almeida Date: Mon, 18 Nov 2019 11:15:41 -0300 Subject: [PATCH 52/66] Add content/es/docs/concepts/workloads/pods/podpreset.md (#17265) * added podpreset.md * Update content/es/docs/concepts/workloads/pods/podpreset.md Co-Authored-By: Rael Garcia * Update content/es/docs/concepts/workloads/pods/podpreset.md Co-Authored-By: Victor Morales * Update content/es/docs/concepts/workloads/pods/podpreset.md Co-Authored-By: Victor Morales * Update content/es/docs/concepts/workloads/pods/podpreset.md Co-Authored-By: Victor Morales * Update content/es/docs/concepts/workloads/pods/podpreset.md Co-Authored-By: Victor Morales * Update content/es/docs/concepts/workloads/pods/podpreset.md Co-Authored-By: Victor Morales * Update content/es/docs/concepts/workloads/pods/podpreset.md Co-Authored-By: Victor Morales * Update content/es/docs/concepts/workloads/pods/podpreset.md Co-Authored-By: Victor Morales * Update content/es/docs/concepts/workloads/pods/podpreset.md Co-Authored-By: Victor Morales * Update content/es/docs/concepts/workloads/pods/podpreset.md Co-Authored-By: Victor Morales * Update content/es/docs/concepts/workloads/pods/podpreset.md Co-Authored-By: Victor Morales --- .../docs/concepts/workloads/pods/podpreset.md | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 content/es/docs/concepts/workloads/pods/podpreset.md diff --git a/content/es/docs/concepts/workloads/pods/podpreset.md b/content/es/docs/concepts/workloads/pods/podpreset.md new file mode 100644 index 0000000000000..5e38b534b6baf --- /dev/null +++ b/content/es/docs/concepts/workloads/pods/podpreset.md @@ -0,0 +1,95 @@ +--- +reviewers: +- raelga +title: Pod Preset +content_template: templates/concept +weight: 50 +--- + +{{% capture overview %}} +Esta página provee una descripción general de los Pod Presets, los cuales son +los objetos que se utilizan para inyectar cierta información en los Pods en +el momento de la creación. Esta información puede incluir secretos, volúmenes, +montajes de volúmenes y variables de entorno. +{{% /capture %}} + + +{{% capture body %}} +## Entendiendo los Pod Presets + +Un `Pod Preset` es un recurso de la API utilizado para poder inyectar requerimientos +adicionales de tiempo de ejecución en un Pod en el momento de la creación. +Se utilizan los [selectores de etiquetas](/docs/concepts/overview/working-with-objects/labels/#label-selectors) +para especificar los Pods a los que se aplica un Pod Preset determinado. + +El uso de un Pod Preset permite a los autores de plantillas de Pods no tener que proporcionar +explícitamente toda la información de cada Pod. De esta manera, los autores de plantillas de +Pods que consuman un determinado servicio no tendrán que conocer todos los detalles de ese servicio. + +Para más información sobre los detalles de los trasfondos, consulte la [propuesta de diseño de PodPreset](https://git.k8s.io/community/contributors/design-proposals/service-catalog/pod-preset.md). + +## Cómo funciona + +Kubernetes provee un controlador de admisión (`PodPreset`) que, cuando está habilitado, +aplica los Pod Presets a las peticiones de creación de Pods entrantes. +Cuando se realiza una solicitud de creación de Pods, el sistema hace lo siguiente: + +1. Obtiene todos los `PodPresets` disponibles para usar. +2. Verifica si los selectores de etiquetas de cualquier `PodPreset` correspondan + con las etiquetas del Pod que se está creando. +3. Intenta fusionar los diversos recursos definidos por el `PodPreset` dentro del Pod + que se está creando. +4. Si se llegase a producir un error al intentar fusionar los recursos dentro del Pod, + lanza un evento que documente este error, luego crea el Pod _sin_ ningún recurso que se + inyecte desde el `PodPreset`. +5. Escribe una nota descriptiva de la especificación de Pod modificada resultante para + indicar que ha sido modificada por un `PodPreset`. La nota descriptiva presenta la forma + `podpreset.admission.kubernetes.io/podpreset-: ""`. + +Cada Pod puede ser correspondido por cero o más Pod Presets; y cada `Pod Preset` puede ser +aplicado a cero o más Pods. Cuando se aplica un `Pod Preset` a una o más Pods, Kubernetes +modifica la especificación del Pod. Para los cambios a `Env`, `EnvFrom`, y `VolumeMounts`, +Kubernetes modifica la especificación del Container para todos los Containers en el Pod; +para los cambios a `Volume`, Kubernetes modifica la especificación del Pod. + +{{< note >}} +Un Pod Preset es capaz de modificar los siguientes campos en las especificaciones de un Pod +en caso de ser necesario: +- El campo `.spec.containers`. +- El campo `initContainers` (requiere Kubernetes versión 1.14.0 o posterior). +{{< /note >}} + +### Deshabilitar un Pod Preset para un Pod específico + +Puede haber casos en los que se desee que un Pod no se vea alterado por ninguna posible +modificación del Pod Preset. En estos casos, se puede añadir una observación en el Pod +Spec de la siguiente forma: `podpreset.admission.kubernetes.io/exclude: "true"`. + +## Habilitando un Pod Preset + +Con el fin de utilizar los Pod Presets en un clúster debe asegurarse de lo siguiente: + +1. Que se ha configurado el tipo de API `settings.k8s.io/v1alpha1/podpreset`. Esto se puede hacer, + por ejemplo, incluyendo `settings.k8s.io/v1alpha1=true` como valor de la opción `--runtime-config` + en el servidor API. En minikube se debe añadir el flag + `--extra-config=apiserver.runtime-config=settings.k8s.io/v1alpha1=true` cuando el clúster + se está iniciando. +2. Que se ha habilitado el controlador de admisión `PodPreset`. Una forma de hacer esto es incluir + `PodPreset` como valor de la opción `--enable-admission-plugins` especificada + para el servidor API. En minikube se debe añadir el flag + + ```shell + --extra-config=apiserver.enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,PodPreset + ``` + + cuando el clúster se está iniciando. +3. Que se han definido los Pod Presets mediante la creación de objetos `PodPreset` en el + namespace que se utilizará. + +{{% /capture %}} + +{{% capture whatsnext %}} + +* [Inyectando datos en un Pod usando PodPreset](/docs/tasks/inject-data-application/podpreset/) + +{{% /capture %}} From ce299d57297e0eb2b53459289ab1ca5707cb43e6 Mon Sep 17 00:00:00 2001 From: sivanzcw Date: Mon, 18 Nov 2019 22:19:42 +0800 Subject: [PATCH 53/66] change the expired link about sig-governance, es language (#17606) --- content/es/docs/reference/glossary/sig.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/es/docs/reference/glossary/sig.md b/content/es/docs/reference/glossary/sig.md index 36fc854cb6cba..fbee9a6c63612 100644 --- a/content/es/docs/reference/glossary/sig.md +++ b/content/es/docs/reference/glossary/sig.md @@ -15,6 +15,6 @@ tags: Los miembros dentro de un SIG tienen un interés compartido en avanzar en una área específica, como puede ser la arquitectura, la maquinaria detrás de las APIs, la usabilidad o la documentación. -Los SIGs deben cumplir las guías de [Gobernanza de un SIG](https://github.com/kubernetes/community/blob/master/sig-governance.md) pero pueden tener sus propias normas de contribución y canales de comunicación. +Los SIGs deben cumplir las guías de SIG [pautas de gobernanza](https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md), pero pueden tener sus propias normas de contribución y canales de comunicación. Para más información, consulta el repositorio [kubernetes/community](https://github.com/kubernetes/community) y la lista de los [SIGs y Grupos de Trabajo (WGs)](https://github.com/kubernetes/community/blob/master/sig-list.md). From 1ef778e98d29915abec8481174abdb3cac453bde Mon Sep 17 00:00:00 2001 From: Tariq Ibrahim Date: Mon, 18 Nov 2019 06:55:41 -0800 Subject: [PATCH 54/66] [docs/tutorials]: update kube-state-metrics install details (#17570) --- .../guestbook-logs-metrics-with-elk.md | 6 +++--- .../guestbook-logs-metrics-with-elk.md | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/content/en/docs/tutorials/stateless-application/guestbook-logs-metrics-with-elk.md b/content/en/docs/tutorials/stateless-application/guestbook-logs-metrics-with-elk.md index d14f15701dd9b..af24c72999457 100644 --- a/content/en/docs/tutorials/stateless-application/guestbook-logs-metrics-with-elk.md +++ b/content/en/docs/tutorials/stateless-application/guestbook-logs-metrics-with-elk.md @@ -67,12 +67,12 @@ kubectl get pods --namespace=kube-system | grep kube-state ```shell git clone https://github.com/kubernetes/kube-state-metrics.git kube-state-metrics -kubectl create -f kube-state-metrics/kubernetes -kubectl get pods --namespace=kube-system | grep kube-state +kubectl create -f examples/standard +kubectl get pods --namespace=kube-system | grep kube-state-metrics ``` Verify that kube-state-metrics is running and ready ```shell -kubectl get pods -n kube-system -l k8s-app=kube-state-metrics +kubectl get pods -n kube-system -l app.kubernetes.io/name=kube-state-metrics ``` Output: diff --git a/content/ko/docs/tutorials/stateless-application/guestbook-logs-metrics-with-elk.md b/content/ko/docs/tutorials/stateless-application/guestbook-logs-metrics-with-elk.md index 44804b90bd124..816aa4ce50dda 100644 --- a/content/ko/docs/tutorials/stateless-application/guestbook-logs-metrics-with-elk.md +++ b/content/ko/docs/tutorials/stateless-application/guestbook-logs-metrics-with-elk.md @@ -66,12 +66,12 @@ kubectl get pods --namespace=kube-system | grep kube-state ```shell git clone https://github.com/kubernetes/kube-state-metrics.git kube-state-metrics -kubectl create -f kube-state-metrics/kubernetes -kubectl get pods --namespace=kube-system | grep kube-state +kubectl create -f examples/standard +kubectl get pods --namespace=kube-system | grep kube-state-metrics ``` kube-state-metrics이 실행 중이고 준비되었는지 확인한다. ```shell -kubectl get pods -n kube-system -l k8s-app=kube-state-metrics +kubectl get pods -n kube-system -l app.kubernetes.io/name=kube-state-metrics ``` 출력 From fc96d09d8fcc9054788eeb8d254efcc49dbe824b Mon Sep 17 00:00:00 2001 From: iaoiui Date: Tue, 19 Nov 2019 02:21:41 +0900 Subject: [PATCH 55/66] modify an attribute of figure (#17618) --- content/ja/docs/concepts/workloads/pods/pod-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/ja/docs/concepts/workloads/pods/pod-overview.md b/content/ja/docs/concepts/workloads/pods/pod-overview.md index 2386912c7633b..f46b8f25003c7 100644 --- a/content/ja/docs/concepts/workloads/pods/pod-overview.md +++ b/content/ja/docs/concepts/workloads/pods/pod-overview.md @@ -51,7 +51,7 @@ Podは凝集性の高いサービスのユニットを構成するような複 例えば、ユーザーが共有ボリューム内にあるファイル用のWebサーバとして稼働するコンテナと、下記のダイアグラムにあるような、リモートのソースからファイルを更新するような分離された*サイドカー* コンテナを持っているような場合です。 -{{< figure src="/images/docs/pod.svg" title="Podのダイアグラム" width="50%" >}} +{{< figure src="/images/docs/pod.svg" alt="Podのダイアグラム" width="50%" >}} Podは、Podによって構成されたコンテナ群のために2種類の共有リソースを提供します。 *ネットワーキング* と*ストレージ* です。 From 487fd9211724b5e54e01bcc2cbc1f319615a69cf Mon Sep 17 00:00:00 2001 From: Manish Bansal Date: Tue, 19 Nov 2019 01:41:42 +0530 Subject: [PATCH 56/66] Documentation corrected (#15944) * Documentation corrected The description for the `command` section was wrong. Same is corrected. * Update content/en/docs/tasks/configure-pod-container/configure-pod-configmap.md Co-Authored-By: Zach Corleissen --- .../tasks/configure-pod-container/configure-pod-configmap.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/tasks/configure-pod-container/configure-pod-configmap.md b/content/en/docs/tasks/configure-pod-container/configure-pod-configmap.md index 6bf3d96213bfa..f5129cfadbd17 100644 --- a/content/en/docs/tasks/configure-pod-container/configure-pod-configmap.md +++ b/content/en/docs/tasks/configure-pod-container/configure-pod-configmap.md @@ -537,7 +537,7 @@ kubectl create -f https://kubernetes.io/examples/configmap/configmap-multikeys.y Add the ConfigMap name under the `volumes` section of the Pod specification. This adds the ConfigMap data to the directory specified as `volumeMounts.mountPath` (in this case, `/etc/config`). -The `command` section references the `special.level` item stored in the ConfigMap. +The `command` section lists directory files with names that match the keys in ConfigMap. {{< codenew file="pods/pod-configmap-volume.yaml" >}} From f323e150188431ce5cd1df77240a4e792b75a63d Mon Sep 17 00:00:00 2001 From: Pablo Castellano Date: Mon, 18 Nov 2019 21:39:41 +0100 Subject: [PATCH 57/66] Update k8s versions (#17638) Related to project quotas --- .../configuration/manage-compute-resources-container.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/en/docs/concepts/configuration/manage-compute-resources-container.md b/content/en/docs/concepts/configuration/manage-compute-resources-container.md index ac681b9367944..43e71b15f73d1 100644 --- a/content/en/docs/concepts/configuration/manage-compute-resources-container.md +++ b/content/en/docs/concepts/configuration/manage-compute-resources-container.md @@ -410,7 +410,7 @@ be managed by use of [project quotas](http://xfs.org/docs/xfsdocs-xml-dev/XFS_User_Guide/tmp/en-US/html/xfs-quotas.html). Project quotas were originally implemented in XFS, and have more recently been ported to ext4fs. Project quotas can be used for both -monitoring and enforcement; as of Kubernetes 1.15, they are available +monitoring and enforcement; as of Kubernetes 1.16, they are available as alpha functionality for monitoring only. Quotas are faster and more accurate than directory scanning. When a @@ -432,7 +432,7 @@ following: * Enable the `LocalStorageCapacityIsolationFSQuotaMonitoring=true` feature gate in the kubelet configuration. This defaults to `false` - in Kubernetes 1.15, so must be explicitly set to `true`. + in Kubernetes 1.16, so must be explicitly set to `true`. * Ensure that the root partition (or optional runtime partition) is built with project quotas enabled. All XFS filesystems support From 1f3336760be301f4414cd68079f9230a33194db2 Mon Sep 17 00:00:00 2001 From: chentanjun <2799194073@qq.com> Date: Tue, 19 Nov 2019 04:43:42 +0800 Subject: [PATCH 58/66] fix 404 url in fr/ (#17627) --- content/fr/docs/contribute/participating.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/fr/docs/contribute/participating.md b/content/fr/docs/contribute/participating.md index 455106d448e11..199f2d5f3380a 100644 --- a/content/fr/docs/contribute/participating.md +++ b/content/fr/docs/contribute/participating.md @@ -179,7 +179,7 @@ Pour l'affectation des tickets, des pull requests, et aider la validation des PR ### OWNERS files et front-matter Le projet Kubernetes utilise un outil d'automatisation appelé prow pour l'automatisation liée aux Github issues et aux pull requests. -Le [dépôt du site web Kubernetes](https://github.com/kubernetes/website) utilise deux [plugins prow](https://github.com/kubernetes/test-infra/blob/master/prow/plugins.yaml#L210): +Le [dépôt du site web Kubernetes](https://github.com/kubernetes/website) utilise deux [plugins prow](https://github.com/kubernetes/test-infra/tree/master/prow/plugins): - blunderbuss - approve From dabb062a7869727fbc4c237fd70b2f6e8532953f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20de=20la=20Pe=C3=B1a?= Date: Mon, 18 Nov 2019 21:19:41 +0000 Subject: [PATCH 59/66] Update Owners_Aliases (#17515) Struggling to find the time for a while. Will come back when agenda frees up a little, but feel free to remove entirely from the list if you need/want to. --- OWNERS_ALIASES | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OWNERS_ALIASES b/OWNERS_ALIASES index de2522a81fda9..7959c066cdbff 100644 --- a/OWNERS_ALIASES +++ b/OWNERS_ALIASES @@ -64,7 +64,7 @@ aliases: sig-docs-es-reviews: # PR reviews for Spanish content - raelga - alexbrand - - glo-pena + # glo-pena - electrocucaracha sig-docs-fr-owners: # Admins for French content - remyleone From 87c5bd56b10b12281eb19895e0dfbc9fb0470324 Mon Sep 17 00:00:00 2001 From: Luzhenxing Date: Tue, 19 Nov 2019 16:15:41 +0800 Subject: [PATCH 60/66] fix error url (#17651) --- .../extend-kubernetes/compute-storage-net/device-plugins.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins.md b/content/en/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins.md index b731b8e02f025..f3451802e03af 100644 --- a/content/en/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins.md +++ b/content/en/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins.md @@ -204,6 +204,6 @@ Here are some examples of device plugin implementations: * Learn about [scheduling GPU resources](/docs/tasks/manage-gpus/scheduling-gpus/) using device plugins * Learn about [advertising extended resources](/docs/tasks/administer-cluster/extended-resource-node/) on a node -* Read about using [hardware acceleration for TLS ingress](https://kubernetes.io/blog/2019/04/24/hardware-accelerated-ssl-tls-termination-in-ingress-controllers-using-kubernetes-device-plugins-and-runtimeclass/) with Kubernetes +* Read about using [hardware acceleration for TLS ingress](https://kubernetes.io/blog/2019/04/24/hardware-accelerated-ssl/tls-termination-in-ingress-controllers-using-kubernetes-device-plugins-and-runtimeclass/) with Kubernetes {{% /capture %}} From 412c6ab3a600050485e14fef394ec329ad290f95 Mon Sep 17 00:00:00 2001 From: Huy Nguyen Date: Tue, 19 Nov 2019 15:11:28 +0700 Subject: [PATCH 61/66] Add new owner Add huynguyennovem as an owner and reviewer for Vietnamese content --- OWNERS_ALIASES | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OWNERS_ALIASES b/OWNERS_ALIASES index 7959c066cdbff..cc5138315bd6f 100644 --- a/OWNERS_ALIASES +++ b/OWNERS_ALIASES @@ -180,9 +180,11 @@ aliases: - jcjesus - devlware sig-docs-vi-owners: # Admins for Vietnamese content + - huynguyennovem - ngtuna - truongnh1992 sig-docs-vi-reviews: # PR reviews for Vietnamese content + - huynguyennovem - ngtuna - truongnh1992 sig-docs-ru-owners: # Admins for Russian content From 83b3de7b0b9e9834283811ae1f005e4866caaf5e Mon Sep 17 00:00:00 2001 From: Nguyen Hai Truong Date: Mon, 18 Nov 2019 11:44:53 -0800 Subject: [PATCH 62/66] Adding docs in Vietnamese Signed-off-by: Nguyen Hai Truong --- .../vi/docs/reference/kubectl/cheatsheet.md | 380 ++++++++++++++++++ 1 file changed, 380 insertions(+) create mode 100644 content/vi/docs/reference/kubectl/cheatsheet.md diff --git a/content/vi/docs/reference/kubectl/cheatsheet.md b/content/vi/docs/reference/kubectl/cheatsheet.md new file mode 100644 index 0000000000000..1455b0e892a1e --- /dev/null +++ b/content/vi/docs/reference/kubectl/cheatsheet.md @@ -0,0 +1,380 @@ +--- +title: kubectl Cheat Sheet +reviewers: +- ngtuna +content_template: templates/concept +card: + name: reference + weight: 30 +--- + +{{% capture overview %}} + +Xem thêm: [Kubectl Overview](/docs/reference/kubectl/overview/) và [JsonPath Guide](/docs/reference/kubectl/jsonpath). + +Trang này là trang tổng quan của lệnh `kubectl`. + +{{% /capture %}} + +{{% capture body %}} + +# kubectl - Cheat Sheet + +## Kubectl Autocomplete + +### BASH + +```bash +source <(kubectl completion bash) # thiết lập autocomplete trong bash vào shell hiện tại, gói bash-completion nên được cài đặt trước tiên +echo "source <(kubectl completion bash)" >> ~/.bashrc # thêm vĩnh viễn autocomplete vào trong bash shell +``` + +Bạn có thể dùng một alias cho `kubectl` cũng hoạt động với completion: + +```bash +alias k=kubectl +complete -F __start_kubectl k +``` + +### ZSH + +```bash +source <(kubectl completion zsh) # thiết lập autocomplete trong zsh vào shell hiện tại +echo "if [ $commands[kubectl] ]; then source <(kubectl completion zsh); fi" >> ~/.zshrc # thêm vĩnh viễn autocomplete vào trong zsh shell +``` + +## Ngữ cảnh và cấu hình kubectl + +Thiết lập cụm Kubernetes nào mà `kubectl` sẽ giao tiếp với và sửa đổi thông tin cấu hình. +Xem tài liệu [Xác thực giữa các cụm với kubeconfig](/docs/tasks/access-application-cluster/configure-access-multiple-clusters/) +để biết thông tin chi tiết của tệp cấu hình. + +```bash +kubectl config view # Hiển thị các thiết lập kubeconfig đã được merged + +# sử dụng nhiều tệp kubeconfig cùng một lúc và xem cấu hình hợp nhất +KUBECONFIG=~/.kube/config:~/.kube/kubconfig2 + +kubectl config view + +# lấy mật khẩu cho người dùng e2e +kubectl config view -o jsonpath='{.users[?(@.name == "e2e")].user.password}' + +kubectl config view -o jsonpath='{.users[].name}' # hiển thị người dùng đầu tiên +kubectl config view -o jsonpath='{.users[*].name}' # lấy danh sách người dùng +kubectl config get-contexts # hiển thị danh sách các ngữ cảnh +kubectl config current-context # hiển thị ngữ cảnh hiện tại +kubectl config use-context my-cluster-name # thiết lập ngữ cảnh mặc định cho my-cluster-name + +# thêm một cụm mới vào kubeconf hỗ trợ xác thực cơ bản +kubectl config set-credentials kubeuser/foo.kubernetes.com --username=kubeuser --password=kubepassword + +# lưu vĩnh viễn namespace cho tất cả các lệnh kubectl tiếp theo trong ngữ cảnh đó +kubectl config set-context --current --namespace=ggckad-s2 + +# thiết lập ngữ cảnh sử dụng tên người dùng và namespace cụ thể +kubectl config set-context gce --user=cluster-admin --namespace=foo \ + && kubectl config use-context gce + +kubectl config unset users.foo # xóa người dùng foo +``` + +## Apply +`apply` quản lý các ứng dụng thông qua các tệp định nghĩa tài nguyên Kubernetes. Nó tạo và cập nhật các tài nguyên trong một cụm thông qua việc chạy `kubectl apply`. Đây là cách được đề xuất để quản lý các ứng dụng Kubernetes trong thực tế. Xem thêm [Kubectl Book](https://kubectl.docs.kubernetes.io). + +## Tạo một đối tượng + +Kubernetes manifests có thể được định nghĩa trong tệp json hoặc yaml. Phần mở rộng `.yaml`, +`.yml`, và `.json` có thể được dùng. + +```bash +kubectl apply -f ./my-manifest.yaml # tạo tài nguyên +kubectl apply -f ./my1.yaml -f ./my2.yaml # tạo từ nhiều tệp +kubectl apply -f ./dir # tạo tài nguyên từ tất cả các tệp manifest trong thư mục dir +kubectl apply -f https://git.io/vPieo # tạo tài nguyên từ url +kubectl create deployment nginx --image=nginx # tạo một deployment nginx +kubectl explain pods,svc # lấy thông tin pod và service manifest + +# Tạo nhiều đối tượng YAML từ stdin +cat < pod.yaml + +kubectl attach my-pod -i # Đính kèm với container đang chạy +kubectl port-forward my-pod 5000:6000 # Lắng nghe trên cổng 5000 của máy local và chuyển tiếp sang cổng 6000 trên pod my-pod +kubectl exec my-pod -- ls / # Chạy lệnh trong một pod (trường hợp 1 container) +kubectl exec my-pod -c my-container -- ls / # Chạy lệnh trong pod (trường hợp nhiều container) +kubectl top pod POD_NAME --containers # Hiển thị số liệu của pod và container chạy trong nó +``` + +## Tương tác với các nodes và cụm + +```bash +kubectl cordon my-node # Đánh dấu my-node là không thể lập lịch +kubectl drain my-node # Gỡ my-node ra khỏi cụm để chuẩn bị cho việc bảo trì +kubectl uncordon my-node # Đánh dấu my-node có thể lập lịch trở lại +kubectl top node my-node # Hiển thị số liệu của node +kubectl cluster-info # Hiển thị địa chỉ master và các services +kubectl cluster-info dump # Kết xuất trạng thái hiện tại của cụm ra ngoài stdout +kubectl cluster-info dump --output-directory=/path/to/cluster-state # Kết xuất trạng thái hiện tại của cụm vào /path/to/cluster-state + +kubectl taint nodes foo dedicated=special-user:NoSchedule +``` + +### Các loại tài nguyên + +Liệt kê tất cả các loại tài nguyên được hỗ trợ cùng với tên viết tắt của chúng, [API group](/docs/concepts/overview/kubernetes-api/#api-groups), cho dù chúng là [namespaced](/docs/concepts/overview/working-with-objects/namespaces), và [Kind](/docs/concepts/overview/working-with-objects/kubernetes-objects): + +```bash +kubectl api-resources +``` + +Các hoạt động khác để khám phá các tài nguyên API: + +```bash +kubectl api-resources --namespaced=true # Tất cả các tài nguyên được đặt tên +kubectl api-resources --namespaced=false # Tất cả các tài nguyên không được đặt tên +kubectl api-resources -o name # Tất cả các tài nguyên với đầu ra đơn giản (chỉ gồm tên tài nguyên) +kubectl api-resources -o wide # Tất cả các tài nguyên với đầu ra mở rộng +kubectl api-resources --verbs=list,get # Tất cả các tài nguyên hỗ trợ yêu cầu "list" và "get" +kubectl api-resources --api-group=extensions # Tất cả tài nguyên trong nhóm API "tiện ích mở rộng" +``` + +### Định dạng đầu ra + +Để xuất thông tin chi tiết ra cửa sổ terminal của bạn theo một định dạng cụ thể, bạn có thể thêm các cờ `-o` hoặc `--output` vào lệnh `kubectl` được hỗ trợ. + +Định dạng đầu ra | Mô tả +--------------| ----------- +`-o=custom-columns=` | In một bảng bằng danh sách, các cột tùy chỉnh được phân tách bằng dấu phẩy +`-o=custom-columns-file=` | In một bảng bằng cách sử dụng mẫu cột tùy chỉnh trong tệp `` +`-o=json` | Xuất ra một đối tượng API theo định dạng JSON +`-o=jsonpath=