Merge remote-tracking branch 'upstream/master' into dev-1.21
This commit is contained in:
@@ -10,6 +10,7 @@ aliases:
|
|||||||
- kbarnard10
|
- kbarnard10
|
||||||
- mrbobbytables
|
- mrbobbytables
|
||||||
- onlydole
|
- onlydole
|
||||||
|
- sftim
|
||||||
sig-docs-de-owners: # Admins for German content
|
sig-docs-de-owners: # Admins for German content
|
||||||
- bene2k1
|
- bene2k1
|
||||||
- mkorbi
|
- mkorbi
|
||||||
|
|||||||
@@ -124,6 +124,6 @@ that can act as a [client for the Kubernetes API](/docs/reference/using-api/clie
|
|||||||
you implement yourself
|
you implement yourself
|
||||||
* using the [Operator Framework](https://operatorframework.io)
|
* using the [Operator Framework](https://operatorframework.io)
|
||||||
* [Publish](https://operatorhub.io/) your operator for other people to use
|
* [Publish](https://operatorhub.io/) your operator for other people to use
|
||||||
* Read [CoreOS' original article](https://coreos.com/blog/introducing-operators.html) that introduced the Operator pattern
|
* Read [CoreOS' original article](https://web.archive.org/web/20170129131616/https://coreos.com/blog/introducing-operators.html) that introduced the Operator pattern (this is an archived version of the original article).
|
||||||
* Read an [article](https://cloud.google.com/blog/products/containers-kubernetes/best-practices-for-building-kubernetes-operators-and-stateful-apps) from Google Cloud about best practices for building Operators
|
* Read an [article](https://cloud.google.com/blog/products/containers-kubernetes/best-practices-for-building-kubernetes-operators-and-stateful-apps) from Google Cloud about best practices for building Operators
|
||||||
|
|
||||||
|
|||||||
@@ -52,7 +52,10 @@ If the prefix is omitted, the label Key is presumed to be private to the user. A
|
|||||||
|
|
||||||
The `kubernetes.io/` and `k8s.io/` prefixes are reserved for Kubernetes core components.
|
The `kubernetes.io/` and `k8s.io/` prefixes are reserved for Kubernetes core components.
|
||||||
|
|
||||||
Valid label values must be 63 characters or less and must be empty or begin and end with an alphanumeric character (`[a-z0-9A-Z]`) with dashes (`-`), underscores (`_`), dots (`.`), and alphanumerics between.
|
Valid label value:
|
||||||
|
* must be 63 characters or less (cannot be empty),
|
||||||
|
* must begin and end with an alphanumeric character (`[a-z0-9A-Z]`),
|
||||||
|
* could contain dashes (`-`), underscores (`_`), dots (`.`), and alphanumerics between.
|
||||||
|
|
||||||
For example, here's the configuration file for a Pod that has two labels `environment: production` and `app: nginx` :
|
For example, here's the configuration file for a Pod that has two labels `environment: production` and `app: nginx` :
|
||||||
|
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ Neither contention nor changes to quota will affect already created resources.
|
|||||||
## Enabling Resource Quota
|
## Enabling Resource Quota
|
||||||
|
|
||||||
Resource Quota support is enabled by default for many Kubernetes distributions. It is
|
Resource Quota support is enabled by default for many Kubernetes distributions. It is
|
||||||
enabled when the API server `--enable-admission-plugins=` flag has `ResourceQuota` as
|
enabled when the {{< glossary_tooltip text="API server" term_id="kube-apiserver" >}} `--enable-admission-plugins=` flag has `ResourceQuota` as
|
||||||
one of its arguments.
|
one of its arguments.
|
||||||
|
|
||||||
A resource quota is enforced in a particular namespace when there is a
|
A resource quota is enforced in a particular namespace when there is a
|
||||||
|
|||||||
@@ -38,8 +38,7 @@ If a {{< glossary_tooltip term_id="node" >}} dies, the Pods scheduled to that no
|
|||||||
are [scheduled for deletion](#pod-garbage-collection) after a timeout period.
|
are [scheduled for deletion](#pod-garbage-collection) after a timeout period.
|
||||||
|
|
||||||
Pods do not, by themselves, self-heal. If a Pod is scheduled to a
|
Pods do not, by themselves, self-heal. If a Pod is scheduled to a
|
||||||
{{< glossary_tooltip text="node" term_id="node" >}} that then fails,
|
{{< glossary_tooltip text="node" term_id="node" >}} that then fails, the Pod is deleted; likewise, a Pod won't
|
||||||
or if the scheduling operation itself fails, the Pod is deleted; likewise, a Pod won't
|
|
||||||
survive an eviction due to a lack of resources or Node maintenance. Kubernetes uses a
|
survive an eviction due to a lack of resources or Node maintenance. Kubernetes uses a
|
||||||
higher-level abstraction, called a
|
higher-level abstraction, called a
|
||||||
{{< glossary_tooltip term_id="controller" text="controller" >}}, that handles the work of
|
{{< glossary_tooltip term_id="controller" text="controller" >}}, that handles the work of
|
||||||
|
|||||||
@@ -267,7 +267,7 @@ Teams must merge localized content into the same release branch from which the c
|
|||||||
|
|
||||||
An approver must maintain a development branch by keeping it current with its source branch and resolving merge conflicts. The longer a development branch stays open, the more maintenance it typically requires. Consider periodically merging development branches and opening new ones, rather than maintaining one extremely long-running development branch.
|
An approver must maintain a development branch by keeping it current with its source branch and resolving merge conflicts. The longer a development branch stays open, the more maintenance it typically requires. Consider periodically merging development branches and opening new ones, rather than maintaining one extremely long-running development branch.
|
||||||
|
|
||||||
At the beginning of every team milestone, it's helpful to open an issue [comparing upstream changes](https://github.com/kubernetes/website/blob/master/scripts/upstream_changes.py) between the previous development branch and the current development branch.
|
At the beginning of every team milestone, it's helpful to open an issue comparing upstream changes between the previous development branch and the current development branch. There are two scripts for comparing upstream changes. [`upstream_changes.py`](https://github.com/kubernetes/website/tree/master/scripts#upstream_changespy) is useful for checking the changes made to a specific file. And [`diff_l10n_branches.py`](https://github.com/kubernetes/website/tree/master/scripts#diff_l10n_branchespy) is useful for creating a list of outdated files for a specific localization branch.
|
||||||
|
|
||||||
While only approvers can open a new development branch and merge pull requests, anyone can open a pull request for a new development branch. No special permissions are required.
|
While only approvers can open a new development branch and merge pull requests, anyone can open a pull request for a new development branch. No special permissions are required.
|
||||||
|
|
||||||
|
|||||||
@@ -17,8 +17,6 @@ Changes to the style guide are made by SIG Docs as a group. To propose a change
|
|||||||
or addition, [add it to the agenda](https://docs.google.com/document/d/1ddHwLK3kUMX1wVFIwlksjTk0MsqitBnWPe1LRa1Rx5A/edit) for an upcoming SIG Docs meeting, and attend the meeting to participate in the
|
or addition, [add it to the agenda](https://docs.google.com/document/d/1ddHwLK3kUMX1wVFIwlksjTk0MsqitBnWPe1LRa1Rx5A/edit) for an upcoming SIG Docs meeting, and attend the meeting to participate in the
|
||||||
discussion.
|
discussion.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- body -->
|
<!-- body -->
|
||||||
|
|
||||||
{{< note >}}
|
{{< note >}}
|
||||||
@@ -48,12 +46,11 @@ When you refer specifically to interacting with an API object, use [UpperCamelCa
|
|||||||
|
|
||||||
When you are generally discussing an API object, use [sentence-style capitalization](https://docs.microsoft.com/en-us/style-guide/text-formatting/using-type/use-sentence-style-capitalization).
|
When you are generally discussing an API object, use [sentence-style capitalization](https://docs.microsoft.com/en-us/style-guide/text-formatting/using-type/use-sentence-style-capitalization).
|
||||||
|
|
||||||
You may use the word "resource", "API", or "object" to clarify a Kubernetes resource type in a sentence.
|
You may use the word "resource", "API", or "object" to clarify a Kubernetes resource type in a sentence.
|
||||||
|
|
||||||
Don't split the API object name into separate words. For example, use
|
Don't split an API object name into separate words. For example, use PodTemplateList, not Pod Template List.
|
||||||
PodTemplateList, not Pod Template List.
|
|
||||||
|
|
||||||
The following examples focus on capitalization. Review the related guidance on [Code Style](#code-style-inline-code) for more information on formatting API objects.
|
The following examples focus on capitalization. For more information about formatting API object names, review the related guidance on [Code Style](#code-style-inline-code).
|
||||||
|
|
||||||
{{< table caption = "Do and Don't - Use Pascal case for API objects" >}}
|
{{< table caption = "Do and Don't - Use Pascal case for API objects" >}}
|
||||||
Do | Don't
|
Do | Don't
|
||||||
@@ -65,17 +62,18 @@ Every ConfigMap object is part of a namespace. | Every configMap object is part
|
|||||||
For managing confidential data, consider using the Secret API. | For managing confidential data, consider using the secret API.
|
For managing confidential data, consider using the Secret API. | For managing confidential data, consider using the secret API.
|
||||||
{{< /table >}}
|
{{< /table >}}
|
||||||
|
|
||||||
|
|
||||||
### Use angle brackets for placeholders
|
### Use angle brackets for placeholders
|
||||||
|
|
||||||
Use angle brackets for placeholders. Tell the reader what a placeholder
|
Use angle brackets for placeholders. Tell the reader what a placeholder
|
||||||
represents.
|
represents, for example:
|
||||||
|
|
||||||
1. Display information about a pod:
|
Display information about a pod:
|
||||||
|
|
||||||
kubectl describe pod <pod-name> -n <namespace>
|
```shell
|
||||||
|
kubectl describe pod <pod-name> -n <namespace>
|
||||||
|
```
|
||||||
|
|
||||||
If the namespace of the pod is `default`, you can omit the '-n' parameter.
|
If the namespace of the pod is `default`, you can omit the '-n' parameter.
|
||||||
|
|
||||||
### Use bold for user interface elements
|
### Use bold for user interface elements
|
||||||
|
|
||||||
@@ -189,7 +187,6 @@ Set the value of `image` to nginx:1.16. | Set the value of `image` to `nginx:1.1
|
|||||||
Set the value of the `replicas` field to 2. | Set the value of the `replicas` field to `2`.
|
Set the value of the `replicas` field to 2. | Set the value of the `replicas` field to `2`.
|
||||||
{{< /table >}}
|
{{< /table >}}
|
||||||
|
|
||||||
|
|
||||||
## Code snippet formatting
|
## Code snippet formatting
|
||||||
|
|
||||||
### Don't include the command prompt
|
### Don't include the command prompt
|
||||||
@@ -200,17 +197,20 @@ Do | Don't
|
|||||||
kubectl get pods | $ kubectl get pods
|
kubectl get pods | $ kubectl get pods
|
||||||
{{< /table >}}
|
{{< /table >}}
|
||||||
|
|
||||||
|
|
||||||
### Separate commands from output
|
### Separate commands from output
|
||||||
|
|
||||||
Verify that the pod is running on your chosen node:
|
Verify that the pod is running on your chosen node:
|
||||||
|
|
||||||
kubectl get pods --output=wide
|
```shell
|
||||||
|
kubectl get pods --output=wide
|
||||||
|
```
|
||||||
|
|
||||||
The output is similar to this:
|
The output is similar to this:
|
||||||
|
|
||||||
NAME READY STATUS RESTARTS AGE IP NODE
|
```console
|
||||||
nginx 1/1 Running 0 13s 10.200.0.4 worker0
|
NAME READY STATUS RESTARTS AGE IP NODE
|
||||||
|
nginx 1/1 Running 0 13s 10.200.0.4 worker0
|
||||||
|
```
|
||||||
|
|
||||||
### Versioning Kubernetes examples
|
### Versioning Kubernetes examples
|
||||||
|
|
||||||
@@ -263,17 +263,17 @@ Hugo [Shortcodes](https://gohugo.io/content-management/shortcodes) help create d
|
|||||||
|
|
||||||
2. Use the following syntax to apply a style:
|
2. Use the following syntax to apply a style:
|
||||||
|
|
||||||
```
|
```none
|
||||||
{{</* note */>}}
|
{{</* note */>}}
|
||||||
No need to include a prefix; the shortcode automatically provides one. (Note:, Caution:, etc.)
|
No need to include a prefix; the shortcode automatically provides one. (Note:, Caution:, etc.)
|
||||||
{{</* /note */>}}
|
{{</* /note */>}}
|
||||||
```
|
```
|
||||||
|
|
||||||
The output is:
|
The output is:
|
||||||
|
|
||||||
{{< note >}}
|
{{< note >}}
|
||||||
The prefix you choose is the same text for the tag.
|
The prefix you choose is the same text for the tag.
|
||||||
{{< /note >}}
|
{{< /note >}}
|
||||||
|
|
||||||
### Note
|
### Note
|
||||||
|
|
||||||
@@ -403,7 +403,7 @@ The output is:
|
|||||||
|
|
||||||
1. Prepare the batter, and pour into springform pan.
|
1. Prepare the batter, and pour into springform pan.
|
||||||
|
|
||||||
{{< note >}}Grease the pan for best results.{{< /note >}}
|
{{< note >}}Grease the pan for best results.{{< /note >}}
|
||||||
|
|
||||||
1. Bake for 20-25 minutes or until set.
|
1. Bake for 20-25 minutes or until set.
|
||||||
|
|
||||||
@@ -417,13 +417,14 @@ Shortcodes inside include statements will break the build. You must insert them
|
|||||||
{{</* /note */>}}
|
{{</* /note */>}}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## Markdown elements
|
## Markdown elements
|
||||||
|
|
||||||
### Line breaks
|
### Line breaks
|
||||||
|
|
||||||
Use a single newline to separate block-level content like headings, lists, images, code blocks, and others. The exception is second-level headings, where it should be two newlines. Second-level headings follow the first-level (or the title) without any preceding paragraphs or texts. A two line spacing helps visualize the overall structure of content in a code editor better.
|
Use a single newline to separate block-level content like headings, lists, images, code blocks, and others. The exception is second-level headings, where it should be two newlines. Second-level headings follow the first-level (or the title) without any preceding paragraphs or texts. A two line spacing helps visualize the overall structure of content in a code editor better.
|
||||||
|
|
||||||
### Headings
|
### Headings
|
||||||
|
|
||||||
People accessing this documentation may use a screen reader or other assistive technology (AT). [Screen readers](https://en.wikipedia.org/wiki/Screen_reader) are linear output devices, they output items on a page one at a time. If there is a lot of content on a page, you can use headings to give the page an internal structure. A good page structure helps all readers to easily navigate the page or filter topics of interest.
|
People accessing this documentation may use a screen reader or other assistive technology (AT). [Screen readers](https://en.wikipedia.org/wiki/Screen_reader) are linear output devices, they output items on a page one at a time. If there is a lot of content on a page, you can use headings to give the page an internal structure. A good page structure helps all readers to easily navigate the page or filter topics of interest.
|
||||||
|
|
||||||
{{< table caption = "Do and Don't - Headings" >}}
|
{{< table caption = "Do and Don't - Headings" >}}
|
||||||
@@ -453,24 +454,24 @@ Write hyperlinks that give you context for the content they link to. For example
|
|||||||
Write Markdown-style links: `[link text](URL)`. For example: `[Hugo shortcodes](/docs/contribute/style/hugo-shortcodes/#table-captions)` and the output is [Hugo shortcodes](/docs/contribute/style/hugo-shortcodes/#table-captions). | Write HTML-style links: `<a href="/media/examples/link-element-example.css" target="_blank">Visit our tutorial!</a>`, or create links that open in new tabs or windows. For example: `[example website](https://example.com){target="_blank"}`
|
Write Markdown-style links: `[link text](URL)`. For example: `[Hugo shortcodes](/docs/contribute/style/hugo-shortcodes/#table-captions)` and the output is [Hugo shortcodes](/docs/contribute/style/hugo-shortcodes/#table-captions). | Write HTML-style links: `<a href="/media/examples/link-element-example.css" target="_blank">Visit our tutorial!</a>`, or create links that open in new tabs or windows. For example: `[example website](https://example.com){target="_blank"}`
|
||||||
{{< /table >}}
|
{{< /table >}}
|
||||||
|
|
||||||
|
|
||||||
### Lists
|
### Lists
|
||||||
|
|
||||||
Group items in a list that are related to each other and need to appear in a specific order or to indicate a correlation between multiple items. When a screen reader comes across a list—whether it is an ordered or unordered list—it will be announced to the user that there is a group of list items. The user can then use the arrow keys to move up and down between the various items in the list.
|
Group items in a list that are related to each other and need to appear in a specific order or to indicate a correlation between multiple items. When a screen reader comes across a list—whether it is an ordered or unordered list—it will be announced to the user that there is a group of list items. The user can then use the arrow keys to move up and down between the various items in the list.
|
||||||
Website navigation links can also be marked up as list items; after all they are nothing but a group of related links.
|
Website navigation links can also be marked up as list items; after all they are nothing but a group of related links.
|
||||||
|
|
||||||
- End each item in a list with a period if one or more items in the list are complete sentences. For the sake of consistency, normally either all items or none should be complete sentences.
|
- End each item in a list with a period if one or more items in the list are complete sentences. For the sake of consistency, normally either all items or none should be complete sentences.
|
||||||
|
|
||||||
{{< note >}} Ordered lists that are part of an incomplete introductory sentence can be in lowercase and punctuated as if each item was a part of the introductory sentence.{{< /note >}}
|
{{< note >}} Ordered lists that are part of an incomplete introductory sentence can be in lowercase and punctuated as if each item was a part of the introductory sentence.{{< /note >}}
|
||||||
|
|
||||||
- Use the number one (`1.`) for ordered lists.
|
- Use the number one (`1.`) for ordered lists.
|
||||||
|
|
||||||
- Use (`+`), (`*`), or (`-`) for unordered lists.
|
- Use (`+`), (`*`), or (`-`) for unordered lists.
|
||||||
|
|
||||||
- Leave a blank line after each list.
|
- Leave a blank line after each list.
|
||||||
|
|
||||||
- Indent nested lists with four spaces (for example, ⋅⋅⋅⋅).
|
- Indent nested lists with four spaces (for example, ⋅⋅⋅⋅).
|
||||||
|
|
||||||
- List items may consist of multiple paragraphs. Each subsequent paragraph in a list item must be indented by either four spaces or one tab.
|
- List items may consist of multiple paragraphs. Each subsequent paragraph in a list item must be indented by either four spaces or one tab.
|
||||||
|
|
||||||
### Tables
|
### Tables
|
||||||
|
|
||||||
@@ -490,7 +491,6 @@ Do | Don't
|
|||||||
This command starts a proxy. | This command will start a proxy.
|
This command starts a proxy. | This command will start a proxy.
|
||||||
{{< /table >}}
|
{{< /table >}}
|
||||||
|
|
||||||
|
|
||||||
Exception: Use future or past tense if it is required to convey the correct
|
Exception: Use future or past tense if it is required to convey the correct
|
||||||
meaning.
|
meaning.
|
||||||
|
|
||||||
@@ -503,7 +503,6 @@ You can explore the API using a browser. | The API can be explored using a brows
|
|||||||
The YAML file specifies the replica count. | The replica count is specified in the YAML file.
|
The YAML file specifies the replica count. | The replica count is specified in the YAML file.
|
||||||
{{< /table >}}
|
{{< /table >}}
|
||||||
|
|
||||||
|
|
||||||
Exception: Use passive voice if active voice leads to an awkward construction.
|
Exception: Use passive voice if active voice leads to an awkward construction.
|
||||||
|
|
||||||
### Use simple and direct language
|
### Use simple and direct language
|
||||||
@@ -527,7 +526,6 @@ You can create a Deployment by ... | We'll create a Deployment by ...
|
|||||||
In the preceding output, you can see... | In the preceding output, we can see ...
|
In the preceding output, you can see... | In the preceding output, we can see ...
|
||||||
{{< /table >}}
|
{{< /table >}}
|
||||||
|
|
||||||
|
|
||||||
### Avoid Latin phrases
|
### Avoid Latin phrases
|
||||||
|
|
||||||
Prefer English terms over Latin abbreviations.
|
Prefer English terms over Latin abbreviations.
|
||||||
@@ -539,7 +537,6 @@ For example, ... | e.g., ...
|
|||||||
That is, ...| i.e., ...
|
That is, ...| i.e., ...
|
||||||
{{< /table >}}
|
{{< /table >}}
|
||||||
|
|
||||||
|
|
||||||
Exception: Use "etc." for et cetera.
|
Exception: Use "etc." for et cetera.
|
||||||
|
|
||||||
## Patterns to avoid
|
## Patterns to avoid
|
||||||
@@ -557,7 +554,6 @@ Kubernetes provides a new feature for ... | We provide a new feature ...
|
|||||||
This page teaches you how to use pods. | In this page, we are going to learn about pods.
|
This page teaches you how to use pods. | In this page, we are going to learn about pods.
|
||||||
{{< /table >}}
|
{{< /table >}}
|
||||||
|
|
||||||
|
|
||||||
### Avoid jargon and idioms
|
### Avoid jargon and idioms
|
||||||
|
|
||||||
Some readers speak English as a second language. Avoid jargon and idioms to help them understand better.
|
Some readers speak English as a second language. Avoid jargon and idioms to help them understand better.
|
||||||
@@ -569,7 +565,6 @@ Internally, ... | Under the hood, ...
|
|||||||
Create a new cluster. | Turn up a new cluster.
|
Create a new cluster. | Turn up a new cluster.
|
||||||
{{< /table >}}
|
{{< /table >}}
|
||||||
|
|
||||||
|
|
||||||
### Avoid statements about the future
|
### Avoid statements about the future
|
||||||
|
|
||||||
Avoid making promises or giving hints about the future. If you need to talk about
|
Avoid making promises or giving hints about the future. If you need to talk about
|
||||||
@@ -592,6 +587,18 @@ In version 1.4, ... | In the current version, ...
|
|||||||
The Federation feature provides ... | The new Federation feature provides ...
|
The Federation feature provides ... | The new Federation feature provides ...
|
||||||
{{< /table >}}
|
{{< /table >}}
|
||||||
|
|
||||||
|
### Avoid words that assume a specific level of understanding
|
||||||
|
|
||||||
|
Avoid words such as "just", "simply", "easy", "easily", or "simple". These words do not add value.
|
||||||
|
|
||||||
|
{{< table caption = "Do and Don't - Avoid insensitive words" >}}
|
||||||
|
Do | Don't
|
||||||
|
:--| :-----
|
||||||
|
Include one command in ... | Include just one command in ...
|
||||||
|
Run the container ... | Simply run the container ...
|
||||||
|
You can easily remove ... | You can remove ...
|
||||||
|
These simple steps ... | These steps ...
|
||||||
|
{{< /table >}}
|
||||||
|
|
||||||
## {{% heading "whatsnext" %}}
|
## {{% heading "whatsnext" %}}
|
||||||
|
|
||||||
|
|||||||
@@ -308,6 +308,7 @@ The following networking functionality is not supported on Windows nodes
|
|||||||
* Host networking mode is not available for Windows pods
|
* Host networking mode is not available for Windows pods
|
||||||
* Local NodePort access from the node itself fails (works for other nodes or external clients)
|
* Local NodePort access from the node itself fails (works for other nodes or external clients)
|
||||||
* Accessing service VIPs from nodes will be available with a future release of Windows Server
|
* Accessing service VIPs from nodes will be available with a future release of Windows Server
|
||||||
|
* A single service can only support up to 64 backend pods / unique destination IPs
|
||||||
* Overlay networking support in kube-proxy is an alpha release. In addition, it requires [KB4482887](https://support.microsoft.com/en-us/help/4482887/windows-10-update-kb4482887) to be installed on Windows Server 2019
|
* Overlay networking support in kube-proxy is an alpha release. In addition, it requires [KB4482887](https://support.microsoft.com/en-us/help/4482887/windows-10-update-kb4482887) to be installed on Windows Server 2019
|
||||||
* Local Traffic Policy and DSR mode
|
* Local Traffic Policy and DSR mode
|
||||||
* Windows containers connected to l2bridge, l2tunnel, or overlay networks do not support communicating over the IPv6 stack. There is outstanding Windows platform work required to enable these network drivers to consume IPv6 addresses and subsequent Kubernetes work in kubelet, kube-proxy, and CNI plugins.
|
* Windows containers connected to l2bridge, l2tunnel, or overlay networks do not support communicating over the IPv6 stack. There is outstanding Windows platform work required to enable these network drivers to consume IPv6 addresses and subsequent Kubernetes work in kubelet, kube-proxy, and CNI plugins.
|
||||||
|
|||||||
@@ -10,35 +10,40 @@ content_type: task
|
|||||||
|
|
||||||
{{< glossary_definition term_id="etcd" length="all" prepend="etcd is a ">}}
|
{{< glossary_definition term_id="etcd" length="all" prepend="etcd is a ">}}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## {{% heading "prerequisites" %}}
|
## {{% heading "prerequisites" %}}
|
||||||
|
|
||||||
|
|
||||||
{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
|
{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- steps -->
|
<!-- steps -->
|
||||||
|
|
||||||
## Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
* Run etcd as a cluster of odd members.
|
* Run etcd as a cluster of odd members.
|
||||||
|
|
||||||
* etcd is a leader-based distributed system. Ensure that the leader periodically send heartbeats on time to all followers to keep the cluster stable.
|
* etcd is a leader-based distributed system. Ensure that the leader
|
||||||
|
periodically send heartbeats on time to all followers to keep the cluster
|
||||||
|
stable.
|
||||||
|
|
||||||
* Ensure that no resource starvation occurs.
|
* Ensure that no resource starvation occurs.
|
||||||
|
|
||||||
Performance and stability of the cluster is sensitive to network and disk IO. Any resource starvation can lead to heartbeat timeout, causing instability of the cluster. An unstable etcd indicates that no leader is elected. Under such circumstances, a cluster cannot make any changes to its current state, which implies no new pods can be scheduled.
|
Performance and stability of the cluster is sensitive to network and disk
|
||||||
|
I/O. Any resource starvation can lead to heartbeat timeout, causing instability
|
||||||
|
of the cluster. An unstable etcd indicates that no leader is elected. Under
|
||||||
|
such circumstances, a cluster cannot make any changes to its current state,
|
||||||
|
which implies no new pods can be scheduled.
|
||||||
|
|
||||||
* Keeping stable etcd clusters is critical to the stability of Kubernetes clusters. Therefore, run etcd clusters on dedicated machines or isolated environments for [guaranteed resource requirements](https://github.com/coreos/etcd/blob/master/Documentation/op-guide/hardware.md#hardware-recommendations).
|
* Keeping etcd clusters stable is critical to the stability of Kubernetes
|
||||||
|
clusters. Therefore, run etcd clusters on dedicated machines or isolated
|
||||||
|
environments for [guaranteed resource requirements](https://etcd.io/docs/current/op-guide/hardware/).
|
||||||
|
|
||||||
* The minimum recommended version of etcd to run in production is `3.2.10+`.
|
* The minimum recommended version of etcd to run in production is `3.2.10+`.
|
||||||
|
|
||||||
## Resource requirements
|
## Resource requirements
|
||||||
|
|
||||||
Operating etcd with limited resources is suitable only for testing purposes. For deploying in production, advanced hardware configuration is required. Before deploying etcd in production, see [resource requirement reference documentation](https://github.com/coreos/etcd/blob/master/Documentation/op-guide/hardware.md#example-hardware-configurations).
|
Operating etcd with limited resources is suitable only for testing purposes.
|
||||||
|
For deploying in production, advanced hardware configuration is required.
|
||||||
|
Before deploying etcd in production, see
|
||||||
|
[resource requirement reference](https://etcd.io/docs/current/op-guide/hardware/#example-hardware-configurations).
|
||||||
|
|
||||||
## Starting etcd clusters
|
## Starting etcd clusters
|
||||||
|
|
||||||
@@ -50,33 +55,43 @@ Use a single-node etcd cluster only for testing purpose.
|
|||||||
|
|
||||||
1. Run the following:
|
1. Run the following:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
./etcd --listen-client-urls=http://$PRIVATE_IP:2379 --advertise-client-urls=http://$PRIVATE_IP:2379
|
etcd --listen-client-urls=http://$PRIVATE_IP:2379 \
|
||||||
```
|
--advertise-client-urls=http://$PRIVATE_IP:2379
|
||||||
|
```
|
||||||
|
|
||||||
2. Start Kubernetes API server with the flag `--etcd-servers=$PRIVATE_IP:2379`.
|
2. Start the Kubernetes API server with the flag
|
||||||
|
`--etcd-servers=$PRIVATE_IP:2379`.
|
||||||
|
|
||||||
Replace `PRIVATE_IP` with your etcd client IP.
|
Make sure `PRIVATE_IP` is set to your etcd client IP.
|
||||||
|
|
||||||
### Multi-node etcd cluster
|
### Multi-node etcd cluster
|
||||||
|
|
||||||
For durability and high availability, run etcd as a multi-node cluster in production and back it up periodically. A five-member cluster is recommended in production. For more information, see [FAQ Documentation](https://github.com/coreos/etcd/blob/master/Documentation/faq.md#what-is-failure-tolerance).
|
For durability and high availability, run etcd as a multi-node cluster in
|
||||||
|
production and back it up periodically. A five-member cluster is recommended
|
||||||
|
in production. For more information, see
|
||||||
|
[FAQ documentation](https://etcd.io/docs/current/faq/#what-is-failure-tolerance).
|
||||||
|
|
||||||
Configure an etcd cluster either by static member information or by dynamic discovery. For more information on clustering, see [etcd Clustering Documentation](https://github.com/coreos/etcd/blob/master/Documentation/op-guide/clustering.md).
|
Configure an etcd cluster either by static member information or by dynamic
|
||||||
|
discovery. For more information on clustering, see
|
||||||
|
[etcd clustering documentation](https://etcd.io/docs/current/op-guide/clustering/).
|
||||||
|
|
||||||
For an example, consider a five-member etcd cluster running with the following client URLs: `http://$IP1:2379`, `http://$IP2:2379`, `http://$IP3:2379`, `http://$IP4:2379`, and `http://$IP5:2379`. To start a Kubernetes API server:
|
For an example, consider a five-member etcd cluster running with the following
|
||||||
|
client URLs: `http://$IP1:2379`, `http://$IP2:2379`, `http://$IP3:2379`,
|
||||||
|
`http://$IP4:2379`, and `http://$IP5:2379`. To start a Kubernetes API server:
|
||||||
|
|
||||||
1. Run the following:
|
1. Run the following:
|
||||||
|
|
||||||
```sh
|
```shell
|
||||||
./etcd --listen-client-urls=http://$IP1:2379, http://$IP2:2379, http://$IP3:2379, http://$IP4:2379, http://$IP5:2379 --advertise-client-urls=http://$IP1:2379, http://$IP2:2379, http://$IP3:2379, http://$IP4:2379, http://$IP5:2379
|
etcd --listen-client-urls=http://$IP1:2379,http://$IP2:2379,http://$IP3:2379,http://$IP4:2379,http://$IP5:2379 --advertise-client-urls=http://$IP1:2379,http://$IP2:2379,http://$IP3:2379,http://$IP4:2379,http://$IP5:2379
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Start Kubernetes API servers with the flag `--etcd-servers=$IP1:2379, $IP2:2379, $IP3:2379, $IP4:2379, $IP5:2379`.
|
2. Start the Kubernetes API servers with the flag
|
||||||
|
`--etcd-servers=$IP1:2379,$IP2:2379,$IP3:2379,$IP4:2379,$IP5:2379`.
|
||||||
|
|
||||||
Replace `IP` with your client IP addresses.
|
Make sure the `IP<n>` variables are set to your client IP addresses.
|
||||||
|
|
||||||
### Multi-node etcd cluster with load balancer
|
### Multi-node etcd cluster with load balancer
|
||||||
|
|
||||||
To run a load balancing etcd cluster:
|
To run a load balancing etcd cluster:
|
||||||
|
|
||||||
@@ -87,92 +102,160 @@ To run a load balancing etcd cluster:
|
|||||||
|
|
||||||
## Securing etcd clusters
|
## Securing etcd clusters
|
||||||
|
|
||||||
Access to etcd is equivalent to root permission in the cluster so ideally only the API server should have access to it. Considering the sensitivity of the data, it is recommended to grant permission to only those nodes that require access to etcd clusters.
|
Access to etcd is equivalent to root permission in the cluster so ideally only
|
||||||
|
the API server should have access to it. Considering the sensitivity of the
|
||||||
|
data, it is recommended to grant permission to only those nodes that require
|
||||||
|
access to etcd clusters.
|
||||||
|
|
||||||
To secure etcd, either set up firewall rules or use the security features provided by etcd. etcd security features depend on x509 Public Key Infrastructure (PKI). To begin, establish secure communication channels by generating a key and certificate pair. For example, use key pairs `peer.key` and `peer.cert` for securing communication between etcd members, and `client.key` and `client.cert` for securing communication between etcd and its clients. See the [example scripts](https://github.com/coreos/etcd/tree/master/hack/tls-setup) provided by the etcd project to generate key pairs and CA files for client authentication.
|
To secure etcd, either set up firewall rules or use the security features
|
||||||
|
provided by etcd. etcd security features depend on x509 Public Key
|
||||||
|
Infrastructure (PKI). To begin, establish secure communication channels by
|
||||||
|
generating a key and certificate pair. For example, use key pairs `peer.key`
|
||||||
|
and `peer.cert` for securing communication between etcd members, and
|
||||||
|
`client.key` and `client.cert` for securing communication between etcd and its
|
||||||
|
clients. See the [example scripts](https://github.com/coreos/etcd/tree/master/hack/tls-setup)
|
||||||
|
provided by the etcd project to generate key pairs and CA files for client
|
||||||
|
authentication.
|
||||||
|
|
||||||
### Securing communication
|
### Securing communication
|
||||||
|
|
||||||
To configure etcd with secure peer communication, specify flags `--peer-key-file=peer.key` and `--peer-cert-file=peer.cert`, and use https as URL schema.
|
To configure etcd with secure peer communication, specify flags
|
||||||
|
`--peer-key-file=peer.key` and `--peer-cert-file=peer.cert`, and use HTTPS as
|
||||||
|
the URL schema.
|
||||||
|
|
||||||
Similarly, to configure etcd with secure client communication, specify flags `--key-file=k8sclient.key` and `--cert-file=k8sclient.cert`, and use https as URL schema.
|
Similarly, to configure etcd with secure client communication, specify flags
|
||||||
|
`--key-file=k8sclient.key` and `--cert-file=k8sclient.cert`, and use HTTPS as
|
||||||
|
the URL schema.
|
||||||
|
|
||||||
### Limiting access of etcd clusters
|
### Limiting access of etcd clusters
|
||||||
|
|
||||||
After configuring secure communication, restrict the access of etcd cluster to only the Kubernetes API server. Use TLS authentication to do so.
|
After configuring secure communication, restrict the access of etcd cluster to
|
||||||
|
only the Kubernetes API servers. Use TLS authentication to do so.
|
||||||
|
|
||||||
For example, consider key pairs `k8sclient.key` and `k8sclient.cert` that are trusted by the CA `etcd.ca`. When etcd is configured with `--client-cert-auth` along with TLS, it verifies the certificates from clients by using system CAs or the CA passed in by `--trusted-ca-file` flag. Specifying flags `--client-cert-auth=true` and `--trusted-ca-file=etcd.ca` will restrict the access to clients with the certificate `k8sclient.cert`.
|
For example, consider key pairs `k8sclient.key` and `k8sclient.cert` that are
|
||||||
|
trusted by the CA `etcd.ca`. When etcd is configured with `--client-cert-auth`
|
||||||
|
along with TLS, it verifies the certificates from clients by using system CAs
|
||||||
|
or the CA passed in by `--trusted-ca-file` flag. Specifying flags
|
||||||
|
`--client-cert-auth=true` and `--trusted-ca-file=etcd.ca` will restrict the
|
||||||
|
access to clients with the certificate `k8sclient.cert`.
|
||||||
|
|
||||||
Once etcd is configured correctly, only clients with valid certificates can access it. To give Kubernetes API server the access, configure it with the flags `--etcd-certfile=k8sclient.cert`,`--etcd-keyfile=k8sclient.key` and `--etcd-cafile=ca.cert`.
|
Once etcd is configured correctly, only clients with valid certificates can
|
||||||
|
access it. To give Kubernetes API servers the access, configure them with the
|
||||||
|
flags `--etcd-certfile=k8sclient.cert`,`--etcd-keyfile=k8sclient.key` and
|
||||||
|
`--etcd-cafile=ca.cert`.
|
||||||
|
|
||||||
{{< note >}}
|
{{< note >}}
|
||||||
etcd authentication is not currently supported by Kubernetes. For more information, see the related issue [Support Basic Auth for Etcd v2](https://github.com/kubernetes/kubernetes/issues/23398).
|
etcd authentication is not currently supported by Kubernetes. For more
|
||||||
|
information, see the related issue
|
||||||
|
[Support Basic Auth for Etcd v2](https://github.com/kubernetes/kubernetes/issues/23398).
|
||||||
{{< /note >}}
|
{{< /note >}}
|
||||||
|
|
||||||
## Replacing a failed etcd member
|
## Replacing a failed etcd member
|
||||||
|
|
||||||
etcd cluster achieves high availability by tolerating minor member failures. However, to improve the overall health of the cluster, replace failed members immediately. When multiple members fail, replace them one by one. Replacing a failed member involves two steps: removing the failed member and adding a new member.
|
etcd cluster achieves high availability by tolerating minor member failures.
|
||||||
|
However, to improve the overall health of the cluster, replace failed members
|
||||||
|
immediately. When multiple members fail, replace them one by one. Replacing a
|
||||||
|
failed member involves two steps: removing the failed member and adding a new
|
||||||
|
member.
|
||||||
|
|
||||||
Though etcd keeps unique member IDs internally, it is recommended to use a unique name for each member to avoid human errors. For example, consider a three-member etcd cluster. Let the URLs be, member1=http://10.0.0.1, member2=http://10.0.0.2, and member3=http://10.0.0.3. When member1 fails, replace it with member4=http://10.0.0.4.
|
Though etcd keeps unique member IDs internally, it is recommended to use a
|
||||||
|
unique name for each member to avoid human errors. For example, consider a
|
||||||
|
three-member etcd cluster. Let the URLs be, `member1=http://10.0.0.1`,
|
||||||
|
`member2=http://10.0.0.2`, and `member3=http://10.0.0.3`. When `member1` fails,
|
||||||
|
replace it with `member4=http://10.0.0.4`.
|
||||||
|
|
||||||
1. Get the member ID of the failed member1:
|
1. Get the member ID of the failed `member1`:
|
||||||
|
|
||||||
`etcdctl --endpoints=http://10.0.0.2,http://10.0.0.3 member list`
|
```shell
|
||||||
|
etcdctl --endpoints=http://10.0.0.2,http://10.0.0.3 member list
|
||||||
|
```
|
||||||
|
|
||||||
The following message is displayed:
|
The following message is displayed:
|
||||||
|
|
||||||
8211f1d0f64f3269, started, member1, http://10.0.0.1:2380, http://10.0.0.1:2379
|
```console
|
||||||
91bc3c398fb3c146, started, member2, http://10.0.0.2:2380, http://10.0.0.2:2379
|
8211f1d0f64f3269, started, member1, http://10.0.0.1:2380, http://10.0.0.1:2379
|
||||||
fd422379fda50e48, started, member3, http://10.0.0.3:2380, http://10.0.0.3:2379
|
91bc3c398fb3c146, started, member2, http://10.0.0.2:2380, http://10.0.0.2:2379
|
||||||
|
fd422379fda50e48, started, member3, http://10.0.0.3:2380, http://10.0.0.3:2379
|
||||||
|
```
|
||||||
|
|
||||||
2. Remove the failed member:
|
2. Remove the failed member:
|
||||||
|
|
||||||
`etcdctl member remove 8211f1d0f64f3269`
|
```shell
|
||||||
|
etcdctl member remove 8211f1d0f64f3269
|
||||||
|
```
|
||||||
|
|
||||||
The following message is displayed:
|
The following message is displayed:
|
||||||
|
|
||||||
Removed member 8211f1d0f64f3269 from cluster
|
```console
|
||||||
|
Removed member 8211f1d0f64f3269 from cluster
|
||||||
|
```
|
||||||
|
|
||||||
3. Add the new member:
|
3. Add the new member:
|
||||||
|
|
||||||
`./etcdctl member add member4 --peer-urls=http://10.0.0.4:2380`
|
```shell
|
||||||
|
etcdctl member add member4 --peer-urls=http://10.0.0.4:2380
|
||||||
|
```
|
||||||
|
|
||||||
The following message is displayed:
|
The following message is displayed:
|
||||||
|
|
||||||
Member 2be1eb8f84b7f63e added to cluster ef37ad9dc622a7c4
|
```console
|
||||||
|
Member 2be1eb8f84b7f63e added to cluster ef37ad9dc622a7c4
|
||||||
|
```
|
||||||
|
|
||||||
4. Start the newly added member on a machine with the IP `10.0.0.4`:
|
4. Start the newly added member on a machine with the IP `10.0.0.4`:
|
||||||
|
|
||||||
export ETCD_NAME="member4"
|
```shell
|
||||||
export ETCD_INITIAL_CLUSTER="member2=http://10.0.0.2:2380,member3=http://10.0.0.3:2380,member4=http://10.0.0.4:2380"
|
export ETCD_NAME="member4"
|
||||||
export ETCD_INITIAL_CLUSTER_STATE=existing
|
export ETCD_INITIAL_CLUSTER="member2=http://10.0.0.2:2380,member3=http://10.0.0.3:2380,member4=http://10.0.0.4:2380"
|
||||||
etcd [flags]
|
export ETCD_INITIAL_CLUSTER_STATE=existing
|
||||||
|
etcd [flags]
|
||||||
|
```
|
||||||
|
|
||||||
5. Do either of the following:
|
5. Do either of the following:
|
||||||
|
|
||||||
1. Update its `--etcd-servers` flag to make Kubernetes aware of the configuration changes, then restart the Kubernetes API server.
|
1. Update the `--etcd-servers` flag for the Kubernetes API servers to make
|
||||||
2. Update the load balancer configuration if a load balancer is used in the deployment.
|
Kubernetes aware of the configuration changes, then restart the
|
||||||
|
Kubernetes API servers.
|
||||||
|
2. Update the load balancer configuration if a load balancer is used in the
|
||||||
|
deployment.
|
||||||
|
|
||||||
For more information on cluster reconfiguration, see [etcd Reconfiguration Documentation](https://github.com/coreos/etcd/blob/master/Documentation/op-guide/runtime-configuration.md#remove-a-member).
|
For more information on cluster reconfiguration, see
|
||||||
|
[etcd reconfiguration documentation](https://etcd.io/docs/current/op-guide/runtime-configuration/#remove-a-member).
|
||||||
|
|
||||||
## Backing up an etcd cluster
|
## Backing up an etcd cluster
|
||||||
|
|
||||||
All Kubernetes objects are stored on etcd. Periodically backing up the etcd cluster data is important to recover Kubernetes clusters under disaster scenarios, such as losing all master nodes. The snapshot file contains all the Kubernetes states and critical information. In order to keep the sensitive Kubernetes data safe, encrypt the snapshot files.
|
All Kubernetes objects are stored on etcd. Periodically backing up the etcd
|
||||||
|
cluster data is important to recover Kubernetes clusters under disaster
|
||||||
|
scenarios, such as losing all control plane nodes. The snapshot file contains
|
||||||
|
all the Kubernetes states and critical information. In order to keep the
|
||||||
|
sensitive Kubernetes data safe, encrypt the snapshot files.
|
||||||
|
|
||||||
Backing up an etcd cluster can be accomplished in two ways: etcd built-in snapshot and volume snapshot.
|
Backing up an etcd cluster can be accomplished in two ways: etcd built-in
|
||||||
|
snapshot and volume snapshot.
|
||||||
|
|
||||||
### Built-in snapshot
|
### Built-in snapshot
|
||||||
|
|
||||||
etcd supports built-in snapshot. A snapshot may either be taken from a live member with the `etcdctl snapshot save` command or by copying the `member/snap/db` file from an etcd [data directory](https://github.com/coreos/etcd/blob/master/Documentation/op-guide/configuration.md#--data-dir) that is not currently used by an etcd process. Taking the snapshot will normally not affect the performance of the member.
|
etcd supports built-in snapshot. A snapshot may either be taken from a live
|
||||||
|
member with the `etcdctl snapshot save` command or by copying the
|
||||||
|
`member/snap/db` file from an etcd
|
||||||
|
[data directory](https://etcd.io/docs/current/op-guide/configuration/#--data-dir)
|
||||||
|
that is not currently used by an etcd process. Taking the snapshot will
|
||||||
|
not affect the performance of the member.
|
||||||
|
|
||||||
Below is an example for taking a snapshot of the keyspace served by `$ENDPOINT` to the file `snapshotdb`:
|
Below is an example for taking a snapshot of the keyspace served by
|
||||||
|
`$ENDPOINT` to the file `snapshotdb`:
|
||||||
|
|
||||||
```sh
|
```shell
|
||||||
ETCDCTL_API=3 etcdctl --endpoints $ENDPOINT snapshot save snapshotdb
|
ETCDCTL_API=3 etcdctl --endpoints $ENDPOINT snapshot save snapshotdb
|
||||||
# exit 0
|
```
|
||||||
|
|
||||||
# verify the snapshot
|
Verify the snapshot:
|
||||||
|
|
||||||
|
```shell
|
||||||
ETCDCTL_API=3 etcdctl --write-out=table snapshot status snapshotdb
|
ETCDCTL_API=3 etcdctl --write-out=table snapshot status snapshotdb
|
||||||
|
```
|
||||||
|
|
||||||
|
```console
|
||||||
+----------+----------+------------+------------+
|
+----------+----------+------------+------------+
|
||||||
| HASH | REVISION | TOTAL KEYS | TOTAL SIZE |
|
| HASH | REVISION | TOTAL KEYS | TOTAL SIZE |
|
||||||
+----------+----------+------------+------------+
|
+----------+----------+------------+------------+
|
||||||
@@ -182,74 +265,63 @@ ETCDCTL_API=3 etcdctl --write-out=table snapshot status snapshotdb
|
|||||||
|
|
||||||
### Volume snapshot
|
### Volume snapshot
|
||||||
|
|
||||||
If etcd is running on a storage volume that supports backup, such as Amazon Elastic Block Store, back up etcd data by taking a snapshot of the storage volume.
|
If etcd is running on a storage volume that supports backup, such as Amazon
|
||||||
|
Elastic Block Store, back up etcd data by taking a snapshot of the storage
|
||||||
|
volume.
|
||||||
|
|
||||||
## Scaling up etcd clusters
|
## Scaling up etcd clusters
|
||||||
|
|
||||||
Scaling up etcd clusters increases availability by trading off performance. Scaling does not increase cluster performance nor capability. A general rule is not to scale up or down etcd clusters. Do not configure any auto scaling groups for etcd clusters. It is highly recommended to always run a static five-member etcd cluster for production Kubernetes clusters at any officially supported scale.
|
Scaling up etcd clusters increases availability by trading off performance.
|
||||||
|
Scaling does not increase cluster performance nor capability. A general rule
|
||||||
|
is not to scale up or down etcd clusters. Do not configure any auto scaling
|
||||||
|
groups for etcd clusters. It is highly recommended to always run a static
|
||||||
|
five-member etcd cluster for production Kubernetes clusters at any officially
|
||||||
|
supported scale.
|
||||||
|
|
||||||
A reasonable scaling is to upgrade a three-member cluster to a five-member one, when more reliability is desired. See [etcd Reconfiguration Documentation](https://github.com/coreos/etcd/blob/master/Documentation/op-guide/runtime-configuration.md#remove-a-member) for information on how to add members into an existing cluster.
|
A reasonable scaling is to upgrade a three-member cluster to a five-member
|
||||||
|
one, when more reliability is desired. See
|
||||||
|
[etcd reconfiguration documentation](https://etcd.io/docs/current/op-guide/runtime-configuration/#remove-a-member)
|
||||||
|
for information on how to add members into an existing cluster.
|
||||||
|
|
||||||
## Restoring an etcd cluster
|
## Restoring an etcd cluster
|
||||||
|
|
||||||
etcd supports restoring from snapshots that are taken from an etcd process of the [major.minor](http://semver.org/) version. Restoring a version from a different patch version of etcd also is supported. A restore operation is employed to recover the data of a failed cluster.
|
etcd supports restoring from snapshots that are taken from an etcd process of
|
||||||
|
the [major.minor](http://semver.org/) version. Restoring a version from a
|
||||||
|
different patch version of etcd also is supported. A restore operation is
|
||||||
|
employed to recover the data of a failed cluster.
|
||||||
|
|
||||||
Before starting the restore operation, a snapshot file must be present. It can either be a snapshot file from a previous backup operation, or from a remaining [data directory](https://github.com/coreos/etcd/blob/master/Documentation/op-guide/configuration.md#--data-dir). For more information and examples on restoring a cluster from a snapshot file, see [etcd disaster recovery documentation](https://github.com/coreos/etcd/blob/master/Documentation/op-guide/recovery.md#restoring-a-cluster).
|
Before starting the restore operation, a snapshot file must be present. It can
|
||||||
|
either be a snapshot file from a previous backup operation, or from a remaining
|
||||||
|
[data directory]( https://etcd.io/docs/current/op-guide/configuration/#--data-dir).
|
||||||
|
For more information and examples on restoring a cluster from a snapshot file, see
|
||||||
|
[etcd disaster recovery documentation](https://etcd.io/docs/current/op-guide/recovery/#restoring-a-cluster).
|
||||||
|
|
||||||
If the access URLs of the restored cluster is changed from the previous cluster, the Kubernetes API server must be reconfigured accordingly. In this case, restart Kubernetes API server with the flag `--etcd-servers=$NEW_ETCD_CLUSTER` instead of the flag `--etcd-servers=$OLD_ETCD_CLUSTER`. Replace `$NEW_ETCD_CLUSTER` and `$OLD_ETCD_CLUSTER` with the respective IP addresses. If a load balancer is used in front of an etcd cluster, you might need to update the load balancer instead.
|
If the access URLs of the restored cluster is changed from the previous
|
||||||
|
cluster, the Kubernetes API server must be reconfigured accordingly. In this
|
||||||
|
case, restart Kubernetes API servers with the flag
|
||||||
|
`--etcd-servers=$NEW_ETCD_CLUSTER` instead of the flag
|
||||||
|
`--etcd-servers=$OLD_ETCD_CLUSTER`. Replace `$NEW_ETCD_CLUSTER` and
|
||||||
|
`$OLD_ETCD_CLUSTER` with the respective IP addresses. If a load balancer is
|
||||||
|
used in front of an etcd cluster, you might need to update the load balancer
|
||||||
|
instead.
|
||||||
|
|
||||||
If the majority of etcd members have permanently failed, the etcd cluster is considered failed. In this scenario, Kubernetes cannot make any changes to its current state. Although the scheduled pods might continue to run, no new pods can be scheduled. In such cases, recover the etcd cluster and potentially reconfigure Kubernetes API server to fix the issue.
|
If the majority of etcd members have permanently failed, the etcd cluster is
|
||||||
|
considered failed. In this scenario, Kubernetes cannot make any changes to its
|
||||||
|
current state. Although the scheduled pods might continue to run, no new pods
|
||||||
|
can be scheduled. In such cases, recover the etcd cluster and potentially
|
||||||
|
reconfigure Kubernetes API servers to fix the issue.
|
||||||
|
|
||||||
{{< note >}}
|
{{< note >}}
|
||||||
If any API servers are running in your cluster, you should not attempt to restore instances of etcd.
|
If any API servers are running in your cluster, you should not attempt to
|
||||||
Instead, follow these steps to restore etcd:
|
restore instances of etcd. Instead, follow these steps to restore etcd:
|
||||||
|
|
||||||
- stop *all* kube-apiserver instances
|
- stop *all* API server instances
|
||||||
- restore state in all etcd instances
|
- restore state in all etcd instances
|
||||||
- restart all kube-apiserver instances
|
- restart all API server instances
|
||||||
|
|
||||||
We also recommend restarting any components (e.g. kube-scheduler, kube-controller-manager, kubelet) to ensure that they don't
|
We also recommend restarting any components (e.g. `kube-scheduler`,
|
||||||
rely on some stale data. Note that in practice, the restore takes a bit of time.
|
`kube-controller-manager`, `kubelet`) to ensure that they don't rely on some
|
||||||
During the restoration, critical components will lose leader lock and restart themselves.
|
stale data. Note that in practice, the restore takes a bit of time. During the
|
||||||
|
restoration, critical components will lose leader lock and restart themselves.
|
||||||
{{< /note >}}
|
{{< /note >}}
|
||||||
|
|
||||||
## Upgrading and rolling back etcd clusters
|
|
||||||
|
|
||||||
As of Kubernetes v1.13.0, etcd2 is no longer supported as a storage backend for
|
|
||||||
new or existing Kubernetes clusters. The timeline for Kubernetes support for
|
|
||||||
etcd2 and etcd3 is as follows:
|
|
||||||
|
|
||||||
- Kubernetes v1.0: etcd2 only
|
|
||||||
- Kubernetes v1.5.1: etcd3 support added, new clusters still default to etcd2
|
|
||||||
- Kubernetes v1.6.0: new clusters created with `kube-up.sh` default to etcd3,
|
|
||||||
and `kube-apiserver` defaults to etcd3
|
|
||||||
- Kubernetes v1.9.0: deprecation of etcd2 storage backend announced
|
|
||||||
- Kubernetes v1.13.0: etcd2 storage backend removed, `kube-apiserver` will
|
|
||||||
refuse to start with `--storage-backend=etcd2`, with the
|
|
||||||
message `etcd2 is no longer a supported storage backend`
|
|
||||||
|
|
||||||
Before upgrading a v1.12.x kube-apiserver using `--storage-backend=etcd2` to
|
|
||||||
v1.13.x, etcd v2 data must be migrated to the v3 storage backend and
|
|
||||||
kube-apiserver invocations must be changed to use `--storage-backend=etcd3`.
|
|
||||||
|
|
||||||
The process for migrating from etcd2 to etcd3 is highly dependent on how the
|
|
||||||
etcd cluster was deployed and configured, as well as how the Kubernetes
|
|
||||||
cluster was deployed and configured. We recommend that you consult your cluster
|
|
||||||
provider's documentation to see if there is a predefined solution.
|
|
||||||
|
|
||||||
If your cluster was created via `kube-up.sh` and is still using etcd2 as its
|
|
||||||
storage backend, please consult the [Kubernetes v1.12 etcd cluster upgrade docs](https://v1-12.docs.kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/#upgrading-and-rolling-back-etcd-clusters)
|
|
||||||
|
|
||||||
## Known issue: etcd client balancer with secure endpoints
|
|
||||||
|
|
||||||
The etcd v3 client, released in etcd v3.3.13 or earlier, has a [critical bug](https://github.com/kubernetes/kubernetes/issues/72102) which affects the kube-apiserver and HA deployments. The etcd client balancer failover does not properly work against secure endpoints. As a result, etcd servers may fail or disconnect briefly from the kube-apiserver. This affects kube-apiserver HA deployments.
|
|
||||||
|
|
||||||
The fix was made in [etcd v3.4](https://github.com/etcd-io/etcd/pull/10911) (and backported to v3.3.14 or later): the new client now creates its own credential bundle to correctly set authority target in dial function.
|
|
||||||
|
|
||||||
Because the fix requires gRPC dependency upgrade (to v1.23.0), downstream Kubernetes [did not backport etcd upgrades](https://github.com/kubernetes/kubernetes/issues/72102#issuecomment-526645978). Which means the [etcd fix in kube-apiserver](https://github.com/etcd-io/etcd/pull/10911/commits/db61ee106ca9363ba3f188ecf27d1a8843da33ab) is only available from Kubernetes 1.16.
|
|
||||||
|
|
||||||
To urgently fix this bug for Kubernetes 1.15 or earlier, build a custom kube-apiserver. You can make local changes to [`vendor/google.golang.org/grpc/credentials/credentials.go`](https://github.com/kubernetes/kubernetes/blob/7b85be021cd2943167cd3d6b7020f44735d9d90b/vendor/google.golang.org/grpc/credentials/credentials.go#L135) with [etcd@db61ee106](https://github.com/etcd-io/etcd/pull/10911/commits/db61ee106ca9363ba3f188ecf27d1a8843da33ab).
|
|
||||||
|
|
||||||
See ["kube-apiserver 1.13.x refuses to work when first etcd-server is not available"](https://github.com/kubernetes/kubernetes/issues/72102).
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ weight: 10
|
|||||||
</p>
|
</p>
|
||||||
<p>A Kubernetes cluster consists of two types of resources:
|
<p>A Kubernetes cluster consists of two types of resources:
|
||||||
<ul>
|
<ul>
|
||||||
<li>The <b>Master</b> coordinates the cluster</li>
|
<li>The <b>Control Plane</b> coordinates the cluster</li>
|
||||||
<li><b>Nodes</b> are the workers that run applications</li>
|
<li><b>Nodes</b> are the workers that run applications</li>
|
||||||
</ul>
|
</ul>
|
||||||
</p>
|
</p>
|
||||||
@@ -71,22 +71,22 @@ weight: 10
|
|||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
<p><b>The Master is responsible for managing the cluster.</b> The master coordinates all activities in your cluster, such as scheduling applications, maintaining applications' desired state, scaling applications, and rolling out new updates.</p>
|
<p><b>The Control Plane is responsible for managing the cluster.</b> The Control Plane coordinates all activities in your cluster, such as scheduling applications, maintaining applications' desired state, scaling applications, and rolling out new updates.</p>
|
||||||
<p><b>A node is a VM or a physical computer that serves as a worker machine in a Kubernetes cluster.</b> Each node has a Kubelet, which is an agent for managing the node and communicating with the Kubernetes master. The node should also have tools for handling container operations, such as containerd or Docker. A Kubernetes cluster that handles production traffic should have a minimum of three nodes.</p>
|
<p><b>A node is a VM or a physical computer that serves as a worker machine in a Kubernetes cluster.</b> Each node has a Kubelet, which is an agent for managing the node and communicating with the Kubernetes control plane. The node should also have tools for handling container operations, such as containerd or Docker. A Kubernetes cluster that handles production traffic should have a minimum of three nodes.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<div class="content__box content__box_fill">
|
<div class="content__box content__box_fill">
|
||||||
<p><i>Masters manage the cluster and the nodes that are used to host the running applications.</i></p>
|
<p><i>Control Planes manage the cluster and the nodes that are used to host the running applications.</i></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
<p>When you deploy applications on Kubernetes, you tell the master to start the application containers. The master schedules the containers to run on the cluster's nodes. <b>The nodes communicate with the master using the <a href="/docs/concepts/overview/kubernetes-api/">Kubernetes API</a></b>, which the master exposes. End users can also use the Kubernetes API directly to interact with the cluster.</p>
|
<p>When you deploy applications on Kubernetes, you tell the control plane to start the application containers. The control plane schedules the containers to run on the cluster's nodes. <b>The nodes communicate with the control plane using the <a href="/docs/concepts/overview/kubernetes-api/">Kubernetes API</a></b>, which the control plane exposes. End users can also use the Kubernetes API directly to interact with the cluster.</p>
|
||||||
|
|
||||||
<p>A Kubernetes cluster can be deployed on either physical or virtual machines. To get started with Kubernetes development, you can use Minikube. Minikube is a lightweight Kubernetes implementation that creates a VM on your local machine and deploys a simple cluster containing only one node. Minikube is available for Linux, macOS, and Windows systems. The Minikube CLI provides basic bootstrapping operations for working with your cluster, including start, stop, status, and delete. For this tutorial, however, you'll use a provided online terminal with Minikube pre-installed.</p>
|
<p>A Kubernetes cluster can be deployed on either physical or virtual machines. To get started with Kubernetes development, you can use Minikube. Minikube is a lightweight Kubernetes implementation that creates a VM on your local machine and deploys a simple cluster containing only one node. Minikube is available for Linux, macOS, and Windows systems. The Minikube CLI provides basic bootstrapping operations for working with your cluster, including start, stop, status, and delete. For this tutorial, however, you'll use a provided online terminal with Minikube pre-installed.</p>
|
||||||
|
|
||||||
<p>Now that you know what Kubernetes is, let's go to the online tutorial and start our first cluster!</p>
|
<p>Now that you know what Kubernetes is, let's go to the online tutorial and start our first cluster!</p>
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,32 @@
|
|||||||
<?xml version="1.0"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<svg width="476.1" height="385.3" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
<svg
|
||||||
<style type="text/css">.st0{fill:#FFFFFF;stroke:#006DE9;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
width="476.1"
|
||||||
|
height="385.3"
|
||||||
|
version="1.1"
|
||||||
|
id="svg161">
|
||||||
|
<metadata
|
||||||
|
id="metadata167">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs165" />
|
||||||
|
<style
|
||||||
|
type="text/css"
|
||||||
|
id="style10">.st0{fill:#FFFFFF;stroke:#006DE9;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
|
||||||
.st1{fill:#FFFFFF;stroke:#006DE9;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
|
.st1{fill:#FFFFFF;stroke:#006DE9;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
|
||||||
.st2{fill:#FFFFFF;stroke:#326DE6;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
|
.st2{fill:#FFFFFF;stroke:#326DE6;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
|
||||||
.st3{opacity:0.71;fill:#326CE6;}
|
.st3{opacity:0.71;fill:#326CE6;}
|
||||||
@@ -64,176 +90,437 @@
|
|||||||
.st61{fill:#011F38;stroke:#414042;stroke-width:0.3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
|
.st61{fill:#011F38;stroke:#414042;stroke-width:0.3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
|
||||||
.st62{fill:none;stroke:#011F38;stroke-width:0.3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
|
.st62{fill:none;stroke:#011F38;stroke-width:0.3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
|
||||||
.st63{fill:none;stroke:#011F38;stroke-width:0.2813;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}</style>
|
.st63{fill:none;stroke:#011F38;stroke-width:0.2813;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}</style>
|
||||||
<symbol viewBox="-68.6 -66.9 137.2 133.9" id="master_x5F_level1_1_">
|
<symbol
|
||||||
<g id="svg_1">
|
viewBox="-68.6 -66.9 137.2 133.9"
|
||||||
<g id="svg_2">
|
id="master_x5F_level1_1_">
|
||||||
<line id="svg_3" y2="0.7" x2="0" y1="-11.1" x1="0" class="st0"/>
|
<g
|
||||||
<line id="svg_4" y2="-5.2" x2="-5.9" y1="-5.2" x1="5.9" class="st0"/>
|
id="svg_1">
|
||||||
</g>
|
<g
|
||||||
<polygon id="svg_5" points="-29.2,-63.9 -65.6,-18.3 -52.6,38.6 0,63.9 52.6,38.6 65.6,-18.3 29.2,-63.9 " class="st1"/>
|
id="svg_2">
|
||||||
</g>
|
<line
|
||||||
</symbol>
|
id="svg_3"
|
||||||
<symbol viewBox="-81 -93 162 186.1" id="node_high_level">
|
y2="0.7"
|
||||||
<polygon id="svg_6" points="-80,-46 -80,46 0,92 80,46 80,-46 0,-92 " class="st2"/>
|
x2="0"
|
||||||
<g id="Isolation_Mode_3_"/>
|
y1="-11.1"
|
||||||
</symbol>
|
x1="0"
|
||||||
<symbol viewBox="-87.5 -100.6 175.1 201.1" id="node_x5F_empty">
|
class="st0" />
|
||||||
<use transform="matrix(1.0808,0,0,1.0808,-0.00003292006,-0.00003749943) " y="-93" x="-81" id="XMLID_201_" height="186.1" width="162" xlink:href="#node_high_level"/>
|
<line
|
||||||
<g id="svg_7">
|
id="svg_4"
|
||||||
<polygon id="svg_8" points="76.8,-28.1 -14,-80.3 0,-88.3 76.7,-44.4 " class="st3"/>
|
y2="-5.2"
|
||||||
<polygon id="svg_9" points="76.8,-28.1 32.1,-53.8 38.8,-66.1 76.7,-44.4 " class="st4"/>
|
x2="-5.9"
|
||||||
</g>
|
y1="-5.2"
|
||||||
</symbol>
|
x1="5.9"
|
||||||
<symbol viewBox="-87.6 -101 175.2 202" id="node_x5F_new">
|
class="st0" />
|
||||||
<polygon id="svg_10" points="0,-100 -86.6,-50 -86.6,50 0,100 86.6,50 86.6,-50 " class="st5"/>
|
</g>
|
||||||
<polygon id="svg_11" points="-86.6,-20.2 -86.6,-50 0,-100 25.8,-85.1 " class="st6"/>
|
<polygon
|
||||||
<polygon id="svg_12" points="-40.8,-70.7 -32.9,-57 15.7,-85.1 0,-94.3 " class="st7"/>
|
id="svg_5"
|
||||||
<text id="svg_13" font-family="'RobotoSlab-Regular'" font-size="11.3632px" class="st8" transform="matrix(0.866,-0.5,-0.5,-0.866,-33.9256,-70.7388) ">Docker</text>
|
points="-29.2,-63.9 -65.6,-18.3 -52.6,38.6 0,63.9 52.6,38.6 65.6,-18.3 29.2,-63.9 "
|
||||||
<text id="svg_14" font-family="'RobotoSlab-Regular'" font-size="11.3632px" class="st8" transform="matrix(0.866,-0.5,-0.5,-0.866,-76.0668,-46.4087) ">Kubelt</text>
|
class="st1" />
|
||||||
</symbol>
|
|
||||||
<g>
|
|
||||||
<title>Layer 1</title>
|
|
||||||
<g id="CLUSTER">
|
|
||||||
<g class="st9" id="XMLID_296_">
|
|
||||||
<g id="svg_15">
|
|
||||||
<linearGradient y2="185.2931" x2="343.0902" y1="185.2931" x1="28.6348" gradientUnits="userSpaceOnUse" id="SVGID_1_">
|
|
||||||
<stop stop-color="#326DE6" offset="0"/>
|
|
||||||
<stop stop-color="#10FFC6" offset="1"/>
|
|
||||||
</linearGradient>
|
|
||||||
<polygon id="svg_16" points="311.9,92.7 343.1,229.2 255.8,338.6 115.9,338.6 28.6,229.2 59.8,92.7 185.9,32 " class="st10"/>
|
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</symbol>
|
||||||
</g>
|
<symbol
|
||||||
<g id="master">
|
viewBox="-81 -93 162 186.1"
|
||||||
<use id="svg_17" transform="matrix(0.4,0,0,-0.4,185.8606,187.2514) " y="-66.9" x="-68.6" height="133.9" width="137.2" xlink:href="#master_x5F_level1_1_"/>
|
id="node_high_level">
|
||||||
<g id="master_x5F_level1"/>
|
<polygon
|
||||||
</g>
|
id="svg_6"
|
||||||
<g id="description">
|
points="-80,-46 -80,46 0,92 80,46 80,-46 0,-92 "
|
||||||
<g id="svg_72">
|
class="st2" />
|
||||||
<path id="svg_73" d="m374.4,188.6l0,0l-2.8,6.8l-0.8,0l-2.8,-6.8l0,0l0.1,3.5l0,2.5l1,0.2l0,0.7l-3.1,0l0,-0.7l1,-0.2l0,-6.7l-1,-0.2l0,-0.7l1,0l1.5,0l2.7,6.9l0,0l2.7,-6.9l2.4,0l0,0.7l-1,0.2l0,6.7l1,0.2l0,0.7l-3.1,0l0,-0.7l1,-0.2l0,-2.6l0.2,-3.4z" class="st42"/>
|
<g
|
||||||
<path id="svg_74" d="m381.5,195.4c0,-0.2 -0.1,-0.3 -0.1,-0.5s0,-0.3 0,-0.4c-0.2,0.3 -0.5,0.5 -0.8,0.7s-0.7,0.3 -1.1,0.3c-0.7,0 -1.2,-0.2 -1.5,-0.5s-0.5,-0.8 -0.5,-1.4c0,-0.6 0.2,-1.1 0.7,-1.4s1.2,-0.5 2,-0.5l1.2,0l0,-0.7c0,-0.4 -0.1,-0.7 -0.4,-0.9s-0.6,-0.3 -1,-0.3c-0.3,0 -0.5,0 -0.8,0.1s-0.4,0.2 -0.5,0.3l-0.1,0.7l-0.9,0l0,-1.2c0.3,-0.2 0.6,-0.4 1,-0.6s0.9,-0.2 1.3,-0.2c0.7,0 1.3,0.2 1.7,0.6s0.7,0.9 0.7,1.6l0,3.1c0,0.1 0,0.2 0,0.2s0,0.2 0,0.2l0.5,0.1l0,0.7l-1.4,0zm-1.9,-0.8c0.4,0 0.7,-0.1 1,-0.3s0.5,-0.4 0.7,-0.7l0,-1l-1.2,0c-0.5,0 -0.8,0.1 -1.1,0.3s-0.4,0.5 -0.4,0.8c0,0.3 0.1,0.5 0.3,0.6s0.4,0.3 0.7,0.3z" class="st42"/>
|
id="Isolation_Mode_3_" />
|
||||||
<path id="svg_75" d="m388.8,191.1l-0.9,0l-0.2,-0.8c-0.1,-0.1 -0.3,-0.2 -0.5,-0.3s-0.5,-0.1 -0.7,-0.1c-0.4,0 -0.7,0.1 -0.9,0.3s-0.3,0.4 -0.3,0.7c0,0.2 0.1,0.4 0.3,0.6s0.5,0.3 1.1,0.4c0.8,0.2 1.4,0.4 1.8,0.7s0.6,0.7 0.6,1.2c0,0.6 -0.2,1 -0.7,1.4s-1,0.5 -1.8,0.5c-0.5,0 -0.9,-0.1 -1.3,-0.2s-0.7,-0.3 -1,-0.5l0,-1.4l0.9,0l0.2,0.8c0.1,0.1 0.3,0.2 0.5,0.3s0.5,0.1 0.7,0.1c0.4,0 0.7,-0.1 1,-0.2s0.3,-0.4 0.3,-0.7c0,-0.3 -0.1,-0.5 -0.3,-0.6s-0.6,-0.3 -1.1,-0.4c-0.8,-0.2 -1.3,-0.4 -1.7,-0.7s-0.6,-0.7 -0.6,-1.2c0,-0.5 0.2,-1 0.7,-1.3s1,-0.5 1.7,-0.5c0.5,0 0.9,0.1 1.3,0.2s0.7,0.3 1,0.5l-0.1,1.2z" class="st42"/>
|
</symbol>
|
||||||
<path id="svg_76" d="m392.1,187.5l0,1.5l1.2,0l0,0.9l-1.2,0l0,3.8c0,0.3 0.1,0.5 0.2,0.6s0.3,0.2 0.5,0.2c0.1,0 0.2,0 0.3,0s0.2,0 0.3,-0.1l0.2,0.8c-0.1,0.1 -0.3,0.1 -0.5,0.2s-0.4,0.1 -0.6,0.1c-0.5,0 -0.8,-0.1 -1.1,-0.4s-0.4,-0.7 -0.4,-1.3l0,-3.8l-1,0l0,-0.9l1,0l0,-1.5l1.1,0l0,-0.1z" class="st42"/>
|
<symbol
|
||||||
<path id="svg_77" d="m397.4,195.5c-0.9,0 -1.6,-0.3 -2.1,-0.9s-0.8,-1.4 -0.8,-2.3l0,-0.3c0,-0.9 0.3,-1.7 0.8,-2.3s1.2,-0.9 1.9,-0.9c0.9,0 1.5,0.3 1.9,0.8s0.7,1.2 0.7,2.1l0,0.7l-4.1,0l0,0c0,0.6 0.2,1.1 0.5,1.5s0.7,0.6 1.2,0.6c0.4,0 0.7,-0.1 1,-0.2s0.5,-0.3 0.8,-0.5l0.5,0.8c-0.2,0.2 -0.5,0.4 -0.9,0.6s-0.9,0.3 -1.4,0.3zm-0.2,-5.6c-0.4,0 -0.7,0.2 -1,0.5s-0.4,0.7 -0.5,1.2l0,0l2.9,0l0,-0.2c0,-0.5 -0.1,-0.8 -0.4,-1.1s-0.5,-0.4 -1,-0.4z" class="st42"/>
|
viewBox="-87.5 -100.6 175.1 201.1"
|
||||||
<path id="svg_78" d="m400.9,189.8l0,-0.7l2,0l0.1,0.9c0.2,-0.3 0.4,-0.6 0.7,-0.8s0.6,-0.3 0.9,-0.3c0.1,0 0.2,0 0.3,0s0.2,0 0.2,0l-0.2,1.1l-0.7,0c-0.3,0 -0.6,0.1 -0.8,0.2s-0.4,0.3 -0.5,0.6l0,3.6l1,0.2l0,0.7l-3.1,0l0,-0.7l1,-0.2l0,-4.4l-0.9,-0.2z" class="st42"/>
|
id="node_x5F_empty">
|
||||||
</g>
|
<use
|
||||||
<g id="svg_79">
|
transform="matrix(1.0808,0,0,1.0808,-0.00003292006,-0.00003749943) "
|
||||||
<path id="svg_80" d="m366,230.1l1,-0.2l0,-4.5l-1,-0.2l0,-0.7l2,0l0.1,0.9c0.2,-0.3 0.5,-0.6 0.8,-0.8s0.7,-0.3 1.1,-0.3c0.7,0 1.2,0.2 1.6,0.6s0.6,1 0.6,1.9l0,3.1l1,0.2l0,0.7l-3.2,0l0,-0.7l1,-0.2l0,-3.1c0,-0.6 -0.1,-1 -0.3,-1.2s-0.6,-0.4 -1,-0.4c-0.3,0 -0.6,0.1 -0.9,0.2s-0.5,0.4 -0.6,0.7l0,3.7l1,0.2l0,0.7l-3.2,0l0,-0.6z" class="st42"/>
|
y="-93"
|
||||||
<path id="svg_81" d="m373.9,227.6c0,-0.9 0.3,-1.7 0.8,-2.3s1.2,-0.9 2.1,-0.9c0.9,0 1.6,0.3 2.1,0.9s0.8,1.4 0.8,2.3l0,0.1c0,0.9 -0.3,1.7 -0.8,2.3s-1.2,0.9 -2.1,0.9c-0.9,0 -1.6,-0.3 -2.1,-0.9s-0.8,-1.4 -0.8,-2.3l0,-0.1zm1.1,0.1c0,0.7 0.1,1.2 0.4,1.7s0.7,0.7 1.3,0.7c0.5,0 1,-0.2 1.2,-0.7s0.4,-1 0.4,-1.7l0,-0.1c0,-0.7 -0.1,-1.2 -0.4,-1.7s-0.7,-0.7 -1.3,-0.7s-1,0.2 -1.3,0.7s-0.4,1 -0.4,1.7l0,0.1l0.1,0z" class="st42"/>
|
x="-81"
|
||||||
<path id="svg_82" d="m384.9,230c-0.2,0.3 -0.5,0.5 -0.8,0.7s-0.6,0.2 -1,0.2c-0.8,0 -1.4,-0.3 -1.8,-0.8s-0.7,-1.3 -0.7,-2.2l0,-0.1c0,-1 0.2,-1.8 0.7,-2.5s1,-0.9 1.8,-0.9c0.4,0 0.7,0.1 1,0.2s0.5,0.3 0.7,0.6l0,-2.6l-1,-0.2l0,-0.7l1,0l1.2,0l0,8.2l1,0.2l0,0.7l-2,0l-0.1,-0.8zm-3.2,-2.1c0,0.6 0.1,1.1 0.4,1.5s0.7,0.6 1.2,0.6c0.3,0 0.6,-0.1 0.9,-0.2s0.4,-0.4 0.6,-0.7l0,-2.9c-0.1,-0.3 -0.3,-0.5 -0.6,-0.6s-0.5,-0.2 -0.9,-0.2c-0.6,0 -1,0.2 -1.2,0.7s-0.4,1.1 -0.4,1.8l0,0z" class="st42"/>
|
id="XMLID_201_"
|
||||||
<path id="svg_83" d="m390.7,230.9c-0.9,0 -1.6,-0.3 -2.1,-0.9s-0.8,-1.4 -0.8,-2.3l0,-0.3c0,-0.9 0.3,-1.7 0.8,-2.3s1.2,-0.9 1.9,-0.9c0.9,0 1.5,0.3 1.9,0.8s0.7,1.2 0.7,2.1l0,0.7l-4.1,0l0,0c0,0.6 0.2,1.1 0.5,1.5s0.7,0.6 1.2,0.6c0.4,0 0.7,-0.1 1,-0.2s0.5,-0.3 0.8,-0.5l0.5,0.8c-0.2,0.2 -0.5,0.4 -0.9,0.6s-0.9,0.3 -1.4,0.3zm-0.2,-5.6c-0.4,0 -0.7,0.2 -1,0.5s-0.4,0.7 -0.5,1.2l0,0l2.9,0l0,-0.2c0,-0.5 -0.1,-0.8 -0.4,-1.1s-0.5,-0.4 -1,-0.4z" class="st42"/>
|
height="186.1"
|
||||||
<path id="svg_84" d="m397.1,232.5l1,-0.2l0,-7l-1,-0.2l0,-0.7l1.9,0l0.1,0.8c0.2,-0.3 0.5,-0.5 0.8,-0.7s0.7,-0.2 1.1,-0.2c0.8,0 1.4,0.3 1.8,0.9s0.7,1.4 0.7,2.5l0,0.1c0,0.9 -0.2,1.7 -0.7,2.2s-1,0.8 -1.8,0.8c-0.4,0 -0.7,-0.1 -1,-0.2s-0.5,-0.3 -0.8,-0.6l0,2.2l1,0.2l0,0.7l-3.1,0l0,-0.6zm5.2,-4.8c0,-0.7 -0.1,-1.3 -0.4,-1.8s-0.7,-0.7 -1.3,-0.7c-0.3,0 -0.6,0.1 -0.8,0.2s-0.4,0.4 -0.6,0.6l0,3.1c0.1,0.3 0.3,0.5 0.6,0.6s0.5,0.2 0.9,0.2c0.5,0 1,-0.2 1.2,-0.6s0.4,-0.9 0.4,-1.6l0,0z" class="st42"/>
|
width="162"
|
||||||
<path id="svg_85" d="m404.5,225.2l0,-0.7l2,0l0.1,0.9c0.2,-0.3 0.4,-0.6 0.7,-0.8s0.6,-0.3 0.9,-0.3c0.1,0 0.2,0 0.3,0s0.2,0 0.2,0l-0.2,1.1l-0.7,0c-0.3,0 -0.6,0.1 -0.8,0.2s-0.4,0.3 -0.5,0.6l0,3.6l1,0.2l0,0.7l-3.1,0l0,-0.7l1,-0.2l0,-4.5l-0.9,-0.1z" class="st42"/>
|
xlink:href="#node_high_level" />
|
||||||
<path id="svg_86" d="m409.3,227.6c0,-0.9 0.3,-1.7 0.8,-2.3s1.2,-0.9 2.1,-0.9c0.9,0 1.6,0.3 2.1,0.9s0.8,1.4 0.8,2.3l0,0.1c0,0.9 -0.3,1.7 -0.8,2.3s-1.2,0.9 -2.1,0.9c-0.9,0 -1.6,-0.3 -2.1,-0.9s-0.8,-1.4 -0.8,-2.3l0,-0.1zm1.2,0.1c0,0.7 0.1,1.2 0.4,1.7s0.7,0.7 1.3,0.7c0.5,0 1,-0.2 1.2,-0.7s0.4,-1 0.4,-1.7l0,-0.1c0,-0.7 -0.1,-1.2 -0.4,-1.7s-0.7,-0.7 -1.3,-0.7s-1,0.2 -1.3,0.7s-0.4,1 -0.4,1.7l0,0.1l0.1,0z" class="st42"/>
|
<g
|
||||||
<path id="svg_87" d="m418.9,230c0.4,0 0.7,-0.1 1,-0.4s0.4,-0.5 0.4,-0.9l1,0l0,0c0,0.5 -0.2,1 -0.7,1.5s-1.1,0.6 -1.8,0.6c-0.9,0 -1.6,-0.3 -2.1,-0.9s-0.7,-1.4 -0.7,-2.3l0,-0.2c0,-0.9 0.2,-1.7 0.7,-2.3s1.2,-0.9 2.1,-0.9c0.5,0 1,0.1 1.4,0.3s0.7,0.4 1,0.7l0.1,1.4l-0.9,0l-0.3,-1c-0.1,-0.1 -0.3,-0.2 -0.5,-0.3s-0.5,-0.1 -0.7,-0.1c-0.6,0 -1,0.2 -1.3,0.7s-0.4,1 -0.4,1.6l0,0.2c0,0.6 0.1,1.2 0.4,1.6s0.7,0.7 1.3,0.7z" class="st42"/>
|
id="svg_7">
|
||||||
<path id="svg_88" d="m425.4,230.9c-0.9,0 -1.6,-0.3 -2.1,-0.9s-0.8,-1.4 -0.8,-2.3l0,-0.3c0,-0.9 0.3,-1.7 0.8,-2.3s1.2,-0.9 1.9,-0.9c0.9,0 1.5,0.3 1.9,0.8s0.7,1.2 0.7,2.1l0,0.7l-4.1,0l0,0c0,0.6 0.2,1.1 0.5,1.5s0.7,0.6 1.2,0.6c0.4,0 0.7,-0.1 1,-0.2s0.5,-0.3 0.8,-0.5l0.5,0.8c-0.2,0.2 -0.5,0.4 -0.9,0.6s-0.8,0.3 -1.4,0.3zm-0.1,-5.6c-0.4,0 -0.7,0.2 -1,0.5s-0.4,0.7 -0.5,1.2l0,0l2.9,0l0,-0.2c0,-0.5 -0.1,-0.8 -0.4,-1.1s-0.6,-0.4 -1,-0.4z" class="st42"/>
|
<polygon
|
||||||
<path id="svg_89" d="m433.8,226.5l-0.8,0l-0.2,-0.8c-0.1,-0.1 -0.3,-0.2 -0.5,-0.3s-0.5,-0.1 -0.7,-0.1c-0.4,0 -0.7,0.1 -0.9,0.3s-0.3,0.4 -0.3,0.7c0,0.2 0.1,0.4 0.3,0.6s0.5,0.3 1.1,0.4c0.8,0.2 1.4,0.4 1.8,0.7s0.6,0.7 0.6,1.2c0,0.6 -0.2,1 -0.7,1.4s-1,0.5 -1.8,0.5c-0.5,0 -0.9,-0.1 -1.3,-0.2s-0.7,-0.3 -1,-0.5l0,-1.4l0.9,0l0.2,0.8c0.1,0.1 0.3,0.2 0.5,0.3s0.5,0.1 0.7,0.1c0.4,0 0.7,-0.1 1,-0.2s0.3,-0.4 0.3,-0.7c0,-0.3 -0.1,-0.5 -0.3,-0.6s-0.6,-0.3 -1.1,-0.4c-0.8,-0.2 -1.3,-0.4 -1.7,-0.7s-0.6,-0.7 -0.6,-1.2c0,-0.5 0.2,-1 0.7,-1.3s1,-0.5 1.7,-0.5c0.5,0 0.9,0.1 1.3,0.2s0.7,0.3 1,0.5l-0.2,1.2z" class="st42"/>
|
id="svg_8"
|
||||||
<path id="svg_90" d="m440,226.5l-0.9,0l-0.2,-0.8c-0.1,-0.1 -0.3,-0.2 -0.5,-0.3s-0.5,-0.1 -0.7,-0.1c-0.4,0 -0.7,0.1 -0.9,0.3s-0.3,0.4 -0.3,0.7c0,0.2 0.1,0.4 0.3,0.6s0.5,0.3 1.1,0.4c0.8,0.2 1.4,0.4 1.8,0.7s0.6,0.7 0.6,1.2c0,0.6 -0.2,1 -0.7,1.4s-1,0.5 -1.8,0.5c-0.5,0 -0.9,-0.1 -1.3,-0.2s-0.7,-0.3 -1,-0.5l0,-1.4l0.9,0l0.2,0.8c0.1,0.1 0.3,0.2 0.5,0.3s0.5,0.1 0.7,0.1c0.4,0 0.7,-0.1 1,-0.2s0.3,-0.4 0.3,-0.7c0,-0.3 -0.1,-0.5 -0.3,-0.6s-0.6,-0.3 -1.1,-0.4c-0.8,-0.2 -1.3,-0.4 -1.7,-0.7s-0.6,-0.7 -0.6,-1.2c0,-0.5 0.2,-1 0.7,-1.3s1,-0.5 1.7,-0.5c0.5,0 0.9,0.1 1.3,0.2s0.7,0.3 1,0.5l-0.1,1.2z" class="st42"/>
|
points="76.8,-28.1 -14,-80.3 0,-88.3 76.7,-44.4 "
|
||||||
<path id="svg_91" d="m444.1,230.9c-0.9,0 -1.6,-0.3 -2.1,-0.9s-0.8,-1.4 -0.8,-2.3l0,-0.3c0,-0.9 0.3,-1.7 0.8,-2.3s1.2,-0.9 1.9,-0.9c0.9,0 1.5,0.3 1.9,0.8s0.7,1.2 0.7,2.1l0,0.7l-4.1,0l0,0c0,0.6 0.2,1.1 0.5,1.5s0.7,0.6 1.2,0.6c0.4,0 0.7,-0.1 1,-0.2s0.5,-0.3 0.8,-0.5l0.5,0.8c-0.2,0.2 -0.5,0.4 -0.9,0.6s-0.9,0.3 -1.4,0.3zm-0.2,-5.6c-0.4,0 -0.7,0.2 -1,0.5s-0.4,0.7 -0.5,1.2l0,0l2.9,0l0,-0.2c0,-0.5 -0.1,-0.8 -0.4,-1.1s-0.5,-0.4 -1,-0.4z" class="st42"/>
|
class="st3" />
|
||||||
<path id="svg_92" d="m452.5,226.5l-0.9,0l-0.2,-0.8c-0.1,-0.1 -0.3,-0.2 -0.5,-0.3s-0.5,-0.1 -0.7,-0.1c-0.4,0 -0.7,0.1 -0.9,0.3s-0.3,0.4 -0.3,0.7c0,0.2 0.1,0.4 0.3,0.6s0.5,0.3 1.1,0.4c0.8,0.2 1.4,0.4 1.8,0.7s0.6,0.7 0.6,1.2c0,0.6 -0.2,1 -0.7,1.4s-1,0.5 -1.8,0.5c-0.5,0 -0.9,-0.1 -1.3,-0.2s-0.7,-0.3 -1,-0.5l0,-1.4l0.9,0l0.2,0.8c0.1,0.1 0.3,0.2 0.5,0.3s0.5,0.1 0.7,0.1c0.4,0 0.7,-0.1 1,-0.2s0.3,-0.4 0.3,-0.7c0,-0.3 -0.1,-0.5 -0.3,-0.6s-0.6,-0.3 -1.1,-0.4c-0.8,-0.2 -1.3,-0.4 -1.7,-0.7s-0.6,-0.7 -0.6,-1.2c0,-0.5 0.2,-1 0.7,-1.3s1,-0.5 1.7,-0.5c0.5,0 0.9,0.1 1.3,0.2s0.7,0.3 1,0.5l-0.1,1.2z" class="st42"/>
|
<polygon
|
||||||
</g>
|
id="svg_9"
|
||||||
<g id="svg_93">
|
points="76.8,-28.1 32.1,-53.8 38.8,-66.1 76.7,-44.4 "
|
||||||
<path id="svg_94" d="m374.4,111.8l0,0.7l-1,0.2l0,7.6l-1.2,0l-4.1,-6.6l0,0l0,5.7l1,0.2l0,0.7l-3.1,0l0,-0.7l1,-0.2l0,-6.7l-1,-0.2l0,-0.7l1,0l1.2,0l4.1,6.6l0,0l0,-5.7l-1,-0.2l0,-0.7l2.1,0l1,0z" class="st42"/>
|
class="st4" />
|
||||||
<path id="svg_95" d="m375.3,117.1c0,-0.9 0.3,-1.7 0.8,-2.3s1.2,-0.9 2.1,-0.9c0.9,0 1.6,0.3 2.1,0.9s0.8,1.4 0.8,2.3l0,0.1c0,0.9 -0.3,1.7 -0.8,2.3s-1.2,0.9 -2.1,0.9c-0.9,0 -1.6,-0.3 -2.1,-0.9s-0.8,-1.4 -0.8,-2.3l0,-0.1zm1.2,0.1c0,0.7 0.1,1.2 0.4,1.7s0.7,0.7 1.3,0.7c0.5,0 1,-0.2 1.2,-0.7s0.4,-1 0.4,-1.7l0,-0.1c0,-0.7 -0.1,-1.2 -0.4,-1.7s-0.7,-0.7 -1.3,-0.7s-1,0.2 -1.3,0.7s-0.4,1 -0.4,1.7l0,0.1l0.1,0z" class="st42"/>
|
|
||||||
<path id="svg_96" d="m386.3,119.5c-0.2,0.3 -0.5,0.5 -0.8,0.7s-0.6,0.2 -1,0.2c-0.8,0 -1.4,-0.3 -1.8,-0.8s-0.7,-1.3 -0.7,-2.2l0,-0.1c0,-1 0.2,-1.8 0.7,-2.5s1,-0.9 1.8,-0.9c0.4,0 0.7,0.1 1,0.2s0.5,0.3 0.7,0.6l0,-2.6l-1,-0.2l0,-0.7l1,0l1.2,0l0,8.2l1,0.2l0,0.7l-2,0l-0.1,-0.8zm-3.1,-2.1c0,0.6 0.1,1.1 0.4,1.5s0.7,0.6 1.2,0.6c0.3,0 0.6,-0.1 0.9,-0.2s0.4,-0.4 0.6,-0.7l0,-2.9c-0.1,-0.3 -0.3,-0.5 -0.6,-0.6s-0.5,-0.2 -0.9,-0.2c-0.6,0 -1,0.2 -1.2,0.7s-0.4,1.1 -0.4,1.8l0,0z" class="st42"/>
|
|
||||||
<path id="svg_97" d="m392.2,120.4c-0.9,0 -1.6,-0.3 -2.1,-0.9s-0.8,-1.4 -0.8,-2.3l0,-0.2c0,-0.9 0.3,-1.7 0.8,-2.3s1.2,-0.9 1.9,-0.9c0.9,0 1.5,0.3 1.9,0.8s0.7,1.2 0.7,2.1l0,0.7l-4.1,0l0,0c0,0.6 0.2,1.1 0.5,1.5s0.7,0.6 1.2,0.6c0.4,0 0.7,-0.1 1,-0.2s0.5,-0.3 0.8,-0.5l0.5,0.8c-0.2,0.2 -0.5,0.4 -0.9,0.6s-0.9,0.2 -1.4,0.2zm-0.2,-5.6c-0.4,0 -0.7,0.2 -1,0.5s-0.4,0.7 -0.5,1.2l0,0l2.9,0l0,-0.2c0,-0.5 -0.1,-0.8 -0.4,-1.1s-0.5,-0.4 -1,-0.4z" class="st42"/>
|
|
||||||
</g>
|
|
||||||
<g id="svg_98">
|
|
||||||
<g id="svg_99">
|
|
||||||
<path id="svg_100" d="m128.4,356.6l1,-0.2l0,-6.9l-1,-0.2l0,-1.2l4,0l0,1.2l-1,0.2l0,2.6l0.8,0l1.9,-2.7l-0.6,-0.1l0,-1.2l3.8,0l0,1.2l-1,0.2l-2.4,3.2l2.7,3.8l1,0.2l0,1.2l-3.8,0l0,-1.2l0.6,-0.1l-1.9,-2.8l-1.1,0l0,2.7l1,0.2l0,1.2l-4,0l0,-1.3z" class="st42"/>
|
|
||||||
<path id="svg_101" d="m143,356.9c-0.2,0.3 -0.5,0.6 -0.9,0.8c-0.3,0.2 -0.7,0.3 -1.2,0.3c-0.8,0 -1.4,-0.2 -1.8,-0.7c-0.4,-0.5 -0.6,-1.2 -0.6,-2.3l0,-3l-0.8,-0.2l0,-1.2l0.8,0l1.9,0l0,4.3c0,0.5 0.1,0.9 0.3,1.1c0.2,0.2 0.4,0.3 0.8,0.3c0.3,0 0.6,0 0.8,-0.1s0.4,-0.2 0.5,-0.4l0,-3.8l-0.8,-0.2l0,-1.2l0.8,0l1.9,0l0,5.8l0.9,0.2l0,1.2l-2.6,0l0,-0.9z" class="st42"/>
|
|
||||||
<path id="svg_102" d="m153.4,354.4c0,1.1 -0.2,1.9 -0.7,2.6c-0.5,0.6 -1.2,1 -2.1,1c-0.4,0 -0.8,-0.1 -1.1,-0.3c-0.3,-0.2 -0.6,-0.4 -0.8,-0.8l-0.1,0.9l-1.6,0l0,-9l-1,-0.2l0,-1.2l3,0l0,3.9c0.2,-0.3 0.5,-0.5 0.7,-0.7c0.3,-0.2 0.6,-0.2 1,-0.2c0.9,0 1.6,0.3 2.1,1c0.5,0.7 0.7,1.6 0.7,2.8l0,0.2l-0.1,0zm-1.9,-0.1c0,-0.7 -0.1,-1.3 -0.3,-1.7c-0.2,-0.4 -0.6,-0.6 -1.1,-0.6c-0.3,0 -0.6,0.1 -0.8,0.2c-0.2,0.1 -0.4,0.3 -0.5,0.5l0,3c0.1,0.2 0.3,0.4 0.5,0.5c0.2,0.1 0.5,0.2 0.8,0.2c0.5,0 0.8,-0.2 1,-0.5s0.3,-0.9 0.3,-1.5l0,-0.1l0.1,0z" class="st42"/>
|
|
||||||
<path id="svg_103" d="m157.8,358c-1,0 -1.9,-0.3 -2.5,-1c-0.6,-0.7 -0.9,-1.5 -0.9,-2.5l0,-0.3c0,-1.1 0.3,-1.9 0.9,-2.6c0.6,-0.7 1.4,-1 2.4,-1c1,0 1.7,0.3 2.3,0.9c0.5,0.6 0.8,1.4 0.8,2.4l0,1.1l-4.3,0l0,0c0,0.5 0.2,0.9 0.5,1.2c0.3,0.3 0.7,0.5 1.1,0.5c0.4,0 0.8,0 1.1,-0.1c0.3,-0.1 0.6,-0.2 0.9,-0.4l0.5,1.2c-0.3,0.2 -0.7,0.4 -1.2,0.6c-0.5,-0.1 -1,0 -1.6,0zm-0.2,-6c-0.4,0 -0.6,0.1 -0.8,0.4c-0.2,0.3 -0.3,0.6 -0.4,1.1l0,0l2.4,0l0,-0.2c0,-0.4 -0.1,-0.7 -0.3,-1s-0.5,-0.3 -0.9,-0.3z" class="st42"/>
|
|
||||||
<path id="svg_104" d="m161.7,356.6l0.9,-0.2l0,-4.4l-1,-0.2l0,-1.2l2.8,0l0.1,1c0.2,-0.4 0.4,-0.7 0.7,-0.9c0.3,-0.2 0.6,-0.3 0.9,-0.3c0.1,0 0.2,0 0.3,0c0.1,0 0.2,0 0.3,0.1l-0.2,1.8l-0.8,0c-0.3,0 -0.5,0.1 -0.7,0.2c-0.2,0.1 -0.3,0.3 -0.4,0.5l0,3.5l0.9,0.2l0,1.2l-3.8,0l0,-1.3z" class="st42"/>
|
|
||||||
<path id="svg_105" d="m167.2,356.6l0.9,-0.2l0,-4.4l-1,-0.2l0,-1.2l2.8,0l0.1,1c0.2,-0.4 0.5,-0.7 0.9,-0.9s0.7,-0.3 1.2,-0.3c0.7,0 1.3,0.2 1.7,0.7s0.6,1.2 0.6,2.1l0,3.1l0.9,0.2l0,1.2l-3.7,0l0,-1.2l0.8,-0.2l0,-3.1c0,-0.5 -0.1,-0.8 -0.3,-1c-0.2,-0.2 -0.5,-0.3 -0.9,-0.3c-0.3,0 -0.5,0.1 -0.7,0.2c-0.2,0.1 -0.4,0.3 -0.5,0.4l0,3.9l0.8,0.2l0,1.2l-3.7,0l0,-1.2l0.1,0z" class="st42"/>
|
|
||||||
<path id="svg_106" d="m179.3,358c-1,0 -1.9,-0.3 -2.5,-1c-0.6,-0.7 -0.9,-1.5 -0.9,-2.5l0,-0.3c0,-1.1 0.3,-1.9 0.9,-2.6c0.6,-0.7 1.4,-1 2.4,-1c1,0 1.7,0.3 2.3,0.9c0.5,0.6 0.8,1.4 0.8,2.4l0,1.1l-4.3,0l0,0c0,0.5 0.2,0.9 0.5,1.2c0.3,0.3 0.7,0.5 1.1,0.5c0.4,0 0.8,0 1.1,-0.1c0.3,-0.1 0.6,-0.2 0.9,-0.4l0.5,1.2c-0.3,0.2 -0.7,0.4 -1.2,0.6c-0.5,-0.1 -1,0 -1.6,0zm-0.2,-6c-0.4,0 -0.6,0.1 -0.8,0.4c-0.2,0.3 -0.3,0.6 -0.4,1.1l0,0l2.4,0l0,-0.2c0,-0.4 -0.1,-0.7 -0.3,-1s-0.5,-0.3 -0.9,-0.3z" class="st42"/>
|
|
||||||
<path id="svg_107" d="m186,348.9l0,1.8l1.3,0l0,1.4l-1.3,0l0,3.7c0,0.3 0.1,0.5 0.2,0.6c0.1,0.1 0.3,0.2 0.5,0.2c0.1,0 0.2,0 0.3,0c0.1,0 0.2,0 0.3,-0.1l0.2,1.4c-0.2,0.1 -0.4,0.1 -0.6,0.1c-0.2,0 -0.4,0 -0.7,0c-0.7,0 -1.2,-0.2 -1.5,-0.6c-0.4,-0.4 -0.5,-0.9 -0.5,-1.7l0,-3.7l-1.2,0l0,-1.4l1.1,0l0,-1.8l1.9,0l0,0.1z" class="st42"/>
|
|
||||||
<path id="svg_108" d="m191.6,358c-1,0 -1.9,-0.3 -2.5,-1c-0.6,-0.7 -0.9,-1.5 -0.9,-2.5l0,-0.3c0,-1.1 0.3,-1.9 0.9,-2.6c0.6,-0.7 1.4,-1 2.4,-1c1,0 1.7,0.3 2.3,0.9c0.5,0.6 0.8,1.4 0.8,2.4l0,1.1l-4.3,0l0,0c0,0.5 0.2,0.9 0.5,1.2c0.3,0.3 0.7,0.5 1.1,0.5c0.4,0 0.8,0 1.1,-0.1c0.3,-0.1 0.6,-0.2 0.9,-0.4l0.5,1.2c-0.3,0.2 -0.7,0.4 -1.2,0.6c-0.5,-0.1 -1,0 -1.6,0zm-0.1,-6c-0.4,0 -0.6,0.1 -0.8,0.4c-0.2,0.3 -0.3,0.6 -0.4,1.1l0,0l2.4,0l0,-0.2c0,-0.4 -0.1,-0.7 -0.3,-1s-0.5,-0.3 -0.9,-0.3z" class="st42"/>
|
|
||||||
<path stroke="null" style="vector-effect: non-scaling-stroke;" id="svg_110" d="m201,353.1l-1.3,0l-0.2,-0.9c-0.1,-0.1 -0.3,-0.2 -0.5,-0.3c-0.2,-0.1 -0.4,-0.1 -0.7,-0.1c-0.3,0 -0.6,0.1 -0.8,0.2s-0.3,0.3 -0.3,0.6c0,0.2 0.1,0.4 0.3,0.5c0.2,0.1 0.6,0.3 1.1,0.4c0.9,0.2 1.5,0.4 2,0.8c0.4,0.3 0.6,0.8 0.6,1.4c0,0.6 -0.3,1.2 -0.8,1.6c-0.6,0.4 -1.3,0.6 -2.2,0.6c-0.6,0 -1.1,-0.1 -1.5,-0.2c-0.5,-0.2 -0.9,-0.4 -1.2,-0.7l0,-1.6l1.4,0l0.3,0.9c0.1,0.1 0.3,0.2 0.5,0.2s0.4,0.1 0.6,0.1c0.4,0 0.7,-0.1 0.9,-0.2c0.2,-0.1 0.3,-0.3 0.3,-0.6c0,-0.2 -0.1,-0.4 -0.3,-0.6c-0.2,-0.2 -0.6,-0.3 -1.1,-0.4c-0.8,-0.2 -1.5,-0.4 -1.9,-0.8c-0.4,-0.3 -0.6,-0.8 -0.6,-1.4c0,-0.6 0.2,-1.1 0.7,-1.6s1.2,-0.7 2.1,-0.7c0.6,0 1.1,0.1 1.6,0.2c0.5,0.2 0.9,0.3 1.2,0.6l-0.2,2z" class="st42"/>
|
|
||||||
<path id="svg_111" d="m208.9,356.5c0.3,0 0.6,-0.1 0.8,-0.3c0.2,-0.2 0.3,-0.5 0.3,-0.8l1.8,0l0,0c0,0.7 -0.3,1.3 -0.8,1.8c-0.6,0.5 -1.3,0.7 -2.1,0.7c-1.1,0 -1.9,-0.3 -2.5,-1s-0.9,-1.5 -0.9,-2.6l0,-0.2c0,-1.1 0.3,-1.9 0.9,-2.6s1.4,-1 2.5,-1c0.6,0 1.1,0.1 1.6,0.3c0.5,0.2 0.8,0.4 1.1,0.7l0,1.9l-1.6,0l-0.3,-1.1c-0.1,-0.1 -0.2,-0.2 -0.4,-0.2c-0.1,-0.1 -0.3,-0.1 -0.5,-0.1c-0.5,0 -0.9,0.2 -1.2,0.6s-0.3,0.9 -0.3,1.5l0,0.2c0,0.6 0.1,1.2 0.3,1.6c0.4,0.4 0.8,0.6 1.3,0.6z" class="st42"/>
|
|
||||||
<path fill="black" id="svg_112" d="m212.5,348.6l0,-1.2l3,0l0,9l0.9,0.2l0,1.2l-3.8,0l0,-1.2l0.9,-0.2l0,-7.6l-1,-0.2z" class="st42"/>
|
|
||||||
<path id="svg_113" d="m222,356.9c-0.2,0.3 -0.5,0.6 -0.9,0.8c-0.3,0.2 -0.7,0.3 -1.2,0.3c-0.8,0 -1.4,-0.2 -1.8,-0.7c-0.4,-0.5 -0.6,-1.2 -0.6,-2.3l0,-3l-0.8,-0.2l0,-1.2l0.8,0l1.9,0l0,4.3c0,0.5 0.1,0.9 0.3,1.1c0.2,0.2 0.4,0.3 0.8,0.3c0.3,0 0.6,0 0.8,-0.1s0.4,-0.2 0.5,-0.4l0,-3.8l-0.8,-0.2l0,-1.2l0.8,0l1.9,0l0,5.8l0.9,0.2l0,1.2l-2.6,0l0,-0.9z" class="st42"/>
|
|
||||||
<path id="svg_114" d="m231.4,353.1l-1.3,0l-0.2,-0.9c-0.1,-0.1 -0.3,-0.2 -0.5,-0.3c-0.2,-0.1 -0.4,-0.1 -0.7,-0.1c-0.3,0 -0.6,0.1 -0.8,0.2s-0.3,0.3 -0.3,0.6c0,0.2 0.1,0.4 0.3,0.5c0.2,0.1 0.6,0.3 1.1,0.4c0.9,0.2 1.5,0.4 2,0.8c0.4,0.3 0.6,0.8 0.6,1.4c0,0.6 -0.3,1.2 -0.8,1.6c-0.6,0.4 -1.3,0.6 -2.2,0.6c-0.6,0 -1.1,-0.1 -1.5,-0.2c-0.5,-0.2 -0.9,-0.4 -1.2,-0.7l0,-1.6l1.4,0l0.3,0.9c0.1,0.1 0.3,0.2 0.5,0.2s0.4,0.1 0.6,0.1c0.4,0 0.7,-0.1 0.9,-0.2c0.2,-0.1 0.3,-0.3 0.3,-0.6c0,-0.2 -0.1,-0.4 -0.3,-0.6c-0.2,-0.2 -0.6,-0.3 -1.1,-0.4c-0.8,-0.2 -1.5,-0.4 -1.9,-0.8c-0.4,-0.3 -0.6,-0.8 -0.6,-1.4c0,-0.6 0.2,-1.1 0.7,-1.6s1.2,-0.7 2.1,-0.7c0.6,0 1.1,0.1 1.6,0.2c0.5,0.2 0.9,0.3 1.2,0.6l-0.2,2z" class="st42"/>
|
|
||||||
<path id="svg_115" d="m235.4,348.9l0,1.8l1.3,0l0,1.4l-1.3,0l0,3.7c0,0.3 0.1,0.5 0.2,0.6c0.1,0.1 0.3,0.2 0.5,0.2c0.1,0 0.2,0 0.3,0c0.1,0 0.2,0 0.3,-0.1l0.2,1.4c-0.2,0.1 -0.4,0.1 -0.6,0.1c-0.2,0 -0.4,0 -0.7,0c-0.7,0 -1.2,-0.2 -1.5,-0.6c-0.4,-0.4 -0.5,-0.9 -0.5,-1.7l0,-3.7l-1.1,0l0,-1.4l1.1,0l0,-1.8l1.8,0l0,0.1z" class="st42"/>
|
|
||||||
<path id="svg_116" d="m241,358c-1,0 -1.9,-0.3 -2.5,-1c-0.6,-0.7 -0.9,-1.5 -0.9,-2.5l0,-0.3c0,-1.1 0.3,-1.9 0.9,-2.6c0.6,-0.7 1.4,-1 2.4,-1c1,0 1.7,0.3 2.3,0.9c0.5,0.6 0.8,1.4 0.8,2.4l0,1.1l-4.3,0l0,0c0,0.5 0.2,0.9 0.5,1.2c0.3,0.3 0.7,0.5 1.1,0.5c0.4,0 0.8,0 1.1,-0.1c0.3,-0.1 0.6,-0.2 0.9,-0.4l0.5,1.2c-0.3,0.2 -0.7,0.4 -1.2,0.6c-0.5,-0.1 -1,0 -1.6,0zm-0.2,-6c-0.4,0 -0.6,0.1 -0.8,0.4c-0.2,0.3 -0.3,0.6 -0.4,1.1l0,0l2.4,0l0,-0.2c0,-0.4 -0.1,-0.7 -0.3,-1s-0.5,-0.3 -0.9,-0.3z" class="st42"/>
|
|
||||||
<path id="svg_117" d="m245,356.6l0.9,-0.2l0,-4.4l-1,-0.2l0,-1.2l2.8,0l0.1,1c0.2,-0.4 0.4,-0.7 0.7,-0.9c0.3,-0.2 0.6,-0.3 0.9,-0.3c0.1,0 0.2,0 0.3,0c0.1,0 0.2,0 0.3,0.1l-0.2,1.8l-0.8,0c-0.3,0 -0.5,0.1 -0.7,0.2c-0.2,0.1 -0.3,0.3 -0.4,0.5l0,3.5l0.9,0.2l0,1.2l-3.8,0l0,-1.3z" class="st42"/>
|
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</symbol>
|
||||||
<line id="svg_118" y2="191.7" x2="201.6" y1="191.7" x1="360.6" class="st62"/>
|
<symbol
|
||||||
<line id="svg_119" y2="228.8" x2="160" y1="228.8" x1="360.6" class="st62"/>
|
viewBox="-87.6 -101 175.2 202"
|
||||||
<line id="svg_120" y2="118.3" x2="243.4" y1="118.3" x1="360.6" class="st62"/>
|
id="node_x5F_new">
|
||||||
|
<polygon
|
||||||
|
id="svg_10"
|
||||||
|
points="0,-100 -86.6,-50 -86.6,50 0,100 86.6,50 86.6,-50 "
|
||||||
|
class="st5" />
|
||||||
|
<polygon
|
||||||
|
id="svg_11"
|
||||||
|
points="-86.6,-20.2 -86.6,-50 0,-100 25.8,-85.1 "
|
||||||
|
class="st6" />
|
||||||
|
<polygon
|
||||||
|
id="svg_12"
|
||||||
|
points="-40.8,-70.7 -32.9,-57 15.7,-85.1 0,-94.3 "
|
||||||
|
class="st7" />
|
||||||
|
<text
|
||||||
|
id="svg_13"
|
||||||
|
font-family="'RobotoSlab-Regular'"
|
||||||
|
font-size="11.3632px"
|
||||||
|
class="st8"
|
||||||
|
transform="matrix(0.866,-0.5,-0.5,-0.866,-33.9256,-70.7388) ">Docker</text>
|
||||||
|
<text
|
||||||
|
id="svg_14"
|
||||||
|
font-family="'RobotoSlab-Regular'"
|
||||||
|
font-size="11.3632px"
|
||||||
|
class="st8"
|
||||||
|
transform="matrix(0.866,-0.5,-0.5,-0.866,-76.0668,-46.4087) ">Kubelt</text>
|
||||||
|
</symbol>
|
||||||
|
<g
|
||||||
|
id="g159">
|
||||||
|
<title
|
||||||
|
id="title32">Layer 1</title>
|
||||||
|
<g
|
||||||
|
id="CLUSTER"
|
||||||
|
transform="translate(-1.9963203,-15.750631)">
|
||||||
|
<g
|
||||||
|
class="st9"
|
||||||
|
id="XMLID_296_">
|
||||||
|
<g
|
||||||
|
id="svg_15">
|
||||||
|
<linearGradient
|
||||||
|
y2="185.29311"
|
||||||
|
x2="343.09021"
|
||||||
|
y1="185.29311"
|
||||||
|
x1="28.6348"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="SVGID_1_">
|
||||||
|
<stop
|
||||||
|
stop-color="#326DE6"
|
||||||
|
offset="0"
|
||||||
|
id="stop34" />
|
||||||
|
<stop
|
||||||
|
stop-color="#10FFC6"
|
||||||
|
offset="1"
|
||||||
|
id="stop36" />
|
||||||
|
</linearGradient>
|
||||||
|
<polygon
|
||||||
|
id="svg_16"
|
||||||
|
points="343.1,229.2 255.8,338.6 115.9,338.6 28.6,229.2 59.8,92.7 185.9,32 311.9,92.7 "
|
||||||
|
class="st10"
|
||||||
|
style="fill:url(#SVGID_1_)" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="master">
|
||||||
|
<use
|
||||||
|
id="svg_17"
|
||||||
|
transform="matrix(0.4,0,0,-0.4,185.8606,187.2514)"
|
||||||
|
y="-66.900002"
|
||||||
|
x="-68.599998"
|
||||||
|
height="133.89999"
|
||||||
|
width="137.2"
|
||||||
|
xlink:href="#master_x5F_level1_1_" />
|
||||||
|
<g
|
||||||
|
id="master_x5F_level1" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="description">
|
||||||
|
<g
|
||||||
|
id="svg_98" />
|
||||||
|
<line
|
||||||
|
id="svg_118"
|
||||||
|
y2="194.52843"
|
||||||
|
x2="213.52141"
|
||||||
|
y1="194.52843"
|
||||||
|
x1="351.89236"
|
||||||
|
class="st62" />
|
||||||
|
<line
|
||||||
|
id="svg_119"
|
||||||
|
y2="228.8"
|
||||||
|
x2="160"
|
||||||
|
y1="228.8"
|
||||||
|
x1="353.23419"
|
||||||
|
class="st62" />
|
||||||
|
<line
|
||||||
|
id="svg_120"
|
||||||
|
y2="118.3"
|
||||||
|
x2="243.39999"
|
||||||
|
y1="118.3"
|
||||||
|
x1="360.60001"
|
||||||
|
class="st62" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:Courier;-inkscape-font-specification:'Courier, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
|
||||||
|
x="106.34034"
|
||||||
|
y="341.76721"
|
||||||
|
id="text183"><tspan
|
||||||
|
id="tspan181"
|
||||||
|
x="106.34034"
|
||||||
|
y="341.76721">Kubernetes Cluster</tspan></text>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="Node">
|
||||||
|
<g
|
||||||
|
id="Node_x5F_level3_x5F_1">
|
||||||
|
<g
|
||||||
|
id="Isolation_Mode" />
|
||||||
|
</g>
|
||||||
|
<polygon
|
||||||
|
id="svg_18"
|
||||||
|
points="111.4,139.9 111.4,98.7 147.1,78.2 182.7,98.7 182.7,139.9 147.1,160.4 "
|
||||||
|
class="st16" />
|
||||||
|
<polygon
|
||||||
|
id="svg_19"
|
||||||
|
points="129.3,150.2 147.1,160.4 182.7,139.9 182.7,119.3 "
|
||||||
|
class="st13" />
|
||||||
|
<polygon
|
||||||
|
id="svg_20"
|
||||||
|
points="163.5,147.7 157.4,137.2 179.9,124.2 179.9,138.3 "
|
||||||
|
class="st7" />
|
||||||
|
<g
|
||||||
|
id="svg_21">
|
||||||
|
<path
|
||||||
|
id="svg_22"
|
||||||
|
d="m 162.5,139.3 c 0.4,-0.3 0.9,-0.3 1.3,-0.2 0.4,0.1 0.8,0.4 1,0.8 l 0.3,0.5 c 0.3,0.4 0.3,0.9 0.2,1.3 -0.1,0.4 -0.4,0.8 -0.8,1 l -1.4,0.8 -0.2,-0.3 0.3,-0.3 -1.6,-2.7 -0.4,0.2 -0.2,-0.3 0.4,-0.2 z m -0.4,0.7 1.6,2.7 0.6,-0.3 c 0.3,-0.2 0.5,-0.4 0.6,-0.8 0.1,-0.3 0,-0.6 -0.2,-1 l -0.3,-0.5 c -0.2,-0.3 -0.4,-0.5 -0.7,-0.6 -0.3,-0.1 -0.6,-0.1 -0.9,0.1 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_23"
|
||||||
|
d="m 165.7,140.3 c -0.2,-0.4 -0.3,-0.8 -0.2,-1.1 0.1,-0.4 0.3,-0.6 0.6,-0.9 0.4,-0.2 0.7,-0.2 1.1,-0.1 0.3,0.1 0.6,0.4 0.9,0.8 v 0.1 c 0.2,0.4 0.3,0.8 0.2,1.1 -0.1,0.4 -0.3,0.6 -0.6,0.8 -0.4,0.2 -0.7,0.2 -1.1,0.1 -0.4,-0.1 -0.7,-0.3 -0.9,-0.8 z m 0.5,-0.2 c 0.2,0.3 0.3,0.5 0.6,0.6 0.2,0.1 0.4,0.1 0.7,0 0.2,-0.1 0.3,-0.3 0.4,-0.6 0,-0.2 -0.1,-0.5 -0.2,-0.8 v -0.1 c -0.2,-0.3 -0.3,-0.5 -0.6,-0.6 -0.2,-0.1 -0.4,-0.1 -0.7,0 -0.2,0.1 -0.3,0.3 -0.4,0.6 -0.1,0.3 0,0.6 0.2,0.9 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_24"
|
||||||
|
d="m 170.1,139.1 c 0.2,-0.1 0.3,-0.2 0.3,-0.4 0.1,-0.2 0.1,-0.3 0,-0.5 l 0.4,-0.2 v 0 c 0.1,0.2 0.2,0.5 0,0.8 -0.1,0.3 -0.3,0.5 -0.6,0.7 -0.4,0.2 -0.7,0.3 -1.1,0.1 -0.3,-0.1 -0.6,-0.4 -0.8,-0.7 l -0.1,-0.1 c -0.2,-0.4 -0.3,-0.7 -0.2,-1.1 0.1,-0.4 0.3,-0.6 0.6,-0.9 0.2,-0.1 0.4,-0.2 0.6,-0.2 0.2,0 0.4,0 0.6,0 l 0.3,0.6 -0.4,0.2 -0.3,-0.3 c -0.1,0 -0.2,0 -0.3,0 -0.1,0 -0.2,0.1 -0.3,0.1 -0.2,0.1 -0.4,0.3 -0.4,0.6 0,0.2 0.1,0.5 0.2,0.7 l 0.1,0.1 c 0.2,0.3 0.3,0.5 0.5,0.6 0.5,0 0.7,0 0.9,-0.1 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_25"
|
||||||
|
d="m 169.8,135.2 -0.2,-0.3 0.9,-0.5 1.2,2.1 0.3,-0.2 0.2,-1 -0.3,0.1 -0.2,-0.3 1.1,-0.6 0.2,0.3 -0.3,0.2 -0.2,1.2 1.4,0.6 0.3,-0.1 0.2,0.3 -1.1,0.6 -0.2,-0.3 0.2,-0.2 -1.2,-0.5 -0.3,0.2 0.5,0.8 0.4,-0.2 0.2,0.3 -1.2,0.7 -0.2,-0.3 0.3,-0.3 -1.7,-3 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_26"
|
||||||
|
d="m 175.9,136.3 c -0.4,0.2 -0.7,0.3 -1.1,0.1 -0.4,-0.2 -0.6,-0.4 -0.9,-0.7 l -0.1,-0.1 c -0.2,-0.4 -0.3,-0.7 -0.2,-1.1 0.1,-0.4 0.3,-0.6 0.6,-0.8 0.3,-0.2 0.7,-0.2 1,-0.1 0.3,0.1 0.5,0.3 0.7,0.7 l 0.2,0.3 -1.7,1 v 0 c 0.1,0.2 0.3,0.4 0.5,0.5 0.2,0.1 0.4,0.1 0.6,-0.1 0.2,-0.1 0.3,-0.2 0.4,-0.3 0.1,-0.1 0.2,-0.2 0.2,-0.4 l 0.4,0.2 c 0,0.1 -0.1,0.3 -0.2,0.4 0,0.1 -0.2,0.2 -0.4,0.4 z m -1.4,-2.3 c -0.2,0.1 -0.3,0.2 -0.3,0.4 0,0.2 0,0.4 0.1,0.6 v 0 l 1.2,-0.7 v -0.1 c -0.1,-0.2 -0.2,-0.3 -0.4,-0.4 -0.2,0.1 -0.4,0.1 -0.6,0.2 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_27"
|
||||||
|
d="m 176,133.1 -0.2,-0.3 0.8,-0.5 0.3,0.3 c 0,-0.2 0,-0.3 0.1,-0.5 0.1,-0.1 0.2,-0.2 0.3,-0.3 0,0 0.1,0 0.1,-0.1 0,0 0.1,0 0.1,0 l 0.2,0.5 -0.3,0.1 c -0.1,0.1 -0.2,0.2 -0.3,0.3 -0.1,0.1 -0.1,0.2 -0.1,0.4 l 0.8,1.5 0.4,-0.2 0.2,0.3 -1.2,0.7 -0.2,-0.3 0.3,-0.3 -1.1,-1.8 z"
|
||||||
|
class="st8" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="svg_28">
|
||||||
|
<path
|
||||||
|
id="svg_29"
|
||||||
|
d="m 141.1,151.8 -0.2,-0.3 0.9,-0.5 1.2,2.1 0.3,-0.2 0.2,-1 -0.3,0.1 -0.2,-0.3 1.1,-0.6 0.2,0.3 -0.3,0.2 -0.2,1.2 1.4,0.6 0.3,-0.1 0.2,0.3 -1.1,0.6 -0.2,-0.3 0.2,-0.2 -1.2,-0.5 -0.3,0.2 0.5,0.8 0.4,-0.2 0.2,0.3 -1.2,0.7 -0.2,-0.3 0.3,-0.3 -1.7,-3 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_30"
|
||||||
|
d="m 147.6,152 c 0,0.2 0,0.3 -0.1,0.5 -0.1,0.1 -0.2,0.3 -0.4,0.4 -0.3,0.2 -0.5,0.2 -0.8,0.1 -0.3,-0.1 -0.5,-0.3 -0.7,-0.7 l -0.7,-1.1 -0.3,0.1 -0.2,-0.3 0.3,-0.2 0.5,-0.3 0.9,1.5 c 0.2,0.3 0.3,0.4 0.4,0.5 0.1,0.1 0.3,0 0.5,-0.1 0.2,-0.1 0.3,-0.2 0.4,-0.3 0.1,-0.1 0.1,-0.3 0.1,-0.4 l -0.9,-1.5 -0.4,0.1 -0.2,-0.3 0.3,-0.2 0.5,-0.3 1.3,2.2 0.3,-0.1 0.2,0.3 -0.7,0.4 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_31"
|
||||||
|
d="m 150.6,149.2 c 0.2,0.4 0.3,0.7 0.2,1 0,0.3 -0.2,0.6 -0.5,0.8 -0.2,0.1 -0.3,0.1 -0.5,0.2 -0.2,0 -0.3,0 -0.5,-0.1 l 0.1,0.4 -0.4,0.2 -1.9,-3.3 -0.4,0.2 -0.2,-0.3 0.9,-0.5 0.8,1.4 c 0,-0.2 0.1,-0.3 0.1,-0.4 0.1,-0.1 0.2,-0.2 0.4,-0.3 0.3,-0.2 0.6,-0.2 1,0 0.4,0.2 0.7,0.2 0.9,0.7 z m -0.5,0.2 c -0.2,-0.3 -0.4,-0.5 -0.6,-0.6 -0.2,-0.1 -0.4,-0.1 -0.7,0 -0.1,0.1 -0.2,0.2 -0.3,0.3 -0.1,0.1 -0.1,0.3 -0.1,0.4 l 0.7,1.1 c 0.1,0.1 0.3,0.1 0.4,0.1 0.1,0 0.3,0 0.4,-0.1 0.2,-0.1 0.3,-0.3 0.4,-0.5 0.1,-0.2 0,-0.4 -0.2,-0.7 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_32"
|
||||||
|
d="m 153,149.5 c -0.4,0.2 -0.7,0.3 -1.1,0.1 -0.4,-0.2 -0.6,-0.4 -0.9,-0.7 l -0.1,-0.1 c -0.2,-0.4 -0.3,-0.7 -0.2,-1.1 0.1,-0.4 0.3,-0.6 0.6,-0.8 0.3,-0.2 0.7,-0.2 1,-0.1 0.3,0.1 0.5,0.3 0.7,0.7 l 0.2,0.3 -1.7,1 v 0 c 0.1,0.2 0.3,0.4 0.5,0.5 0.2,0.1 0.4,0.1 0.6,-0.1 0.2,-0.1 0.3,-0.2 0.4,-0.3 0.1,-0.1 0.2,-0.2 0.2,-0.4 l 0.4,0.2 c 0,0.1 -0.1,0.3 -0.2,0.4 -0.1,0.1 -0.2,0.2 -0.4,0.4 z m -1.4,-2.3 c -0.2,0.1 -0.3,0.2 -0.3,0.4 0,0.2 0,0.4 0.1,0.6 v 0 l 1.2,-0.7 v -0.1 c -0.1,-0.2 -0.2,-0.3 -0.4,-0.4 -0.2,-0.1 -0.4,0.1 -0.6,0.2 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_33"
|
||||||
|
d="m 152.4,145.2 -0.2,-0.3 0.9,-0.5 1.9,3.3 0.4,-0.2 0.2,0.3 -1.2,0.7 -0.2,-0.3 0.3,-0.3 -1.7,-3 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_34"
|
||||||
|
d="m 157.1,147.1 c -0.4,0.2 -0.7,0.3 -1.1,0.1 -0.4,-0.2 -0.6,-0.4 -0.9,-0.7 l -0.1,-0.1 c -0.2,-0.4 -0.3,-0.7 -0.2,-1.1 0.1,-0.4 0.3,-0.6 0.6,-0.8 0.3,-0.2 0.7,-0.2 1,-0.1 0.3,0.1 0.5,0.3 0.7,0.7 l 0.2,0.3 -1.7,1 v 0 c 0.1,0.2 0.3,0.4 0.5,0.5 0.2,0.1 0.4,0.1 0.6,-0.1 0.2,-0.1 0.3,-0.2 0.4,-0.3 0.1,-0.1 0.2,-0.2 0.2,-0.4 l 0.4,0.2 c 0,0.1 -0.1,0.3 -0.2,0.4 -0.1,0.1 -0.2,0.3 -0.4,0.4 z m -1.4,-2.3 c -0.2,0.1 -0.3,0.2 -0.3,0.4 0,0.2 0,0.4 0.1,0.6 v 0 l 1.2,-0.7 V 145 c -0.1,-0.2 -0.2,-0.3 -0.4,-0.4 -0.2,0.1 -0.4,0.1 -0.6,0.2 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_35"
|
||||||
|
d="m 157.5,142.6 0.4,0.6 0.5,-0.3 0.2,0.3 -0.5,0.3 0.9,1.6 c 0.1,0.1 0.1,0.2 0.2,0.2 0.1,0 0.2,0 0.2,0 0,0 0.1,-0.1 0.1,-0.1 0,0 0.1,-0.1 0.1,-0.1 l 0.2,0.3 c 0,0.1 -0.1,0.1 -0.2,0.2 -0.1,0.1 -0.2,0.1 -0.2,0.2 -0.2,0.1 -0.4,0.1 -0.6,0.1 -0.2,0 -0.3,-0.2 -0.5,-0.4 l -0.9,-1.6 -0.4,0.2 -0.2,-0.3 0.4,-0.2 -0.4,-0.6 z"
|
||||||
|
class="st8" />
|
||||||
|
</g>
|
||||||
|
<polygon
|
||||||
|
id="svg_36"
|
||||||
|
points="189.4,98.7 225.1,78.2 260.7,98.7 260.7,139.9 225.1,160.4 189.4,139.9 "
|
||||||
|
class="st16" />
|
||||||
|
<polygon
|
||||||
|
id="svg_37"
|
||||||
|
points="189.4,119.3 189.4,139.9 225.1,160.4 242.9,150.2 "
|
||||||
|
class="st13" />
|
||||||
|
<polygon
|
||||||
|
id="svg_38"
|
||||||
|
points="208.7,147.7 214.8,137.2 237.3,150.2 225.1,157.2 "
|
||||||
|
class="st7" />
|
||||||
|
<g
|
||||||
|
id="svg_39">
|
||||||
|
<path
|
||||||
|
id="svg_40"
|
||||||
|
d="m 215.5,142.6 c 0.5,0.3 0.7,0.6 0.8,1 0.1,0.4 0,0.9 -0.2,1.3 l -0.3,0.5 c -0.3,0.4 -0.6,0.7 -1,0.8 -0.4,0.1 -0.9,0 -1.3,-0.2 l -1.4,-0.8 0.2,-0.3 0.4,0.2 1.6,-2.7 -0.3,-0.3 0.2,-0.3 0.4,0.2 z m -0.8,0 -1.6,2.7 0.6,0.3 c 0.3,0.2 0.6,0.2 0.9,0.1 0.3,-0.1 0.6,-0.3 0.7,-0.6 l 0.3,-0.5 c 0.2,-0.3 0.2,-0.6 0.2,-1 -0.1,-0.3 -0.3,-0.6 -0.6,-0.8 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_41"
|
||||||
|
d="m 216.2,145.9 c 0.2,-0.4 0.5,-0.6 0.8,-0.8 0.3,-0.1 0.7,-0.1 1,0.1 0.4,0.2 0.6,0.5 0.6,0.9 0.1,0.4 0,0.7 -0.2,1.1 v 0.1 c -0.2,0.4 -0.5,0.6 -0.8,0.8 -0.3,0.1 -0.7,0.1 -1,-0.1 -0.4,-0.2 -0.6,-0.5 -0.6,-0.9 -0.1,-0.4 0,-0.8 0.2,-1.2 z m 0.5,0.3 c -0.2,0.3 -0.2,0.5 -0.2,0.8 0,0.2 0.1,0.4 0.4,0.6 0.2,0.1 0.4,0.1 0.7,0 0.2,-0.1 0.4,-0.3 0.6,-0.6 v -0.1 c 0.2,-0.3 0.2,-0.5 0.2,-0.8 0,-0.2 -0.1,-0.4 -0.4,-0.6 -0.2,-0.1 -0.4,-0.1 -0.7,0 -0.3,0.2 -0.5,0.4 -0.6,0.7 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_42"
|
||||||
|
d="m 219.5,149.1 c 0.2,0.1 0.3,0.1 0.5,0.1 0.2,0 0.3,-0.1 0.4,-0.2 l 0.4,0.2 v 0 c -0.1,0.2 -0.3,0.4 -0.6,0.4 -0.3,0.1 -0.6,0 -0.9,-0.2 -0.4,-0.2 -0.6,-0.5 -0.6,-0.9 -0.1,-0.4 0,-0.7 0.2,-1.1 l 0.1,-0.1 c 0.2,-0.4 0.5,-0.6 0.8,-0.7 0.3,-0.1 0.7,-0.1 1.1,0.1 0.2,0.1 0.4,0.3 0.5,0.4 0.1,0.1 0.2,0.3 0.2,0.5 l -0.3,0.6 -0.4,-0.2 0.1,-0.5 c 0,-0.1 -0.1,-0.2 -0.1,-0.3 -0.1,-0.1 -0.2,-0.2 -0.3,-0.2 -0.2,-0.1 -0.5,-0.2 -0.7,0 -0.2,0.1 -0.4,0.3 -0.5,0.6 l -0.1,0.1 c -0.2,0.3 -0.2,0.5 -0.2,0.7 0.1,0.4 0.2,0.6 0.4,0.7 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_43"
|
||||||
|
d="m 222.7,146.8 0.2,-0.3 0.9,0.5 -1.2,2.1 0.3,0.2 0.9,-0.4 -0.2,-0.2 0.2,-0.3 1.1,0.6 -0.2,0.3 -0.3,-0.1 -1.1,0.4 0.2,1.5 0.3,0.2 -0.2,0.3 -1.1,-0.6 0.2,-0.3 0.3,0.1 -0.2,-1.2 -0.3,-0.2 -0.5,0.8 0.3,0.3 -0.2,0.3 -1.2,-0.7 0.2,-0.3 0.4,0.2 1.7,-3 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_44"
|
||||||
|
d="m 224.8,152.7 c -0.4,-0.2 -0.6,-0.5 -0.6,-0.8 0,-0.3 0,-0.7 0.2,-1.1 l 0.1,-0.1 c 0.2,-0.4 0.5,-0.6 0.9,-0.7 0.4,-0.1 0.7,-0.1 1,0.1 0.3,0.2 0.5,0.5 0.6,0.8 0.1,0.3 0,0.6 -0.2,1 l -0.2,0.3 -1.7,-1 v 0 c -0.1,0.2 -0.2,0.5 -0.2,0.7 0,0.2 0.2,0.4 0.4,0.5 0.2,0.1 0.3,0.1 0.5,0.2 0.1,0 0.3,0 0.4,0 v 0.4 c -0.1,0 -0.3,0 -0.5,0 -0.2,0 -0.4,-0.2 -0.7,-0.3 z m 1.3,-2.4 c -0.2,-0.1 -0.3,-0.1 -0.5,0 -0.2,0.1 -0.4,0.2 -0.5,0.4 v 0 l 1.2,0.7 v -0.1 c 0.1,-0.2 0.1,-0.4 0.1,-0.5 0,-0.2 -0.1,-0.4 -0.3,-0.5 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_45"
|
||||||
|
d="m 227.6,151.2 0.2,-0.3 0.8,0.5 -0.2,0.4 c 0.1,-0.1 0.3,-0.1 0.4,-0.2 0.1,0 0.3,0 0.4,0.1 0,0 0.1,0 0.1,0.1 0,0 0.1,0.1 0.1,0.1 l -0.3,0.4 -0.3,-0.2 c -0.1,-0.1 -0.2,-0.1 -0.4,-0.1 -0.1,0 -0.2,0.1 -0.3,0.1 l -0.8,1.5 0.3,0.3 -0.2,0.3 -1.2,-0.7 0.2,-0.3 0.4,0.2 1.1,-1.8 z"
|
||||||
|
class="st8" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="svg_46">
|
||||||
|
<path
|
||||||
|
id="svg_47"
|
||||||
|
d="m 194,130.3 0.2,-0.3 0.9,0.5 -1.2,2.1 0.3,0.2 0.9,-0.4 -0.2,-0.2 0.2,-0.3 1.1,0.6 -0.2,0.3 -0.3,-0.1 -1.1,0.4 0.2,1.5 0.3,0.2 -0.2,0.3 -1.1,-0.6 0.2,-0.3 0.3,0.1 -0.2,-1.2 -0.3,-0.2 -0.5,0.8 0.3,0.3 -0.2,0.3 -1.2,-0.7 0.2,-0.3 0.4,0.2 1.7,-3 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_48"
|
||||||
|
d="m 197.1,136.1 c -0.2,0.1 -0.3,0.1 -0.5,0.1 -0.2,0 -0.3,0 -0.5,-0.1 -0.3,-0.2 -0.4,-0.4 -0.5,-0.6 -0.1,-0.3 0,-0.6 0.2,-1 l 0.7,-1.1 -0.3,-0.2 0.2,-0.3 0.3,0.2 0.5,0.3 -0.9,1.5 c -0.2,0.3 -0.2,0.5 -0.2,0.6 0,0.1 0.1,0.3 0.3,0.4 0.2,0.1 0.3,0.1 0.5,0.1 0.1,0 0.3,-0.1 0.4,-0.1 l 0.9,-1.5 -0.3,-0.3 0.2,-0.3 0.3,0.2 0.5,0.3 -1.3,2.2 0.3,0.2 -0.2,0.3 -0.7,-0.4 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_49"
|
||||||
|
d="m 201,137.3 c -0.2,0.4 -0.5,0.6 -0.8,0.7 -0.3,0.1 -0.6,0.1 -0.9,-0.1 -0.2,-0.1 -0.3,-0.2 -0.4,-0.3 -0.1,-0.1 -0.1,-0.3 -0.1,-0.5 l -0.2,0.3 -0.4,-0.2 1.9,-3.3 -0.3,-0.3 0.2,-0.3 0.9,0.5 -0.8,1.4 c 0.1,-0.1 0.3,-0.1 0.5,-0.1 0.2,0 0.3,0.1 0.5,0.2 0.3,0.2 0.5,0.5 0.5,0.8 0,0.3 -0.3,0.7 -0.6,1.2 z m -0.4,-0.4 c 0.2,-0.3 0.3,-0.6 0.3,-0.8 0,-0.2 -0.1,-0.4 -0.3,-0.6 -0.1,-0.1 -0.3,-0.1 -0.4,-0.1 -0.1,0 -0.3,0.1 -0.4,0.1 l -0.7,1.1 c 0,0.2 0,0.3 0.1,0.4 0.1,0.1 0.2,0.2 0.3,0.3 0.2,0.1 0.4,0.1 0.6,0 0.1,0.1 0.3,-0.1 0.5,-0.4 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_50"
|
||||||
|
d="m 202,139.4 c -0.4,-0.2 -0.6,-0.5 -0.6,-0.8 -0.1,-0.4 0,-0.7 0.2,-1.1 l 0.1,-0.1 c 0.2,-0.4 0.5,-0.6 0.9,-0.7 0.4,-0.1 0.7,-0.1 1,0.1 0.3,0.2 0.5,0.5 0.6,0.8 0.1,0.3 0,0.6 -0.2,1 l -0.2,0.3 -1.7,-1 v 0 c -0.1,0.2 -0.2,0.5 -0.2,0.7 0,0.2 0.2,0.4 0.4,0.5 0.2,0.1 0.3,0.1 0.5,0.2 0.1,0 0.3,0 0.4,0 v 0.4 c -0.1,0 -0.3,0 -0.5,0 -0.3,-0.1 -0.5,-0.1 -0.7,-0.3 z m 1.2,-2.3 c -0.2,-0.1 -0.3,-0.1 -0.5,0 -0.2,0.1 -0.3,0.2 -0.5,0.4 v 0 l 1.2,0.7 v -0.1 c 0.1,-0.2 0.1,-0.4 0.1,-0.5 0,-0.2 -0.1,-0.4 -0.3,-0.5 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_51"
|
||||||
|
d="m 205.3,136.8 0.2,-0.3 0.9,0.5 -1.9,3.3 0.3,0.3 -0.2,0.3 -1.2,-0.7 0.2,-0.3 0.4,0.2 1.7,-3 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_52"
|
||||||
|
d="m 206.1,141.8 c -0.4,-0.2 -0.6,-0.5 -0.6,-0.8 -0.1,-0.4 0,-0.7 0.2,-1.1 l 0.1,-0.1 c 0.2,-0.4 0.5,-0.6 0.9,-0.7 0.4,-0.1 0.7,-0.1 1,0.1 0.3,0.2 0.5,0.5 0.6,0.8 0.1,0.3 0,0.6 -0.2,1 l -0.2,0.3 -1.7,-1 v 0 c -0.1,0.2 -0.2,0.5 -0.2,0.7 0,0.2 0.2,0.4 0.4,0.5 0.2,0.1 0.3,0.1 0.5,0.2 0.1,0 0.3,0 0.4,0 v 0.4 c -0.1,0 -0.3,0 -0.5,0 -0.3,-0.1 -0.5,-0.2 -0.7,-0.3 z m 1.2,-2.3 c -0.2,-0.1 -0.3,-0.1 -0.5,0 -0.2,0.1 -0.3,0.2 -0.5,0.4 v 0 l 1.2,0.7 v -0.1 c 0.1,-0.2 0.1,-0.4 0.1,-0.5 0,-0.3 -0.1,-0.4 -0.3,-0.5 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_53"
|
||||||
|
d="m 210.2,139.9 -0.4,0.6 0.5,0.3 -0.2,0.3 -0.5,-0.3 -0.9,1.6 c -0.1,0.1 -0.1,0.2 -0.1,0.3 0,0.1 0.1,0.1 0.2,0.2 0,0 0.1,0 0.1,0.1 0.1,0 0.1,0 0.1,0.1 l -0.1,0.4 c -0.1,0 -0.1,0 -0.2,0 -0.1,0 -0.2,-0.1 -0.3,-0.1 -0.2,-0.1 -0.3,-0.3 -0.4,-0.4 0,-0.2 0,-0.4 0.1,-0.6 l 0.9,-1.6 -0.4,-0.2 0.2,-0.3 0.4,0.2 0.4,-0.6 z"
|
||||||
|
class="st8" />
|
||||||
|
</g>
|
||||||
|
<polygon
|
||||||
|
id="svg_54"
|
||||||
|
points="111.4,234.7 147.1,214.1 182.7,234.7 182.7,275.9 147.1,296.4 111.4,275.9 "
|
||||||
|
class="st16" />
|
||||||
|
<polygon
|
||||||
|
id="svg_55"
|
||||||
|
points="129.3,224.4 147.1,214.1 182.7,234.7 182.7,255.3 "
|
||||||
|
class="st13" />
|
||||||
|
<polygon
|
||||||
|
id="svg_56"
|
||||||
|
points="163.5,226.9 157.4,237.4 179.9,250.4 179.9,236.3 "
|
||||||
|
class="st7" />
|
||||||
|
<g
|
||||||
|
id="svg_57">
|
||||||
|
<path
|
||||||
|
id="svg_58"
|
||||||
|
d="m 164.2,232.3 c 0.5,0.3 0.7,0.6 0.8,1 0.1,0.4 0,0.9 -0.2,1.3 l -0.3,0.5 c -0.3,0.4 -0.6,0.7 -1,0.8 -0.4,0.1 -0.9,0 -1.3,-0.2 l -1.4,-0.8 0.2,-0.3 0.4,0.2 1.6,-2.7 -0.3,-0.3 0.2,-0.3 0.4,0.2 z m -0.8,0 -1.6,2.7 0.6,0.3 c 0.3,0.2 0.6,0.2 0.9,0.1 0.3,-0.1 0.6,-0.3 0.7,-0.6 l 0.3,-0.5 c 0.2,-0.3 0.3,-0.6 0.2,-1 -0.1,-0.3 -0.3,-0.6 -0.6,-0.8 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_59"
|
||||||
|
d="m 164.9,235.6 c 0.2,-0.4 0.5,-0.6 0.8,-0.8 0.3,-0.1 0.7,-0.1 1,0.1 0.4,0.2 0.6,0.5 0.6,0.9 0.1,0.4 0,0.7 -0.2,1.1 v 0.1 c -0.2,0.4 -0.5,0.6 -0.8,0.8 -0.3,0.1 -0.7,0.1 -1,-0.1 -0.4,-0.2 -0.6,-0.5 -0.6,-0.9 -0.1,-0.4 0,-0.8 0.2,-1.2 z m 0.5,0.3 c -0.2,0.3 -0.2,0.5 -0.2,0.8 0,0.2 0.1,0.4 0.4,0.6 0.2,0.1 0.4,0.1 0.7,0 0.2,-0.1 0.4,-0.3 0.6,-0.6 v -0.1 c 0.2,-0.3 0.2,-0.5 0.2,-0.8 0,-0.2 -0.1,-0.4 -0.4,-0.6 -0.2,-0.1 -0.4,-0.1 -0.7,0 -0.2,0.2 -0.4,0.4 -0.6,0.7 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_60"
|
||||||
|
d="m 168.2,238.8 c 0.2,0.1 0.3,0.1 0.5,0.1 0.2,0 0.3,-0.1 0.4,-0.2 l 0.4,0.2 v 0 c -0.1,0.2 -0.3,0.4 -0.6,0.4 -0.3,0.1 -0.6,0 -0.9,-0.2 -0.4,-0.2 -0.6,-0.5 -0.6,-0.9 -0.1,-0.4 0,-0.7 0.2,-1.1 l 0.1,-0.1 c 0.2,-0.4 0.5,-0.6 0.8,-0.7 0.3,-0.1 0.7,-0.1 1.1,0.1 0.2,0.1 0.4,0.3 0.5,0.4 0.1,0.1 0.2,0.3 0.2,0.5 l -0.3,0.7 -0.4,-0.2 0.1,-0.5 c 0,-0.1 -0.1,-0.2 -0.1,-0.3 -0.1,-0.1 -0.2,-0.2 -0.3,-0.2 -0.2,-0.1 -0.5,-0.2 -0.7,0 -0.2,0.1 -0.4,0.3 -0.5,0.6 l -0.1,0.1 c -0.2,0.3 -0.2,0.5 -0.2,0.7 0.1,0.3 0.2,0.5 0.4,0.6 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_61"
|
||||||
|
d="m 171.4,236.5 0.2,-0.3 0.9,0.5 -1.2,2.1 0.3,0.2 0.9,-0.4 -0.2,-0.2 0.2,-0.3 1.1,0.6 -0.2,0.3 H 173 l -1.1,0.4 0.2,1.5 0.3,0.2 -0.2,0.3 -1.1,-0.6 0.2,-0.3 0.3,0.1 -0.2,-1.2 -0.3,-0.2 -0.5,0.8 0.3,0.3 -0.2,0.3 -1.2,-0.7 0.2,-0.3 0.4,0.2 1.7,-3 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_62"
|
||||||
|
d="m 173.6,242.4 c -0.4,-0.2 -0.6,-0.5 -0.6,-0.8 -0.1,-0.4 0,-0.7 0.2,-1.1 l 0.1,-0.1 c 0.2,-0.4 0.5,-0.6 0.9,-0.7 0.4,-0.1 0.7,-0.1 1,0.1 0.3,0.2 0.5,0.5 0.6,0.8 0.1,0.3 0,0.6 -0.2,1 l -0.2,0.3 -1.7,-1 v 0 c -0.1,0.2 -0.2,0.5 -0.2,0.7 0,0.2 0.2,0.4 0.4,0.5 0.2,0.1 0.3,0.1 0.5,0.2 0.2,0.1 0.3,0 0.4,0 v 0.4 c -0.1,0 -0.3,0 -0.5,0 -0.3,-0.1 -0.5,-0.2 -0.7,-0.3 z m 1.2,-2.4 c -0.2,-0.1 -0.3,-0.1 -0.5,0 -0.2,0.1 -0.4,0.2 -0.5,0.4 v 0 l 1.2,0.7 V 241 c 0.1,-0.2 0.1,-0.4 0.1,-0.5 0,-0.2 -0.1,-0.4 -0.3,-0.5 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_63"
|
||||||
|
d="m 176.3,240.9 0.2,-0.3 0.8,0.5 -0.2,0.4 c 0.1,-0.1 0.3,-0.1 0.4,-0.2 0.2,0 0.3,0 0.4,0.1 0,0 0.1,0 0.1,0.1 0,0 0.1,0.1 0.1,0.1 l -0.3,0.4 -0.3,-0.2 c -0.1,-0.1 -0.2,-0.1 -0.4,-0.1 -0.1,0 -0.2,0.1 -0.3,0.1 l -0.8,1.5 0.3,0.3 -0.2,0.3 -1.2,-0.7 0.2,-0.3 0.4,0.2 1.1,-1.8 z"
|
||||||
|
class="st8" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="svg_64">
|
||||||
|
<path
|
||||||
|
id="svg_65"
|
||||||
|
d="m 142.7,220 0.2,-0.3 0.9,0.5 -1.2,2.1 0.3,0.2 0.9,-0.4 -0.2,-0.2 0.2,-0.3 1.1,0.6 -0.2,0.3 -0.3,-0.1 -1.1,0.4 0.2,1.5 0.3,0.2 -0.2,0.3 -1.1,-0.6 0.2,-0.3 0.3,0.1 -0.2,-1.2 -0.3,-0.2 -0.5,0.8 0.3,0.3 -0.2,0.3 -1.2,-0.7 0.2,-0.3 0.4,0.2 1.7,-3 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_66"
|
||||||
|
d="m 145.8,225.8 c -0.2,0.1 -0.3,0.1 -0.5,0.1 -0.2,0 -0.3,0 -0.5,-0.1 -0.3,-0.2 -0.4,-0.4 -0.5,-0.6 -0.1,-0.2 0,-0.6 0.2,-1 l 0.7,-1.1 -0.3,-0.2 0.2,-0.3 0.3,0.2 0.5,0.3 -0.9,1.5 c -0.2,0.3 -0.2,0.5 -0.2,0.6 0,0.1 0.1,0.3 0.3,0.4 0.2,0.1 0.3,0.1 0.5,0.1 0.1,0 0.3,-0.1 0.4,-0.1 l 0.9,-1.5 -0.3,-0.3 0.2,-0.3 0.3,0.2 0.5,0.3 -1.3,2.2 0.3,0.2 -0.2,0.3 -0.7,-0.4 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_67"
|
||||||
|
d="m 149.8,227 c -0.2,0.4 -0.5,0.6 -0.8,0.7 -0.3,0.1 -0.6,0.1 -0.9,-0.1 -0.2,-0.1 -0.3,-0.2 -0.4,-0.3 -0.1,-0.1 -0.1,-0.3 -0.1,-0.5 l -0.2,0.3 -0.4,-0.2 1.9,-3.3 -0.3,-0.3 0.2,-0.3 0.9,0.5 -0.8,1.4 c 0.1,-0.1 0.3,-0.1 0.5,-0.1 0.2,0 0.3,0.1 0.5,0.2 0.3,0.2 0.5,0.5 0.5,0.8 -0.3,0.3 -0.4,0.7 -0.6,1.2 z m -0.5,-0.4 c 0.2,-0.3 0.3,-0.6 0.3,-0.8 0,-0.2 -0.1,-0.4 -0.3,-0.6 -0.1,-0.1 -0.3,-0.1 -0.4,-0.1 -0.1,0 -0.3,0.1 -0.4,0.1 l -0.7,1.1 c 0,0.2 0,0.3 0.1,0.4 0.1,0.1 0.2,0.2 0.3,0.3 0.2,0.1 0.4,0.1 0.6,0 0.2,0.1 0.3,0 0.5,-0.4 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_68"
|
||||||
|
d="m 150.7,229.1 c -0.4,-0.2 -0.6,-0.5 -0.6,-0.8 -0.1,-0.4 0,-0.7 0.2,-1.1 l 0.1,-0.1 c 0.2,-0.4 0.5,-0.6 0.9,-0.7 0.4,-0.1 0.7,-0.1 1,0.1 0.3,0.2 0.5,0.5 0.6,0.8 0.1,0.3 0,0.6 -0.2,1 l -0.2,0.3 -1.7,-1 v 0 c -0.1,0.2 -0.2,0.5 -0.2,0.7 0,0.2 0.2,0.4 0.4,0.5 0.2,0.1 0.3,0.1 0.5,0.2 0.1,0 0.3,0 0.4,0 v 0.4 c -0.1,0 -0.3,0 -0.5,0 -0.3,-0.1 -0.5,-0.1 -0.7,-0.3 z m 1.2,-2.3 c -0.2,-0.1 -0.3,-0.1 -0.5,0 -0.2,0.1 -0.4,0.2 -0.5,0.4 v 0 l 1.2,0.7 v -0.1 c 0.1,-0.2 0.1,-0.4 0.1,-0.5 0,-0.2 -0.1,-0.4 -0.3,-0.5 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_69"
|
||||||
|
d="m 154,226.5 0.2,-0.3 0.9,0.5 -1.9,3.3 0.3,0.3 -0.2,0.3 -1.2,-0.7 0.2,-0.3 0.4,0.2 1.7,-3 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_70"
|
||||||
|
d="m 154.8,231.5 c -0.4,-0.2 -0.6,-0.5 -0.6,-0.8 -0.1,-0.4 0,-0.7 0.2,-1.1 l 0.1,-0.1 c 0.2,-0.4 0.5,-0.6 0.9,-0.7 0.4,-0.1 0.7,-0.1 1,0.1 0.3,0.2 0.5,0.5 0.6,0.8 0.1,0.3 0,0.6 -0.2,1 l -0.2,0.3 -1.7,-1 v 0 c -0.1,0.2 -0.2,0.5 -0.2,0.7 0,0.2 0.2,0.4 0.4,0.5 0.2,0.1 0.3,0.1 0.5,0.2 0.1,0 0.3,0 0.4,0 v 0.4 c -0.1,0 -0.3,0 -0.5,0 -0.3,-0.1 -0.5,-0.1 -0.7,-0.3 z m 1.3,-2.3 c -0.2,-0.1 -0.3,-0.1 -0.5,0 -0.2,0.1 -0.4,0.2 -0.5,0.4 v 0 l 1.2,0.7 v -0.1 c 0.1,-0.2 0.1,-0.4 0.1,-0.5 0,-0.2 -0.1,-0.4 -0.3,-0.5 z"
|
||||||
|
class="st8" />
|
||||||
|
<path
|
||||||
|
id="svg_71"
|
||||||
|
d="m 158.9,229.6 -0.4,0.6 0.5,0.3 -0.2,0.3 -0.5,-0.3 -0.9,1.6 c -0.1,0.1 -0.1,0.2 -0.1,0.3 0,0.1 0.1,0.1 0.2,0.2 0,0 0.1,0 0.1,0.1 0.1,0 0.1,0 0.1,0.1 l -0.1,0.4 c -0.1,0 -0.1,0 -0.2,0 -0.1,0 -0.2,-0.1 -0.3,-0.1 -0.2,-0.1 -0.3,-0.3 -0.4,-0.4 0,-0.2 0,-0.4 0.1,-0.6 l 0.9,-1.6 -0.4,-0.2 0.2,-0.3 0.4,0.2 0.4,-0.6 z"
|
||||||
|
class="st8" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="service" />
|
||||||
|
<g
|
||||||
|
id="pods" />
|
||||||
|
<g
|
||||||
|
id="IP" />
|
||||||
|
<g
|
||||||
|
id="deployments" />
|
||||||
|
<g
|
||||||
|
id="containers_x2F_volumes" />
|
||||||
|
<g
|
||||||
|
id="labels_x2F_selectors" />
|
||||||
|
<g
|
||||||
|
id="Layer_14" />
|
||||||
</g>
|
</g>
|
||||||
<g id="Node">
|
<text
|
||||||
<g id="Node_x5F_level3_x5F_1">
|
xml:space="preserve"
|
||||||
<g id="Isolation_Mode"/>
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:Courier;-inkscape-font-specification:'Courier, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
|
||||||
</g>
|
x="354.17346"
|
||||||
<polygon id="svg_18" points="182.7,139.9 147.1,160.4 111.4,139.9 111.4,98.7 147.1,78.2 182.7,98.7 " class="st16"/>
|
y="198.82574"
|
||||||
<polygon id="svg_19" points="129.3,150.2 147.1,160.4 182.7,139.9 182.7,119.3 " class="st13"/>
|
id="text171"><tspan
|
||||||
<polygon id="svg_20" points="163.5,147.7 157.4,137.2 179.9,124.2 179.9,138.3 " class="st7"/>
|
id="tspan169"
|
||||||
<g id="svg_21">
|
x="354.17346"
|
||||||
<path id="svg_22" d="m162.5,139.3c0.4,-0.3 0.9,-0.3 1.3,-0.2c0.4,0.1 0.8,0.4 1,0.8l0.3,0.5c0.3,0.4 0.3,0.9 0.2,1.3c-0.1,0.4 -0.4,0.8 -0.8,1l-1.4,0.8l-0.2,-0.3l0.3,-0.3l-1.6,-2.7l-0.4,0.2l-0.2,-0.3l0.4,-0.2l1.1,-0.6zm-0.4,0.7l1.6,2.7l0.6,-0.3c0.3,-0.2 0.5,-0.4 0.6,-0.8c0.1,-0.3 0,-0.6 -0.2,-1l-0.3,-0.5c-0.2,-0.3 -0.4,-0.5 -0.7,-0.6c-0.3,-0.1 -0.6,-0.1 -0.9,0.1l-0.7,0.4z" class="st8"/>
|
y="198.82574">Control Plane</tspan></text>
|
||||||
<path id="svg_23" d="m165.7,140.3c-0.2,-0.4 -0.3,-0.8 -0.2,-1.1c0.1,-0.4 0.3,-0.6 0.6,-0.9c0.4,-0.2 0.7,-0.2 1.1,-0.1c0.3,0.1 0.6,0.4 0.9,0.8l0,0.1c0.2,0.4 0.3,0.8 0.2,1.1c-0.1,0.4 -0.3,0.6 -0.6,0.8c-0.4,0.2 -0.7,0.2 -1.1,0.1c-0.4,-0.1 -0.7,-0.3 -0.9,-0.8l0,0zm0.5,-0.2c0.2,0.3 0.3,0.5 0.6,0.6c0.2,0.1 0.4,0.1 0.7,0c0.2,-0.1 0.3,-0.3 0.4,-0.6c0,-0.2 -0.1,-0.5 -0.2,-0.8l0,-0.1c-0.2,-0.3 -0.3,-0.5 -0.6,-0.6c-0.2,-0.1 -0.4,-0.1 -0.7,0c-0.2,0.1 -0.3,0.3 -0.4,0.6c-0.1,0.3 0,0.6 0.2,0.9l0,0z" class="st8"/>
|
<text
|
||||||
<path id="svg_24" d="m170.1,139.1c0.2,-0.1 0.3,-0.2 0.3,-0.4c0.1,-0.2 0.1,-0.3 0,-0.5l0.4,-0.2l0,0c0.1,0.2 0.2,0.5 0,0.8c-0.1,0.3 -0.3,0.5 -0.6,0.7c-0.4,0.2 -0.7,0.3 -1.1,0.1c-0.3,-0.1 -0.6,-0.4 -0.8,-0.7l-0.1,-0.1c-0.2,-0.4 -0.3,-0.7 -0.2,-1.1s0.3,-0.6 0.6,-0.9c0.2,-0.1 0.4,-0.2 0.6,-0.2c0.2,0 0.4,0 0.6,0l0.3,0.6l-0.4,0.2l-0.3,-0.3c-0.1,0 -0.2,0 -0.3,0c-0.1,0 -0.2,0.1 -0.3,0.1c-0.2,0.1 -0.4,0.3 -0.4,0.6c0,0.2 0.1,0.5 0.2,0.7l0.1,0.1c0.2,0.3 0.3,0.5 0.5,0.6c0.5,0 0.7,0 0.9,-0.1z" class="st8"/>
|
xml:space="preserve"
|
||||||
<path id="svg_25" d="m169.8,135.2l-0.2,-0.3l0.9,-0.5l1.2,2.1l0.3,-0.2l0.2,-1l-0.3,0.1l-0.2,-0.3l1.1,-0.6l0.2,0.3l-0.3,0.2l-0.2,1.2l1.4,0.6l0.3,-0.1l0.2,0.3l-1.1,0.6l-0.2,-0.3l0.2,-0.2l-1.2,-0.5l-0.3,0.2l0.5,0.8l0.4,-0.2l0.2,0.3l-1.2,0.7l-0.2,-0.3l0.3,-0.3l-1.7,-3l-0.3,0.4z" class="st8"/>
|
style="font-size:13.3333px;line-height:1.25;font-family:Courier;-inkscape-font-specification:'Courier, Normal'"
|
||||||
<path id="svg_26" d="m175.9,136.3c-0.4,0.2 -0.7,0.3 -1.1,0.1s-0.6,-0.4 -0.9,-0.7l-0.1,-0.1c-0.2,-0.4 -0.3,-0.7 -0.2,-1.1c0.1,-0.4 0.3,-0.6 0.6,-0.8c0.3,-0.2 0.7,-0.2 1,-0.1s0.5,0.3 0.7,0.7l0.2,0.3l-1.7,1l0,0c0.1,0.2 0.3,0.4 0.5,0.5c0.2,0.1 0.4,0.1 0.6,-0.1c0.2,-0.1 0.3,-0.2 0.4,-0.3c0.1,-0.1 0.2,-0.2 0.2,-0.4l0.4,0.2c0,0.1 -0.1,0.3 -0.2,0.4c0,0.1 -0.2,0.2 -0.4,0.4zm-1.4,-2.3c-0.2,0.1 -0.3,0.2 -0.3,0.4s0,0.4 0.1,0.6l0,0l1.2,-0.7l0,-0.1c-0.1,-0.2 -0.2,-0.3 -0.4,-0.4c-0.2,0.1 -0.4,0.1 -0.6,0.2z" class="st8"/>
|
x="364.43982"
|
||||||
<path id="svg_27" d="m176,133.1l-0.2,-0.3l0.8,-0.5l0.3,0.3c0,-0.2 0,-0.3 0.1,-0.5c0.1,-0.1 0.2,-0.2 0.3,-0.3c0,0 0.1,0 0.1,-0.1c0,0 0.1,0 0.1,0l0.2,0.5l-0.3,0.1c-0.1,0.1 -0.2,0.2 -0.3,0.3c-0.1,0.1 -0.1,0.2 -0.1,0.4l0.8,1.5l0.4,-0.2l0.2,0.3l-1.2,0.7l-0.2,-0.3l0.3,-0.3l-1.1,-1.8l-0.2,0.2z" class="st8"/>
|
y="122.11347"
|
||||||
</g>
|
id="text175"><tspan
|
||||||
<g id="svg_28">
|
id="tspan173"
|
||||||
<path id="svg_29" d="m141.1,151.8l-0.2,-0.3l0.9,-0.5l1.2,2.1l0.3,-0.2l0.2,-1l-0.3,0.1l-0.2,-0.3l1.1,-0.6l0.2,0.3l-0.3,0.2l-0.2,1.2l1.4,0.6l0.3,-0.1l0.2,0.3l-1.1,0.6l-0.2,-0.3l0.2,-0.2l-1.2,-0.5l-0.3,0.2l0.5,0.8l0.4,-0.2l0.2,0.3l-1.2,0.7l-0.2,-0.3l0.3,-0.3l-1.7,-3l-0.3,0.4z" class="st8"/>
|
x="364.43982"
|
||||||
<path id="svg_30" d="m147.6,152c0,0.2 0,0.3 -0.1,0.5c-0.1,0.1 -0.2,0.3 -0.4,0.4c-0.3,0.2 -0.5,0.2 -0.8,0.1c-0.3,-0.1 -0.5,-0.3 -0.7,-0.7l-0.7,-1.1l-0.3,0.1l-0.2,-0.3l0.3,-0.2l0.5,-0.3l0.9,1.5c0.2,0.3 0.3,0.4 0.4,0.5s0.3,0 0.5,-0.1c0.2,-0.1 0.3,-0.2 0.4,-0.3c0.1,-0.1 0.1,-0.3 0.1,-0.4l-0.9,-1.5l-0.4,0.1l-0.2,-0.3l0.3,-0.2l0.5,-0.3l1.3,2.2l0.3,-0.1l0.2,0.3l-0.7,0.4l-0.3,-0.3z" class="st8"/>
|
y="122.11347">Node</tspan></text>
|
||||||
<path id="svg_31" d="m150.6,149.2c0.2,0.4 0.3,0.7 0.2,1c0,0.3 -0.2,0.6 -0.5,0.8c-0.2,0.1 -0.3,0.1 -0.5,0.2c-0.2,0 -0.3,0 -0.5,-0.1l0.1,0.4l-0.4,0.2l-1.9,-3.3l-0.4,0.2l-0.2,-0.3l0.9,-0.5l0.8,1.4c0,-0.2 0.1,-0.3 0.1,-0.4c0.1,-0.1 0.2,-0.2 0.4,-0.3c0.3,-0.2 0.6,-0.2 1,0s0.7,0.2 0.9,0.7l0,0zm-0.5,0.2c-0.2,-0.3 -0.4,-0.5 -0.6,-0.6c-0.2,-0.1 -0.4,-0.1 -0.7,0c-0.1,0.1 -0.2,0.2 -0.3,0.3c-0.1,0.1 -0.1,0.3 -0.1,0.4l0.7,1.1c0.1,0.1 0.3,0.1 0.4,0.1c0.1,0 0.3,0 0.4,-0.1c0.2,-0.1 0.3,-0.3 0.4,-0.5c0.1,-0.2 0,-0.4 -0.2,-0.7l0,0z" class="st8"/>
|
<text
|
||||||
<path id="svg_32" d="m153,149.5c-0.4,0.2 -0.7,0.3 -1.1,0.1s-0.6,-0.4 -0.9,-0.7l-0.1,-0.1c-0.2,-0.4 -0.3,-0.7 -0.2,-1.1c0.1,-0.4 0.3,-0.6 0.6,-0.8c0.3,-0.2 0.7,-0.2 1,-0.1s0.5,0.3 0.7,0.7l0.2,0.3l-1.7,1l0,0c0.1,0.2 0.3,0.4 0.5,0.5c0.2,0.1 0.4,0.1 0.6,-0.1c0.2,-0.1 0.3,-0.2 0.4,-0.3c0.1,-0.1 0.2,-0.2 0.2,-0.4l0.4,0.2c0,0.1 -0.1,0.3 -0.2,0.4s-0.2,0.2 -0.4,0.4zm-1.4,-2.3c-0.2,0.1 -0.3,0.2 -0.3,0.4c0,0.2 0,0.4 0.1,0.6l0,0l1.2,-0.7l0,-0.1c-0.1,-0.2 -0.2,-0.3 -0.4,-0.4s-0.4,0.1 -0.6,0.2z" class="st8"/>
|
xml:space="preserve"
|
||||||
<path id="svg_33" d="m152.4,145.2l-0.2,-0.3l0.9,-0.5l1.9,3.3l0.4,-0.2l0.2,0.3l-1.2,0.7l-0.2,-0.3l0.3,-0.3l-1.7,-3l-0.4,0.3z" class="st8"/>
|
style="font-size:13.3333px;line-height:1.25;font-family:Courier;-inkscape-font-specification:'Courier, Normal'"
|
||||||
<path id="svg_34" d="m157.1,147.1c-0.4,0.2 -0.7,0.3 -1.1,0.1s-0.6,-0.4 -0.9,-0.7l-0.1,-0.1c-0.2,-0.4 -0.3,-0.7 -0.2,-1.1c0.1,-0.4 0.3,-0.6 0.6,-0.8c0.3,-0.2 0.7,-0.2 1,-0.1s0.5,0.3 0.7,0.7l0.2,0.3l-1.7,1l0,0c0.1,0.2 0.3,0.4 0.5,0.5c0.2,0.1 0.4,0.1 0.6,-0.1c0.2,-0.1 0.3,-0.2 0.4,-0.3c0.1,-0.1 0.2,-0.2 0.2,-0.4l0.4,0.2c0,0.1 -0.1,0.3 -0.2,0.4s-0.2,0.3 -0.4,0.4zm-1.4,-2.3c-0.2,0.1 -0.3,0.2 -0.3,0.4s0,0.4 0.1,0.6l0,0l1.2,-0.7l0,-0.1c-0.1,-0.2 -0.2,-0.3 -0.4,-0.4c-0.2,0.1 -0.4,0.1 -0.6,0.2z" class="st8"/>
|
x="354.85016"
|
||||||
<path id="svg_35" d="m157.5,142.6l0.4,0.6l0.5,-0.3l0.2,0.3l-0.5,0.3l0.9,1.6c0.1,0.1 0.1,0.2 0.2,0.2c0.1,0 0.2,0 0.2,0c0,0 0.1,-0.1 0.1,-0.1c0,0 0.1,-0.1 0.1,-0.1l0.2,0.3c0,0.1 -0.1,0.1 -0.2,0.2c-0.1,0.1 -0.2,0.1 -0.2,0.2c-0.2,0.1 -0.4,0.1 -0.6,0.1c-0.2,0 -0.3,-0.2 -0.5,-0.4l-0.9,-1.6l-0.4,0.2l-0.2,-0.3l0.4,-0.2l-0.4,-0.6l0.7,-0.4z" class="st8"/>
|
y="232.48218"
|
||||||
</g>
|
id="text179"><tspan
|
||||||
<polygon id="svg_36" points="225.1,160.4 189.4,139.9 189.4,98.7 225.1,78.2 260.7,98.7 260.7,139.9 " class="st16"/>
|
id="tspan177"
|
||||||
<polygon id="svg_37" points="189.4,119.3 189.4,139.9 225.1,160.4 242.9,150.2 " class="st13"/>
|
x="354.85016"
|
||||||
<polygon id="svg_38" points="208.7,147.7 214.8,137.2 237.3,150.2 225.1,157.2 " class="st7"/>
|
y="232.48218">Node Processes</tspan></text>
|
||||||
<g id="svg_39">
|
</svg>
|
||||||
<path id="svg_40" d="m215.5,142.6c0.5,0.3 0.7,0.6 0.8,1c0.1,0.4 0,0.9 -0.2,1.3l-0.3,0.5c-0.3,0.4 -0.6,0.7 -1,0.8c-0.4,0.1 -0.9,0 -1.3,-0.2l-1.4,-0.8l0.2,-0.3l0.4,0.2l1.6,-2.7l-0.3,-0.3l0.2,-0.3l0.4,0.2l0.9,0.6zm-0.8,0l-1.6,2.7l0.6,0.3c0.3,0.2 0.6,0.2 0.9,0.1c0.3,-0.1 0.6,-0.3 0.7,-0.6l0.3,-0.5c0.2,-0.3 0.2,-0.6 0.2,-1c-0.1,-0.3 -0.3,-0.6 -0.6,-0.8l-0.5,-0.2z" class="st8"/>
|
|
||||||
<path id="svg_41" d="m216.2,145.9c0.2,-0.4 0.5,-0.6 0.8,-0.8c0.3,-0.1 0.7,-0.1 1,0.1c0.4,0.2 0.6,0.5 0.6,0.9c0.1,0.4 0,0.7 -0.2,1.1l0,0.1c-0.2,0.4 -0.5,0.6 -0.8,0.8c-0.3,0.1 -0.7,0.1 -1,-0.1c-0.4,-0.2 -0.6,-0.5 -0.6,-0.9c-0.1,-0.4 0,-0.8 0.2,-1.2l0,0zm0.5,0.3c-0.2,0.3 -0.2,0.5 -0.2,0.8c0,0.2 0.1,0.4 0.4,0.6c0.2,0.1 0.4,0.1 0.7,0c0.2,-0.1 0.4,-0.3 0.6,-0.6l0,-0.1c0.2,-0.3 0.2,-0.5 0.2,-0.8c0,-0.2 -0.1,-0.4 -0.4,-0.6c-0.2,-0.1 -0.4,-0.1 -0.7,0c-0.3,0.2 -0.5,0.4 -0.6,0.7l0,0z" class="st8"/>
|
|
||||||
<path id="svg_42" d="m219.5,149.1c0.2,0.1 0.3,0.1 0.5,0.1c0.2,0 0.3,-0.1 0.4,-0.2l0.4,0.2l0,0c-0.1,0.2 -0.3,0.4 -0.6,0.4c-0.3,0.1 -0.6,0 -0.9,-0.2c-0.4,-0.2 -0.6,-0.5 -0.6,-0.9c-0.1,-0.4 0,-0.7 0.2,-1.1l0.1,-0.1c0.2,-0.4 0.5,-0.6 0.8,-0.7s0.7,-0.1 1.1,0.1c0.2,0.1 0.4,0.3 0.5,0.4s0.2,0.3 0.2,0.5l-0.3,0.6l-0.4,-0.2l0.1,-0.5c0,-0.1 -0.1,-0.2 -0.1,-0.3c-0.1,-0.1 -0.2,-0.2 -0.3,-0.2c-0.2,-0.1 -0.5,-0.2 -0.7,0c-0.2,0.1 -0.4,0.3 -0.5,0.6l-0.1,0.1c-0.2,0.3 -0.2,0.5 -0.2,0.7c0.1,0.4 0.2,0.6 0.4,0.7z" class="st8"/>
|
|
||||||
<path id="svg_43" d="m222.7,146.8l0.2,-0.3l0.9,0.5l-1.2,2.1l0.3,0.2l0.9,-0.4l-0.2,-0.2l0.2,-0.3l1.1,0.6l-0.2,0.3l-0.3,-0.1l-1.1,0.4l0.2,1.5l0.3,0.2l-0.2,0.3l-1.1,-0.6l0.2,-0.3l0.3,0.1l-0.2,-1.2l-0.3,-0.2l-0.5,0.8l0.3,0.3l-0.2,0.3l-1.2,-0.7l0.2,-0.3l0.4,0.2l1.7,-3l-0.5,-0.2z" class="st8"/>
|
|
||||||
<path id="svg_44" d="m224.8,152.7c-0.4,-0.2 -0.6,-0.5 -0.6,-0.8s0,-0.7 0.2,-1.1l0.1,-0.1c0.2,-0.4 0.5,-0.6 0.9,-0.7s0.7,-0.1 1,0.1c0.3,0.2 0.5,0.5 0.6,0.8c0.1,0.3 0,0.6 -0.2,1l-0.2,0.3l-1.7,-1l0,0c-0.1,0.2 -0.2,0.5 -0.2,0.7c0,0.2 0.2,0.4 0.4,0.5c0.2,0.1 0.3,0.1 0.5,0.2c0.1,0 0.3,0 0.4,0l0,0.4c-0.1,0 -0.3,0 -0.5,0s-0.4,-0.2 -0.7,-0.3zm1.3,-2.4c-0.2,-0.1 -0.3,-0.1 -0.5,0c-0.2,0.1 -0.4,0.2 -0.5,0.4l0,0l1.2,0.7l0,-0.1c0.1,-0.2 0.1,-0.4 0.1,-0.5c0,-0.2 -0.1,-0.4 -0.3,-0.5z" class="st8"/>
|
|
||||||
<path id="svg_45" d="m227.6,151.2l0.2,-0.3l0.8,0.5l-0.2,0.4c0.1,-0.1 0.3,-0.1 0.4,-0.2c0.1,0 0.3,0 0.4,0.1c0,0 0.1,0 0.1,0.1c0,0 0.1,0.1 0.1,0.1l-0.3,0.4l-0.3,-0.2c-0.1,-0.1 -0.2,-0.1 -0.4,-0.1c-0.1,0 -0.2,0.1 -0.3,0.1l-0.8,1.5l0.3,0.3l-0.2,0.3l-1.2,-0.7l0.2,-0.3l0.4,0.2l1.1,-1.8l-0.3,-0.4z" class="st8"/>
|
|
||||||
</g>
|
|
||||||
<g id="svg_46">
|
|
||||||
<path id="svg_47" d="m194,130.3l0.2,-0.3l0.9,0.5l-1.2,2.1l0.3,0.2l0.9,-0.4l-0.2,-0.2l0.2,-0.3l1.1,0.6l-0.2,0.3l-0.3,-0.1l-1.1,0.4l0.2,1.5l0.3,0.2l-0.2,0.3l-1.1,-0.6l0.2,-0.3l0.3,0.1l-0.2,-1.2l-0.3,-0.2l-0.5,0.8l0.3,0.3l-0.2,0.3l-1.2,-0.7l0.2,-0.3l0.4,0.2l1.7,-3l-0.5,-0.2z" class="st8"/>
|
|
||||||
<path id="svg_48" d="m197.1,136.1c-0.2,0.1 -0.3,0.1 -0.5,0.1c-0.2,0 -0.3,0 -0.5,-0.1c-0.3,-0.2 -0.4,-0.4 -0.5,-0.6c-0.1,-0.3 0,-0.6 0.2,-1l0.7,-1.1l-0.3,-0.2l0.2,-0.3l0.3,0.2l0.5,0.3l-0.9,1.5c-0.2,0.3 -0.2,0.5 -0.2,0.6c0,0.1 0.1,0.3 0.3,0.4c0.2,0.1 0.3,0.1 0.5,0.1c0.1,0 0.3,-0.1 0.4,-0.1l0.9,-1.5l-0.3,-0.3l0.2,-0.3l0.3,0.2l0.5,0.3l-1.3,2.2l0.3,0.2l-0.2,0.3l-0.7,-0.4l0.1,-0.5z" class="st8"/>
|
|
||||||
<path id="svg_49" d="m201,137.3c-0.2,0.4 -0.5,0.6 -0.8,0.7s-0.6,0.1 -0.9,-0.1c-0.2,-0.1 -0.3,-0.2 -0.4,-0.3c-0.1,-0.1 -0.1,-0.3 -0.1,-0.5l-0.2,0.3l-0.4,-0.2l1.9,-3.3l-0.3,-0.3l0.2,-0.3l0.9,0.5l-0.8,1.4c0.1,-0.1 0.3,-0.1 0.5,-0.1s0.3,0.1 0.5,0.2c0.3,0.2 0.5,0.5 0.5,0.8s-0.3,0.7 -0.6,1.2l0,0zm-0.4,-0.4c0.2,-0.3 0.3,-0.6 0.3,-0.8c0,-0.2 -0.1,-0.4 -0.3,-0.6c-0.1,-0.1 -0.3,-0.1 -0.4,-0.1c-0.1,0 -0.3,0.1 -0.4,0.1l-0.7,1.1c0,0.2 0,0.3 0.1,0.4c0.1,0.1 0.2,0.2 0.3,0.3c0.2,0.1 0.4,0.1 0.6,0c0.1,0.1 0.3,-0.1 0.5,-0.4l0,0z" class="st8"/>
|
|
||||||
<path id="svg_50" d="m202,139.4c-0.4,-0.2 -0.6,-0.5 -0.6,-0.8c-0.1,-0.4 0,-0.7 0.2,-1.1l0.1,-0.1c0.2,-0.4 0.5,-0.6 0.9,-0.7c0.4,-0.1 0.7,-0.1 1,0.1c0.3,0.2 0.5,0.5 0.6,0.8c0.1,0.3 0,0.6 -0.2,1l-0.2,0.3l-1.7,-1l0,0c-0.1,0.2 -0.2,0.5 -0.2,0.7c0,0.2 0.2,0.4 0.4,0.5c0.2,0.1 0.3,0.1 0.5,0.2c0.1,0 0.3,0 0.4,0l0,0.4c-0.1,0 -0.3,0 -0.5,0c-0.3,-0.1 -0.5,-0.1 -0.7,-0.3zm1.2,-2.3c-0.2,-0.1 -0.3,-0.1 -0.5,0c-0.2,0.1 -0.3,0.2 -0.5,0.4l0,0l1.2,0.7l0,-0.1c0.1,-0.2 0.1,-0.4 0.1,-0.5c0,-0.2 -0.1,-0.4 -0.3,-0.5z" class="st8"/>
|
|
||||||
<path id="svg_51" d="m205.3,136.8l0.2,-0.3l0.9,0.5l-1.9,3.3l0.3,0.3l-0.2,0.3l-1.2,-0.7l0.2,-0.3l0.4,0.2l1.7,-3l-0.4,-0.3z" class="st8"/>
|
|
||||||
<path id="svg_52" d="m206.1,141.8c-0.4,-0.2 -0.6,-0.5 -0.6,-0.8c-0.1,-0.4 0,-0.7 0.2,-1.1l0.1,-0.1c0.2,-0.4 0.5,-0.6 0.9,-0.7c0.4,-0.1 0.7,-0.1 1,0.1c0.3,0.2 0.5,0.5 0.6,0.8c0.1,0.3 0,0.6 -0.2,1l-0.2,0.3l-1.7,-1l0,0c-0.1,0.2 -0.2,0.5 -0.2,0.7c0,0.2 0.2,0.4 0.4,0.5c0.2,0.1 0.3,0.1 0.5,0.2c0.1,0 0.3,0 0.4,0l0,0.4c-0.1,0 -0.3,0 -0.5,0c-0.3,-0.1 -0.5,-0.2 -0.7,-0.3zm1.2,-2.3c-0.2,-0.1 -0.3,-0.1 -0.5,0c-0.2,0.1 -0.3,0.2 -0.5,0.4l0,0l1.2,0.7l0,-0.1c0.1,-0.2 0.1,-0.4 0.1,-0.5c0,-0.3 -0.1,-0.4 -0.3,-0.5z" class="st8"/>
|
|
||||||
<path id="svg_53" d="m210.2,139.9l-0.4,0.6l0.5,0.3l-0.2,0.3l-0.5,-0.3l-0.9,1.6c-0.1,0.1 -0.1,0.2 -0.1,0.3c0,0.1 0.1,0.1 0.2,0.2c0,0 0.1,0 0.1,0.1c0.1,0 0.1,0 0.1,0.1l-0.1,0.4c-0.1,0 -0.1,0 -0.2,0c-0.1,0 -0.2,-0.1 -0.3,-0.1c-0.2,-0.1 -0.3,-0.3 -0.4,-0.4c0,-0.2 0,-0.4 0.1,-0.6l0.9,-1.6l-0.4,-0.2l0.2,-0.3l0.4,0.2l0.4,-0.6l0.6,0z" class="st8"/>
|
|
||||||
</g>
|
|
||||||
<polygon id="svg_54" points="147.1,296.4 111.4,275.9 111.4,234.7 147.1,214.1 182.7,234.7 182.7,275.9 " class="st16"/>
|
|
||||||
<polygon id="svg_55" points="129.3,224.4 147.1,214.1 182.7,234.7 182.7,255.3 " class="st13"/>
|
|
||||||
<polygon id="svg_56" points="163.5,226.9 157.4,237.4 179.9,250.4 179.9,236.3 " class="st7"/>
|
|
||||||
<g id="svg_57">
|
|
||||||
<path id="svg_58" d="m164.2,232.3c0.5,0.3 0.7,0.6 0.8,1c0.1,0.4 0,0.9 -0.2,1.3l-0.3,0.5c-0.3,0.4 -0.6,0.7 -1,0.8c-0.4,0.1 -0.9,0 -1.3,-0.2l-1.4,-0.8l0.2,-0.3l0.4,0.2l1.6,-2.7l-0.3,-0.3l0.2,-0.3l0.4,0.2l0.9,0.6zm-0.8,0l-1.6,2.7l0.6,0.3c0.3,0.2 0.6,0.2 0.9,0.1c0.3,-0.1 0.6,-0.3 0.7,-0.6l0.3,-0.5c0.2,-0.3 0.3,-0.6 0.2,-1c-0.1,-0.3 -0.3,-0.6 -0.6,-0.8l-0.5,-0.2z" class="st8"/>
|
|
||||||
<path id="svg_59" d="m164.9,235.6c0.2,-0.4 0.5,-0.6 0.8,-0.8c0.3,-0.1 0.7,-0.1 1,0.1c0.4,0.2 0.6,0.5 0.6,0.9c0.1,0.4 0,0.7 -0.2,1.1l0,0.1c-0.2,0.4 -0.5,0.6 -0.8,0.8c-0.3,0.1 -0.7,0.1 -1,-0.1c-0.4,-0.2 -0.6,-0.5 -0.6,-0.9c-0.1,-0.4 0,-0.8 0.2,-1.2l0,0zm0.5,0.3c-0.2,0.3 -0.2,0.5 -0.2,0.8c0,0.2 0.1,0.4 0.4,0.6c0.2,0.1 0.4,0.1 0.7,0c0.2,-0.1 0.4,-0.3 0.6,-0.6l0,-0.1c0.2,-0.3 0.2,-0.5 0.2,-0.8c0,-0.2 -0.1,-0.4 -0.4,-0.6c-0.2,-0.1 -0.4,-0.1 -0.7,0c-0.2,0.2 -0.4,0.4 -0.6,0.7l0,0z" class="st8"/>
|
|
||||||
<path id="svg_60" d="m168.2,238.8c0.2,0.1 0.3,0.1 0.5,0.1c0.2,0 0.3,-0.1 0.4,-0.2l0.4,0.2l0,0c-0.1,0.2 -0.3,0.4 -0.6,0.4c-0.3,0.1 -0.6,0 -0.9,-0.2c-0.4,-0.2 -0.6,-0.5 -0.6,-0.9c-0.1,-0.4 0,-0.7 0.2,-1.1l0.1,-0.1c0.2,-0.4 0.5,-0.6 0.8,-0.7c0.3,-0.1 0.7,-0.1 1.1,0.1c0.2,0.1 0.4,0.3 0.5,0.4s0.2,0.3 0.2,0.5l-0.3,0.7l-0.4,-0.2l0.1,-0.5c0,-0.1 -0.1,-0.2 -0.1,-0.3c-0.1,-0.1 -0.2,-0.2 -0.3,-0.2c-0.2,-0.1 -0.5,-0.2 -0.7,0c-0.2,0.1 -0.4,0.3 -0.5,0.6l-0.1,0.1c-0.2,0.3 -0.2,0.5 -0.2,0.7c0.1,0.3 0.2,0.5 0.4,0.6z" class="st8"/>
|
|
||||||
<path id="svg_61" d="m171.4,236.5l0.2,-0.3l0.9,0.5l-1.2,2.1l0.3,0.2l0.9,-0.4l-0.2,-0.2l0.2,-0.3l1.1,0.6l-0.2,0.3l-0.4,0l-1.1,0.4l0.2,1.5l0.3,0.2l-0.2,0.3l-1.1,-0.6l0.2,-0.3l0.3,0.1l-0.2,-1.2l-0.3,-0.2l-0.5,0.8l0.3,0.3l-0.2,0.3l-1.2,-0.7l0.2,-0.3l0.4,0.2l1.7,-3l-0.4,-0.3z" class="st8"/>
|
|
||||||
<path id="svg_62" d="m173.6,242.4c-0.4,-0.2 -0.6,-0.5 -0.6,-0.8c-0.1,-0.4 0,-0.7 0.2,-1.1l0.1,-0.1c0.2,-0.4 0.5,-0.6 0.9,-0.7c0.4,-0.1 0.7,-0.1 1,0.1c0.3,0.2 0.5,0.5 0.6,0.8c0.1,0.3 0,0.6 -0.2,1l-0.2,0.3l-1.7,-1l0,0c-0.1,0.2 -0.2,0.5 -0.2,0.7c0,0.2 0.2,0.4 0.4,0.5c0.2,0.1 0.3,0.1 0.5,0.2s0.3,0 0.4,0l0,0.4c-0.1,0 -0.3,0 -0.5,0c-0.3,-0.1 -0.5,-0.2 -0.7,-0.3zm1.2,-2.4c-0.2,-0.1 -0.3,-0.1 -0.5,0c-0.2,0.1 -0.4,0.2 -0.5,0.4l0,0l1.2,0.7l0,-0.1c0.1,-0.2 0.1,-0.4 0.1,-0.5c0,-0.2 -0.1,-0.4 -0.3,-0.5z" class="st8"/>
|
|
||||||
<path id="svg_63" d="m176.3,240.9l0.2,-0.3l0.8,0.5l-0.2,0.4c0.1,-0.1 0.3,-0.1 0.4,-0.2c0.2,0 0.3,0 0.4,0.1c0,0 0.1,0 0.1,0.1c0,0 0.1,0.1 0.1,0.1l-0.3,0.4l-0.3,-0.2c-0.1,-0.1 -0.2,-0.1 -0.4,-0.1c-0.1,0 -0.2,0.1 -0.3,0.1l-0.8,1.5l0.3,0.3l-0.2,0.3l-1.2,-0.7l0.2,-0.3l0.4,0.2l1.1,-1.8l-0.3,-0.4z" class="st8"/>
|
|
||||||
</g>
|
|
||||||
<g id="svg_64">
|
|
||||||
<path id="svg_65" d="m142.7,220l0.2,-0.3l0.9,0.5l-1.2,2.1l0.3,0.2l0.9,-0.4l-0.2,-0.2l0.2,-0.3l1.1,0.6l-0.2,0.3l-0.3,-0.1l-1.1,0.4l0.2,1.5l0.3,0.2l-0.2,0.3l-1.1,-0.6l0.2,-0.3l0.3,0.1l-0.2,-1.2l-0.3,-0.2l-0.5,0.8l0.3,0.3l-0.2,0.3l-1.2,-0.7l0.2,-0.3l0.4,0.2l1.7,-3l-0.5,-0.2z" class="st8"/>
|
|
||||||
<path id="svg_66" d="m145.8,225.8c-0.2,0.1 -0.3,0.1 -0.5,0.1s-0.3,0 -0.5,-0.1c-0.3,-0.2 -0.4,-0.4 -0.5,-0.6s0,-0.6 0.2,-1l0.7,-1.1l-0.3,-0.2l0.2,-0.3l0.3,0.2l0.5,0.3l-0.9,1.5c-0.2,0.3 -0.2,0.5 -0.2,0.6s0.1,0.3 0.3,0.4c0.2,0.1 0.3,0.1 0.5,0.1c0.1,0 0.3,-0.1 0.4,-0.1l0.9,-1.5l-0.3,-0.3l0.2,-0.3l0.3,0.2l0.5,0.3l-1.3,2.2l0.3,0.2l-0.2,0.3l-0.7,-0.4l0.1,-0.5z" class="st8"/>
|
|
||||||
<path id="svg_67" d="m149.8,227c-0.2,0.4 -0.5,0.6 -0.8,0.7c-0.3,0.1 -0.6,0.1 -0.9,-0.1c-0.2,-0.1 -0.3,-0.2 -0.4,-0.3c-0.1,-0.1 -0.1,-0.3 -0.1,-0.5l-0.2,0.3l-0.4,-0.2l1.9,-3.3l-0.3,-0.3l0.2,-0.3l0.9,0.5l-0.8,1.4c0.1,-0.1 0.3,-0.1 0.5,-0.1c0.2,0 0.3,0.1 0.5,0.2c0.3,0.2 0.5,0.5 0.5,0.8c-0.3,0.3 -0.4,0.7 -0.6,1.2l0,0zm-0.5,-0.4c0.2,-0.3 0.3,-0.6 0.3,-0.8c0,-0.2 -0.1,-0.4 -0.3,-0.6c-0.1,-0.1 -0.3,-0.1 -0.4,-0.1c-0.1,0 -0.3,0.1 -0.4,0.1l-0.7,1.1c0,0.2 0,0.3 0.1,0.4s0.2,0.2 0.3,0.3c0.2,0.1 0.4,0.1 0.6,0c0.2,0.1 0.3,0 0.5,-0.4l0,0z" class="st8"/>
|
|
||||||
<path id="svg_68" d="m150.7,229.1c-0.4,-0.2 -0.6,-0.5 -0.6,-0.8c-0.1,-0.4 0,-0.7 0.2,-1.1l0.1,-0.1c0.2,-0.4 0.5,-0.6 0.9,-0.7c0.4,-0.1 0.7,-0.1 1,0.1c0.3,0.2 0.5,0.5 0.6,0.8s0,0.6 -0.2,1l-0.2,0.3l-1.7,-1l0,0c-0.1,0.2 -0.2,0.5 -0.2,0.7s0.2,0.4 0.4,0.5c0.2,0.1 0.3,0.1 0.5,0.2c0.1,0 0.3,0 0.4,0l0,0.4c-0.1,0 -0.3,0 -0.5,0c-0.3,-0.1 -0.5,-0.1 -0.7,-0.3zm1.2,-2.3c-0.2,-0.1 -0.3,-0.1 -0.5,0c-0.2,0.1 -0.4,0.2 -0.5,0.4l0,0l1.2,0.7l0,-0.1c0.1,-0.2 0.1,-0.4 0.1,-0.5c0,-0.2 -0.1,-0.4 -0.3,-0.5z" class="st8"/>
|
|
||||||
<path id="svg_69" d="m154,226.5l0.2,-0.3l0.9,0.5l-1.9,3.3l0.3,0.3l-0.2,0.3l-1.2,-0.7l0.2,-0.3l0.4,0.2l1.7,-3l-0.4,-0.3z" class="st8"/>
|
|
||||||
<path id="svg_70" d="m154.8,231.5c-0.4,-0.2 -0.6,-0.5 -0.6,-0.8c-0.1,-0.4 0,-0.7 0.2,-1.1l0.1,-0.1c0.2,-0.4 0.5,-0.6 0.9,-0.7c0.4,-0.1 0.7,-0.1 1,0.1c0.3,0.2 0.5,0.5 0.6,0.8s0,0.6 -0.2,1l-0.2,0.3l-1.7,-1l0,0c-0.1,0.2 -0.2,0.5 -0.2,0.7s0.2,0.4 0.4,0.5c0.2,0.1 0.3,0.1 0.5,0.2c0.1,0 0.3,0 0.4,0l0,0.4c-0.1,0 -0.3,0 -0.5,0c-0.3,-0.1 -0.5,-0.1 -0.7,-0.3zm1.3,-2.3c-0.2,-0.1 -0.3,-0.1 -0.5,0c-0.2,0.1 -0.4,0.2 -0.5,0.4l0,0l1.2,0.7l0,-0.1c0.1,-0.2 0.1,-0.4 0.1,-0.5c0,-0.2 -0.1,-0.4 -0.3,-0.5z" class="st8"/>
|
|
||||||
<path id="svg_71" d="m158.9,229.6l-0.4,0.6l0.5,0.3l-0.2,0.3l-0.5,-0.3l-0.9,1.6c-0.1,0.1 -0.1,0.2 -0.1,0.3c0,0.1 0.1,0.1 0.2,0.2c0,0 0.1,0 0.1,0.1c0.1,0 0.1,0 0.1,0.1l-0.1,0.4c-0.1,0 -0.1,0 -0.2,0c-0.1,0 -0.2,-0.1 -0.3,-0.1c-0.2,-0.1 -0.3,-0.3 -0.4,-0.4c0,-0.2 0,-0.4 0.1,-0.6l0.9,-1.6l-0.4,-0.2l0.2,-0.3l0.4,0.2l0.4,-0.6l0.6,0z" class="st8"/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
<g id="service"/>
|
|
||||||
<g id="pods"/>
|
|
||||||
<g id="IP"/>
|
|
||||||
<g id="deployments"/>
|
|
||||||
<g id="containers_x2F_volumes"/>
|
|
||||||
<g id="labels_x2F_selectors"/>
|
|
||||||
<g id="Layer_14"/>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 30 KiB |
@@ -412,7 +412,7 @@ protocol between the loadbalancer and backend to communicate the true client IP
|
|||||||
such as the HTTP [Forwarded](https://tools.ietf.org/html/rfc7239#section-5.2)
|
such as the HTTP [Forwarded](https://tools.ietf.org/html/rfc7239#section-5.2)
|
||||||
or [X-FORWARDED-FOR](https://en.wikipedia.org/wiki/X-Forwarded-For)
|
or [X-FORWARDED-FOR](https://en.wikipedia.org/wiki/X-Forwarded-For)
|
||||||
headers, or the
|
headers, or the
|
||||||
[proxy protocol](https://www.haproxy.org/download/1.5/doc/proxy-protocol.txt).
|
[proxy protocol](https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt).
|
||||||
Load balancers in the second category can leverage the feature described above
|
Load balancers in the second category can leverage the feature described above
|
||||||
by creating an HTTP health check pointing at the port stored in
|
by creating an HTTP health check pointing at the port stored in
|
||||||
the `service.spec.healthCheckNodePort` field on the Service.
|
the `service.spec.healthCheckNodePort` field on the Service.
|
||||||
|
|||||||
@@ -134,7 +134,7 @@ kubectl apply -f ./content/en/examples/application/guestbook/frontend-deployment
|
|||||||
1. Query the list of Pods to verify that the three frontend replicas are running:
|
1. Query the list of Pods to verify that the three frontend replicas are running:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
kubectl get pods -l app=guestbook -l tier=frontend
|
kubectl get pods -l app.kubernetes.io/name=guestbook -l app.kubernetes.io/component=frontend
|
||||||
```
|
```
|
||||||
|
|
||||||
The response should be similar to this:
|
The response should be similar to this:
|
||||||
|
|||||||
@@ -83,3 +83,7 @@ para proporcionar un punto de partida.
|
|||||||
- Proponer mejoras al sitio web de Kubernetes y otras herramientas
|
- Proponer mejoras al sitio web de Kubernetes y otras herramientas
|
||||||
|
|
||||||
|
|
||||||
|
## {{% heading "whatsnext" %}}
|
||||||
|
|
||||||
|
También puedes leer la
|
||||||
|
[guía de localización para español](/es/docs/contribute/localization_es/).
|
||||||
|
|||||||
@@ -0,0 +1,43 @@
|
|||||||
|
---
|
||||||
|
title: Contribuir a la documentación de Kubernetes en español
|
||||||
|
content_type: concept
|
||||||
|
---
|
||||||
|
|
||||||
|
<!-- overview -->
|
||||||
|
|
||||||
|
¡Bienvenido(a)!
|
||||||
|
|
||||||
|
En esta página encontrarás información sobre convenciones utilizadas en la documentación en castellano y un glosario de términos con sus traducciones.
|
||||||
|
|
||||||
|
<!-- body -->
|
||||||
|
|
||||||
|
## Glosario de terminología {#terminologia}
|
||||||
|
|
||||||
|
| English | Español | Género | Commentarios |
|
||||||
|
| ----------------- | ---------------------- | ------------ | ------------------------ |
|
||||||
|
| availability zone | zona de disponibilidad | femenino | |
|
||||||
|
| bearer token | bearer token | masculino | |
|
||||||
|
| built-in | incorporados | masculino | |
|
||||||
|
| conditions | condiciones | masculino | para node conditions |
|
||||||
|
| container | contenedor | masculino | |
|
||||||
|
| controller | controlador | masculino | |
|
||||||
|
| deploy | desplegar | | |
|
||||||
|
| Deployment | Deployment | masculino | objeto Kubernetes |
|
||||||
|
| Endpoints | Endpoints | masculino | objeto Kubernetes |
|
||||||
|
| file | archivo | masculino | |
|
||||||
|
| frontend | frontend | masculino | |
|
||||||
|
| healthy | operativo | | |
|
||||||
|
| high availability | alta disponibilidad | | |
|
||||||
|
| hook | hook | masculino | |
|
||||||
|
| instance | instancia | femenino | |
|
||||||
|
| Lease | Lease | masculino | objeto Kubernetes |
|
||||||
|
| Pod | Pod | masculino | objeto Kubernetes |
|
||||||
|
| ratio | ritmo | | |
|
||||||
|
| runtime | motor de ejecución | masculino | Container Runtime |
|
||||||
|
| scheduler | planificador | masculino | |
|
||||||
|
| Secret | Secret | masculino | objeto Kubernetes |
|
||||||
|
| secret | secreto | masculino | información confidencial |
|
||||||
|
| shell | terminal | femenino | |
|
||||||
|
| stateless | stateless | | |
|
||||||
|
| taint | contaminación | | |
|
||||||
|
| worker node | nodo de trabajo | masculino | |
|
||||||
@@ -140,9 +140,9 @@ Nodeアフィニティでは、`In`、`NotIn`、`Exists`、`DoesNotExist`、`Gt`
|
|||||||
|
|
||||||
`nodeSelector`と`nodeAffinity`の両方を指定した場合、Podは**両方の**条件を満たすNodeにスケジュールされます。
|
`nodeSelector`と`nodeAffinity`の両方を指定した場合、Podは**両方の**条件を満たすNodeにスケジュールされます。
|
||||||
|
|
||||||
`nodeAffinity`内で複数の`nodeSelectorTerms`を指定した場合、Podは**全ての**`nodeSelectorTerms`を満たしたNodeへスケジュールされます。
|
`nodeAffinity`内で複数の`nodeSelectorTerms`を指定した場合、Podは**いずれかの**`nodeSelectorTerms`を満たしたNodeへスケジュールされます。
|
||||||
|
|
||||||
`nodeSelectorTerms`内で複数の`matchExpressions`を指定した場合にはPodは**いずれかの**`matchExpressions`を満たしたNodeへスケジュールされます。
|
`nodeSelectorTerms`内で複数の`matchExpressions`を指定した場合にはPodは**全ての**`matchExpressions`を満たしたNodeへスケジュールされます。
|
||||||
|
|
||||||
PodがスケジュールされたNodeのラベルを削除したり変更しても、Podは削除されません。
|
PodがスケジュールされたNodeのラベルを削除したり変更しても、Podは削除されません。
|
||||||
言い換えると、アフィニティはPodをスケジュールする際にのみ考慮されます。
|
言い換えると、アフィニティはPodをスケジュールする際にのみ考慮されます。
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
---
|
||||||
|
title: ツール
|
||||||
|
content_type: concept
|
||||||
|
---
|
||||||
|
|
||||||
|
<!-- overview -->
|
||||||
|
Kubernetesには、Kubernetesシステムの操作に役立ついくつかの組み込みツールが含まれています。
|
||||||
|
|
||||||
|
<!-- body -->
|
||||||
|
## Kubectl
|
||||||
|
[`kubectl`](/docs/tasks/tools/install-kubectl/)は、Kubernetesのためのコマンドラインツールです。このコマンドはKubernetes cluster managerを操作します。
|
||||||
|
|
||||||
|
## Kubeadm
|
||||||
|
[`kubeadm`](docs/setup/production-environment/tools/kubeadm/install-kubeadm/)は、物理サーバやクラウドサーバ、仮想マシン上にKubenetesクラスタを容易にプロビジョニングするためのコマンドラインツールです(現在はアルファ版です)。
|
||||||
|
|
||||||
|
## Minikube
|
||||||
|
[`minikube`](https://minikube.sigs.k8s.io/docs/)は、開発やテストのためにワークステーション上でシングルノードのKubernetesクラスタをローカルで実行するツールです。
|
||||||
|
|
||||||
|
## Dashboard
|
||||||
|
[`Dashboard`](/docs/tasks/access-application-cluster/web-ui-dashboard/)は、KubernetesのWebベースのユーザインタフェースで、コンテナ化されたアプリケーションをKubernetesクラスタにデプロイしたり、トラブルシューティングしたり、クラスタとそのリソース自体を管理したりすることが出来ます。
|
||||||
|
|
||||||
|
## Helm
|
||||||
|
[`Kubernetes Helm`](https://github.com/helm/helm)は、事前に設定されたKubernetesリソースのパッケージ、別名Kubernetes chartsを管理するためのツールです。
|
||||||
|
|
||||||
|
Helmを用いて以下のことを行います。
|
||||||
|
|
||||||
|
* Kubernetes chartsとしてパッケージ化された人気のあるソフトウェアの検索と利用
|
||||||
|
|
||||||
|
* Kubernetes chartsとして所有するアプリケーションを共有すること
|
||||||
|
|
||||||
|
* Kubernetesアプリケーションの再現性のあるビルドの作成
|
||||||
|
|
||||||
|
* Kubernetesマニフェストファイルを知的な方法で管理
|
||||||
|
|
||||||
|
* Helmパッケージのリリース管理
|
||||||
|
|
||||||
|
## Kompose
|
||||||
|
[`Kompose`](https://github.com/kubernetes/kompose)は、Docker ComposeユーザがKubernetesに移行する手助けをするツールです。
|
||||||
|
|
||||||
|
Komposeを用いて以下のことを行います。
|
||||||
|
|
||||||
|
* Docker ComposeファイルのKubernetesオブジェクトへの変換
|
||||||
|
|
||||||
|
* ローカルのDocker開発からKubernetesを経由したアプリケーション管理への移行
|
||||||
|
|
||||||
|
* v1またはv2のDocker Compose用 `yaml` ファイルならびに[分散されたアプリケーションバンドル](https://docs.docker.com/compose/bundles/)の変換
|
||||||
@@ -5,7 +5,7 @@ date: 2018-04-12
|
|||||||
full_link: /ko/docs/concepts/architecture/cloud-controller/
|
full_link: /ko/docs/concepts/architecture/cloud-controller/
|
||||||
short_description: >
|
short_description: >
|
||||||
쿠버네티스를 타사 클라우드 공급자와 통합하는 컨트롤 플레인 컴포넌트.
|
쿠버네티스를 타사 클라우드 공급자와 통합하는 컨트롤 플레인 컴포넌트.
|
||||||
aka:
|
aka:
|
||||||
tags:
|
tags:
|
||||||
- core-object
|
- core-object
|
||||||
- architecture
|
- architecture
|
||||||
@@ -13,7 +13,7 @@ tags:
|
|||||||
---
|
---
|
||||||
클라우드별 컨트롤 로직을 포함하는 쿠버네티스
|
클라우드별 컨트롤 로직을 포함하는 쿠버네티스
|
||||||
{{< glossary_tooltip text="컨트롤 플레인" term_id="control-plane" >}} 컴포넌트이다.
|
{{< glossary_tooltip text="컨트롤 플레인" term_id="control-plane" >}} 컴포넌트이다.
|
||||||
클라우트 컨트롤러 매니저를 통해 클러스터를 클라우드 공급자의 API에 연결하고,
|
클라우드 컨트롤러 매니저를 통해 클러스터를 클라우드 공급자의 API에 연결하고,
|
||||||
해당 클라우드 플랫폼과 상호 작용하는 컴포넌트와 클러스터와 상호 작용하는 컴포넌트를 분리할 수 있다.
|
해당 클라우드 플랫폼과 상호 작용하는 컴포넌트와 클러스터와 상호 작용하는 컴포넌트를 분리할 수 있다.
|
||||||
|
|
||||||
<!--more-->
|
<!--more-->
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ content_type: concept
|
|||||||
weight: 30
|
weight: 30
|
||||||
description: >
|
description: >
|
||||||
API Kubernetesa służy do odpytywania i zmiany stanu obiektów Kubernetesa.
|
API Kubernetesa służy do odpytywania i zmiany stanu obiektów Kubernetesa.
|
||||||
Sercem warstwy sterowania Kubernetesa jest serwer API i udostępniane przez niego HTTP API. Przez ten serwer odbywa się komunikacja pomiędzy użytkownikami, różnymi częściami składowymi klastra oraz komponentami zewnętrznymi.
|
Sercem warstwy sterowania Kubernetesa jest serwer API i udostępniane po HTTP API. Przez ten serwer odbywa się komunikacja pomiędzy użytkownikami, różnymi częściami składowymi klastra oraz komponentami zewnętrznymi.
|
||||||
card:
|
card:
|
||||||
name: concepts
|
name: concepts
|
||||||
weight: 30
|
weight: 30
|
||||||
@@ -14,13 +14,16 @@ card:
|
|||||||
|
|
||||||
Sercem {{< glossary_tooltip text="warstwy sterowania" term_id="control-plane" >}} Kubernetes
|
Sercem {{< glossary_tooltip text="warstwy sterowania" term_id="control-plane" >}} Kubernetes
|
||||||
jest {{< glossary_tooltip text="serwer API" term_id="kube-apiserver" >}}. Serwer udostępnia
|
jest {{< glossary_tooltip text="serwer API" term_id="kube-apiserver" >}}. Serwer udostępnia
|
||||||
API poprzez HTTP, umożliwiając wzajemną komunikację pomiędzy użytkownikami, częściami składowymi klastra i komponentami zewnętrznymi.
|
API poprzez HTTP, umożliwiając wzajemną komunikację pomiędzy użytkownikami, częściami składowymi klastra
|
||||||
|
i komponentami zewnętrznymi.
|
||||||
|
|
||||||
API Kubernetes pozwala na sprawdzanie i zmianę stanu obiektów (przykładowo: pody, _Namespaces_, _ConfigMaps_, _Events_).
|
API Kubernetesa pozwala na sprawdzanie i zmianę stanu obiektów
|
||||||
|
(przykładowo: pody, _Namespaces_, _ConfigMaps_, _Events_).
|
||||||
|
|
||||||
Większość operacji może zostać wykonana poprzez
|
Większość operacji może zostać wykonana poprzez
|
||||||
interfejs linii komend (CLI) [kubectl](/docs/reference/kubectl/overview/) lub inne
|
interfejs linii komend (CLI) [kubectl](/docs/reference/kubectl/overview/) lub inne
|
||||||
programy, takie jak [kubeadm](/docs/reference/setup-tools/kubeadm/), które używają
|
programy, takie jak
|
||||||
|
[kubeadm](/docs/reference/setup-tools/kubeadm/), które używają
|
||||||
API. Możesz też korzystać z API bezpośrednio przez wywołania typu REST.
|
API. Możesz też korzystać z API bezpośrednio przez wywołania typu REST.
|
||||||
|
|
||||||
Jeśli piszesz aplikację używającą API Kubernetesa,
|
Jeśli piszesz aplikację używającą API Kubernetesa,
|
||||||
@@ -66,54 +69,77 @@ Aby wybrać format odpowiedzi, użyj nagłówków żądania zgodnie z tabelą:
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
W Kubernetesie zaimplementowany jest alternatywny format serializacji na potrzeby API oparty o Protobuf,
|
W Kubernetesie zaimplementowany jest alternatywny format serializacji na potrzeby API oparty o
|
||||||
który jest przede wszystkim przeznaczony na potrzeby wewnętrznej komunikacji w klastrze
|
Protobuf, który jest przede wszystkim przeznaczony na potrzeby wewnętrznej komunikacji w klastrze.
|
||||||
i opisany w [design proposal](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/protobuf.md).
|
Więcej szczegółów znajduje się w dokumencie [Kubernetes Protobuf serialization](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/protobuf.md).
|
||||||
Pliki IDL dla każdego ze schematów można znaleźć w pakietach Go, które definiują obiekty API.
|
oraz w plikach *Interface Definition Language* (IDL) dla każdego ze schematów
|
||||||
|
zamieszczonych w pakietach Go, które definiują obiekty API.
|
||||||
|
|
||||||
## Zmiany API
|
## Przechowywanie stanu
|
||||||
|
|
||||||
|
Kubernetes przechowuje serializowany stan swoich obiektów w
|
||||||
|
{{< glossary_tooltip term_id="etcd" >}}.
|
||||||
|
|
||||||
|
## Grupy i wersje API
|
||||||
|
|
||||||
|
Aby ułatwić usuwanie poszczególnych pól lub restrukturyzację reprezentacji zasobów, Kubernetes obsługuje
|
||||||
|
równocześnie wiele wersji API, każde poprzez osobną ścieżkę API,
|
||||||
|
na przykład: `/api/v1` lub `/apis/rbac.authorization.k8s.io/v1alpha1`.
|
||||||
|
|
||||||
|
Rozdział wersji wprowadzony jest na poziomie całego API, a nie na poziomach poszczególnych zasobów lub pól,
|
||||||
|
aby być pewnym, że API odzwierciedla w sposób przejrzysty i spójny zasoby systemowe
|
||||||
|
i ich zachowania oraz pozwala na kontrolowany dostęp do tych API, które są w fazie wycofywania
|
||||||
|
lub fazie eksperymentalnej.
|
||||||
|
|
||||||
|
Aby ułatwić rozbudowę API Kubernetes, wprowadziliśmy
|
||||||
|
[*grupy API*](https://git.k8s.io/community/contributors/design-proposals/api-machinery/api-group.md), które mogą
|
||||||
|
być [włączane i wyłączane](/docs/reference/using-api/#enabling-or-disabling).
|
||||||
|
|
||||||
|
Zasoby API są rozróżniane poprzez przynależność do grupy API, typ zasobu, przestrzeń nazw (_namespace_,
|
||||||
|
o ile ma zastosowanie) oraz nazwę. Serwer API może przeprowadzać konwersję między
|
||||||
|
różnymi wersjami API w sposób niewidoczny dla użytkownika: wszystkie te różne wersje
|
||||||
|
reprezentują w rzeczywistości ten sam zasób. Serwer API może udostępniać te same dane
|
||||||
|
poprzez kilka różnych wersji API.
|
||||||
|
|
||||||
|
Załóżmy przykładowo, że istnieją dwie wersje `v1` i `v1beta1` tego samego zasobu.
|
||||||
|
Obiekt utworzony przez wersję `v1beta1` może być odczytany,
|
||||||
|
zaktualizowany i skasowany zarówno przez wersję
|
||||||
|
`v1beta1`, jak i `v1`.
|
||||||
|
|
||||||
|
## Trwałość API
|
||||||
|
|
||||||
Z naszego doświadczenia wynika, że każdy system, który odniósł sukces, musi się nieustająco rozwijać w miarę zmieniających się potrzeb.
|
Z naszego doświadczenia wynika, że każdy system, który odniósł sukces, musi się nieustająco rozwijać w miarę zmieniających się potrzeb.
|
||||||
Dlatego Kubernetes został tak zaprojektowany, aby API mogło się zmieniać i rozrastać.
|
Dlatego Kubernetes został tak zaprojektowany, aby API mogło się zmieniać i rozrastać.
|
||||||
Projekt Kubernetes dąży do tego, aby nie wprowadzać zmian niezgodnych z istniejącymi aplikacjami klienckimi
|
Projekt Kubernetes dąży do tego, aby nie wprowadzać zmian niezgodnych z istniejącymi aplikacjami klienckimi
|
||||||
i utrzymywać zgodność przez wystarczająco długi czas, aby inne projekty zdążyły się dostosować do zmian.
|
i utrzymywać zgodność przez wystarczająco długi czas, aby inne projekty zdążyły się dostosować do zmian.
|
||||||
|
|
||||||
W ogólności, nowe zasoby i pola definiujące zasoby API są dodawane stosunkowo często. Usuwanie zasobów lub pól
|
W ogólności, nowe zasoby i pola definiujące zasoby API są dodawane stosunkowo często.
|
||||||
jest regulowane przez [API deprecation policy](/docs/reference/using-api/deprecation-policy/).
|
Usuwanie zasobów lub pól jest regulowane przez
|
||||||
Definicja zmiany zgodnej (kompatybilnej) oraz metody wprowadzania zmian w API opisano w szczegółach
|
[API deprecation policy](/docs/reference/using-api/deprecation-policy/).
|
||||||
w [API change document](https://git.k8s.io/community/contributors/devel/sig-architecture/api_changes.md).
|
|
||||||
|
|
||||||
## Grupy i wersje API
|
Po osiągnięciu przez API statusu ogólnej dostępności (_general availability_ - GA),
|
||||||
|
oznaczanej zazwyczaj jako wersja API `v1`, bardzo zależy nam na utrzymaniu jej zgodności w kolejnych wydaniach.
|
||||||
|
Kubernetes utrzymuje także zgodność dla wersji _beta_ API tam, gdzie jest to możliwe:
|
||||||
|
jeśli zdecydowałeś się używać API w wersji beta, możesz z niego korzystać także później,
|
||||||
|
kiedy dana funkcjonalność osiągnie status stabilnej.
|
||||||
|
|
||||||
Aby ułatwić usuwanie poszczególnych pól lub restrukturyzację reprezentacji zasobów, Kubernetes obsługuje
|
{{< note >}}
|
||||||
równocześnie wiele wersji API, każde poprzez osobną ścieżkę API, na przykład: `/api/v1` lub
|
Mimo, że Kubernetes stara się także zachować zgodność dla API w wersji _alpha_, zdarzają się przypadki,
|
||||||
`/apis/rbac.authorization.k8s.io/v1alpha1`.
|
kiedy nie jest to możliwe. Jeśli korzystasz z API w wersji alfa, przed aktualizacją klastra do nowej wersji
|
||||||
|
zalecamy sprawdzenie w informacjach o wydaniu, czy nie nastąpiła jakaś zmiana w tej części API.
|
||||||
Rozdział wersji wprowadzony jest na poziomie całego API, a nie na poziomach poszczególnych zasobów lub pól, aby być pewnym,
|
{{< /note >}}
|
||||||
że API odzwierciedla w sposób przejrzysty i spójny zasoby systemowe i ich zachowania i pozwala
|
|
||||||
na kontrolowany dostęp do tych API, które są w fazie wycofywania lub fazie eksperymentalnej.
|
|
||||||
|
|
||||||
Aby ułatwić rozbudowę API Kubernetes, wprowadziliśmy [*grupy API*](https://git.k8s.io/community/contributors/design-proposals/api-machinery/api-group.md),
|
|
||||||
które mogą być [włączane i wyłączane](/docs/reference/using-api/#enabling-or-disabling).
|
|
||||||
|
|
||||||
Zasoby API są rozróżniane poprzez przynależność do grupy API, typ zasobu, przestrzeń nazw (_namespace_,
|
|
||||||
o ile ma zastosowanie) oraz nazwę. Serwer API może obsługiwać
|
|
||||||
te same dane poprzez różne wersje API i przeprowadzać konwersję między
|
|
||||||
różnymi wersjami API w sposób niewidoczny dla użytkownika. Wszystkie te różne wersje
|
|
||||||
reprezentują w rzeczywistości ten sam zasób. Załóżmy przykładowo, że istnieją dwie
|
|
||||||
wersje `v1` i `v1beta1` tego samego zasobu. Obiekt utworzony przez
|
|
||||||
wersję `v1beta1` może być odczytany, zaktualizowany i skasowany zarówno przez wersję
|
|
||||||
`v1beta1`, jak i `v1`.
|
|
||||||
|
|
||||||
Zajrzyj do [API versions reference](/docs/reference/using-api/#api-versioning)
|
Zajrzyj do [API versions reference](/docs/reference/using-api/#api-versioning)
|
||||||
po szczegółowe informacje, jak definiuje się poziomy wersji API.
|
po szczegółowe definicje różnych poziomów wersji API.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Rozbudowa API
|
## Rozbudowa API
|
||||||
|
|
||||||
API Kubernetesa można rozbudowywać (rozszerzać) na dwa sposoby:
|
API Kubernetesa można rozszerzać na dwa sposoby:
|
||||||
|
|
||||||
1. [Definicje zasobów własnych](/docs/concepts/extend-kubernetes/api-extension/custom-resources/)
|
1. [Definicje zasobów własnych (_custom resources_)](/docs/concepts/extend-kubernetes/api-extension/custom-resources/)
|
||||||
pozwalają deklaratywnie określać, jak serwer API powinien dostarczać wybrane zasoby API.
|
pozwalają deklaratywnie określać, jak serwer API powinien dostarczać wybrane przez Ciebie zasoby API.
|
||||||
1. Można także rozszerzać API Kubernetesa implementując
|
1. Można także rozszerzać API Kubernetesa implementując
|
||||||
[warstwę agregacji](/docs/concepts/extend-kubernetes/api-extension/apiserver-aggregation/).
|
[warstwę agregacji](/docs/concepts/extend-kubernetes/api-extension/apiserver-aggregation/).
|
||||||
|
|
||||||
@@ -121,6 +147,9 @@ API Kubernetesa można rozbudowywać (rozszerzać) na dwa sposoby:
|
|||||||
|
|
||||||
- Naucz się, jak rozbudowywać API Kubernetesa poprzez dodawanie własnych
|
- Naucz się, jak rozbudowywać API Kubernetesa poprzez dodawanie własnych
|
||||||
[CustomResourceDefinition](/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/).
|
[CustomResourceDefinition](/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/).
|
||||||
- [Controlling API Access](/docs/reference/access-authn-authz/controlling-access/) opisuje
|
- [Controlling Access To The Kubernetes API](/docs/concepts/security/controlling-access/) opisuje
|
||||||
sposoby, jakimi klaster zarządza dostępem do API.
|
sposoby, jakimi klaster zarządza dostępem do API.
|
||||||
- Punkty dostępowe API _(endpoints)_, typy zasobów i przykłady zamieszczono w [API Reference](/docs/reference/kubernetes-api/).
|
- Punkty dostępowe API _(endpoints)_, typy zasobów i przykłady zamieszczono w
|
||||||
|
[API Reference](/docs/reference/kubernetes-api/).
|
||||||
|
- Aby dowiedzieć się, jaki rodzaj zmian można określić jako zgodne i jak zmieniać API, zajrzyj do
|
||||||
|
[API changes](https://git.k8s.io/community/contributors/devel/sig-architecture/api_changes.md#readme).
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ Kontenery działają w sposób zbliżony do maszyn wirtualnych, ale mają mniejs
|
|||||||
Kontenery zyskały popularność ze względu na swoje zalety, takie jak:
|
Kontenery zyskały popularność ze względu na swoje zalety, takie jak:
|
||||||
|
|
||||||
* Szybkość i elastyczność w tworzeniu i instalacji aplikacji: obraz kontenera buduje się łatwiej niż obraz VM.
|
* Szybkość i elastyczność w tworzeniu i instalacji aplikacji: obraz kontenera buduje się łatwiej niż obraz VM.
|
||||||
* Ułatwienie ciągłego rozwoju, integracji oraz wdrażania aplikacji (*Continuous development, integration, and deployment*): obrazy kontenerów mogą być budowane w sposób wiarygodny i częsty. Wycofanie zmian jest łatwe i szybkie (ponieważ obrazy są niezmienne).
|
* Ułatwienie ciągłego rozwoju, integracji oraz wdrażania aplikacji (*Continuous development, integration, and deployment*): obrazy kontenerów mogą być budowane w sposób wiarygodny i częsty. Wycofywanie zmian jest skuteczne i szybkie (ponieważ obrazy są niezmienne).
|
||||||
* Rozdzielenie zadań *Dev* i *Ops*: obrazy kontenerów powstają w fazie *build/release*, oddzielając w ten sposób aplikacje od infrastruktury.
|
* Rozdzielenie zadań *Dev* i *Ops*: obrazy kontenerów powstają w fazie *build/release*, oddzielając w ten sposób aplikacje od infrastruktury.
|
||||||
* Obserwowalność obejmuje nie tylko informacje i metryki z poziomu systemu operacyjnego, ale także poprawność działania samej aplikacji i inne sygnały.
|
* Obserwowalność obejmuje nie tylko informacje i metryki z poziomu systemu operacyjnego, ale także poprawność działania samej aplikacji i inne sygnały.
|
||||||
* Spójność środowiska na etapach rozwoju oprogramowania, testowania i działania w trybie produkcyjnym: działa w ten sam sposób na laptopie i w chmurze.
|
* Spójność środowiska na etapach rozwoju oprogramowania, testowania i działania w trybie produkcyjnym: działa w ten sam sposób na laptopie i w chmurze.
|
||||||
|
|||||||
@@ -8,13 +8,14 @@ content_type: concept
|
|||||||
|
|
||||||
<!-- overview -->
|
<!-- overview -->
|
||||||
|
|
||||||
Tutaj znajdziesz dokumentację źródłową Kubernetes.
|
Tutaj znajdziesz dokumentację źródłową Kubernetesa.
|
||||||
|
|
||||||
<!-- body -->
|
<!-- body -->
|
||||||
|
|
||||||
## Dokumentacja API
|
## Dokumentacja API
|
||||||
|
|
||||||
* [Dokumentacja źródłowa API Kubernetesa {{< latest-version >}}](/docs/reference/generated/kubernetes-api/{{< latest-version >}}/)
|
* [Kubernetes API Reference](/docs/reference/kubernetes-api/)
|
||||||
|
* [One-page API Reference for Kubernetes {{< param "version" >}}](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/)
|
||||||
* [Using The Kubernetes API](/docs/reference/using-api/) - ogólne informacje na temat API Kubernetesa.
|
* [Using The Kubernetes API](/docs/reference/using-api/) - ogólne informacje na temat API Kubernetesa.
|
||||||
|
|
||||||
## Biblioteki klientów API
|
## Biblioteki klientów API
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ Kubernetes zawiera różne wbudowane narzędzia służące do pracy z systemem:
|
|||||||
|
|
||||||
## Minikube
|
## Minikube
|
||||||
|
|
||||||
[`minikube`](https://minikube.sigs.k8s.io/docs/) to narzędzie do łatwego uruchamiania lokalnego klastra Kubernetes na twojej stacji roboczej na potrzeby rozwoju oprogramowania lub prowadzenia testów.
|
[`minikube`](https://minikube.sigs.k8s.io/docs/) to narzędzie do uruchamiania jednowęzłowego klastra Kubernetes na twojej stacji roboczej na potrzeby rozwoju oprogramowania lub prowadzenia testów.
|
||||||
|
|
||||||
## Pulpit *(Dashboard)*
|
## Pulpit *(Dashboard)*
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ Przed zapoznaniem się z samouczkami warto stworzyć zakładkę do
|
|||||||
|
|
||||||
* [Exposing an External IP Address to Access an Application in a Cluster](/docs/tutorials/stateless-application/expose-external-ip-address/)
|
* [Exposing an External IP Address to Access an Application in a Cluster](/docs/tutorials/stateless-application/expose-external-ip-address/)
|
||||||
|
|
||||||
* [Example: Deploying PHP Guestbook application with Redis](/docs/tutorials/stateless-application/guestbook/)
|
* [Example: Deploying PHP Guestbook application with MongoDB](/docs/tutorials/stateless-application/guestbook/)
|
||||||
|
|
||||||
## Aplikacje stanowe *(Stateful Applications)*
|
## Aplikacje stanowe *(Stateful Applications)*
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ card:
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-9">
|
<div class="col-md-9">
|
||||||
<h2>Co Kubernetes może dla Ciebie zrobić?</h2>
|
<h2>Co Kubernetes może dla Ciebie zrobić?</h2>
|
||||||
<p>Użytkownicy oczekują od współczesnych serwisów internetowych dostępności non-stop, a deweloperzy chcą móc instalować nowe wersje swoich serwisów kilka razy dziennie. Używając kontenerów można przygotowywać oprogramowanie w taki sposób, aby mogło być instalowane i aktualizowane łatwo i nie powodując żadnych przestojów. Kubernetes pomaga uruchamiać te aplikacje w kontenerach tam, gdzie chcesz i kiedy chcesz i znajdować niezbędne zasoby i narzędzia wymagane do ich pracy. Kubernetes może działać w środowiskach produkcyjnych, jest otwartym oprogramowaniem zaprojektowanym z wykorzystaniem nagromadzonego przez Google doświadczenia w zarządzaniu kontenerami, w połączeniu z najcenniejszymi ideami społeczności.</p>
|
<p>Użytkownicy oczekują od współczesnych serwisów internetowych dostępności non-stop, a deweloperzy chcą móc instalować nowe wersje swoich serwisów kilka razy dziennie. Używając kontenerów można przygotowywać oprogramowanie w taki sposób, aby mogło być instalowane i aktualizowane nie powodując żadnych przestojów. Kubernetes pomaga uruchamiać te aplikacje w kontenerach tam, gdzie chcesz i kiedy chcesz i znajdować niezbędne zasoby i narzędzia wymagane do ich pracy. Kubernetes może działać w środowiskach produkcyjnych, jest otwartym oprogramowaniem zaprojektowanym z wykorzystaniem nagromadzonego przez Google doświadczenia w zarządzaniu kontenerami, w połączeniu z najcenniejszymi ideami społeczności.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -91,9 +91,7 @@ weight: 10
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
<p>
|
<p>
|
||||||
Na potrzeby pierwszej instalacji użyjesz aplikacji na Node.js zapakowaną w kontener Docker-a. (Jeśli jeszcze nie próbowałeś stworzyć
|
Na potrzeby pierwszej instalacji użyjesz aplikacji hello-node zapakowaną w kontener Docker-a, która korzysta z NGINXa i powtarza wszystkie wysłane do niej zapytania. (Jeśli jeszcze nie próbowałeś stworzyć aplikacji hello-node i uruchomić za pomocą kontenerów, możesz spróbować teraz, kierując się instrukcjami samouczka <a href="/pl/docs/tutorials/hello-minikube/">Hello Minikube</a>).
|
||||||
aplikacji na Node.js i uruchomić za pomocą kontenerów, możesz spróbować teraz, kierując się instrukcjami samouczka
|
|
||||||
<a href="/pl/docs/tutorials/hello-minikube/">Hello Minikube</a>).
|
|
||||||
<p>
|
<p>
|
||||||
|
|
||||||
<p>Teraz, kiedy wiesz, czym są Deploymenty, przejdźmy do samouczka online, żeby zainstalować naszą pierwszą aplikację!</p>
|
<p>Teraz, kiedy wiesz, czym są Deploymenty, przejdźmy do samouczka online, żeby zainstalować naszą pierwszą aplikację!</p>
|
||||||
|
|||||||
@@ -64,12 +64,6 @@ weight: 10
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-8">
|
|
||||||
<p><img src="/docs/tutorials/kubernetes-basics/public/images/module_04_services.svg" width="150%" height="150%"></p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
<p>Serwis kieruje przychodzący ruch do grupy Podów. Serwisy są obiektami abstrakcyjnymi, dzięki którym pody mogą się psuć i być zastępowane przez Kubernetes nowymi bez ujemnego wpływu na działanie twoich aplikacji. Detekcją nowych podów i kierowaniem ruchu pomiędzy zależnymi podami (takimi, jak składowe front-end i back-end w aplikacji) zajmują się Serwisy Kubernetes.</p>
|
<p>Serwis kieruje przychodzący ruch do grupy Podów. Serwisy są obiektami abstrakcyjnymi, dzięki którym pody mogą się psuć i być zastępowane przez Kubernetes nowymi bez ujemnego wpływu na działanie twoich aplikacji. Detekcją nowych podów i kierowaniem ruchu pomiędzy zależnymi podami (takimi, jak składowe front-end i back-end w aplikacji) zajmują się Serwisy Kubernetes.</p>
|
||||||
|
|||||||
@@ -0,0 +1,47 @@
|
|||||||
|
---
|
||||||
|
layout: blog
|
||||||
|
title: 'Escalando a rede do Kubernetes com EndpointSlices'
|
||||||
|
date: 2020-09-02
|
||||||
|
slug: scaling-kubernetes-networking-with-endpointslices
|
||||||
|
---
|
||||||
|
|
||||||
|
**Autor:** Rob Scott (Google)
|
||||||
|
|
||||||
|
EndpointSlices é um novo tipo de API que provê uma alternativa escalável e extensível à API de Endpoints. EndpointSlices mantém o rastreio dos endereços IP, portas, informações de topologia e prontidão de Pods que compõem um serviço.
|
||||||
|
|
||||||
|
No Kubernetes 1.19 essa funcionalidade está habilitada por padrão, com o kube-proxy lendo os [EndpointSlices](/docs/concepts/services-networking/endpoint-slices/) ao invés de Endpoints. Apesar de isso ser uma mudança praticamente transparente, resulta numa melhoria notável de escalabilidade em grandes clusters. Também permite a adição de novas funcionalidades em releases futuras do Kubernetes, como o [Roteamento baseado em topologia.](/docs/concepts/services-networking/service-topology/).
|
||||||
|
|
||||||
|
## Limitações de escalabilidade da API de Endpoints
|
||||||
|
Na API de Endpoints, existia apenas um recurso de Endpoint por serviço (Service). Isso significa que
|
||||||
|
era necessário ser possível armazenar endereços IPs e portas para cada Pod que compunha o serviço correspondente. Isso resultava em recursos imensos de API. Para piorar, o kube-proxy rodava em cada um dos nós e observava qualquer alteração nos recursos de Endpoint. Mesmo que fosse uma simples mudança em um Endpoint, todo o objeto precisava ser enviado para cada uma das instâncias do kube-proxy.
|
||||||
|
|
||||||
|
Outra limitação da API de Endpoints era que ela limitava o número de objetos que podiam ser associados a um _Service_. O tamanho padrão de um objeto armazenado no etcd é 1.5MB. Em alguns casos, isso poderia limitar um Endpoint a 5,000 IPs de Pod. Isso não chega a ser um problema para a maioria dos usuários, mas torna-se um problema significativo para serviços que se aproximem desse tamanho.
|
||||||
|
|
||||||
|
Para demonstrar o quão significante se torna esse problema em grande escala, vamos usar de um simples exemplo: Imagine um _Service_ que possua 5,000 Pods, e que possa causar o Endpoint a ter 1.5Mb . Se apenas um Endpoint nessa lista sofra uma alteração, todo o objeto de Endpoint precisará ser redistribuído para cada um dos nós do cluster. Em um cluster com 3.000 nós, essa atualização causará o envio de 4.5Gb de dados (1.5Mb de Endpoints * 3,000 nós) para todo o cluster. Isso é quase que o suficiente para encher um DVD, e acontecerá para cada mudança de Endpoint. Agora imagine uma atualização gradual em um _Deployment_ que resulte nos 5,000 Pods serem substituídos - isso é mais que 22Tb (ou 5,000 DVDs) de dados transferidos.
|
||||||
|
|
||||||
|
## Dividindo os endpoints com a API de EndpointSlice
|
||||||
|
A API de EndpointSlice foi desenhada para resolver esse problema com um modelo similar de _sharding_. Ao invés de rastrar todos os IPs dos Pods para um _Service_, com um único recurso de Endpoint, nós dividimos eles em múltiplos EndpointSlices menores.
|
||||||
|
|
||||||
|
Usemos por exemplo um serviço com 15 pods. Nós teríamos um único recurso de Endpoints referente a todos eles. Se o EndpointSlices for configurado para armazenar 5 _endpoints_ cada, nós teríamos 3 EndpointSlices diferentes:
|
||||||
|

|
||||||
|
|
||||||
|
Por padrão, o EndpointSlices armazena um máximo de 100 _endpoints_ cada, podendo isso ser configurado com a flag `--max-endpoints-per-slice` no kube-controller-manager.
|
||||||
|
|
||||||
|
## EndpointSlices provê uma melhoria de escalabilidade em 10x
|
||||||
|
Essa API melhora dramaticamente a escalabilidade da rede. Agora quando um Pod é adicionado ou removido, apenas 1 pequeno EndpointSlice necessita ser atualizado. Essa diferença começa a ser notada quando centenas ou milhares de Pods compõem um único _Service_.
|
||||||
|
|
||||||
|
Mais significativo, agora que todos os IPs de Pods para um _Service_ não precisam ser armazenados em um único recurso, nós não precisamos nos preocupar com o limite de tamanho para objetos armazendos no etcd. EndpointSlices já foram utilizados para escalar um serviço além de 100,000 endpoints de rede.
|
||||||
|
|
||||||
|
Tudo isso é possível com uma melhoria significativa de performance feita no kube-proxy. Quando o EndpointSlices é usado em grande escala, muito menos dados serão transferidos para as atualizações de endpoints e o kube-proxy torna-se mais rápido para atualizar regras do iptables ou do ipvs. Além disso, os _Services_ podem escalar agora para pelo menos 10x mais além dos limites anteriores.
|
||||||
|
|
||||||
|
## EndpointSlices permitem novas funcionalidades
|
||||||
|
Introduzido como uma funcionalidade alpha no Kubernetes v1.16, os EndpointSlices foram construídos para permitir algumas novas funcionalidades arrebatadoras em futuras versões do Kubernetes. Isso inclui serviços dual-stack, roteamento baseado em topologia e subconjuntos de _endpoints_.
|
||||||
|
|
||||||
|
Serviços Dual-stack são uma nova funcionalidade que foi desenvolvida juntamente com o EndpointSlices. Eles irão utilizar simultâneamente endereços IPv4 e IPv6 para serviços, e dependem do campo addressType do Endpointslices para conter esses novos tipos de endereço por família de IP.
|
||||||
|
|
||||||
|
O roteamento baseado por topologia irá atualizar o kube-proxy para dar preferência no roteamento de requisições para a mesma região ou zona, utilizando-se de campos de topologia armazenados em cada endpoint dentro de um EndpointSlice. Como uma melhoria futura disso, estamos explorando o potencial de subconjuntos de endpoint. Isso irá permitir o kube-proxy apenas observar um subconjunto de EndpointSlices. Por exemplo, isso pode ser combinado com o roteamento baseado em topologia e assim, o kube-proxy precisará observar apenas EndpointSlices contendo _endpoints_ na mesma zona. Isso irá permitir uma outra melhoria significativa de escalabilidade.
|
||||||
|
|
||||||
|
## O que isso significa para a API de Endpoints?
|
||||||
|
Apesar da API de EndpointSlice prover uma alternativa nova e escalável à API de Endpoints, a API de Endpoints continuará a ser considerada uma funcionalidade estável. A mudança mais significativa para a API de Endpoints envolve começar a truncar Endpoints que podem causar problemas de escalabilidade.
|
||||||
|
|
||||||
|
A API de Endpoints não será removida, mas muitas novas funcionalidades irão depender da nova API EndpointSlice. Para obter vantágem da funcionalidade e escalabilidade que os EndpointSlices provém, aplicações que hoje consomem a API de Endpoints devem considerar suportar EndpointSlices no futuro.
|
||||||
@@ -0,0 +1,131 @@
|
|||||||
|
---
|
||||||
|
title: Organizando o acesso ao cluster usando arquivos kubeconfig
|
||||||
|
content_type: concept
|
||||||
|
weight: 60
|
||||||
|
---
|
||||||
|
|
||||||
|
<!-- overview -->
|
||||||
|
|
||||||
|
Utilize arquivos kubeconfig para organizar informações sobre clusters, usuários, namespaces e mecanismos de autenticação. A ferramenta de linha de comando `kubectl` faz uso dos arquivos kubeconfig para encontrar as informações necessárias para escolher e se comunicar com o serviço de API de um cluster.
|
||||||
|
|
||||||
|
|
||||||
|
{{< note >}}
|
||||||
|
Um arquivo que é utilizado para configurar o acesso aos clusters é chamado de *kubeconfig*. Esta á uma forma genérica de referenciamento para um arquivo de configuração desta natureza. Isso não significa que existe um arquivo com o nome `kubeconfig`.
|
||||||
|
{{< /note >}}
|
||||||
|
|
||||||
|
Por padrão, o `kubectl` procura por um arquivo de nome `config` no diretório `$HOME/.kube`
|
||||||
|
|
||||||
|
Você pode especificar outros arquivos kubeconfig através da variável de ambiente `KUBECONFIG` ou adicionando a opção [`--kubeconfig`](/docs/reference/generated/kubectl/kubectl/).
|
||||||
|
|
||||||
|
Para maiores detalhes na criação e especificação de um kubeconfig, veja o passo a passo em [Configurar Acesso para Múltiplos Clusters](/docs/tasks/access-application-cluster/configure-access-multiple-clusters).
|
||||||
|
|
||||||
|
|
||||||
|
<!-- body -->
|
||||||
|
|
||||||
|
## Suportando múltiplos clusters, usuários e mecanismos de autenticação
|
||||||
|
|
||||||
|
Imagine que você possua inúmeros clusters, e seus usuários e componentes se autenticam de várias formas. Por exemplo:
|
||||||
|
|
||||||
|
- Um kubelet ativo pode se autenticar utilizando certificados
|
||||||
|
- Um usuário pode se autenticar através de tokens
|
||||||
|
- Administradores podem possuir conjuntos de certificados os quais provém acesso aos usuários de forma individual.
|
||||||
|
|
||||||
|
Através de arquivos kubeconfig, você pode organizar os seus clusters, usuários, e namespaces. Você também pode definir contextos para uma fácil troca entre clusters e namespaces.
|
||||||
|
|
||||||
|
|
||||||
|
## Contexto
|
||||||
|
|
||||||
|
Um elemento de *contexto* em um kubeconfig é utilizado para agrupar parâmetros de acesso em um nome conveniente. Cada contexto possui três parâmetros: cluster, namespace, e usuário.
|
||||||
|
|
||||||
|
Por padrão, a ferramenta de linha de comando `kubectl` utiliza os parâmetros do _contexto atual_ para se comunicar com o cluster.
|
||||||
|
|
||||||
|
Para escolher o contexto atual:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl config use-context
|
||||||
|
```
|
||||||
|
|
||||||
|
## A variável de ambiente KUBECONFIG
|
||||||
|
|
||||||
|
A variável de ambiente `KUBECONFIG` possui uma lista dos arquivos kubeconfig. Para Linux e Mac, esta lista é delimitada por vírgula. No Windows, a lista é delimitada por ponto e vírgula. A variável de ambiente `KUBECONFIG` não é um requisito obrigatório - caso ela não exista o `kubectl` utilizará o arquivo kubeconfig padrão localizado no caminho `$HOME/.kube/config`.
|
||||||
|
|
||||||
|
Se a variável de ambiente `KUBECONFIG` existir, o `kubectl` utilizará uma configuração que é o resultado da combinação dos arquivos listados na variável de ambiente `KUBECONFIG`.
|
||||||
|
|
||||||
|
## Combinando arquivos kubeconfig
|
||||||
|
|
||||||
|
Para inspecionar a sua configuração atual, execute o seguinte comando:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl config view
|
||||||
|
```
|
||||||
|
|
||||||
|
Como descrito anteriormente, a saída poderá ser resultado de um único arquivo kubeconfig, ou poderá ser o resultado da junção de vários arquivos kubeconfig.
|
||||||
|
|
||||||
|
Aqui estão as regras que o `kubectl` utiliza quando realiza a combinação de arquivos kubeconfig:
|
||||||
|
|
||||||
|
1. Se o argumento `--kubeconfig` está definido, apenas o arquivo especificado será utilizado. Apenas uma instância desta flag é permitida.
|
||||||
|
|
||||||
|
Caso contrário, se a variável de ambiente `KUBECONFIG` estiver definida, esta deverá ser utilizada como uma lista de arquivos a serem combinados, seguindo o fluxo a seguir:
|
||||||
|
|
||||||
|
* Ignorar arquivos vazios.
|
||||||
|
* Produzir erros para aquivos cujo conteúdo não for possível desserializar.
|
||||||
|
* O primeiro arquivo que definir um valor ou mapear uma chave determinada, será o escolhido.
|
||||||
|
* Nunca modificar um valor ou mapear uma chave.
|
||||||
|
Exemplo: Preservar o contexto do primeiro arquivo que definir `current-context`.
|
||||||
|
Exemplo: Se dois arquivos especificarem um `red-user`, use apenas os valores do primeiro `red-user`. Mesmo se um segundo arquivo possuir entradas não conflitantes sobre a mesma entrada `red-user`, estas deverão ser descartadas.
|
||||||
|
|
||||||
|
Para um exemplo de definição da variável de ambiente `KUBECONFIG` veja [Definido a variável de ambiente KUBECONFIG](/docs/tasks/access-application-cluster/configure-access-multiple-clusters/#set-the-kubeconfig-environment-variable).
|
||||||
|
|
||||||
|
Caso contrário, utilize o arquivo kubeconfig padrão encontrado no diretório `$HOME/.kube/config`, sem qualquer tipo de combinação.
|
||||||
|
|
||||||
|
1. Determine o contexto a ser utilizado baseado no primeiro padrão encontrado, nesta ordem:
|
||||||
|
|
||||||
|
1. Usar o conteúdo da flag `--context` caso ela existir.
|
||||||
|
1. Usar o `current-context` a partir da combinação dos arquivos kubeconfig.
|
||||||
|
|
||||||
|
|
||||||
|
Um contexto vazio é permitido neste momento.
|
||||||
|
|
||||||
|
|
||||||
|
1. Determinar o cluster e o usuário. Neste ponto, poderá ou não existir um contexto.
|
||||||
|
Determinar o cluster e o usuário no primeiro padrão encontrado de acordo com a ordem à seguir. Este procedimento deverá executado duas vezes: uma para definir o usuário a outra para definir o cluster.
|
||||||
|
|
||||||
|
1. Utilizar a flag caso ela existir: `--user` ou `--cluster`.
|
||||||
|
1. Se o contexto não estiver vazio, utilizar o cluster ou usuário deste contexto.
|
||||||
|
|
||||||
|
O usuário e o cluster poderão estar vazios neste ponto.
|
||||||
|
|
||||||
|
1. Determinar as informações do cluster atual a serem utilizadas. Neste ponto, poderá ou não existir informações de um cluster.
|
||||||
|
|
||||||
|
Construir cada peça de informação do cluster baseado nas opções à seguir; a primeira ocorrência encontrada será a opção vencedora:
|
||||||
|
|
||||||
|
1. Usar as flags de linha de comando caso existirem: `--server`, `--certificate-authority`, `--insecure-skip-tls-verify`.
|
||||||
|
1. Se algum atributo do cluster existir a partir da combinação de kubeconfigs, estes deverão ser utilizados.
|
||||||
|
1. Se não existir informação de localização do servidor falhar.
|
||||||
|
|
||||||
|
1. Determinar a informação atual de usuário a ser utilizada. Construir a informação de usuário utilizando as mesmas regras utilizadas para o caso de informações de cluster, exceto para a regra de técnica de autenticação que deverá ser única por usuário:
|
||||||
|
|
||||||
|
1. Usar as flags, caso existirem: `--client-certificate`, `--client-key`, `--username`, `--password`, `--token`.
|
||||||
|
1. Usar os campos `user` resultado da combinação de arquivos kubeconfig.
|
||||||
|
1. Se existirem duas técnicas conflitantes, falhar.
|
||||||
|
|
||||||
|
1. Para qualquer informação que ainda estiver ausente, utilizar os valores padrão e potencialmente solicitar informações de autenticação a partir do prompt de comando.
|
||||||
|
|
||||||
|
|
||||||
|
## Referências de arquivos
|
||||||
|
|
||||||
|
Arquivos e caminhos referenciados em um arquivo kubeconfig são relativos à localização do arquivo kubeconfig.
|
||||||
|
|
||||||
|
Referências de arquivos na linha de comando são relativas ao diretório de trabalho vigente.
|
||||||
|
|
||||||
|
No arquivo `$HOME/.kube/config`, caminhos relativos são armazenados de forma relativa, e caminhos absolutos são armazenados de forma absoluta.
|
||||||
|
|
||||||
|
## {{% heading "whatsnext" %}}
|
||||||
|
|
||||||
|
|
||||||
|
* [Configurar Accesso para Multiplos Clusters](/docs/tasks/access-application-cluster/configure-access-multiple-clusters/)
|
||||||
|
* [`kubectl config`](/docs/reference/generated/kubectl/kubectl-commands#config)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -17,10 +17,9 @@ weight: 10
|
|||||||
<!--
|
<!--
|
||||||
Kubernetes runs your workload by placing containers into Pods to run on _Nodes_.
|
Kubernetes runs your workload by placing containers into Pods to run on _Nodes_.
|
||||||
A node may be a virtual or physical machine, depending on the cluster. Each node
|
A node may be a virtual or physical machine, depending on the cluster. Each node
|
||||||
is managed by the
|
contains the services necessary to run
|
||||||
{{< glossary_tooltip text="control plane" term_id="control-plane" >}}
|
{{< glossary_tooltip text="Pods" term_id="pod" >}}, managed by the
|
||||||
and contains the services necessary to run
|
{{< glossary_tooltip text="control plane" term_id="control-plane" >}}.
|
||||||
{{< glossary_tooltip text="Pods" term_id="pod" >}}
|
|
||||||
|
|
||||||
Typically you have several nodes in a cluster; in a learning or resource-limited
|
Typically you have several nodes in a cluster; in a learning or resource-limited
|
||||||
environment, you might have just one.
|
environment, you might have just one.
|
||||||
@@ -31,9 +30,9 @@ The [components](/docs/concepts/overview/components/#node-components) on a node
|
|||||||
{{< glossary_tooltip text="kube-proxy" term_id="kube-proxy" >}}.
|
{{< glossary_tooltip text="kube-proxy" term_id="kube-proxy" >}}.
|
||||||
-->
|
-->
|
||||||
Kubernetes 通过将容器放入在节点(Node)上运行的 Pod 中来执行你的工作负载。
|
Kubernetes 通过将容器放入在节点(Node)上运行的 Pod 中来执行你的工作负载。
|
||||||
节点可以是一个虚拟机或者物理机器,取决于所在的集群配置。每个节点由
|
节点可以是一个虚拟机或者物理机器,取决于所在的集群配置。
|
||||||
{{< glossary_tooltip text="控制面" term_id="control-plane" >}} 负责管理,
|
每个节点包含运行 {{< glossary_tooltip text="Pods" term_id="pod" >}} 所需的服务,
|
||||||
并包含运行 {{< glossary_tooltip text="Pods" term_id="pod" >}} 所需的服务。
|
这些 Pods 由 {{< glossary_tooltip text="控制面" term_id="control-plane" >}} 负责管理。
|
||||||
|
|
||||||
通常集群中会有若干个节点;而在一个学习用或者资源受限的环境中,你的集群中也可能
|
通常集群中会有若干个节点;而在一个学习用或者资源受限的环境中,你的集群中也可能
|
||||||
只有一个节点。
|
只有一个节点。
|
||||||
@@ -121,7 +120,7 @@ register itself with the API server. This is the preferred pattern, used by mos
|
|||||||
|
|
||||||
For self-registration, the kubelet is started with the following options:
|
For self-registration, the kubelet is started with the following options:
|
||||||
-->
|
-->
|
||||||
### 节点自注册
|
### 节点自注册 {#self-registration-of-nodes}
|
||||||
|
|
||||||
当 kubelet 标志 `--register-node` 为 true(默认)时,它会尝试向 API 服务注册自己。
|
当 kubelet 标志 `--register-node` 为 true(默认)时,它会尝试向 API 服务注册自己。
|
||||||
这是首选模式,被绝大多数发行版选用。
|
这是首选模式,被绝大多数发行版选用。
|
||||||
@@ -171,7 +170,7 @@ When you want to create Node objects manually, set the kubelet flag `--register-
|
|||||||
You can modify Node objects regardless of the setting of `--register-node`.
|
You can modify Node objects regardless of the setting of `--register-node`.
|
||||||
For example, you can set labels on an existing Node, or mark it unschedulable.
|
For example, you can set labels on an existing Node, or mark it unschedulable.
|
||||||
-->
|
-->
|
||||||
### 手动节点管理
|
### 手动节点管理 {#manual-node-administration}
|
||||||
|
|
||||||
你可以使用 {{< glossary_tooltip text="kubectl" term_id="kubectl" >}}
|
你可以使用 {{< glossary_tooltip text="kubectl" term_id="kubectl" >}}
|
||||||
来创建和修改 Node 对象。
|
来创建和修改 Node 对象。
|
||||||
@@ -457,8 +456,7 @@ of the node heartbeats as the cluster scales.
|
|||||||
#### 心跳机制 {#heartbeats}
|
#### 心跳机制 {#heartbeats}
|
||||||
|
|
||||||
Kubernetes 节点发送的心跳(Heartbeats)有助于确定节点的可用性。
|
Kubernetes 节点发送的心跳(Heartbeats)有助于确定节点的可用性。
|
||||||
心跳有两种形式:`NodeStatus` 和 [`Lease` 对象]
|
心跳有两种形式:`NodeStatus` 和 [`Lease` 对象](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#lease-v1-coordination-k8s-io)。
|
||||||
(/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#lease-v1-coordination-k8s-io)。
|
|
||||||
每个节点在 `kube-node-lease`{{< glossary_tooltip term_id="namespace" text="名字空间">}}
|
每个节点在 `kube-node-lease`{{< glossary_tooltip term_id="namespace" text="名字空间">}}
|
||||||
中都有一个与之关联的 `Lease` 对象。
|
中都有一个与之关联的 `Lease` 对象。
|
||||||
`Lease` 是一种轻量级的资源,可在集群规模扩大时提高节点心跳机制的性能。
|
`Lease` 是一种轻量级的资源,可在集群规模扩大时提高节点心跳机制的性能。
|
||||||
|
|||||||
@@ -92,10 +92,10 @@ These controllers include:
|
|||||||
-->
|
-->
|
||||||
这些控制器包括:
|
这些控制器包括:
|
||||||
|
|
||||||
* 节点控制器(Node Controller): 负责在节点出现故障时进行通知和响应。
|
* 节点控制器(Node Controller): 负责在节点出现故障时进行通知和响应
|
||||||
* 副本控制器(Replication Controller): 负责为系统中的每个副本控制器对象维护正确数量的 Pod。
|
* 副本控制器(Replication Controller): 负责为系统中的每个副本控制器对象维护正确数量的 Pod
|
||||||
* 端点控制器(Endpoints Controller): 填充端点(Endpoints)对象(即加入 Service 与 Pod)。
|
* 端点控制器(Endpoints Controller): 填充端点(Endpoints)对象(即加入 Service 与 Pod)
|
||||||
* 服务帐户和令牌控制器(Service Account & Token Controllers): 为新的命名空间创建默认帐户和 API 访问令牌.
|
* 服务帐户和令牌控制器(Service Account & Token Controllers): 为新的命名空间创建默认帐户和 API 访问令牌
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
### cloud-controller-manager
|
### cloud-controller-manager
|
||||||
|
|||||||
@@ -277,7 +277,7 @@ The following file is an Ingress resource that sends traffic to your Service via
|
|||||||
If you are running Minikube locally, you can visit hello-world.info from your browser.
|
If you are running Minikube locally, you can visit hello-world.info from your browser.
|
||||||
-->
|
-->
|
||||||
{{< note >}}
|
{{< note >}}
|
||||||
如果你在使用本地 Minikube 环境,你可以从浏览器中访问 hellow-world.info。
|
如果你在使用本地 Minikube 环境,你可以从浏览器中访问 hello-world.info。
|
||||||
{{< /note >}}
|
{{< /note >}}
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
@@ -396,7 +396,7 @@ The following file is an Ingress resource that sends traffic to your Service via
|
|||||||
-->
|
-->
|
||||||
{{< note >}}
|
{{< note >}}
|
||||||
如果你在本地运行 Minikube 环境,你可以使用浏览器来访问
|
如果你在本地运行 Minikube 环境,你可以使用浏览器来访问
|
||||||
hellow-world.info 和 hello-world.info/v2。
|
hello-world.info 和 hello-world.info/v2。
|
||||||
{{< /note >}}
|
{{< /note >}}
|
||||||
|
|
||||||
## {{% heading "whatsnext" %}}
|
## {{% heading "whatsnext" %}}
|
||||||
|
|||||||
@@ -40,26 +40,25 @@ We have multiple ways to install Kompose. Our preferred method is downloading th
|
|||||||
|
|
||||||
我们有很多种方式安装 Kompose。首选方式是从最新的 GitHub 发布页面下载二进制文件。
|
我们有很多种方式安装 Kompose。首选方式是从最新的 GitHub 发布页面下载二进制文件。
|
||||||
|
|
||||||
<!--
|
{{< tabs name="install_ways" >}}
|
||||||
## GitHub release
|
{{% tab name="GitHub 下载" %}}
|
||||||
|
|
||||||
|
<!--
|
||||||
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).
|
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).
|
||||||
-->
|
-->
|
||||||
## GitHub 发布版本
|
Kompose 通过 GitHub 发布,发布周期为三星期。
|
||||||
|
|
||||||
Kompose 通过 GitHub 发布版本,发布周期为三星期。
|
|
||||||
你可以在 [GitHub 发布页面](https://github.com/kubernetes/kompose/releases)
|
你可以在 [GitHub 发布页面](https://github.com/kubernetes/kompose/releases)
|
||||||
上看到所有当前版本。
|
上看到所有当前版本。
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# Linux
|
# Linux
|
||||||
curl -L https://github.com/kubernetes/kompose/releases/download/v1.16.0/kompose-linux-amd64 -o kompose
|
curl -L https://github.com/kubernetes/kompose/releases/download/v1.22.0/kompose-linux-amd64 -o kompose
|
||||||
|
|
||||||
# macOS
|
# macOS
|
||||||
curl -L https://github.com/kubernetes/kompose/releases/download/v1.16.0/kompose-darwin-amd64 -o kompose
|
curl -L https://github.com/kubernetes/kompose/releases/download/v1.22.0/kompose-darwin-amd64 -o kompose
|
||||||
|
|
||||||
# Windows
|
# Windows
|
||||||
curl -L https://github.com/kubernetes/kompose/releases/download/v1.16.0/kompose-windows-amd64.exe -o kompose.exe
|
curl -L https://github.com/kubernetes/kompose/releases/download/v1.22.0/kompose-windows-amd64.exe -o kompose.exe
|
||||||
|
|
||||||
chmod +x kompose
|
chmod +x kompose
|
||||||
sudo mv ./kompose /usr/local/bin/kompose
|
sudo mv ./kompose /usr/local/bin/kompose
|
||||||
@@ -68,9 +67,10 @@ sudo mv ./kompose /usr/local/bin/kompose
|
|||||||
<!--
|
<!--
|
||||||
Alternatively, you can download the [tarball](https://github.com/kubernetes/kompose/releases).
|
Alternatively, you can download the [tarball](https://github.com/kubernetes/kompose/releases).
|
||||||
-->
|
-->
|
||||||
或者,你可以下载 [tarball](https://github.com/kubernetes/kompose/releases)。
|
或者,你可以下载 [tar 包](https://github.com/kubernetes/kompose/releases)。
|
||||||
|
|
||||||
## Go
|
{{% /tab %}}
|
||||||
|
{{% tab name="基于源代码构建" %}}
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Installing using `go get` pulls from the master branch with the latest development changes.
|
Installing using `go get` pulls from the master branch with the latest development changes.
|
||||||
@@ -81,7 +81,8 @@ Installing using `go get` pulls from the master branch with the latest developme
|
|||||||
go get -u github.com/kubernetes/kompose
|
go get -u github.com/kubernetes/kompose
|
||||||
```
|
```
|
||||||
|
|
||||||
## CentOS
|
{{% /tab %}}
|
||||||
|
{{% tab name="CentOS 包" %}}
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Kompose is in [EPEL](https://fedoraproject.org/wiki/EPEL) CentOS repository.
|
Kompose is in [EPEL](https://fedoraproject.org/wiki/EPEL) CentOS repository.
|
||||||
@@ -101,7 +102,8 @@ If you have [EPEL](https://fedoraproject.org/wiki/EPEL) enabled in your system,
|
|||||||
sudo yum -y install kompose
|
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.
|
Kompose is in Fedora 24, 25 and 26 repositories. You can install it just like any other package.
|
||||||
@@ -112,7 +114,8 @@ Kompose 位于 Fedora 24、25 和 26 的代码仓库。你可以像安装其他
|
|||||||
sudo dnf -y install kompose
|
sudo dnf -y install kompose
|
||||||
```
|
```
|
||||||
|
|
||||||
## macOS
|
{{% /tab %}}
|
||||||
|
{{% tab name="Homebrew (macOS)" %}}
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
On macOS you can install latest release via [Homebrew](https://brew.sh):
|
On macOS you can install latest release via [Homebrew](https://brew.sh):
|
||||||
@@ -123,6 +126,9 @@ On macOS you can install latest release via [Homebrew](https://brew.sh):
|
|||||||
brew install kompose
|
brew install kompose
|
||||||
```
|
```
|
||||||
|
|
||||||
|
{{% /tab %}}
|
||||||
|
{{< /tabs >}}
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
## Use Kompose
|
## Use Kompose
|
||||||
-->
|
-->
|
||||||
@@ -135,129 +141,139 @@ you need is an existing `docker-compose.yml` file.
|
|||||||
再需几步,我们就把你从 Docker Compose 带到 Kubernetes。
|
再需几步,我们就把你从 Docker Compose 带到 Kubernetes。
|
||||||
你只需要一个现有的 `docker-compose.yml` 文件。
|
你只需要一个现有的 `docker-compose.yml` 文件。
|
||||||
|
|
||||||
1. <!--Go to the directory containing your `docker-compose.yml` file. If you don't
|
1. <!--Go to the directory containing your `docker-compose.yml` file. If you don't
|
||||||
have one, test using this one.-->
|
have one, test using this one.-->
|
||||||
进入 `docker-compose.yml` 文件所在的目录。如果没有,请使用下面这个进行测试。
|
进入 `docker-compose.yml` 文件所在的目录。如果没有,请使用下面这个进行测试。
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
version: "2"
|
version: "2"
|
||||||
|
|
||||||
services:
|
services:
|
||||||
|
|
||||||
redis-master:
|
redis-master:
|
||||||
image: k8s.gcr.io/redis:e2e
|
image: k8s.gcr.io/redis:e2e
|
||||||
ports:
|
ports:
|
||||||
- "6379"
|
- "6379"
|
||||||
|
|
||||||
redis-slave:
|
redis-slave:
|
||||||
image: gcr.io/google_samples/gb-redisslave:v3
|
image: gcr.io/google_samples/gb-redisslave:v3
|
||||||
ports:
|
ports:
|
||||||
- "6379"
|
- "6379"
|
||||||
environment:
|
environment:
|
||||||
- GET_HOSTS_FROM=dns
|
- GET_HOSTS_FROM=dns
|
||||||
|
|
||||||
frontend:
|
frontend:
|
||||||
image: gcr.io/google-samples/gb-frontend:v4
|
image: gcr.io/google-samples/gb-frontend:v4
|
||||||
ports:
|
ports:
|
||||||
- "80:80"
|
- "80:80"
|
||||||
environment:
|
environment:
|
||||||
- GET_HOSTS_FROM=dns
|
- GET_HOSTS_FROM=dns
|
||||||
labels:
|
labels:
|
||||||
kompose.service.type: LoadBalancer
|
kompose.service.type: LoadBalancer
|
||||||
```
|
```
|
||||||
|
|
||||||
2. <!--Run the `kompose up` command to deploy to Kubernetes directly, or skip to
|
<!--
|
||||||
the next step instead to generate a file to use with `kubectl`.-->
|
2. To convert the `docker-compose.yml` file to files that you can use with
|
||||||
运行 `kompose up` 命令直接部署到 Kubernetes,或者跳到下一步,生成 `kubectl` 使用的文件。
|
`kubectl`, run `kompose convert` and then `kubectl create -f <output file>`.
|
||||||
|
-->
|
||||||
|
2. 要将 `docker-compose.yml` 转换为 `kubectl` 可用的文件,请运行 `kompose convert`
|
||||||
|
命令进行转换,然后运行 `kubectl create -f <output file>` 进行创建。
|
||||||
|
|
||||||
```bash
|
```shell
|
||||||
$ kompose up
|
kompose convert
|
||||||
We are going to create Kubernetes Deployments, Services and PersistentVolumeClaims for your Dockerized application.
|
```
|
||||||
If you need different kind of resources, use the 'kompose convert' and 'kubectl create -f' commands instead.
|
|
||||||
|
|
||||||
INFO Successfully created Service: redis
|
```none
|
||||||
INFO Successfully created Service: web
|
INFO Kubernetes file "frontend-service.yaml" created
|
||||||
INFO Successfully created Deployment: redis
|
INFO Kubernetes file "frontend-service.yaml" created
|
||||||
INFO Successfully created Deployment: web
|
INFO Kubernetes file "frontend-service.yaml" created
|
||||||
|
INFO Kubernetes file "redis-master-service.yaml" created
|
||||||
|
INFO Kubernetes file "redis-master-service.yaml" created
|
||||||
|
INFO Kubernetes file "redis-master-service.yaml" created
|
||||||
|
INFO Kubernetes file "redis-slave-service.yaml" created
|
||||||
|
INFO Kubernetes file "redis-slave-service.yaml" created
|
||||||
|
INFO Kubernetes file "redis-slave-service.yaml" created
|
||||||
|
INFO Kubernetes file "frontend-deployment.yaml" created
|
||||||
|
INFO Kubernetes file "frontend-deployment.yaml" created
|
||||||
|
INFO Kubernetes file "frontend-deployment.yaml" created
|
||||||
|
INFO Kubernetes file "redis-master-deployment.yaml" created
|
||||||
|
INFO Kubernetes file "redis-master-deployment.yaml" created
|
||||||
|
INFO Kubernetes file "redis-master-deployment.yaml" created
|
||||||
|
INFO Kubernetes file "redis-slave-deployment.yaml" created
|
||||||
|
INFO Kubernetes file "redis-slave-deployment.yaml" created
|
||||||
|
INFO Kubernetes file "redis-slave-deployment.yaml" created
|
||||||
|
```
|
||||||
|
|
||||||
Your application has been deployed to Kubernetes. You can run 'kubectl get deployment,svc,pods,pvc' for details.
|
```bash
|
||||||
```
|
kubectl apply -f frontend-service.yaml,redis-master-service.yaml,redis-slave-service.yaml,frontend-deployment.yaml,
|
||||||
|
```
|
||||||
|
|
||||||
3. <!--To convert the `docker-compose.yml` file to files that you can use with
|
<!--
|
||||||
`kubectl`, run `kompose convert` and then `kubectl create -f <output file>`.-->
|
The output is similar to:
|
||||||
要将 `docker-compose.yml` 转换为 `kubectl` 可用的文件,请运行 `kompose convert` 命令进行转换,
|
-->
|
||||||
然后运行 `kubectl create -f <output file>` 进行创建。
|
输出类似于:
|
||||||
|
|
||||||
```shell
|
```none
|
||||||
kompose convert
|
service/frontend created
|
||||||
```
|
service/redis-master created
|
||||||
|
service/redis-slave created
|
||||||
|
deployment.apps/frontend created
|
||||||
|
deployment.apps/redis-master created
|
||||||
|
deployment.apps/redis-slave created
|
||||||
|
```
|
||||||
|
|
||||||
```
|
<!--
|
||||||
INFO Kubernetes file "frontend-service.yaml" created
|
Your deployments are running in Kubernetes.
|
||||||
INFO Kubernetes file "redis-master-service.yaml" created
|
-->
|
||||||
INFO Kubernetes file "redis-slave-service.yaml" created
|
你部署的应用在 Kubernetes 中运行起来了。
|
||||||
INFO Kubernetes file "frontend-deployment.yaml" created
|
|
||||||
INFO Kubernetes file "redis-master-deployment.yaml" created
|
|
||||||
INFO Kubernetes file "redis-slave-deployment.yaml" created
|
|
||||||
```
|
|
||||||
|
|
||||||
```shell
|
<!--
|
||||||
kubectl create -f frontend-service.yaml,redis-master-service.yaml,redis-slave-service.yaml,frontend-deployment.yaml,redis-master-deployment.yaml,redis-slave-deployment.yaml
|
3. Access your application.
|
||||||
```
|
-->
|
||||||
|
3. 访问你的应用
|
||||||
|
|
||||||
```
|
<!--
|
||||||
service/frontend created
|
If you're already using `minikube` for your development process:
|
||||||
service/redis-master created
|
-->
|
||||||
service/redis-slave created
|
|
||||||
deployment.apps/frontend created
|
|
||||||
deployment.apps/redis-master created
|
|
||||||
deployment.apps/redis-slave created
|
|
||||||
```
|
|
||||||
|
|
||||||
<!--
|
如果你在开发过程中使用 `minikube`,请执行:
|
||||||
Your deployments are running in Kubernetes.
|
|
||||||
-->
|
|
||||||
你部署的应用在 Kubernetes 中运行起来了。
|
|
||||||
|
|
||||||
4. <!--Access your application.-->
|
```shell
|
||||||
访问你的应用
|
minikube service frontend
|
||||||
|
```
|
||||||
|
|
||||||
<!--If you're already using `minikube` for your development process:-->
|
<!--
|
||||||
|
Otherwise, let's look up what IP your service is using!
|
||||||
|
-->
|
||||||
|
否则,我们要查看一下你的服务使用了什么 IP!
|
||||||
|
|
||||||
如果你在开发过程中使用 `minikube`,请执行:
|
```shell
|
||||||
|
kubectl describe svc frontend
|
||||||
|
```
|
||||||
|
|
||||||
```shell
|
```none
|
||||||
minikube service frontend
|
Name: frontend
|
||||||
```
|
Namespace: default
|
||||||
|
Labels: service=frontend
|
||||||
|
Selector: service=frontend
|
||||||
|
Type: LoadBalancer
|
||||||
|
IP: 10.0.0.183
|
||||||
|
LoadBalancer Ingress: 192.0.2.89
|
||||||
|
Port: 80 80/TCP
|
||||||
|
NodePort: 80 31144/TCP
|
||||||
|
Endpoints: 172.17.0.4:80
|
||||||
|
Session Affinity: None
|
||||||
|
No events.
|
||||||
|
```
|
||||||
|
|
||||||
<!--Otherwise, let's look up what IP your service is using!-->
|
<!--
|
||||||
否则,我们要查看一下你的服务使用了什么 IP!
|
If you're using a cloud provider, your IP will be listed next to `LoadBalancer Ingress`.
|
||||||
|
-->
|
||||||
|
如果你使用的是云提供商,你的 IP 将在 `LoadBalancer Ingress` 字段给出。
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
kubectl describe svc frontend
|
curl http://192.0.2.89
|
||||||
```
|
```
|
||||||
|
|
||||||
```
|
|
||||||
Name: frontend
|
|
||||||
Namespace: default
|
|
||||||
Labels: service=frontend
|
|
||||||
Selector: service=frontend
|
|
||||||
Type: LoadBalancer
|
|
||||||
IP: 10.0.0.183
|
|
||||||
LoadBalancer Ingress: 192.0.2.89
|
|
||||||
Port: 80 80/TCP
|
|
||||||
NodePort: 80 31144/TCP
|
|
||||||
Endpoints: 172.17.0.4:80
|
|
||||||
Session Affinity: None
|
|
||||||
No events.
|
|
||||||
```
|
|
||||||
|
|
||||||
<!--If you're using a cloud provider, your IP will be listed next to `LoadBalancer Ingress`.-->
|
|
||||||
如果你使用的是云提供商,你的 IP 将在 `LoadBalancer Ingress` 字段给出。
|
|
||||||
|
|
||||||
```shell
|
|
||||||
curl http://192.0.2.89
|
|
||||||
```
|
|
||||||
|
|
||||||
<!-- discussion -->
|
<!-- discussion -->
|
||||||
|
|
||||||
@@ -284,29 +300,37 @@ you need is an existing `docker-compose.yml` file.
|
|||||||
- [`kompose down`](#kompose-down)
|
- [`kompose down`](#kompose-down)
|
||||||
|
|
||||||
- 文档
|
- 文档
|
||||||
- [构建和推送 Docker 镜像](#构建和推送-docker-镜像)
|
- [构建和推送 Docker 镜像](#build-and-push-docker-images)
|
||||||
- [其他转换方式](#其他转换方式)
|
- [其他转换方式](#其他转换方式)
|
||||||
- [标签](#标签)
|
- [标签](#labels)
|
||||||
- [重启](#重启)
|
- [重启](#restart)
|
||||||
- [Docker Compose 版本](#docker-compose-版本)
|
- [Docker Compose 版本](#docker-compose-versions)
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Kompose has support for two providers: OpenShift and Kubernetes.
|
Kompose has support for two providers: OpenShift and Kubernetes.
|
||||||
You can choose a targeted provider using global option `--provider`. If no provider is specified, Kubernetes is set by default.
|
You can choose a targeted provider using global option `--provider`. If no provider is specified, Kubernetes is set by default.
|
||||||
-->
|
-->
|
||||||
Kompose 支持两种驱动:OpenShift 和 Kubernetes。
|
Kompose 支持两种驱动:OpenShift 和 Kubernetes。
|
||||||
你可以通过全局选项 `--provider` 选择驱动方式。如果没有指定,会将 Kubernetes 作为默认驱动。
|
你可以通过全局选项 `--provider` 选择驱动。如果没有指定,
|
||||||
|
会将 Kubernetes 作为默认驱动。
|
||||||
|
|
||||||
## `kompose convert`
|
## `kompose convert`
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Kompose supports conversion of V1, V2, and V3 Docker Compose files into Kubernetes and OpenShift objects.
|
||||||
|
-->
|
||||||
Kompose 支持将 V1、V2 和 V3 版本的 Docker Compose 文件转换为 Kubernetes 和 OpenShift 资源对象。
|
Kompose 支持将 V1、V2 和 V3 版本的 Docker Compose 文件转换为 Kubernetes 和 OpenShift 资源对象。
|
||||||
|
|
||||||
### Kubernetes
|
<!--
|
||||||
|
### Kubernetes `kompose convert` example
|
||||||
|
-->
|
||||||
|
### Kubernetes `kompose convert` 示例
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
kompose --file docker-voting.yml convert
|
kompose --file docker-voting.yml convert
|
||||||
```
|
```
|
||||||
```
|
|
||||||
|
```none
|
||||||
WARN Unsupported key networks - ignoring
|
WARN Unsupported key networks - ignoring
|
||||||
WARN Unsupported key build - ignoring
|
WARN Unsupported key build - ignoring
|
||||||
INFO Kubernetes file "worker-svc.yaml" created
|
INFO Kubernetes file "worker-svc.yaml" created
|
||||||
@@ -325,7 +349,7 @@ INFO Kubernetes file "db-deployment.yaml" created
|
|||||||
ls
|
ls
|
||||||
```
|
```
|
||||||
|
|
||||||
```
|
```none
|
||||||
db-deployment.yaml docker-compose.yml docker-gitlab.yml redis-deployment.yaml result-deployment.yaml vote-deployment.yaml worker-deployment.yaml
|
db-deployment.yaml docker-compose.yml docker-gitlab.yml redis-deployment.yaml result-deployment.yaml vote-deployment.yaml worker-deployment.yaml
|
||||||
db-svc.yaml docker-voting.yml redis-svc.yaml result-svc.yaml vote-svc.yaml worker-svc.yaml
|
db-svc.yaml docker-voting.yml redis-svc.yaml result-svc.yaml vote-svc.yaml worker-svc.yaml
|
||||||
```
|
```
|
||||||
@@ -338,7 +362,8 @@ You can also provide multiple docker-compose files at the same time:
|
|||||||
```shell
|
```shell
|
||||||
kompose -f docker-compose.yml -f docker-guestbook.yml convert
|
kompose -f docker-compose.yml -f docker-guestbook.yml convert
|
||||||
```
|
```
|
||||||
```
|
|
||||||
|
```none
|
||||||
INFO Kubernetes file "frontend-service.yaml" created
|
INFO Kubernetes file "frontend-service.yaml" created
|
||||||
INFO Kubernetes file "mlbparks-service.yaml" created
|
INFO Kubernetes file "mlbparks-service.yaml" created
|
||||||
INFO Kubernetes file "mongodb-service.yaml" created
|
INFO Kubernetes file "mongodb-service.yaml" created
|
||||||
@@ -368,7 +393,10 @@ When multiple docker-compose files are provided the configuration is merged. Any
|
|||||||
-->
|
-->
|
||||||
当提供多个 docker-compose 文件时,配置将会合并。任何通用的配置都将被后续文件覆盖。
|
当提供多个 docker-compose 文件时,配置将会合并。任何通用的配置都将被后续文件覆盖。
|
||||||
|
|
||||||
### OpenShift
|
<!--
|
||||||
|
### OpenShift `kompose convert` example
|
||||||
|
-->
|
||||||
|
### OpenShift `kompose convert` 示例
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
kompose --provider openshift --file docker-voting.yml convert
|
kompose --provider openshift --file docker-voting.yml convert
|
||||||
@@ -403,7 +431,7 @@ kompose 还支持为服务中的构建指令创建 buildconfig。
|
|||||||
kompose --provider openshift --file buildconfig/docker-compose.yml convert
|
kompose --provider openshift --file buildconfig/docker-compose.yml convert
|
||||||
```
|
```
|
||||||
|
|
||||||
```
|
```none
|
||||||
WARN [foo] Service cannot be created because of missing port.
|
WARN [foo] Service cannot be created because of missing port.
|
||||||
INFO OpenShift Buildconfig using git@github.com:rtnpro/kompose.git::master as source.
|
INFO OpenShift Buildconfig using git@github.com:rtnpro/kompose.git::master as source.
|
||||||
INFO OpenShift file "foo-deploymentconfig.yaml" created
|
INFO OpenShift file "foo-deploymentconfig.yaml" created
|
||||||
@@ -424,15 +452,19 @@ imagestream 工件,以解决 Openshift 的这个问题:https://github.com/op
|
|||||||
<!--
|
<!--
|
||||||
Kompose supports a straightforward way to deploy your "composed" application to Kubernetes or OpenShift via `kompose up`.
|
Kompose supports a straightforward way to deploy your "composed" application to Kubernetes or OpenShift via `kompose up`.
|
||||||
-->
|
-->
|
||||||
Kompose 支持通过 `kompose up` 直接将你的"复合的(composed)" 应用程序部署到 Kubernetes 或 OpenShift。
|
Kompose 支持通过 `kompose up` 直接将你的"复合的(composed)" 应用程序
|
||||||
|
部署到 Kubernetes 或 OpenShift。
|
||||||
|
|
||||||
### Kubernetes
|
<!--
|
||||||
|
### Kubernetes `kompose up` example
|
||||||
|
-->
|
||||||
|
### Kubernetes `kompose up` 示例
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
kompose --file ./examples/docker-guestbook.yml up
|
kompose --file ./examples/docker-guestbook.yml up
|
||||||
```
|
```
|
||||||
|
|
||||||
```
|
```none
|
||||||
We are going to create Kubernetes deployments and services for your Dockerized application.
|
We are going to create Kubernetes deployments and services for your Dockerized application.
|
||||||
If you need different kind of resources, use the 'kompose convert' and 'kubectl create -f' commands instead.
|
If you need different kind of resources, use the 'kompose convert' and 'kubectl create -f' commands instead.
|
||||||
|
|
||||||
@@ -468,26 +500,27 @@ pod/redis-master-1432129712-63jn8 1/1 Running 0 4m
|
|||||||
pod/redis-slave-2504961300-nve7b 1/1 Running 0 4m
|
pod/redis-slave-2504961300-nve7b 1/1 Running 0 4m
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
{{< note >}}
|
||||||
<!--
|
<!--
|
||||||
**Note**:
|
|
||||||
- You must have a running Kubernetes cluster with a pre-configured kubectl context.
|
- You must have a running Kubernetes cluster with a pre-configured kubectl context.
|
||||||
- Only deployments and services are generated and deployed to Kubernetes. If you need different kind of resources, use the `kompose convert` and `kubectl create -f` commands instead.
|
- Only deployments and services are generated and deployed to Kubernetes. If you need different kind of resources, use the `kompose convert` and `kubectl create -f` commands instead.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
**注意**:
|
|
||||||
|
|
||||||
- 你必须有一个运行正常的 Kubernetes 集群,该集群具有预先配置的 kubectl 上下文。
|
- 你必须有一个运行正常的 Kubernetes 集群,该集群具有预先配置的 kubectl 上下文。
|
||||||
- 此操作仅生成 Deployment 和 Service 对象并将其部署到 Kubernetes。
|
- 此操作仅生成 Deployment 和 Service 对象并将其部署到 Kubernetes。
|
||||||
如果需要部署其他不同类型的资源,请使用 `kompose convert` 和 `kubectl create -f` 命令。
|
如果需要部署其他不同类型的资源,请使用 `kompose convert` 和 `kubectl create -f` 命令。
|
||||||
|
{{< /note >}}
|
||||||
|
|
||||||
|
<!--
|
||||||
### OpenShift
|
### OpenShift `kompose up` example
|
||||||
|
-->
|
||||||
|
### OpenShift `kompose up` 示例
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
kompose --file ./examples/docker-guestbook.yml --provider openshift up
|
kompose --file ./examples/docker-guestbook.yml --provider openshift up
|
||||||
```
|
```
|
||||||
|
|
||||||
```
|
```none
|
||||||
We are going to create OpenShift DeploymentConfigs and Services for your Dockerized application.
|
We are going to create OpenShift DeploymentConfigs and Services for your Dockerized application.
|
||||||
If you need different kind of resources, use the 'kompose convert' and 'oc create -f' commands instead.
|
If you need different kind of resources, use the 'kompose convert' and 'oc create -f' commands instead.
|
||||||
|
|
||||||
@@ -508,7 +541,7 @@ Your application has been deployed to OpenShift. You can run 'oc get dc,svc,is'
|
|||||||
oc get dc,svc,is
|
oc get dc,svc,is
|
||||||
```
|
```
|
||||||
|
|
||||||
```
|
```none
|
||||||
NAME REVISION DESIRED CURRENT TRIGGERED BY
|
NAME REVISION DESIRED CURRENT TRIGGERED BY
|
||||||
dc/frontend 0 1 0 config,image(frontend:v4)
|
dc/frontend 0 1 0 config,image(frontend:v4)
|
||||||
dc/redis-master 0 1 0 config,image(redis-master:e2e)
|
dc/redis-master 0 1 0 config,image(redis-master:e2e)
|
||||||
@@ -523,20 +556,18 @@ is/redis-master 172.30.12.200:5000/fff/redis-master
|
|||||||
is/redis-slave 172.30.12.200:5000/fff/redis-slave v1
|
is/redis-slave 172.30.12.200:5000/fff/redis-slave v1
|
||||||
```
|
```
|
||||||
|
|
||||||
|
{{< note >}}
|
||||||
<!--
|
<!--
|
||||||
**Note**:
|
You must have a running OpenShift cluster with a pre-configured `oc` context (`oc login`)
|
||||||
- You must have a running OpenShift cluster with a pre-configured `oc` context (`oc login`)
|
|
||||||
-->
|
-->
|
||||||
**注意**:
|
你必须有一个运行正常的 OpenShift 集群,该集群具有预先配置的 `oc` 上下文 (`oc login`)。
|
||||||
|
{{< /note >}}
|
||||||
- 你必须有一个运行正常的 OpenShift 集群,该集群具有预先配置的 `oc` 上下文 (`oc login`)。
|
|
||||||
|
|
||||||
## `kompose down`
|
## `kompose down`
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Once you have deployed "composed" application to Kubernetes, `$ kompose down` will help you to take the application out by deleting its deployments and services. If you need to remove other resources, use the 'kubectl' command.
|
Once you have deployed "composed" application to Kubernetes, `$ kompose down` will help you to take the application out by deleting its deployments and services. If you need to remove other resources, use the 'kubectl' command.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
你一旦将"复合(composed)" 应用部署到 Kubernetes,`kompose down`
|
你一旦将"复合(composed)" 应用部署到 Kubernetes,`kompose down`
|
||||||
命令将能帮你通过删除 Deployment 和 Service 对象来删除应用。
|
命令将能帮你通过删除 Deployment 和 Service 对象来删除应用。
|
||||||
如果需要删除其他资源,请使用 'kubectl' 命令。
|
如果需要删除其他资源,请使用 'kubectl' 命令。
|
||||||
@@ -554,26 +585,27 @@ INFO Successfully deleted service: frontend
|
|||||||
INFO Successfully deleted deployment: frontend
|
INFO Successfully deleted deployment: frontend
|
||||||
```
|
```
|
||||||
|
|
||||||
|
{{< note >}}
|
||||||
<!--
|
<!--
|
||||||
**Note**:
|
You must have a running Kubernetes cluster with a pre-configured kubectl context.
|
||||||
|
-->
|
||||||
- You must have a running Kubernetes cluster with a pre-configured kubectl context.
|
- 你必须有一个运行正常的 Kubernetes 集群,该集群具有预先配置的 kubectl 上下文。
|
||||||
|
{{< /note >}}
|
||||||
|
|
||||||
|
<!--
|
||||||
## Build and Push Docker Images
|
## Build and Push Docker Images
|
||||||
|
|
||||||
Kompose supports both building and pushing Docker images. When using the `build` key within your Docker Compose file, your image will:
|
Kompose supports both building and pushing Docker images. When using the `build` key within your Docker Compose file, your image will:
|
||||||
|
|
||||||
- Automatically be built with Docker using the `image` key specified within your file
|
- Automatically be built with Docker using the `image` key specified within your file
|
||||||
- Be pushed to the correct Docker repository using local credentials (located at `.docker/config`)
|
- Be pushed to the correct Docker repository using local credentials (located at `.docker/config`)
|
||||||
|
|
||||||
Using an [example Docker Compose file](https://raw.githubusercontent.com/kubernetes/kompose/master/examples/buildconfig/docker-compose.yml):
|
Using an [example Docker Compose file](https://raw.githubusercontent.com/kubernetes/kompose/master/examples/buildconfig/docker-compose.yml):
|
||||||
-->
|
-->
|
||||||
|
## 构建和推送 Docker 镜像 {#build-and-push-docker-images}
|
||||||
|
|
||||||
**注意**:
|
Kompose 支持构建和推送 Docker 镜像。如果 Docker Compose 文件中使用了 `build`
|
||||||
|
关键字,你的镜像将会:
|
||||||
- 你必须有一个运行正常的 Kubernetes 集群,该集群具有预先配置的 kubectl 上下文。
|
|
||||||
|
|
||||||
## 构建和推送 Docker 镜像
|
|
||||||
|
|
||||||
Kompose 支持构建和推送 Docker 镜像。如果 Docker Compose 文件中使用了 `build` 关键字,你的镜像将会:
|
|
||||||
|
|
||||||
- 使用文档中指定的 `image` 键自动构建 Docker 镜像
|
- 使用文档中指定的 `image` 键自动构建 Docker 镜像
|
||||||
- 使用本地凭据推送到正确的 Docker 仓库
|
- 使用本地凭据推送到正确的 Docker 仓库
|
||||||
@@ -598,7 +630,7 @@ Using `kompose up` with a `build` key:
|
|||||||
kompose up
|
kompose up
|
||||||
```
|
```
|
||||||
|
|
||||||
```
|
```none
|
||||||
INFO Build key detected. Attempting to build and push image 'docker.io/foo/bar'
|
INFO Build key detected. Attempting to build and push image 'docker.io/foo/bar'
|
||||||
INFO Building image 'docker.io/foo/bar' from directory 'build'
|
INFO Building image 'docker.io/foo/bar' from directory 'build'
|
||||||
INFO Image 'docker.io/foo/bar' from directory 'build' built successfully
|
INFO Image 'docker.io/foo/bar' from directory 'build' built successfully
|
||||||
@@ -621,10 +653,10 @@ In order to disable the functionality, or choose to use BuildConfig generation (
|
|||||||
可以通过传递 `--build (local|build-config|none)` 参数来实现。
|
可以通过传递 `--build (local|build-config|none)` 参数来实现。
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# Disable building/pushing Docker images
|
# 禁止构造和推送 Docker 镜像
|
||||||
kompose up --build none
|
kompose up --build none
|
||||||
|
|
||||||
# Generate Build Config artifacts for OpenShift
|
# 为 OpenShift 生成 Build Config 工件
|
||||||
kompose up --provider openshift --build build-config
|
kompose up --provider openshift --build build-config
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -633,7 +665,7 @@ kompose up --provider openshift --build build-config
|
|||||||
|
|
||||||
The default `kompose` transformation will generate Kubernetes [Deployments](/docs/concepts/workloads/controllers/deployment/) and [Services](/docs/concepts/services-networking/service/), in yaml format. You have alternative option to generate json with `-j`. Also, you can alternatively generate [Replication Controllers](/docs/concepts/workloads/controllers/replicationcontroller/) objects, [Daemon Sets](/docs/concepts/workloads/controllers/daemonset/), or [Helm](https://github.com/helm/helm) charts.
|
The default `kompose` transformation will generate Kubernetes [Deployments](/docs/concepts/workloads/controllers/deployment/) and [Services](/docs/concepts/services-networking/service/), in yaml format. You have alternative option to generate json with `-j`. Also, you can alternatively generate [Replication Controllers](/docs/concepts/workloads/controllers/replicationcontroller/) objects, [Daemon Sets](/docs/concepts/workloads/controllers/daemonset/), or [Helm](https://github.com/helm/helm) charts.
|
||||||
-->
|
-->
|
||||||
## 其他转换方式
|
## 其他转换方式 {#alternative-conversions}
|
||||||
|
|
||||||
默认的 `kompose` 转换会生成 yaml 格式的 Kubernetes
|
默认的 `kompose` 转换会生成 yaml 格式的 Kubernetes
|
||||||
[Deployment](/zh/docs/concepts/workloads/controllers/deployment/) 和
|
[Deployment](/zh/docs/concepts/workloads/controllers/deployment/) 和
|
||||||
@@ -646,7 +678,8 @@ The default `kompose` transformation will generate Kubernetes [Deployments](/doc
|
|||||||
```shell
|
```shell
|
||||||
kompose convert -j
|
kompose convert -j
|
||||||
```
|
```
|
||||||
```
|
|
||||||
|
```none
|
||||||
INFO Kubernetes file "redis-svc.json" created
|
INFO Kubernetes file "redis-svc.json" created
|
||||||
INFO Kubernetes file "web-svc.json" created
|
INFO Kubernetes file "web-svc.json" created
|
||||||
INFO Kubernetes file "redis-deployment.json" created
|
INFO Kubernetes file "redis-deployment.json" created
|
||||||
@@ -661,7 +694,8 @@ The `*-deployment.json` files contain the Deployment objects.
|
|||||||
```shell
|
```shell
|
||||||
kompose convert --replication-controller
|
kompose convert --replication-controller
|
||||||
```
|
```
|
||||||
```
|
|
||||||
|
```none
|
||||||
INFO Kubernetes file "redis-svc.yaml" created
|
INFO Kubernetes file "redis-svc.yaml" created
|
||||||
INFO Kubernetes file "web-svc.yaml" created
|
INFO Kubernetes file "web-svc.yaml" created
|
||||||
INFO Kubernetes file "redis-replicationcontroller.yaml" created
|
INFO Kubernetes file "redis-replicationcontroller.yaml" created
|
||||||
@@ -671,7 +705,6 @@ INFO Kubernetes file "web-replicationcontroller.yaml" created
|
|||||||
<!--
|
<!--
|
||||||
The `*-replicationcontroller.yaml` files contain the Replication Controller objects. If you want to specify replicas (default is 1), use `--replicas` flag: `$ kompose convert --replication-controller --replicas 3`
|
The `*-replicationcontroller.yaml` files contain the Replication Controller objects. If you want to specify replicas (default is 1), use `--replicas` flag: `$ kompose convert --replication-controller --replicas 3`
|
||||||
-->
|
-->
|
||||||
|
|
||||||
`*-replicationcontroller.yaml` 文件包含 Replication Controller 对象。
|
`*-replicationcontroller.yaml` 文件包含 Replication Controller 对象。
|
||||||
如果你想指定副本数(默认为 1),可以使用 `--replicas` 参数:
|
如果你想指定副本数(默认为 1),可以使用 `--replicas` 参数:
|
||||||
`kompose convert --replication-controller --replicas 3`
|
`kompose convert --replication-controller --replicas 3`
|
||||||
@@ -680,7 +713,7 @@ The `*-replicationcontroller.yaml` files contain the Replication Controller obje
|
|||||||
kompose convert --daemon-set
|
kompose convert --daemon-set
|
||||||
```
|
```
|
||||||
|
|
||||||
```
|
```none
|
||||||
INFO Kubernetes file "redis-svc.yaml" created
|
INFO Kubernetes file "redis-svc.yaml" created
|
||||||
INFO Kubernetes file "web-svc.yaml" created
|
INFO Kubernetes file "web-svc.yaml" created
|
||||||
INFO Kubernetes file "redis-daemonset.yaml" created
|
INFO Kubernetes file "redis-daemonset.yaml" created
|
||||||
@@ -688,17 +721,19 @@ INFO Kubernetes file "web-daemonset.yaml" created
|
|||||||
```
|
```
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
The `*-daemonset.yaml` files contain the Daemon Set objects
|
The `*-daemonset.yaml` files contain the DaemonSet objects
|
||||||
If you want to generate a Chart to be used with [Helm](https://github.com/kubernetes/helm) simply do:
|
If you want to generate a Chart to be used with [Helm](https://github.com/kubernetes/helm) simply do:
|
||||||
-->
|
-->
|
||||||
`*-daemonset.yaml` 文件包含 Daemon Set 对象。
|
`*-daemonset.yaml` 文件包含 DaemonSet 对象。
|
||||||
|
|
||||||
如果你想生成 [Helm](https://github.com/kubernetes/helm) 可用的 Chart,只需简单的执行下面的命令:
|
如果你想生成 [Helm](https://github.com/kubernetes/helm) 可用的 Chart,
|
||||||
|
只需简单的执行下面的命令:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
kompose convert -c
|
kompose convert -c
|
||||||
```
|
```
|
||||||
```
|
|
||||||
|
```none
|
||||||
INFO Kubernetes file "web-svc.yaml" created
|
INFO Kubernetes file "web-svc.yaml" created
|
||||||
INFO Kubernetes file "redis-svc.yaml" created
|
INFO Kubernetes file "redis-svc.yaml" created
|
||||||
INFO Kubernetes file "web-deployment.yaml" created
|
INFO Kubernetes file "web-deployment.yaml" created
|
||||||
@@ -734,9 +769,10 @@ The chart structure is aimed at providing a skeleton for building your Helm char
|
|||||||
|
|
||||||
For example:
|
For example:
|
||||||
-->
|
-->
|
||||||
## 标签
|
## 标签 {#labels}
|
||||||
|
|
||||||
`kompose` 支持 `docker-compose.yml` 文件中用于 Kompose 的标签,以便在转换时明确定义 Service 的行为。
|
`kompose` 支持 `docker-compose.yml` 文件中用于 Kompose 的标签,以便
|
||||||
|
在转换时明确定义 Service 的行为。
|
||||||
|
|
||||||
- `kompose.service.type` 定义要创建的 Service 类型。例如:
|
- `kompose.service.type` 定义要创建的 Service 类型。例如:
|
||||||
|
|
||||||
@@ -761,11 +797,13 @@ For example:
|
|||||||
For example:
|
For example:
|
||||||
-->
|
-->
|
||||||
- `kompose.service.expose` 定义是否允许从集群外部访问 Service。
|
- `kompose.service.expose` 定义是否允许从集群外部访问 Service。
|
||||||
如果该值被设置为 "true",提供程序将自动设置端点,对于任何其他值,该值将被设置为主机名。
|
如果该值被设置为 "true",提供程序将自动设置端点,
|
||||||
|
对于任何其他值,该值将被设置为主机名。
|
||||||
如果在 Service 中定义了多个端口,则选择第一个端口作为公开端口。
|
如果在 Service 中定义了多个端口,则选择第一个端口作为公开端口。
|
||||||
|
|
||||||
- 对于 Kubernetes 驱动程序,创建了一个 Ingress 资源,并且假定已经配置了相应的 Ingress 控制器。
|
- 如果使用 Kubernetes 驱动,会有一个 Ingress 资源被创建,并且假定
|
||||||
- 对于 OpenShift 驱动程序, 创建一个 route。
|
已经配置了相应的 Ingress 控制器。
|
||||||
|
- 如果使用 OpenShift 驱动, 则会有一个 route 被创建。
|
||||||
|
|
||||||
例如:
|
例如:
|
||||||
|
|
||||||
@@ -793,19 +831,18 @@ The currently supported options are:
|
|||||||
| kompose.service.type | nodeport / clusterip / loadbalancer |
|
| kompose.service.type | nodeport / clusterip / loadbalancer |
|
||||||
| kompose.service.expose| true / hostname |
|
| kompose.service.expose| true / hostname |
|
||||||
-->
|
-->
|
||||||
|
|
||||||
当前支持的选项有:
|
当前支持的选项有:
|
||||||
|
|
||||||
| 键 | 值 |
|
| 键 | 值 |
|
||||||
|----------------------|-------------------------------------|
|
|------------------------|-------------------------------------|
|
||||||
| kompose.service.type | nodeport / clusterip / loadbalancer |
|
| kompose.service.type | nodeport / clusterip / loadbalancer |
|
||||||
| kompose.service.expose| true / hostname |
|
| kompose.service.expose | true / hostname |
|
||||||
|
|
||||||
|
{{< note >}}
|
||||||
<!--
|
<!--
|
||||||
The `kompose.service.type` label should be defined with `ports` only, otherwise `kompose` will fail.
|
The `kompose.service.type` label should be defined with `ports` only, otherwise `kompose` will fail.
|
||||||
-->
|
-->
|
||||||
{{< note >}}
|
`kompose.service.type` 标签应该只用 `ports` 来定义,否则 `kompose` 会失败。
|
||||||
`kompose.service.type` 标签应该只用`ports`来定义,否则 `kompose` 会失败。
|
|
||||||
{{< /note >}}
|
{{< /note >}}
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
@@ -813,10 +850,10 @@ The `kompose.service.type` label should be defined with `ports` only, otherwise
|
|||||||
|
|
||||||
If you want to create normal pods without controllers you can use `restart` construct of docker-compose to define that. Follow table below to see what happens on the `restart` value.
|
If you want to create normal pods without controllers you can use `restart` construct of docker-compose to define that. Follow table below to see what happens on the `restart` value.
|
||||||
-->
|
-->
|
||||||
## 重启
|
## 重启 {#restart}
|
||||||
|
|
||||||
如果你想创建没有控制器的普通 Pod,可以使用 docker-compose 的 `restart` 结构来定义它。
|
如果你想创建没有控制器的普通 Pod,可以使用 docker-compose 的 `restart`
|
||||||
请参考下表了解 `restart` 的不同参数。
|
结构来指定这一行为。请参考下表了解 `restart` 的不同参数。
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
| `docker-compose` `restart` | object created | Pod `restartPolicy` |
|
| `docker-compose` `restart` | object created | Pod `restartPolicy` |
|
||||||
@@ -827,10 +864,10 @@ If you want to create normal pods without controllers you can use `restart` cons
|
|||||||
| `no` | Pod | `Never` |
|
| `no` | Pod | `Never` |
|
||||||
-->
|
-->
|
||||||
|
|
||||||
| `docker-compose` `restart` | 创建的对象 | Pod `restartPolicy` |
|
| `docker-compose` `restart` | 创建的对象 | Pod `restartPolicy` |
|
||||||
|----------------------------|-------------------|---------------------|
|
|----------------------------|-------------------|---------------------|
|
||||||
| `""` | 控制器对象 | `Always` |
|
| `""` | 控制器对象 | `Always` |
|
||||||
| `always` | 控制器对象 | `Always` |
|
| `always` | 控制器对象 | `Always` |
|
||||||
| `on-failure` | Pod | `OnFailure` |
|
| `on-failure` | Pod | `OnFailure` |
|
||||||
| `no` | Pod | `Never` |
|
| `no` | Pod | `Never` |
|
||||||
|
|
||||||
@@ -843,9 +880,9 @@ The controller object could be `deployment` or `replicationcontroller`, etc.
|
|||||||
{{< /note >}}
|
{{< /note >}}
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
For e.g. `pival` service will become pod down here. This container calculated value of `pi`.
|
For example, the `pival` service will become pod down here. This container calculated value of `pi`.
|
||||||
-->
|
-->
|
||||||
例如,`pival` Service 将在这里变成 Pod。这个容器的计算值为 `pi`。
|
例如,`pival` Service 将在这里变成 Pod。这个容器计算 `pi` 的取值。
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
version: '2'
|
version: '2'
|
||||||
@@ -858,23 +895,22 @@ services:
|
|||||||
```
|
```
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
### Warning about Deployment Config's
|
### Warning about Deployment Configurations
|
||||||
|
|
||||||
If the Docker Compose file has a volume specified for a service, the Deployment (Kubernetes) or DeploymentConfig (OpenShift) strategy is changed to "Recreate" instead of "RollingUpdate" (default). This is done to avoid multiple instances of a service from accessing a volume at the same time.
|
If the Docker Compose file has a volume specified for a service, the Deployment (Kubernetes) or DeploymentConfig (OpenShift) strategy is changed to "Recreate" instead of "RollingUpdate" (default). This is done to avoid multiple instances of a service from accessing a volume at the same time.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
### 关于 Deployment Config 的提醒
|
### 关于 Deployment Config 的提醒
|
||||||
|
|
||||||
如果 Docker Compose 文件中为服务声明了卷,Deployment (Kubernetes) 或 DeploymentConfig (OpenShift)
|
如果 Docker Compose 文件中为服务声明了卷,Deployment (Kubernetes) 或
|
||||||
的策略会从 "RollingUpdate" (默认) 变为 "Recreate"。
|
DeploymentConfig (OpenShift) 策略会从 "RollingUpdate" (默认) 变为 "Recreate"。
|
||||||
这样做的目的是为了避免服务的多个实例同时访问卷。
|
这样做的目的是为了避免服务的多个实例同时访问卷。
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
If the Docker Compose file has service name with `_` in it (eg.`web_service`), then it will be replaced by `-` and the service name will be renamed accordingly (eg.`web-service`). Kompose does this because "Kubernetes" doesn't allow `_` in object name.
|
If the Docker Compose file has service name with `_` in it (eg.`web_service`), then it will be replaced by `-` and the service name will be renamed accordingly (eg.`web-service`). Kompose does this because "Kubernetes" doesn't allow `_` in object name.
|
||||||
Please note that changing service name might break some `docker-compose` files.
|
Please note that changing service name might break some `docker-compose` files.
|
||||||
-->
|
-->
|
||||||
如果 Docker Compose 文件中的服务名包含 `_` (例如 `web_service`),
|
如果 Docker Compose 文件中的服务名包含 `_`(例如 `web_service`),
|
||||||
那么将会被替换为 `-`,服务也相应的会重命名(例如 `web-service`)。
|
那么将会被替换为 `-`,服务也相应的会重命名(例如 `web-service`)。
|
||||||
Kompose 这样做的原因是 "Kubernetes" 不允许对象名称中包含 `_`。
|
Kompose 这样做的原因是 "Kubernetes" 不允许对象名称中包含 `_`。
|
||||||
|
|
||||||
请注意,更改服务名称可能会破坏一些 `docker-compose` 文件。
|
请注意,更改服务名称可能会破坏一些 `docker-compose` 文件。
|
||||||
@@ -883,14 +919,15 @@ Kompose 这样做的原因是 "Kubernetes" 不允许对象名称中包含 `_`。
|
|||||||
## Docker Compose Versions
|
## Docker Compose Versions
|
||||||
|
|
||||||
Kompose supports Docker Compose versions: 1, 2 and 3. We have limited support on versions 2.1 and 3.2 due to their experimental nature.
|
Kompose supports Docker Compose versions: 1, 2 and 3. We have limited support on versions 2.1 and 3.2 due to their experimental nature.
|
||||||
|
|
||||||
A full list on compatibility between all three versions is listed in our [conversion document](https://github.com/kubernetes/kompose/blob/master/docs/conversion.md) including a list of all incompatible Docker Compose keys.
|
A full list on compatibility between all three versions is listed in our [conversion document](https://github.com/kubernetes/kompose/blob/master/docs/conversion.md) including a list of all incompatible Docker Compose keys.
|
||||||
-->
|
-->
|
||||||
## Docker Compose 版本
|
## Docker Compose 版本 {#docker-compose-versions}
|
||||||
|
|
||||||
Kompose 支持的 Docker Compose 版本包括:1、2 和 3。有限支持 2.1 和 3.2 版本,因为它们还在实验阶段。
|
Kompose 支持的 Docker Compose 版本包括:1、2 和 3。
|
||||||
|
对 2.1 和 3.2 版本的支持还有限,因为它们还在实验阶段。
|
||||||
|
|
||||||
所有三个版本的兼容性列表请查看我们的
|
所有三个版本的兼容性列表请查看我们的
|
||||||
[转换文档](https://github.com/kubernetes/kompose/blob/master/docs/conversion.md),
|
[转换文档](https://github.com/kubernetes/kompose/blob/master/docs/conversion.md),
|
||||||
文档中列出了所有不兼容的 Docker Compose 关键字。
|
文档中列出了所有不兼容的 Docker Compose 关键字。
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -434,6 +434,127 @@ usual.
|
|||||||
如果延迟(冷却)时间设置的太短,那么副本数量有可能跟以前一样出现抖动。
|
如果延迟(冷却)时间设置的太短,那么副本数量有可能跟以前一样出现抖动。
|
||||||
{{< /note >}}
|
{{< /note >}}
|
||||||
|
|
||||||
|
<!--
|
||||||
|
## Support for resource metrics
|
||||||
|
|
||||||
|
Any HPA target can be scaled based on the resource usage of the pods in the scaling target.
|
||||||
|
When defining the pod specification the resource requests like `cpu` and `memory` should
|
||||||
|
be specified. This is used to determine the resource utilization and used by the HPA controller
|
||||||
|
to scale the target up or down. To use resource utilization based scaling specify a metric source
|
||||||
|
like this:
|
||||||
|
-->
|
||||||
|
## 对资源指标的支持 {#support-for-resource-metrics}
|
||||||
|
|
||||||
|
HPA 的任何目标资源都可以基于其中的 Pods 的资源用量来实现扩缩。
|
||||||
|
在定义 Pod 规约时,类似 `cpu` 和 `memory` 这类资源请求必须被设定。
|
||||||
|
这些设定值被用来确定资源利用量并被 HPA 控制器用来对目标资源完成扩缩操作。
|
||||||
|
要使用基于资源利用率的扩缩,可以像下面这样指定一个指标源:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
type: Resource
|
||||||
|
resource:
|
||||||
|
name: cpu
|
||||||
|
target:
|
||||||
|
type: Utilization
|
||||||
|
averageUtilization: 60
|
||||||
|
```
|
||||||
|
|
||||||
|
<!--
|
||||||
|
With this metric the HPA controller will keep the average utilization of the pods in the scaling
|
||||||
|
target at 60%. Utilization is the ratio between the current usage of resource to the requested
|
||||||
|
resources of the pod. See [Algorithm](#algorithm-details) for more details about how the utilization
|
||||||
|
is calculated and averaged.
|
||||||
|
-->
|
||||||
|
基于这一指标设定,HPA 控制器会维持扩缩目标中的 Pods 的平均资源利用率在 60%。
|
||||||
|
利用率是 Pod 的当前资源用量与其请求值之间的比值。关于如何计算利用率以及如何计算平均值
|
||||||
|
的细节可参考[算法](#algorithm-details)小节。
|
||||||
|
|
||||||
|
{{< note >}}
|
||||||
|
<!--
|
||||||
|
Since the resource usages of all the containers are summed up the total pod utilization may not
|
||||||
|
accurately represent the individual container resource usage. This could lead to situations where
|
||||||
|
a single container might be running with high usage and the HPA will not scale out because the overall
|
||||||
|
pod usage is still within acceptable limits.
|
||||||
|
-->
|
||||||
|
由于所有的容器的资源用量都会被累加起来,Pod 的总体资源用量值可能不会精确体现
|
||||||
|
各个容器的资源用量。这一现象也会导致一些问题,例如某个容器运行时的资源用量非常
|
||||||
|
高,但因为 Pod 层面的资源用量总值让人在可接受的约束范围内,HPA 不会执行扩大
|
||||||
|
目标对象规模的操作。
|
||||||
|
{{< /note >}}
|
||||||
|
|
||||||
|
<!--
|
||||||
|
### Container Resource Metrics
|
||||||
|
-->
|
||||||
|
### 容器资源指标 {#container-resource-metrics}
|
||||||
|
|
||||||
|
{{< feature-state for_k8s_version="v1.20" state="alpha" >}}
|
||||||
|
|
||||||
|
<!--
|
||||||
|
`HorizontalPodAutoscaler` also supports a container metric source where the HPA can track the
|
||||||
|
resource usage of individual containers across a set of Pods, in order to scale the target resource.
|
||||||
|
This lets you configure scaling thresholds for the containers that matter most in a particular Pod.
|
||||||
|
For example, if you have a web application and a logging sidecar, you can scale based on the resource
|
||||||
|
use of the web application, ignoring the sidecar container and its resource use.
|
||||||
|
-->
|
||||||
|
`HorizontalPodAutoscaler` 也支持容器指标源,这时 HPA 可以跟踪记录一组 Pods 中各个容器的
|
||||||
|
资源用量,进而触发扩缩目标对象的操作。
|
||||||
|
容器资源指标的支持使得你可以为特定 Pod 中最重要的容器配置规模缩放阈值。
|
||||||
|
例如,如果你有一个 Web 应用和一个执行日志操作的边车容器,你可以基于 Web 应用的
|
||||||
|
资源用量来执行扩缩,忽略边车容器的存在及其资源用量。
|
||||||
|
|
||||||
|
<!--
|
||||||
|
If you revise the target resource to have a new Pod specification with a different set of containers,
|
||||||
|
you should revise the HPA spec if that newly added container should also be used for
|
||||||
|
scaling. If the specified container in the metric source is not present or only present in a subset
|
||||||
|
of the pods then those pods are ignored and the recommendation is recalculated. See [Algorithm](#algorithm-details)
|
||||||
|
for more details about the calculation. To use container resources for autoscaling define a metric
|
||||||
|
source as follows:
|
||||||
|
-->
|
||||||
|
如果你更改缩放目标对象,令其使用新的、包含一组不同的容器的 Pod 规约,你就需要
|
||||||
|
修改 HPA 的规约才能基于新添加的容器来执行规模扩缩操作。
|
||||||
|
如果指标源中指定的容器不存在或者仅存在于部分 Pods 中,那么这些 Pods 会被忽略,
|
||||||
|
HPA 会重新计算资源用量值。参阅[算法](#algorithm-details)小节进一步了解计算细节。
|
||||||
|
要使用容器资源用量来完成自动扩缩,可以像下面这样定义指标源:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
type: ContainerResource
|
||||||
|
containerResource:
|
||||||
|
name: cpu
|
||||||
|
container: application
|
||||||
|
target:
|
||||||
|
type: Utilization
|
||||||
|
averageUtilization: 60
|
||||||
|
```
|
||||||
|
|
||||||
|
<!--
|
||||||
|
In the above example the HPA controller scales the target such that the average utilization of the cpu
|
||||||
|
in the `application` container of all the pods is 60%.
|
||||||
|
-->
|
||||||
|
在上面的例子中,HPA 控制器会对目标对象执行扩缩操作以确保所有 Pods 中
|
||||||
|
`application` 容器的平均 CPU 用量为 60%。
|
||||||
|
|
||||||
|
{{< note >}}
|
||||||
|
<!--
|
||||||
|
If you change the name of a container that a HorizontalPodAutoscaler is tracking, you can
|
||||||
|
make that change in a specific order to ensure scaling remains available and effective
|
||||||
|
whilst the change is being applied. Before you update the resource that defines the container
|
||||||
|
(such as a Deployment), you should update the associated HPA to track both the new and
|
||||||
|
old container names. This way, the HPA is able to calculate a scaling recommendation
|
||||||
|
throughout the update process.
|
||||||
|
-->
|
||||||
|
如果你要更改 HorizontalPodAutoscaler 所跟踪记录的容器的名称,你可以按一定顺序
|
||||||
|
来执行这一更改,确保在应用更改的过程中用来判定扩缩行为的容器可用。
|
||||||
|
在更新定义容器的资源(如 Deployment)之前,你需要更新相关的 HPA,使之能够同时
|
||||||
|
跟踪记录新的和老的容器名称。这样,HPA 就能够在整个更新过程中继续计算并提供扩缩操作建议。
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Once you have rolled out the container name change to the workload resource, tidy up by removing
|
||||||
|
the old container name from the HPA specification.
|
||||||
|
-->
|
||||||
|
一旦你已经将容器名称变更这一操作应用到整个负载对象至上,就可以从 HPA
|
||||||
|
的规约中去掉老的容器名称,完成清理操作。
|
||||||
|
{{< /note >}}
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
## Support for multiple metrics
|
## Support for multiple metrics
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ Use [Helm](https://helm.sh/) to install Service Catalog on your Kubernetes clust
|
|||||||
* 如果你正在使用 `hack/local-up-cluster.sh`,请确保设置了 `KUBE_ENABLE_CLUSTER_DNS` 环境变量,然后运行安装脚本。
|
* 如果你正在使用 `hack/local-up-cluster.sh`,请确保设置了 `KUBE_ENABLE_CLUSTER_DNS` 环境变量,然后运行安装脚本。
|
||||||
* [安装和设置 v1.7 或更高版本的 kubectl](/zh/docs/tasks/tools/install-kubectl/),确保将其配置为连接到 Kubernetes 集群。
|
* [安装和设置 v1.7 或更高版本的 kubectl](/zh/docs/tasks/tools/install-kubectl/),确保将其配置为连接到 Kubernetes 集群。
|
||||||
* 安装 v2.7.0 或更高版本的 [Helm](https://helm.sh/)。
|
* 安装 v2.7.0 或更高版本的 [Helm](https://helm.sh/)。
|
||||||
* 遵照 [Helm 安装说明](https://github.com/kubernetes/helm/blob/master/docs/install.md)。
|
* 遵照 [Helm 安装说明](https://helm.sh/docs/intro/install/)。
|
||||||
* 如果已经安装了适当版本的 Helm,请执行 `helm init` 来安装 Helm 的服务器端组件 Tiller。
|
* 如果已经安装了适当版本的 Helm,请执行 `helm init` 来安装 Helm 的服务器端组件 Tiller。
|
||||||
|
|
||||||
<!-- steps -->
|
<!-- steps -->
|
||||||
|
|||||||
Reference in New Issue
Block a user