Merge remote-tracking branch 'upstream/master' into dev-1.21
This commit is contained in:
@@ -45,7 +45,7 @@ Before choosing a guide, here are some considerations:
|
||||
|
||||
## Securing a cluster
|
||||
|
||||
* [Certificates](/docs/concepts/cluster-administration/certificates/) describes the steps to generate certificates using different tool chains.
|
||||
* [Generate Certificates](/docs/tasks/administer-cluster/certificates/) describes the steps to generate certificates using different tool chains.
|
||||
|
||||
* [Kubernetes Container Environment](/docs/concepts/containers/container-environment/) describes the environment for Kubelet managed containers on a Kubernetes node.
|
||||
|
||||
|
||||
@@ -4,249 +4,6 @@ content_type: concept
|
||||
weight: 20
|
||||
---
|
||||
|
||||
|
||||
<!-- overview -->
|
||||
|
||||
When using client certificate authentication, you can generate certificates
|
||||
manually through `easyrsa`, `openssl` or `cfssl`.
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- body -->
|
||||
|
||||
### easyrsa
|
||||
|
||||
**easyrsa** can manually generate certificates for your cluster.
|
||||
|
||||
1. Download, unpack, and initialize the patched version of easyrsa3.
|
||||
|
||||
curl -LO https://storage.googleapis.com/kubernetes-release/easy-rsa/easy-rsa.tar.gz
|
||||
tar xzf easy-rsa.tar.gz
|
||||
cd easy-rsa-master/easyrsa3
|
||||
./easyrsa init-pki
|
||||
1. Generate a new certificate authority (CA). `--batch` sets automatic mode;
|
||||
`--req-cn` specifies the Common Name (CN) for the CA's new root certificate.
|
||||
|
||||
./easyrsa --batch "--req-cn=${MASTER_IP}@`date +%s`" build-ca nopass
|
||||
1. Generate server certificate and key.
|
||||
The argument `--subject-alt-name` sets the possible IPs and DNS names the API server will
|
||||
be accessed with. The `MASTER_CLUSTER_IP` is usually the first IP from the service CIDR
|
||||
that is specified as the `--service-cluster-ip-range` argument for both the API server and
|
||||
the controller manager component. The argument `--days` is used to set the number of days
|
||||
after which the certificate expires.
|
||||
The sample below also assumes that you are using `cluster.local` as the default
|
||||
DNS domain name.
|
||||
|
||||
./easyrsa --subject-alt-name="IP:${MASTER_IP},"\
|
||||
"IP:${MASTER_CLUSTER_IP},"\
|
||||
"DNS:kubernetes,"\
|
||||
"DNS:kubernetes.default,"\
|
||||
"DNS:kubernetes.default.svc,"\
|
||||
"DNS:kubernetes.default.svc.cluster,"\
|
||||
"DNS:kubernetes.default.svc.cluster.local" \
|
||||
--days=10000 \
|
||||
build-server-full server nopass
|
||||
1. Copy `pki/ca.crt`, `pki/issued/server.crt`, and `pki/private/server.key` to your directory.
|
||||
1. Fill in and add the following parameters into the API server start parameters:
|
||||
|
||||
--client-ca-file=/yourdirectory/ca.crt
|
||||
--tls-cert-file=/yourdirectory/server.crt
|
||||
--tls-private-key-file=/yourdirectory/server.key
|
||||
|
||||
### openssl
|
||||
|
||||
**openssl** can manually generate certificates for your cluster.
|
||||
|
||||
1. Generate a ca.key with 2048bit:
|
||||
|
||||
openssl genrsa -out ca.key 2048
|
||||
1. According to the ca.key generate a ca.crt (use -days to set the certificate effective time):
|
||||
|
||||
openssl req -x509 -new -nodes -key ca.key -subj "/CN=${MASTER_IP}" -days 10000 -out ca.crt
|
||||
1. Generate a server.key with 2048bit:
|
||||
|
||||
openssl genrsa -out server.key 2048
|
||||
1. Create a config file for generating a Certificate Signing Request (CSR).
|
||||
Be sure to substitute the values marked with angle brackets (e.g. `<MASTER_IP>`)
|
||||
with real values before saving this to a file (e.g. `csr.conf`).
|
||||
Note that the value for `MASTER_CLUSTER_IP` is the service cluster IP for the
|
||||
API server as described in previous subsection.
|
||||
The sample below also assumes that you are using `cluster.local` as the default
|
||||
DNS domain name.
|
||||
|
||||
[ req ]
|
||||
default_bits = 2048
|
||||
prompt = no
|
||||
default_md = sha256
|
||||
req_extensions = req_ext
|
||||
distinguished_name = dn
|
||||
|
||||
[ dn ]
|
||||
C = <country>
|
||||
ST = <state>
|
||||
L = <city>
|
||||
O = <organization>
|
||||
OU = <organization unit>
|
||||
CN = <MASTER_IP>
|
||||
|
||||
[ req_ext ]
|
||||
subjectAltName = @alt_names
|
||||
|
||||
[ alt_names ]
|
||||
DNS.1 = kubernetes
|
||||
DNS.2 = kubernetes.default
|
||||
DNS.3 = kubernetes.default.svc
|
||||
DNS.4 = kubernetes.default.svc.cluster
|
||||
DNS.5 = kubernetes.default.svc.cluster.local
|
||||
IP.1 = <MASTER_IP>
|
||||
IP.2 = <MASTER_CLUSTER_IP>
|
||||
|
||||
[ v3_ext ]
|
||||
authorityKeyIdentifier=keyid,issuer:always
|
||||
basicConstraints=CA:FALSE
|
||||
keyUsage=keyEncipherment,dataEncipherment
|
||||
extendedKeyUsage=serverAuth,clientAuth
|
||||
subjectAltName=@alt_names
|
||||
1. Generate the certificate signing request based on the config file:
|
||||
|
||||
openssl req -new -key server.key -out server.csr -config csr.conf
|
||||
1. Generate the server certificate using the ca.key, ca.crt and server.csr:
|
||||
|
||||
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key \
|
||||
-CAcreateserial -out server.crt -days 10000 \
|
||||
-extensions v3_ext -extfile csr.conf
|
||||
1. View the certificate:
|
||||
|
||||
openssl x509 -noout -text -in ./server.crt
|
||||
|
||||
Finally, add the same parameters into the API server start parameters.
|
||||
|
||||
### cfssl
|
||||
|
||||
**cfssl** is another tool for certificate generation.
|
||||
|
||||
1. Download, unpack and prepare the command line tools as shown below.
|
||||
Note that you may need to adapt the sample commands based on the hardware
|
||||
architecture and cfssl version you are using.
|
||||
|
||||
curl -L https://github.com/cloudflare/cfssl/releases/download/v1.5.0/cfssl_1.5.0_linux_amd64 -o cfssl
|
||||
chmod +x cfssl
|
||||
curl -L https://github.com/cloudflare/cfssl/releases/download/v1.5.0/cfssljson_1.5.0_linux_amd64 -o cfssljson
|
||||
chmod +x cfssljson
|
||||
curl -L https://github.com/cloudflare/cfssl/releases/download/v1.5.0/cfssl-certinfo_1.5.0_linux_amd64 -o cfssl-certinfo
|
||||
chmod +x cfssl-certinfo
|
||||
1. Create a directory to hold the artifacts and initialize cfssl:
|
||||
|
||||
mkdir cert
|
||||
cd cert
|
||||
../cfssl print-defaults config > config.json
|
||||
../cfssl print-defaults csr > csr.json
|
||||
1. Create a JSON config file for generating the CA file, for example, `ca-config.json`:
|
||||
|
||||
{
|
||||
"signing": {
|
||||
"default": {
|
||||
"expiry": "8760h"
|
||||
},
|
||||
"profiles": {
|
||||
"kubernetes": {
|
||||
"usages": [
|
||||
"signing",
|
||||
"key encipherment",
|
||||
"server auth",
|
||||
"client auth"
|
||||
],
|
||||
"expiry": "8760h"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
1. Create a JSON config file for CA certificate signing request (CSR), for example,
|
||||
`ca-csr.json`. Be sure to replace the values marked with angle brackets with
|
||||
real values you want to use.
|
||||
|
||||
{
|
||||
"CN": "kubernetes",
|
||||
"key": {
|
||||
"algo": "rsa",
|
||||
"size": 2048
|
||||
},
|
||||
"names":[{
|
||||
"C": "<country>",
|
||||
"ST": "<state>",
|
||||
"L": "<city>",
|
||||
"O": "<organization>",
|
||||
"OU": "<organization unit>"
|
||||
}]
|
||||
}
|
||||
1. Generate CA key (`ca-key.pem`) and certificate (`ca.pem`):
|
||||
|
||||
../cfssl gencert -initca ca-csr.json | ../cfssljson -bare ca
|
||||
1. Create a JSON config file for generating keys and certificates for the API
|
||||
server, for example, `server-csr.json`. Be sure to replace the values in angle brackets with
|
||||
real values you want to use. The `MASTER_CLUSTER_IP` is the service cluster
|
||||
IP for the API server as described in previous subsection.
|
||||
The sample below also assumes that you are using `cluster.local` as the default
|
||||
DNS domain name.
|
||||
|
||||
{
|
||||
"CN": "kubernetes",
|
||||
"hosts": [
|
||||
"127.0.0.1",
|
||||
"<MASTER_IP>",
|
||||
"<MASTER_CLUSTER_IP>",
|
||||
"kubernetes",
|
||||
"kubernetes.default",
|
||||
"kubernetes.default.svc",
|
||||
"kubernetes.default.svc.cluster",
|
||||
"kubernetes.default.svc.cluster.local"
|
||||
],
|
||||
"key": {
|
||||
"algo": "rsa",
|
||||
"size": 2048
|
||||
},
|
||||
"names": [{
|
||||
"C": "<country>",
|
||||
"ST": "<state>",
|
||||
"L": "<city>",
|
||||
"O": "<organization>",
|
||||
"OU": "<organization unit>"
|
||||
}]
|
||||
}
|
||||
1. Generate the key and certificate for the API server, which are by default
|
||||
saved into file `server-key.pem` and `server.pem` respectively:
|
||||
|
||||
../cfssl gencert -ca=ca.pem -ca-key=ca-key.pem \
|
||||
--config=ca-config.json -profile=kubernetes \
|
||||
server-csr.json | ../cfssljson -bare server
|
||||
|
||||
|
||||
## Distributing Self-Signed CA Certificate
|
||||
|
||||
A client node may refuse to recognize a self-signed CA certificate as valid.
|
||||
For a non-production deployment, or for a deployment that runs behind a company
|
||||
firewall, you can distribute a self-signed CA certificate to all clients and
|
||||
refresh the local list for valid certificates.
|
||||
|
||||
On each client, perform the following operations:
|
||||
|
||||
```bash
|
||||
sudo cp ca.crt /usr/local/share/ca-certificates/kubernetes.crt
|
||||
sudo update-ca-certificates
|
||||
```
|
||||
|
||||
```
|
||||
Updating certificates in /etc/ssl/certs...
|
||||
1 added, 0 removed; done.
|
||||
Running hooks in /etc/ca-certificates/update.d....
|
||||
done.
|
||||
```
|
||||
|
||||
## Certificates API
|
||||
|
||||
You can use the `certificates.k8s.io` API to provision
|
||||
x509 certificates to use for authentication as documented
|
||||
[here](/docs/tasks/tls/managing-tls-in-a-cluster).
|
||||
|
||||
|
||||
To learn how to generate certificates for your cluster, see [Certificates](/docs/tasks/administer-cluster/certificates/).
|
||||
|
||||
@@ -47,7 +47,7 @@ kubectl apply -f https://k8s.io/examples/application/nginx/
|
||||
|
||||
It is a recommended practice to put resources related to the same microservice or application tier into the same file, and to group all of the files associated with your application in the same directory. If the tiers of your application bind to each other using DNS, you can deploy all of the components of your stack together.
|
||||
|
||||
A URL can also be specified as a configuration source, which is handy for deploying directly from configuration files checked into github:
|
||||
A URL can also be specified as a configuration source, which is handy for deploying directly from configuration files checked into GitHub:
|
||||
|
||||
```shell
|
||||
kubectl apply -f https://raw.githubusercontent.com/kubernetes/website/master/content/en/examples/application/nginx/nginx-deployment.yaml
|
||||
|
||||
@@ -718,7 +718,7 @@ spec:
|
||||
|
||||
#### Consuming Secret Values from environment variables
|
||||
|
||||
Inside a container that consumes a secret in an environment variables, the secret keys appear as
|
||||
Inside a container that consumes a secret in the environment variables, the secret keys appear as
|
||||
normal environment variables containing the base64 decoded values of the secret data.
|
||||
This is the result of commands executed inside the container from the example above:
|
||||
|
||||
|
||||
@@ -40,6 +40,7 @@ as are any environment variables specified statically in the Docker image.
|
||||
### Cluster information
|
||||
|
||||
A list of all services that were running when a Container was created is available to that Container as environment variables.
|
||||
This list is limited to services within the same namespace as the new Container's Pod and Kubernetes control plane services.
|
||||
Those environment variables match the syntax of Docker links.
|
||||
|
||||
For a service named *foo* that maps to a Container named *bar*,
|
||||
|
||||
@@ -28,9 +28,7 @@ The most common way to implement the APIService is to run an *extension API serv
|
||||
Extension API servers should have low latency networking to and from the kube-apiserver.
|
||||
Discovery requests are required to round-trip from the kube-apiserver in five seconds or less.
|
||||
|
||||
If your extension API server cannot achieve that latency requirement, consider making changes that let you meet it. You can also set the
|
||||
`EnableAggregatedDiscoveryTimeout=false` [feature gate](/docs/reference/command-line-tools-reference/feature-gates/) on the kube-apiserver
|
||||
to disable the timeout restriction. This deprecated feature gate will be removed in a future release.
|
||||
If your extension API server cannot achieve that latency requirement, consider making changes that let you meet it.
|
||||
|
||||
## {{% heading "whatsnext" %}}
|
||||
|
||||
|
||||
@@ -51,11 +51,11 @@ the same machine, and do not run user containers on this machine. See
|
||||
|
||||
{{< glossary_definition term_id="kube-controller-manager" length="all" >}}
|
||||
|
||||
These controllers include:
|
||||
Some types of these controllers are:
|
||||
|
||||
* Node controller: Responsible for noticing and responding when nodes go down.
|
||||
* Replication controller: Responsible for maintaining the correct number of pods for every replication
|
||||
controller object in the system.
|
||||
* Job controller: Watches for Job objects that represent one-off tasks, then creates
|
||||
Pods to run those tasks to completion.
|
||||
* Endpoints controller: Populates the Endpoints object (that is, joins Services & Pods).
|
||||
* Service Account & Token controllers: Create default accounts and API access tokens for new namespaces.
|
||||
|
||||
|
||||
@@ -7,8 +7,8 @@ content_type: concept
|
||||
weight: 20
|
||||
---
|
||||
<!-- overview -->
|
||||
This page provides an overview of DNS support by Kubernetes.
|
||||
|
||||
Kubernetes creates DNS records for services and pods. You can contact
|
||||
services with consistent DNS names instead of IP addresses.
|
||||
|
||||
<!-- body -->
|
||||
|
||||
@@ -18,19 +18,47 @@ Kubernetes DNS schedules a DNS Pod and Service on the cluster, and configures
|
||||
the kubelets to tell individual containers to use the DNS Service's IP to
|
||||
resolve DNS names.
|
||||
|
||||
### What things get DNS names?
|
||||
|
||||
Every Service defined in the cluster (including the DNS server itself) is
|
||||
assigned a DNS name. By default, a client Pod's DNS search list will
|
||||
include the Pod's own namespace and the cluster's default domain. This is best
|
||||
illustrated by example:
|
||||
assigned a DNS name. By default, a client Pod's DNS search list includes the
|
||||
Pod's own namespace and the cluster's default domain.
|
||||
|
||||
Assume a Service named `foo` in the Kubernetes namespace `bar`. A Pod running
|
||||
in namespace `bar` can look up this service by querying a DNS service for
|
||||
`foo`. A Pod running in namespace `quux` can look up this service by doing a
|
||||
DNS query for `foo.bar`.
|
||||
### Namespaces of Services
|
||||
|
||||
The following sections detail the supported record types and layout that is
|
||||
A DNS query may return different results based on the namespace of the pod making
|
||||
it. DNS queries that don't specify a namespace are limited to the pod's
|
||||
namespace. Access services in other namespaces by specifying it in the DNS query.
|
||||
|
||||
For example, consider a pod in a `test` namespace. A `data` service is in
|
||||
the `prod` namespace.
|
||||
|
||||
A query for `data` returns no results, because it uses the pod's `test` namespace.
|
||||
|
||||
A query for `data.prod` returns the intended result, because it specifies the
|
||||
namespace.
|
||||
|
||||
DNS queries may be expanded using the pod's `/etc/resolv.conf`. Kubelet
|
||||
sets this file for each pod. For example, a query for just `data` may be
|
||||
expanded to `data.test.cluster.local`. The values of the `search` option
|
||||
are used to expand queries. To learn more about DNS queries, see
|
||||
[the `resolv.conf` manual page.](https://www.man7.org/linux/man-pages/man5/resolv.conf.5.html)
|
||||
|
||||
```
|
||||
nameserver 10.32.0.10
|
||||
search <namespace>.svc.cluster.local svc.cluster.local cluster.local
|
||||
options ndots:5
|
||||
```
|
||||
|
||||
In summary, a pod in the _test_ namespace can successfully resolve either
|
||||
`data.prod` or `data.prod.cluster.local`.
|
||||
|
||||
### DNS Records
|
||||
|
||||
What objects get DNS records?
|
||||
|
||||
1. Services
|
||||
2. Pods
|
||||
|
||||
The following sections detail the supported DNS record types and layout that is
|
||||
supported. Any other layout or names or queries that happen to work are
|
||||
considered implementation details and are subject to change without warning.
|
||||
For more up-to-date specification, see
|
||||
|
||||
@@ -74,8 +74,8 @@ a new instance.
|
||||
The name of a Service object must be a valid
|
||||
[DNS label name](/docs/concepts/overview/working-with-objects/names#dns-label-names).
|
||||
|
||||
For example, suppose you have a set of Pods that each listen on TCP port 9376
|
||||
and carry a label `app=MyApp`:
|
||||
For example, suppose you have a set of Pods where each listens on TCP port 9376
|
||||
and contains a label `app=MyApp`:
|
||||
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
|
||||
@@ -75,7 +75,7 @@ Here are some ways to mitigate involuntary disruptions:
|
||||
and [stateful](/docs/tasks/run-application/run-replicated-stateful-application/) applications.)
|
||||
- For even higher availability when running replicated applications,
|
||||
spread applications across racks (using
|
||||
[anti-affinity](/docs/user-guide/node-selection/#inter-pod-affinity-and-anti-affinity-beta-feature))
|
||||
[anti-affinity](/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity))
|
||||
or across zones (if using a
|
||||
[multi-zone cluster](/docs/setup/multiple-zones).)
|
||||
|
||||
@@ -104,7 +104,7 @@ ensure that the number of replicas serving load never falls below a certain
|
||||
percentage of the total.
|
||||
|
||||
Cluster managers and hosting providers should use tools which
|
||||
respect PodDisruptionBudgets by calling the [Eviction API](/docs/tasks/administer-cluster/safely-drain-node/#the-eviction-api)
|
||||
respect PodDisruptionBudgets by calling the [Eviction API](/docs/tasks/administer-cluster/safely-drain-node/#eviction-api)
|
||||
instead of directly deleting pods or deployments.
|
||||
|
||||
For example, the `kubectl drain` subcommand lets you mark a node as going out of
|
||||
|
||||
@@ -61,7 +61,7 @@ Members of `@kubernetes/sig-docs-**-owners` can approve PRs that change content
|
||||
|
||||
For each localization, The `@kubernetes/sig-docs-**-reviews` team automates review assignment for new PRs.
|
||||
|
||||
Members of `@kubernetes/website-maintainers` can create new development branches to coordinate translation efforts.
|
||||
Members of `@kubernetes/website-maintainers` can create new localization branches to coordinate translation efforts.
|
||||
|
||||
Members of `@kubernetes/website-milestone-maintainers` can use the `/milestone` [Prow command](https://prow.k8s.io/command-help) to assign a milestone to issues or PRs.
|
||||
|
||||
@@ -205,14 +205,20 @@ To ensure accuracy in grammar and meaning, members of your localization team sho
|
||||
|
||||
### Source files
|
||||
|
||||
Localizations must be based on the English files from the most recent release, {{< latest-version >}}.
|
||||
Localizations must be based on the English files from a specific release targeted by the localization team.
|
||||
Each localization team can decide which release to target which is referred to as the _target version_ below.
|
||||
|
||||
To find source files for the most recent release:
|
||||
To find source files for your target version:
|
||||
|
||||
1. Navigate to the Kubernetes website repository at https://github.com/kubernetes/website.
|
||||
2. Select the `release-1.X` branch for the most recent version.
|
||||
2. Select a branch for your target version from the following table:
|
||||
Target version | Branch
|
||||
-----|-----
|
||||
Next version | [`dev-{{< skew nextMinorVersion >}}`](https://github.com/kubernetes/website/tree/dev-{{< skew nextMinorVersion >}})
|
||||
Latest version | [`master`](https://github.com/kubernetes/website/tree/master)
|
||||
Previous version | `release-*.**`
|
||||
|
||||
The latest version is {{< latest-version >}}, so the most recent release branch is [`{{< release-branch >}}`](https://github.com/kubernetes/website/tree/{{< release-branch >}}).
|
||||
The `master` branch holds content for the current release `{{< latest-version >}}`. The release team will create `{{< release-branch >}}` branch shortly before the next release: v{{< skew nextMinorVersion >}}.
|
||||
|
||||
### Site strings in i18n
|
||||
|
||||
@@ -239,11 +245,11 @@ Some language teams have their own language-specific style guide and glossary. F
|
||||
|
||||
## Branching strategy
|
||||
|
||||
Because localization projects are highly collaborative efforts, we encourage teams to work in shared development branches.
|
||||
Because localization projects are highly collaborative efforts, we encourage teams to work in shared localization branches.
|
||||
|
||||
To collaborate on a development branch:
|
||||
To collaborate on a localization branch:
|
||||
|
||||
1. A team member of [@kubernetes/website-maintainers](https://github.com/orgs/kubernetes/teams/website-maintainers) opens a development branch from a source branch on https://github.com/kubernetes/website.
|
||||
1. A team member of [@kubernetes/website-maintainers](https://github.com/orgs/kubernetes/teams/website-maintainers) opens a localization branch from a source branch on https://github.com/kubernetes/website.
|
||||
|
||||
Your team approvers joined the `@kubernetes/website-maintainers` team when you [added your localization team](#add-your-localization-team-in-github) to the [`kubernetes/org`](https://github.com/kubernetes/org) repository.
|
||||
|
||||
@@ -251,25 +257,31 @@ To collaborate on a development branch:
|
||||
|
||||
`dev-<source version>-<language code>.<team milestone>`
|
||||
|
||||
For example, an approver on a German localization team opens the development branch `dev-1.12-de.1` directly against the k/website repository, based on the source branch for Kubernetes v1.12.
|
||||
For example, an approver on a German localization team opens the localization branch `dev-1.12-de.1` directly against the k/website repository, based on the source branch for Kubernetes v1.12.
|
||||
|
||||
2. Individual contributors open feature branches based on the development branch.
|
||||
2. Individual contributors open feature branches based on the localization branch.
|
||||
|
||||
For example, a German contributor opens a pull request with changes to `kubernetes:dev-1.12-de.1` from `username:local-branch-name`.
|
||||
|
||||
3. Approvers review and merge feature branches into the development branch.
|
||||
3. Approvers review and merge feature branches into the localization branch.
|
||||
|
||||
4. Periodically, an approver merges the development branch to its source branch by opening and approving a new pull request. Be sure to squash the commits before approving the pull request.
|
||||
4. Periodically, an approver merges the localization branch to its source branch by opening and approving a new pull request. Be sure to squash the commits before approving the pull request.
|
||||
|
||||
Repeat steps 1-4 as needed until the localization is complete. For example, subsequent German development branches would be: `dev-1.12-de.2`, `dev-1.12-de.3`, etc.
|
||||
Repeat steps 1-4 as needed until the localization is complete. For example, subsequent German localization branches would be: `dev-1.12-de.2`, `dev-1.12-de.3`, etc.
|
||||
|
||||
Teams must merge localized content into the same release branch from which the content was sourced. For example, a development branch sourced from {{< release-branch >}} must be based on {{< release-branch >}}.
|
||||
Teams must merge localized content into the same branch from which the content was sourced.
|
||||
|
||||
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.
|
||||
For example:
|
||||
- a localization branch sourced from `master` must be merged into `master`.
|
||||
- a localization branch sourced from `release-1.19` must be merged into `release-1.19`.
|
||||
|
||||
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.
|
||||
{{< note >}}
|
||||
If your localization branch was created from `master` branch but it is not merged into `master` before new release branch `{{< release-branch >}}` created, merge it into both `master` and new release branch `{{< release-branch >}}`. To merge your localization branch into new release branch `{{< release-branch >}}`, you need to switch upstream branch of your localization branch to `{{< release-branch >}}`.
|
||||
{{< /note >}}
|
||||
|
||||
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.
|
||||
At the beginning of every team milestone, it's helpful to open an issue comparing upstream changes between the previous localization branch and the current localization 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 localization branch and merge pull requests, anyone can open a pull request for a new localization branch. No special permissions are required.
|
||||
|
||||
For more information about working from forks or directly from the repository, see ["fork and clone the repo"](#fork-and-clone-the-repo).
|
||||
|
||||
@@ -290,5 +302,3 @@ Once a localization meets requirements for workflow and minimum output, SIG docs
|
||||
|
||||
- Enable language selection on the website
|
||||
- Publicize the localization's availability through [Cloud Native Computing Foundation](https://www.cncf.io/about/) (CNCF) channels, including the [Kubernetes blog](https://kubernetes.io/blog/).
|
||||
|
||||
|
||||
|
||||
@@ -6,8 +6,10 @@ linkTitle: "Reference"
|
||||
main_menu: true
|
||||
weight: 70
|
||||
content_type: concept
|
||||
no_list: true
|
||||
---
|
||||
|
||||
|
||||
<!-- overview -->
|
||||
|
||||
This section of the Kubernetes documentation contains references.
|
||||
@@ -18,11 +20,17 @@ This section of the Kubernetes documentation contains references.
|
||||
|
||||
## API Reference
|
||||
|
||||
* [Glossary](/docs/reference/glossary/) - a comprehensive, standardized list of Kubernetes terminology
|
||||
|
||||
|
||||
|
||||
* [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/) - overview of the API for Kubernetes.
|
||||
* [API access control](/docs/reference/access-authn-authz/) - details on how Kubernetes controls API access
|
||||
* [Well-Known Labels, Annotations and Taints](/docs/reference/kubernetes-api/labels-annotations-taints/)
|
||||
|
||||
## API Client Libraries
|
||||
## Officially supported client libraries
|
||||
|
||||
To call the Kubernetes API from a programming language, you can use
|
||||
[client libraries](/docs/reference/using-api/client-libraries/). Officially supported
|
||||
@@ -32,22 +40,28 @@ client libraries:
|
||||
- [Kubernetes Python client library](https://github.com/kubernetes-client/python)
|
||||
- [Kubernetes Java client library](https://github.com/kubernetes-client/java)
|
||||
- [Kubernetes JavaScript client library](https://github.com/kubernetes-client/javascript)
|
||||
- [Kubernetes Dotnet client library](https://github.com/kubernetes-client/csharp)
|
||||
- [Kubernetes Haskell Client library](https://github.com/kubernetes-client/haskell)
|
||||
|
||||
## CLI Reference
|
||||
## CLI
|
||||
|
||||
* [kubectl](/docs/reference/kubectl/overview/) - Main CLI tool for running commands and managing Kubernetes clusters.
|
||||
* [JSONPath](/docs/reference/kubectl/jsonpath/) - Syntax guide for using [JSONPath expressions](https://goessner.net/articles/JsonPath/) with kubectl.
|
||||
* [kubeadm](/docs/reference/setup-tools/kubeadm/) - CLI tool to easily provision a secure Kubernetes cluster.
|
||||
|
||||
## Components Reference
|
||||
## Components
|
||||
|
||||
* [kubelet](/docs/reference/command-line-tools-reference/kubelet/) - The primary *node agent* that runs on each node. The kubelet takes a set of PodSpecs and ensures that the described containers are running and healthy.
|
||||
* [kube-apiserver](/docs/reference/command-line-tools-reference/kube-apiserver/) - REST API that validates and configures data for API objects such as pods, services, replication controllers.
|
||||
* [kube-controller-manager](/docs/reference/command-line-tools-reference/kube-controller-manager/) - Daemon that embeds the core control loops shipped with Kubernetes.
|
||||
* [kube-proxy](/docs/reference/command-line-tools-reference/kube-proxy/) - Can do simple TCP/UDP stream forwarding or round-robin TCP/UDP forwarding across a set of back-ends.
|
||||
* [kube-scheduler](/docs/reference/command-line-tools-reference/kube-scheduler/) - Scheduler that manages availability, performance, and capacity.
|
||||
* [kube-scheduler Policies](/docs/reference/scheduling/policies)
|
||||
* [kube-scheduler Profiles](/docs/reference/scheduling/config#profiles)
|
||||
* [kube-scheduler](/docs/reference/command-line-tools-reference/kube-scheduler/) - Scheduler that manages availability, performance, and capacity.
|
||||
|
||||
## Scheduling
|
||||
|
||||
* [Scheduler Policies](/docs/reference/scheduling/policies)
|
||||
* [Scheduler Profiles](/docs/reference/scheduling/config#profiles)
|
||||
|
||||
|
||||
## Design Docs
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: API Access Control
|
||||
weight: 20
|
||||
weight: 15
|
||||
no_list: true
|
||||
---
|
||||
|
||||
|
||||
@@ -625,6 +625,8 @@ Starting from 1.11, this admission controller is disabled by default.
|
||||
|
||||
### PodNodeSelector {#podnodeselector}
|
||||
|
||||
{{< feature-state for_k8s_version="v1.5" state="alpha" >}}
|
||||
|
||||
This admission controller defaults and limits what node selectors may be used within a namespace by reading a namespace annotation and a global configuration.
|
||||
|
||||
#### Configuration File Format
|
||||
@@ -704,6 +706,8 @@ for more information.
|
||||
|
||||
### PodTolerationRestriction {#podtolerationrestriction}
|
||||
|
||||
{{< feature-state for_k8s_version="v1.7" state="alpha" >}}
|
||||
|
||||
The PodTolerationRestriction admission controller verifies any conflict between tolerations of a pod and the tolerations of its namespace.
|
||||
It rejects the pod request if there is a conflict.
|
||||
It then merges the tolerations annotated on the namespace into the tolerations of the pod.
|
||||
|
||||
@@ -99,7 +99,7 @@ openssl req -new -key jbeda.pem -out jbeda-csr.pem -subj "/CN=jbeda/O=app1/O=app
|
||||
|
||||
This would create a CSR for the username "jbeda", belonging to two groups, "app1" and "app2".
|
||||
|
||||
See [Managing Certificates](/docs/concepts/cluster-administration/certificates/) for how to generate a client cert.
|
||||
See [Managing Certificates](/docs/tasks/administer-cluster/certificates/) for how to generate a client cert.
|
||||
|
||||
### Static Token File
|
||||
|
||||
@@ -328,7 +328,7 @@ Since all of the data needed to validate who you are is in the `id_token`, Kuber
|
||||
|
||||
1. Kubernetes has no "web interface" to trigger the authentication process. There is no browser or interface to collect credentials which is why you need to authenticate to your identity provider first.
|
||||
2. The `id_token` can't be revoked, it's like a certificate so it should be short-lived (only a few minutes) so it can be very annoying to have to get a new token every few minutes.
|
||||
3. To authenticate to the Kubernetes dashboard, you must the `kubectl proxy` command or a reverse proxy that injects the `id_token`.
|
||||
3. To authenticate to the Kubernetes dashboard, you must use the `kubectl proxy` command or a reverse proxy that injects the `id_token`.
|
||||
|
||||
#### Configuring the API Server
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
---
|
||||
title: Command line tools reference
|
||||
title: Component tools
|
||||
weight: 60
|
||||
---
|
||||
|
||||
@@ -239,6 +239,7 @@ different Kubernetes components.
|
||||
| `DynamicProvisioningScheduling` | - | Deprecated| 1.12 | - |
|
||||
| `DynamicVolumeProvisioning` | `true` | Alpha | 1.3 | 1.7 |
|
||||
| `DynamicVolumeProvisioning` | `true` | GA | 1.8 | - |
|
||||
| `EnableAggregatedDiscoveryTimeout` | `true` | Deprecated | 1.16 | - |
|
||||
| `EnableEquivalenceClassCache` | `false` | Alpha | 1.8 | 1.14 |
|
||||
| `EnableEquivalenceClassCache` | - | Deprecated | 1.15 | - |
|
||||
| `ExperimentalCriticalPodAnnotation` | `false` | Alpha | 1.5 | 1.12 |
|
||||
|
||||
@@ -302,7 +302,7 @@ kubelet [flags]
|
||||
<td colspan="2">--enable-cadvisor-json-endpoints Default: `false`</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td><td style="line-height: 130%; word-wrap: break-word;">Enable cAdvisor json `/spec` and `/stats/*` endpoints. (DEPRECATED: will be removed in a future version)</td>
|
||||
<td></td><td style="line-height: 130%; word-wrap: break-word;">Enable cAdvisor json `/spec` and `/stats/*` endpoints. This flag has no effect on the /stats/summary endpoint. (DEPRECATED: will be removed in a future version)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
approvers:
|
||||
- chenopis
|
||||
- abiogenesis-now
|
||||
title: Standardized Glossary
|
||||
title: Glossary
|
||||
layout: glossary
|
||||
noedit: true
|
||||
default_active_tag: fundamental
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
---
|
||||
title: Kubernetes Issues and Security
|
||||
weight: 10
|
||||
weight: 40
|
||||
---
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
title: "kubectl CLI"
|
||||
title: "kubectl"
|
||||
weight: 60
|
||||
---
|
||||
|
||||
|
||||
@@ -320,6 +320,18 @@ kubectl top pod POD_NAME --containers # Show metrics for a given p
|
||||
kubectl top pod POD_NAME --sort-by=cpu # Show metrics for a given pod and sort it by 'cpu' or 'memory'
|
||||
```
|
||||
|
||||
## Interacting with Deployments and Services
|
||||
```bash
|
||||
kubectl logs deploy/my-deployment # dump Pod logs for a Deployment (single-container case)
|
||||
kubectl logs deploy/my-deployment -c my-container # dump Pod logs for a Deployment (multi-container case)
|
||||
|
||||
kubectl port-forward svc/my-service 5000 # listen on local port 5000 and forward to port 5000 on Service backend
|
||||
kubectl port-forward svc/my-service 5000:my-service-port # listen on local port 5000 and forward to Service target port with name <my-service-port>
|
||||
|
||||
kubectl port-forward deploy/my-deployment 5000:6000 # listen on local port 5000 and forward to port 6000 on a Pod created by <my-deployment>
|
||||
kubectl exec deploy/my-deployment -- ls # run command in first Pod and first container in Deployment (single- or multi-container cases)
|
||||
```
|
||||
|
||||
## Interacting with Nodes and cluster
|
||||
|
||||
```bash
|
||||
|
||||
@@ -7,7 +7,7 @@ reviewers:
|
||||
---
|
||||
|
||||
<!-- overview -->
|
||||
You can use the Kubernetes command line tool kubectl to interact with the API Server. Using kubectl is straightforward if you are familiar with the Docker command line tool. However, there are a few differences between the docker commands and the kubectl commands. The following sections show a docker sub-command and describe the equivalent kubectl command.
|
||||
You can use the Kubernetes command line tool `kubectl` to interact with the API Server. Using kubectl is straightforward if you are familiar with the Docker command line tool. However, there are a few differences between the Docker commands and the kubectl commands. The following sections show a Docker sub-command and describe the equivalent `kubectl` command.
|
||||
|
||||
|
||||
<!-- body -->
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
---
|
||||
title: Setup tools reference
|
||||
title: Setup tools
|
||||
weight: 50
|
||||
---
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
---
|
||||
title: Other Tools
|
||||
reviewers:
|
||||
- janetkuo
|
||||
title: Tools
|
||||
content_type: concept
|
||||
weight: 80
|
||||
no_list: true
|
||||
---
|
||||
|
||||
<!-- overview -->
|
||||
@@ -10,13 +12,6 @@ Kubernetes contains several built-in tools to help you work with the Kubernetes
|
||||
|
||||
|
||||
<!-- body -->
|
||||
## Kubectl
|
||||
|
||||
[`kubectl`](/docs/tasks/tools/install-kubectl/) is the command line tool for Kubernetes. It controls the Kubernetes cluster manager.
|
||||
|
||||
## Kubeadm
|
||||
|
||||
[`kubeadm`](/docs/setup/production-environment/tools/kubeadm/install-kubeadm/) is the command line tool for easily provisioning a secure Kubernetes cluster on top of physical or cloud servers or virtual machines (currently in alpha).
|
||||
|
||||
## Minikube
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
---
|
||||
title: Kubernetes API Overview
|
||||
title: API Overview
|
||||
reviewers:
|
||||
- erictune
|
||||
- lavalamp
|
||||
- jbeda
|
||||
content_type: concept
|
||||
weight: 10
|
||||
no_list: true
|
||||
card:
|
||||
name: reference
|
||||
weight: 50
|
||||
|
||||
@@ -67,12 +67,13 @@ their authors, not the Kubernetes team.
|
||||
| Python | [github.com/fiaas/k8s](https://github.com/fiaas/k8s) |
|
||||
| Python | [github.com/mnubo/kubernetes-py](https://github.com/mnubo/kubernetes-py) |
|
||||
| Python | [github.com/tomplus/kubernetes_asyncio](https://github.com/tomplus/kubernetes_asyncio) |
|
||||
| Python | [github.com/Frankkkkk/pykorm](https://github.com/Frankkkkk/pykorm) |
|
||||
| Ruby | [github.com/abonas/kubeclient](https://github.com/abonas/kubeclient) |
|
||||
| Ruby | [github.com/Ch00k/kuber](https://github.com/Ch00k/kuber) |
|
||||
| Ruby | [github.com/kontena/k8s-client](https://github.com/kontena/k8s-client) |
|
||||
| Rust | [github.com/clux/kube-rs](https://github.com/clux/kube-rs) |
|
||||
| Rust | [github.com/ynqa/kubernetes-rust](https://github.com/ynqa/kubernetes-rust) |
|
||||
| Scala | [github.com/doriordan/skuber](https://github.com/doriordan/skuber) |
|
||||
| Scala | [github.com/hagay3/skuber](https://github.com/hagay3/skuber) |
|
||||
| Scala | [github.com/joan38/kubernetes-client](https://github.com/joan38/kubernetes-client) |
|
||||
| Swift | [github.com/swiftkube/client](https://github.com/swiftkube/client) |
|
||||
| DotNet | [github.com/tonnyeremin/kubernetes_gen](https://github.com/tonnyeremin/kubernetes_gen) |
|
||||
|
||||
@@ -219,30 +219,39 @@ sudo systemctl restart containerd
|
||||
```
|
||||
{{% /tab %}}
|
||||
{{% tab name="Windows (PowerShell)" %}}
|
||||
|
||||
<br />
|
||||
Start a Powershell session, set `$Version` to the desired version (ex: `$Version=1.4.3`), and then run the following commands:
|
||||
<br />
|
||||
|
||||
```powershell
|
||||
# (Install containerd)
|
||||
# download containerd
|
||||
cmd /c curl -OL https://github.com/containerd/containerd/releases/download/v1.4.1/containerd-1.4.1-windows-amd64.tar.gz
|
||||
cmd /c tar xvf .\containerd-1.4.1-windows-amd64.tar.gz
|
||||
# Download containerd
|
||||
curl.exe -L https://github.com/containerd/containerd/releases/download/v$Version/containerd-$Version-windows-amd64.tar.gz -o containerd-windows-amd64.tar.gz
|
||||
tar.exe xvf .\containerd-windows-amd64.tar.gz
|
||||
```
|
||||
|
||||
```powershell
|
||||
# extract and configure
|
||||
# Extract and configure
|
||||
Copy-Item -Path ".\bin\" -Destination "$Env:ProgramFiles\containerd" -Recurse -Force
|
||||
cd $Env:ProgramFiles\containerd\
|
||||
.\containerd.exe config default | Out-File config.toml -Encoding ascii
|
||||
|
||||
# review the configuration. depending on setup you may want to adjust:
|
||||
# - the sandbox_image (kubernetes pause image)
|
||||
# Review the configuration. Depending on setup you may want to adjust:
|
||||
# - the sandbox_image (Kubernetes pause image)
|
||||
# - cni bin_dir and conf_dir locations
|
||||
Get-Content config.toml
|
||||
|
||||
# (Optional - but highly recommended) Exclude containerd form Windows Defender Scans
|
||||
Add-MpPreference -ExclusionProcess "$Env:ProgramFiles\containerd\containerd.exe"
|
||||
```
|
||||
|
||||
```powershell
|
||||
# start containerd
|
||||
# Start containerd
|
||||
.\containerd.exe --register-service
|
||||
Start-Service containerd
|
||||
```
|
||||
|
||||
{{% /tab %}}
|
||||
{{< /tabs >}}
|
||||
|
||||
|
||||
@@ -18,14 +18,7 @@ For information how to create a cluster with kubeadm once you have performed thi
|
||||
## {{% heading "prerequisites" %}}
|
||||
|
||||
|
||||
* One or more machines running one of:
|
||||
- Ubuntu 16.04+
|
||||
- Debian 9+
|
||||
- CentOS 7+
|
||||
- Red Hat Enterprise Linux (RHEL) 7+
|
||||
- Fedora 25+
|
||||
- HypriotOS v1.0.1+
|
||||
- Flatcar Container Linux (tested with 2512.3.0)
|
||||
* A compatible Linux host. The Kubernetes project provides generic instructions for Linux distributions based on Debian and Red Hat, and those distributions without a package manager.
|
||||
* 2 GB or more of RAM per machine (any less will leave little room for your apps).
|
||||
* 2 CPUs or more.
|
||||
* Full network connectivity between all machines in the cluster (public or private network is fine).
|
||||
@@ -122,7 +115,7 @@ The following table lists container runtimes and their associated socket paths:
|
||||
{{< table caption = "Container runtimes and their socket paths" >}}
|
||||
| Runtime | Path to Unix domain socket |
|
||||
|------------|-----------------------------------|
|
||||
| Docker | `/var/run/docker.sock` |
|
||||
| Docker | `/var/run/dockershim.sock` |
|
||||
| containerd | `/run/containerd/containerd.sock` |
|
||||
| CRI-O | `/var/run/crio/crio.sock` |
|
||||
{{< /table >}}
|
||||
@@ -181,7 +174,7 @@ For more information on version skews, see:
|
||||
* Kubeadm-specific [version skew policy](/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#version-skew-policy)
|
||||
|
||||
{{< tabs name="k8s_install" >}}
|
||||
{{% tab name="Ubuntu, Debian or HypriotOS" %}}
|
||||
{{% tab name="Debian-based distributions" %}}
|
||||
```bash
|
||||
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
|
||||
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
|
||||
@@ -193,7 +186,7 @@ sudo apt-get install -y kubelet kubeadm kubectl
|
||||
sudo apt-mark hold kubelet kubeadm kubectl
|
||||
```
|
||||
{{% /tab %}}
|
||||
{{% tab name="CentOS, RHEL or Fedora" %}}
|
||||
{{% tab name="Red Hat-based distributions" %}}
|
||||
```bash
|
||||
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
|
||||
[kubernetes]
|
||||
@@ -224,7 +217,7 @@ sudo systemctl enable --now kubelet
|
||||
- You can leave SELinux enabled if you know how to configure it but it may require settings that are not supported by kubeadm.
|
||||
|
||||
{{% /tab %}}
|
||||
{{% tab name="Fedora CoreOS or Flatcar Container Linux" %}}
|
||||
{{% tab name="Without a package manager" %}}
|
||||
Install CNI plugins (required for most pod network):
|
||||
|
||||
```bash
|
||||
|
||||
+5
-5
@@ -138,10 +138,10 @@ Right after `kubeadm init` there should not be any pods in these states.
|
||||
|
||||
- If there are pods in one of these states _right after_ `kubeadm init`, please open an
|
||||
issue in the kubeadm repo. `coredns` (or `kube-dns`) should be in the `Pending` state
|
||||
until you have deployed the network solution.
|
||||
until you have deployed the network add-on.
|
||||
- If you see Pods in the `RunContainerError`, `CrashLoopBackOff` or `Error` state
|
||||
after deploying the network solution and nothing happens to `coredns` (or `kube-dns`),
|
||||
it's very likely that the Pod Network solution that you installed is somehow broken.
|
||||
after deploying the network add-on and nothing happens to `coredns` (or `kube-dns`),
|
||||
it's very likely that the Pod Network add-on that you installed is somehow broken.
|
||||
You might have to grant it more RBAC privileges or use a newer version. Please file
|
||||
an issue in the Pod Network providers' issue tracker and get the issue triaged there.
|
||||
- If you install a version of Docker older than 1.12.1, remove the `MountFlags=slave` option
|
||||
@@ -152,14 +152,14 @@ Right after `kubeadm init` there should not be any pods in these states.
|
||||
## `coredns` (or `kube-dns`) is stuck in the `Pending` state
|
||||
|
||||
This is **expected** and part of the design. kubeadm is network provider-agnostic, so the admin
|
||||
should [install the pod network solution](/docs/concepts/cluster-administration/addons/)
|
||||
should [install the pod network add-on](/docs/concepts/cluster-administration/addons/)
|
||||
of choice. You have to install a Pod Network
|
||||
before CoreDNS may be deployed fully. Hence the `Pending` state before the network is set up.
|
||||
|
||||
## `HostPort` services do not work
|
||||
|
||||
The `HostPort` and `HostIP` functionality is available depending on your Pod Network
|
||||
provider. Please contact the author of the Pod Network solution to find out whether
|
||||
provider. Please contact the author of the Pod Network add-on to find out whether
|
||||
`HostPort` and `HostIP` functionality are available.
|
||||
|
||||
Calico, Canal, and Flannel CNI providers are verified to support HostPort.
|
||||
|
||||
@@ -352,102 +352,6 @@ exampleWithKubeConfig = do
|
||||
>>= print
|
||||
```
|
||||
|
||||
## {{% heading "whatsnext" %}}
|
||||
|
||||
### Accessing the API from within a Pod
|
||||
|
||||
When accessing the API from within a Pod, locating and authenticating
|
||||
to the API server are slightly different to the external client case described above.
|
||||
|
||||
The easiest way to use the Kubernetes API from a Pod is to use
|
||||
one of the official [client libraries](/docs/reference/using-api/client-libraries/). These
|
||||
libraries can automatically discover the API server and authenticate.
|
||||
|
||||
#### Using Official Client Libraries
|
||||
|
||||
From within a Pod, the recommended ways to connect to the Kubernetes API are:
|
||||
|
||||
- For a Go client, use the official [Go client library](https://github.com/kubernetes/client-go/).
|
||||
The `rest.InClusterConfig()` function handles API host discovery and authentication automatically.
|
||||
See [an example here](https://git.k8s.io/client-go/examples/in-cluster-client-configuration/main.go).
|
||||
|
||||
- For a Python client, use the official [Python client library](https://github.com/kubernetes-client/python/).
|
||||
The `config.load_incluster_config()` function handles API host discovery and authentication automatically.
|
||||
See [an example here](https://github.com/kubernetes-client/python/blob/master/examples/in_cluster_config.py).
|
||||
|
||||
- There are a number of other libraries available, please refer to the [Client Libraries](/docs/reference/using-api/client-libraries/) page.
|
||||
|
||||
In each case, the service account credentials of the Pod are used to communicate
|
||||
securely with the API server.
|
||||
|
||||
#### Directly accessing the REST API
|
||||
|
||||
While running in a Pod, the Kubernetes apiserver is accessible via a Service named
|
||||
`kubernetes` in the `default` namespace. Therefore, Pods can use the
|
||||
`kubernetes.default.svc` hostname to query the API server. Official client libraries
|
||||
do this automatically.
|
||||
|
||||
The recommended way to authenticate to the API server is with a
|
||||
[service account](/docs/tasks/configure-pod-container/configure-service-account/) credential. By default, a Pod
|
||||
is associated with a service account, and a credential (token) for that
|
||||
service account is placed into the filesystem tree of each container in that Pod,
|
||||
at `/var/run/secrets/kubernetes.io/serviceaccount/token`.
|
||||
|
||||
If available, a certificate bundle is placed into the filesystem tree of each
|
||||
container at `/var/run/secrets/kubernetes.io/serviceaccount/ca.crt`, and should be
|
||||
used to verify the serving certificate of the API server.
|
||||
|
||||
Finally, the default namespace to be used for namespaced API operations is placed in a file
|
||||
at `/var/run/secrets/kubernetes.io/serviceaccount/namespace` in each container.
|
||||
|
||||
#### Using kubectl proxy
|
||||
|
||||
If you would like to query the API without an official client library, you can run `kubectl proxy`
|
||||
as the [command](/docs/tasks/inject-data-application/define-command-argument-container/)
|
||||
of a new sidecar container in the Pod. This way, `kubectl proxy` will authenticate
|
||||
to the API and expose it on the `localhost` interface of the Pod, so that other containers
|
||||
in the Pod can use it directly.
|
||||
|
||||
#### Without using a proxy
|
||||
|
||||
It is possible to avoid using the kubectl proxy by passing the authentication token
|
||||
directly to the API server. The internal certificate secures the connection.
|
||||
|
||||
```shell
|
||||
# Point to the internal API server hostname
|
||||
APISERVER=https://kubernetes.default.svc
|
||||
|
||||
# Path to ServiceAccount token
|
||||
SERVICEACCOUNT=/var/run/secrets/kubernetes.io/serviceaccount
|
||||
|
||||
# Read this Pod's namespace
|
||||
NAMESPACE=$(cat ${SERVICEACCOUNT}/namespace)
|
||||
|
||||
# Read the ServiceAccount bearer token
|
||||
TOKEN=$(cat ${SERVICEACCOUNT}/token)
|
||||
|
||||
# Reference the internal certificate authority (CA)
|
||||
CACERT=${SERVICEACCOUNT}/ca.crt
|
||||
|
||||
# Explore the API with TOKEN
|
||||
curl --cacert ${CACERT} --header "Authorization: Bearer ${TOKEN}" -X GET ${APISERVER}/api
|
||||
```
|
||||
|
||||
The output will be similar to this:
|
||||
|
||||
```json
|
||||
{
|
||||
"kind": "APIVersions",
|
||||
"versions": [
|
||||
"v1"
|
||||
],
|
||||
"serverAddressByClientCIDRs": [
|
||||
{
|
||||
"clientCIDR": "0.0.0.0/0",
|
||||
"serverAddress": "10.0.1.149:443"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
* [Accessing the Kubernetes API from a Pod](/docs/tasks/run-application/access-api-from-pod/)
|
||||
|
||||
@@ -0,0 +1,252 @@
|
||||
---
|
||||
title: Certificates
|
||||
content_type: task
|
||||
weight: 20
|
||||
---
|
||||
|
||||
|
||||
<!-- overview -->
|
||||
|
||||
When using client certificate authentication, you can generate certificates
|
||||
manually through `easyrsa`, `openssl` or `cfssl`.
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- body -->
|
||||
|
||||
### easyrsa
|
||||
|
||||
**easyrsa** can manually generate certificates for your cluster.
|
||||
|
||||
1. Download, unpack, and initialize the patched version of easyrsa3.
|
||||
|
||||
curl -LO https://storage.googleapis.com/kubernetes-release/easy-rsa/easy-rsa.tar.gz
|
||||
tar xzf easy-rsa.tar.gz
|
||||
cd easy-rsa-master/easyrsa3
|
||||
./easyrsa init-pki
|
||||
1. Generate a new certificate authority (CA). `--batch` sets automatic mode;
|
||||
`--req-cn` specifies the Common Name (CN) for the CA's new root certificate.
|
||||
|
||||
./easyrsa --batch "--req-cn=${MASTER_IP}@`date +%s`" build-ca nopass
|
||||
1. Generate server certificate and key.
|
||||
The argument `--subject-alt-name` sets the possible IPs and DNS names the API server will
|
||||
be accessed with. The `MASTER_CLUSTER_IP` is usually the first IP from the service CIDR
|
||||
that is specified as the `--service-cluster-ip-range` argument for both the API server and
|
||||
the controller manager component. The argument `--days` is used to set the number of days
|
||||
after which the certificate expires.
|
||||
The sample below also assumes that you are using `cluster.local` as the default
|
||||
DNS domain name.
|
||||
|
||||
./easyrsa --subject-alt-name="IP:${MASTER_IP},"\
|
||||
"IP:${MASTER_CLUSTER_IP},"\
|
||||
"DNS:kubernetes,"\
|
||||
"DNS:kubernetes.default,"\
|
||||
"DNS:kubernetes.default.svc,"\
|
||||
"DNS:kubernetes.default.svc.cluster,"\
|
||||
"DNS:kubernetes.default.svc.cluster.local" \
|
||||
--days=10000 \
|
||||
build-server-full server nopass
|
||||
1. Copy `pki/ca.crt`, `pki/issued/server.crt`, and `pki/private/server.key` to your directory.
|
||||
1. Fill in and add the following parameters into the API server start parameters:
|
||||
|
||||
--client-ca-file=/yourdirectory/ca.crt
|
||||
--tls-cert-file=/yourdirectory/server.crt
|
||||
--tls-private-key-file=/yourdirectory/server.key
|
||||
|
||||
### openssl
|
||||
|
||||
**openssl** can manually generate certificates for your cluster.
|
||||
|
||||
1. Generate a ca.key with 2048bit:
|
||||
|
||||
openssl genrsa -out ca.key 2048
|
||||
1. According to the ca.key generate a ca.crt (use -days to set the certificate effective time):
|
||||
|
||||
openssl req -x509 -new -nodes -key ca.key -subj "/CN=${MASTER_IP}" -days 10000 -out ca.crt
|
||||
1. Generate a server.key with 2048bit:
|
||||
|
||||
openssl genrsa -out server.key 2048
|
||||
1. Create a config file for generating a Certificate Signing Request (CSR).
|
||||
Be sure to substitute the values marked with angle brackets (e.g. `<MASTER_IP>`)
|
||||
with real values before saving this to a file (e.g. `csr.conf`).
|
||||
Note that the value for `MASTER_CLUSTER_IP` is the service cluster IP for the
|
||||
API server as described in previous subsection.
|
||||
The sample below also assumes that you are using `cluster.local` as the default
|
||||
DNS domain name.
|
||||
|
||||
[ req ]
|
||||
default_bits = 2048
|
||||
prompt = no
|
||||
default_md = sha256
|
||||
req_extensions = req_ext
|
||||
distinguished_name = dn
|
||||
|
||||
[ dn ]
|
||||
C = <country>
|
||||
ST = <state>
|
||||
L = <city>
|
||||
O = <organization>
|
||||
OU = <organization unit>
|
||||
CN = <MASTER_IP>
|
||||
|
||||
[ req_ext ]
|
||||
subjectAltName = @alt_names
|
||||
|
||||
[ alt_names ]
|
||||
DNS.1 = kubernetes
|
||||
DNS.2 = kubernetes.default
|
||||
DNS.3 = kubernetes.default.svc
|
||||
DNS.4 = kubernetes.default.svc.cluster
|
||||
DNS.5 = kubernetes.default.svc.cluster.local
|
||||
IP.1 = <MASTER_IP>
|
||||
IP.2 = <MASTER_CLUSTER_IP>
|
||||
|
||||
[ v3_ext ]
|
||||
authorityKeyIdentifier=keyid,issuer:always
|
||||
basicConstraints=CA:FALSE
|
||||
keyUsage=keyEncipherment,dataEncipherment
|
||||
extendedKeyUsage=serverAuth,clientAuth
|
||||
subjectAltName=@alt_names
|
||||
1. Generate the certificate signing request based on the config file:
|
||||
|
||||
openssl req -new -key server.key -out server.csr -config csr.conf
|
||||
1. Generate the server certificate using the ca.key, ca.crt and server.csr:
|
||||
|
||||
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key \
|
||||
-CAcreateserial -out server.crt -days 10000 \
|
||||
-extensions v3_ext -extfile csr.conf
|
||||
1. View the certificate:
|
||||
|
||||
openssl x509 -noout -text -in ./server.crt
|
||||
|
||||
Finally, add the same parameters into the API server start parameters.
|
||||
|
||||
### cfssl
|
||||
|
||||
**cfssl** is another tool for certificate generation.
|
||||
|
||||
1. Download, unpack and prepare the command line tools as shown below.
|
||||
Note that you may need to adapt the sample commands based on the hardware
|
||||
architecture and cfssl version you are using.
|
||||
|
||||
curl -L https://github.com/cloudflare/cfssl/releases/download/v1.5.0/cfssl_1.5.0_linux_amd64 -o cfssl
|
||||
chmod +x cfssl
|
||||
curl -L https://github.com/cloudflare/cfssl/releases/download/v1.5.0/cfssljson_1.5.0_linux_amd64 -o cfssljson
|
||||
chmod +x cfssljson
|
||||
curl -L https://github.com/cloudflare/cfssl/releases/download/v1.5.0/cfssl-certinfo_1.5.0_linux_amd64 -o cfssl-certinfo
|
||||
chmod +x cfssl-certinfo
|
||||
1. Create a directory to hold the artifacts and initialize cfssl:
|
||||
|
||||
mkdir cert
|
||||
cd cert
|
||||
../cfssl print-defaults config > config.json
|
||||
../cfssl print-defaults csr > csr.json
|
||||
1. Create a JSON config file for generating the CA file, for example, `ca-config.json`:
|
||||
|
||||
{
|
||||
"signing": {
|
||||
"default": {
|
||||
"expiry": "8760h"
|
||||
},
|
||||
"profiles": {
|
||||
"kubernetes": {
|
||||
"usages": [
|
||||
"signing",
|
||||
"key encipherment",
|
||||
"server auth",
|
||||
"client auth"
|
||||
],
|
||||
"expiry": "8760h"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
1. Create a JSON config file for CA certificate signing request (CSR), for example,
|
||||
`ca-csr.json`. Be sure to replace the values marked with angle brackets with
|
||||
real values you want to use.
|
||||
|
||||
{
|
||||
"CN": "kubernetes",
|
||||
"key": {
|
||||
"algo": "rsa",
|
||||
"size": 2048
|
||||
},
|
||||
"names":[{
|
||||
"C": "<country>",
|
||||
"ST": "<state>",
|
||||
"L": "<city>",
|
||||
"O": "<organization>",
|
||||
"OU": "<organization unit>"
|
||||
}]
|
||||
}
|
||||
1. Generate CA key (`ca-key.pem`) and certificate (`ca.pem`):
|
||||
|
||||
../cfssl gencert -initca ca-csr.json | ../cfssljson -bare ca
|
||||
1. Create a JSON config file for generating keys and certificates for the API
|
||||
server, for example, `server-csr.json`. Be sure to replace the values in angle brackets with
|
||||
real values you want to use. The `MASTER_CLUSTER_IP` is the service cluster
|
||||
IP for the API server as described in previous subsection.
|
||||
The sample below also assumes that you are using `cluster.local` as the default
|
||||
DNS domain name.
|
||||
|
||||
{
|
||||
"CN": "kubernetes",
|
||||
"hosts": [
|
||||
"127.0.0.1",
|
||||
"<MASTER_IP>",
|
||||
"<MASTER_CLUSTER_IP>",
|
||||
"kubernetes",
|
||||
"kubernetes.default",
|
||||
"kubernetes.default.svc",
|
||||
"kubernetes.default.svc.cluster",
|
||||
"kubernetes.default.svc.cluster.local"
|
||||
],
|
||||
"key": {
|
||||
"algo": "rsa",
|
||||
"size": 2048
|
||||
},
|
||||
"names": [{
|
||||
"C": "<country>",
|
||||
"ST": "<state>",
|
||||
"L": "<city>",
|
||||
"O": "<organization>",
|
||||
"OU": "<organization unit>"
|
||||
}]
|
||||
}
|
||||
1. Generate the key and certificate for the API server, which are by default
|
||||
saved into file `server-key.pem` and `server.pem` respectively:
|
||||
|
||||
../cfssl gencert -ca=ca.pem -ca-key=ca-key.pem \
|
||||
--config=ca-config.json -profile=kubernetes \
|
||||
server-csr.json | ../cfssljson -bare server
|
||||
|
||||
|
||||
## Distributing Self-Signed CA Certificate
|
||||
|
||||
A client node may refuse to recognize a self-signed CA certificate as valid.
|
||||
For a non-production deployment, or for a deployment that runs behind a company
|
||||
firewall, you can distribute a self-signed CA certificate to all clients and
|
||||
refresh the local list for valid certificates.
|
||||
|
||||
On each client, perform the following operations:
|
||||
|
||||
```bash
|
||||
sudo cp ca.crt /usr/local/share/ca-certificates/kubernetes.crt
|
||||
sudo update-ca-certificates
|
||||
```
|
||||
|
||||
```
|
||||
Updating certificates in /etc/ssl/certs...
|
||||
1 added, 0 removed; done.
|
||||
Running hooks in /etc/ca-certificates/update.d....
|
||||
done.
|
||||
```
|
||||
|
||||
## Certificates API
|
||||
|
||||
You can use the `certificates.k8s.io` API to provision
|
||||
x509 certificates to use for authentication as documented
|
||||
[here](/docs/tasks/tls/managing-tls-in-a-cluster).
|
||||
|
||||
|
||||
@@ -25,6 +25,12 @@ kube-dns.
|
||||
|
||||
{{< codenew file="admin/dns/dnsutils.yaml" >}}
|
||||
|
||||
{{< note >}}
|
||||
This example creates a pod in the `default` namespace. DNS name resolution for
|
||||
services depends on the namespace of the pod. For more information, review
|
||||
[DNS for Services and Pods](/docs/concepts/services-networking/dns-pod-service/#what-things-get-dns-names).
|
||||
{{< /note >}}
|
||||
|
||||
Use that manifest to create a Pod:
|
||||
|
||||
```shell
|
||||
@@ -247,6 +253,27 @@ linux/amd64, go1.10.3, 2e322f6
|
||||
172.17.0.18:41675 - [07/Sep/2018:15:29:11 +0000] 59925 "A IN kubernetes.default.svc.cluster.local. udp 54 false 512" NOERROR qr,aa,rd,ra 106 0.000066649s
|
||||
```
|
||||
|
||||
### Are you in the right namespace for the service?
|
||||
|
||||
DNS queries that don't specify a namespace are limited to the pod's
|
||||
namespace.
|
||||
|
||||
If the namespace of the pod and service differ, the DNS query must include
|
||||
the namespace of the service.
|
||||
|
||||
This query is limited to the pod's namespace:
|
||||
```shell
|
||||
kubectl exec -i -t dnsutils -- nslookup <service-name>
|
||||
```
|
||||
|
||||
This query specifies the namespace:
|
||||
```shell
|
||||
kubectl exec -i -t dnsutils -- nslookup <service-name>.<namespace>
|
||||
```
|
||||
|
||||
To learn more about name resolution, see
|
||||
[DNS for Services and Pods](/docs/concepts/services-networking/dns-pod-service/#what-things-get-dns-names).
|
||||
|
||||
## Known issues
|
||||
|
||||
Some Linux distributions (e.g. Ubuntu) use a local DNS resolver by default (systemd-resolved).
|
||||
|
||||
@@ -92,7 +92,7 @@ kubectl describe secrets/db-user-pass-96mffmfh4k
|
||||
The output is similar to:
|
||||
|
||||
```
|
||||
Name: db-user-pass
|
||||
Name: db-user-pass-96mffmfh4k
|
||||
Namespace: default
|
||||
Labels: <none>
|
||||
Annotations: <none>
|
||||
|
||||
+4
@@ -293,6 +293,10 @@ Services.
|
||||
Readiness probes runs on the container during its whole lifecycle.
|
||||
{{< /note >}}
|
||||
|
||||
{{< caution >}}
|
||||
Liveness probes *do not* wait for readiness probes to succeed. If you want to wait before executing a liveness probe you should use initialDelaySeconds or a startupProbe.
|
||||
{{< /caution >}}
|
||||
|
||||
Readiness probes are configured similarly to liveness probes. The only difference
|
||||
is that you use the `readinessProbe` field instead of the `livenessProbe` field.
|
||||
|
||||
|
||||
@@ -99,7 +99,7 @@ kubectl run ephemeral-demo --image=k8s.gcr.io/pause:3.1 --restart=Never
|
||||
```
|
||||
|
||||
The examples in this section use the `pause` container image because it does not
|
||||
contain userland debugging utilities, but this method works with all container
|
||||
contain debugging utilities, but this method works with all container
|
||||
images.
|
||||
|
||||
If you attempt to use `kubectl exec` to create a shell you will see an error
|
||||
|
||||
+3
-2
@@ -70,8 +70,9 @@ override any environment variables specified in the container image.
|
||||
{{< /note >}}
|
||||
|
||||
{{< note >}}
|
||||
The environment variables can reference each other, and cycles are possible,
|
||||
pay attention to the order before using
|
||||
Environment variables may reference each other, however ordering is important.
|
||||
Variables making use of others defined in the same context must come later in
|
||||
the list. Similarly, avoid circular references.
|
||||
{{< /note >}}
|
||||
|
||||
## Using environment variables inside of your config
|
||||
|
||||
@@ -8,7 +8,7 @@ weight: 20
|
||||
|
||||
[Kustomize](https://github.com/kubernetes-sigs/kustomize) is a standalone tool
|
||||
to customize Kubernetes objects
|
||||
through a [kustomization file](https://kubernetes-sigs.github.io/kustomize/api-reference/glossary/#kustomization).
|
||||
through a [kustomization file](https://kubectl.docs.kubernetes.io/references/kustomize/glossary/#kustomization).
|
||||
|
||||
Since 1.14, Kubectl also
|
||||
supports the management of Kubernetes objects using a kustomization file.
|
||||
|
||||
@@ -0,0 +1,111 @@
|
||||
---
|
||||
title: Accessing the Kubernetes API from a Pod
|
||||
content_type: task
|
||||
weight: 120
|
||||
---
|
||||
|
||||
<!-- overview -->
|
||||
|
||||
This guide demonstrates how to access the Kubernetes API from within a pod.
|
||||
|
||||
## {{% heading "prerequisites" %}}
|
||||
|
||||
{{< include "task-tutorial-prereqs.md" >}}
|
||||
|
||||
<!-- steps -->
|
||||
|
||||
## Accessing the API from within a Pod
|
||||
|
||||
When accessing the API from within a Pod, locating and authenticating
|
||||
to the API server are slightly different to the external client case.
|
||||
|
||||
The easiest way to use the Kubernetes API from a Pod is to use
|
||||
one of the official [client libraries](/docs/reference/using-api/client-libraries/). These
|
||||
libraries can automatically discover the API server and authenticate.
|
||||
|
||||
### Using Official Client Libraries
|
||||
|
||||
From within a Pod, the recommended ways to connect to the Kubernetes API are:
|
||||
|
||||
- For a Go client, use the official [Go client library](https://github.com/kubernetes/client-go/).
|
||||
The `rest.InClusterConfig()` function handles API host discovery and authentication automatically.
|
||||
See [an example here](https://git.k8s.io/client-go/examples/in-cluster-client-configuration/main.go).
|
||||
|
||||
- For a Python client, use the official [Python client library](https://github.com/kubernetes-client/python/).
|
||||
The `config.load_incluster_config()` function handles API host discovery and authentication automatically.
|
||||
See [an example here](https://github.com/kubernetes-client/python/blob/master/examples/in_cluster_config.py).
|
||||
|
||||
- There are a number of other libraries available, please refer to the [Client Libraries](/docs/reference/using-api/client-libraries/) page.
|
||||
|
||||
In each case, the service account credentials of the Pod are used to communicate
|
||||
securely with the API server.
|
||||
|
||||
### Directly accessing the REST API
|
||||
|
||||
While running in a Pod, the Kubernetes apiserver is accessible via a Service named
|
||||
`kubernetes` in the `default` namespace. Therefore, Pods can use the
|
||||
`kubernetes.default.svc` hostname to query the API server. Official client libraries
|
||||
do this automatically.
|
||||
|
||||
The recommended way to authenticate to the API server is with a
|
||||
[service account](/docs/tasks/configure-pod-container/configure-service-account/) credential. By default, a Pod
|
||||
is associated with a service account, and a credential (token) for that
|
||||
service account is placed into the filesystem tree of each container in that Pod,
|
||||
at `/var/run/secrets/kubernetes.io/serviceaccount/token`.
|
||||
|
||||
If available, a certificate bundle is placed into the filesystem tree of each
|
||||
container at `/var/run/secrets/kubernetes.io/serviceaccount/ca.crt`, and should be
|
||||
used to verify the serving certificate of the API server.
|
||||
|
||||
Finally, the default namespace to be used for namespaced API operations is placed in a file
|
||||
at `/var/run/secrets/kubernetes.io/serviceaccount/namespace` in each container.
|
||||
|
||||
### Using kubectl proxy
|
||||
|
||||
If you would like to query the API without an official client library, you can run `kubectl proxy`
|
||||
as the [command](/docs/tasks/inject-data-application/define-command-argument-container/)
|
||||
of a new sidecar container in the Pod. This way, `kubectl proxy` will authenticate
|
||||
to the API and expose it on the `localhost` interface of the Pod, so that other containers
|
||||
in the Pod can use it directly.
|
||||
|
||||
### Without using a proxy
|
||||
|
||||
It is possible to avoid using the kubectl proxy by passing the authentication token
|
||||
directly to the API server. The internal certificate secures the connection.
|
||||
|
||||
```shell
|
||||
# Point to the internal API server hostname
|
||||
APISERVER=https://kubernetes.default.svc
|
||||
|
||||
# Path to ServiceAccount token
|
||||
SERVICEACCOUNT=/var/run/secrets/kubernetes.io/serviceaccount
|
||||
|
||||
# Read this Pod's namespace
|
||||
NAMESPACE=$(cat ${SERVICEACCOUNT}/namespace)
|
||||
|
||||
# Read the ServiceAccount bearer token
|
||||
TOKEN=$(cat ${SERVICEACCOUNT}/token)
|
||||
|
||||
# Reference the internal certificate authority (CA)
|
||||
CACERT=${SERVICEACCOUNT}/ca.crt
|
||||
|
||||
# Explore the API with TOKEN
|
||||
curl --cacert ${CACERT} --header "Authorization: Bearer ${TOKEN}" -X GET ${APISERVER}/api
|
||||
```
|
||||
|
||||
The output will be similar to this:
|
||||
|
||||
```json
|
||||
{
|
||||
"kind": "APIVersions",
|
||||
"versions": [
|
||||
"v1"
|
||||
],
|
||||
"serverAddressByClientCIDRs": [
|
||||
{
|
||||
"clientCIDR": "0.0.0.0/0",
|
||||
"serverAddress": "10.0.1.149:443"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
@@ -69,8 +69,9 @@ write that to disk, in the location specified by `--cert-dir`. Then the kubelet
|
||||
will use the new certificate to connect to the Kubernetes API.
|
||||
|
||||
As the expiration of the signed certificate approaches, the kubelet will
|
||||
automatically issue a new certificate signing request, using the Kubernetes
|
||||
API. Again, the controller manager will automatically approve the certificate
|
||||
automatically issue a new certificate signing request, using the Kubernetes API.
|
||||
This can happen at any point between 30% and 10% of the time remaining on the
|
||||
certificate. Again, the controller manager will automatically approve the certificate
|
||||
request and attach a signed certificate to the certificate signing request. The
|
||||
kubelet will retrieve the new signed certificate from the Kubernetes API and
|
||||
write that to disk. Then it will update the connections it has to the
|
||||
|
||||
@@ -105,8 +105,8 @@ Configurations with a single API server will experience unavailability while the
|
||||
* Make sure control plane components logs no TLS errors.
|
||||
|
||||
{{< note >}}
|
||||
To generate certificates and private keys for your cluster using the `openssl` command line tool, see [Certificates (`openssl`)](/docs/concepts/cluster-administration/certificates/#openssl).
|
||||
You can also use [`cfssl`](/docs/concepts/cluster-administration/certificates/#cfssl).
|
||||
To generate certificates and private keys for your cluster using the `openssl` command line tool, see [Certificates (`openssl`)](/docs/tasks/administer-cluster/certificates/#openssl).
|
||||
You can also use [`cfssl`](/docs/tasks/administer-cluster/certificates/#cfssl).
|
||||
{{< /note >}}
|
||||
|
||||
1. Annotate any Daemonsets and Deployments to trigger pod replacement in a safer rolling fashion.
|
||||
|
||||
@@ -7,19 +7,20 @@ no_list: true
|
||||
|
||||
## kubectl
|
||||
|
||||
The Kubernetes command-line tool, `kubectl`, allows you to run commands against
|
||||
Kubernetes clusters. You can use `kubectl` to deploy applications, inspect and
|
||||
manage cluster resources, and view logs.
|
||||
|
||||
See [Install and Set Up `kubectl`](/docs/tasks/tools/install-kubectl/) for
|
||||
information about how to download and install `kubectl` and set it up for
|
||||
accessing your cluster.
|
||||
|
||||
<a class="btn btn-primary" href="/docs/tasks/tools/install-kubectl/" role="button" aria-label="View kubectl Install and Set Up Guide">View kubectl Install and Set Up Guide</a>
|
||||
|
||||
You can also read the
|
||||
<!-- overview -->
|
||||
The Kubernetes command-line tool, [kubectl](/docs/reference/kubectl/kubectl/), allows
|
||||
you to run commands against Kubernetes clusters.
|
||||
You can use kubectl to deploy applications, inspect and manage cluster resources,
|
||||
and view logs. For more information including a complete list of kubectl operations, see the
|
||||
[`kubectl` reference documentation](/docs/reference/kubectl/).
|
||||
|
||||
kubectl is installable on a variety of Linux platforms, macOS and Windows.
|
||||
Find your preferred operating system below.
|
||||
|
||||
- [Install kubectl on Linux](install-kubectl-linux)
|
||||
- [Install kubectl on macOS](install-kubectl-macos)
|
||||
- [Install kubectl on Windows](install-kubectl-windows)
|
||||
|
||||
## kind
|
||||
|
||||
[`kind`](https://kind.sigs.k8s.io/docs/) lets you run Kubernetes on
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
title: "Tools Included"
|
||||
description: "Snippets to be included in the main kubectl-installs-*.md pages."
|
||||
headless: true
|
||||
toc_hide: true
|
||||
---
|
||||
@@ -0,0 +1,21 @@
|
||||
---
|
||||
title: "gcloud kubectl install"
|
||||
description: "How to install kubectl with gcloud snippet for inclusion in each OS-specific tab."
|
||||
headless: true
|
||||
---
|
||||
|
||||
You can install kubectl as part of the Google Cloud SDK.
|
||||
|
||||
1. Install the [Google Cloud SDK](https://cloud.google.com/sdk/).
|
||||
|
||||
1. Run the `kubectl` installation command:
|
||||
|
||||
```shell
|
||||
gcloud components install kubectl
|
||||
```
|
||||
|
||||
1. Test to ensure the version you installed is up-to-date:
|
||||
|
||||
```shell
|
||||
kubectl version --client
|
||||
```
|
||||
@@ -0,0 +1,12 @@
|
||||
---
|
||||
title: "What's next?"
|
||||
description: "What's next after installing kubectl."
|
||||
headless: true
|
||||
---
|
||||
|
||||
* [Install Minikube](https://minikube.sigs.k8s.io/docs/start/)
|
||||
* See the [getting started guides](/docs/setup/) for more about creating clusters.
|
||||
* [Learn how to launch and expose your application.](/docs/tasks/access-application-cluster/service-access-application-cluster/)
|
||||
* If you need access to a cluster you didn't create, see the
|
||||
[Sharing Cluster Access document](/docs/tasks/access-application-cluster/configure-access-multiple-clusters/).
|
||||
* Read the [kubectl reference docs](/docs/reference/kubectl/kubectl/)
|
||||
@@ -0,0 +1,54 @@
|
||||
---
|
||||
title: "bash auto-completion on Linux"
|
||||
description: "Some optional configuration for bash auto-completion on Linux."
|
||||
headless: true
|
||||
---
|
||||
|
||||
### Introduction
|
||||
|
||||
The kubectl completion script for Bash can be generated with the command `kubectl completion bash`. Sourcing the completion script in your shell enables kubectl autocompletion.
|
||||
|
||||
However, the completion script depends on [**bash-completion**](https://github.com/scop/bash-completion), which means that you have to install this software first (you can test if you have bash-completion already installed by running `type _init_completion`).
|
||||
|
||||
### Install bash-completion
|
||||
|
||||
bash-completion is provided by many package managers (see [here](https://github.com/scop/bash-completion#installation)). You can install it with `apt-get install bash-completion` or `yum install bash-completion`, etc.
|
||||
|
||||
The above commands create `/usr/share/bash-completion/bash_completion`, which is the main script of bash-completion. Depending on your package manager, you have to manually source this file in your `~/.bashrc` file.
|
||||
|
||||
To find out, reload your shell and run `type _init_completion`. If the command succeeds, you're already set, otherwise add the following to your `~/.bashrc` file:
|
||||
|
||||
```bash
|
||||
source /usr/share/bash-completion/bash_completion
|
||||
```
|
||||
|
||||
Reload your shell and verify that bash-completion is correctly installed by typing `type _init_completion`.
|
||||
|
||||
### Enable kubectl autocompletion
|
||||
|
||||
You now need to ensure that the kubectl completion script gets sourced in all your shell sessions. There are two ways in which you can do this:
|
||||
|
||||
- Source the completion script in your `~/.bashrc` file:
|
||||
|
||||
```bash
|
||||
echo 'source <(kubectl completion bash)' >>~/.bashrc
|
||||
```
|
||||
|
||||
- Add the completion script to the `/etc/bash_completion.d` directory:
|
||||
|
||||
```bash
|
||||
kubectl completion bash >/etc/bash_completion.d/kubectl
|
||||
```
|
||||
|
||||
If you have an alias for kubectl, you can extend shell completion to work with that alias:
|
||||
|
||||
```bash
|
||||
echo 'alias k=kubectl' >>~/.bashrc
|
||||
echo 'complete -F __start_kubectl k' >>~/.bashrc
|
||||
```
|
||||
|
||||
{{< note >}}
|
||||
bash-completion sources all completion scripts in `/etc/bash_completion.d`.
|
||||
{{< /note >}}
|
||||
|
||||
Both approaches are equivalent. After reloading your shell, kubectl autocompletion should be working.
|
||||
@@ -0,0 +1,89 @@
|
||||
---
|
||||
title: "bash auto-completion on macOS"
|
||||
description: "Some optional configuration for bash auto-completion on macOS."
|
||||
headless: true
|
||||
---
|
||||
|
||||
### Introduction
|
||||
|
||||
The kubectl completion script for Bash can be generated with `kubectl completion bash`. Sourcing this script in your shell enables kubectl completion.
|
||||
|
||||
However, the kubectl completion script depends on [**bash-completion**](https://github.com/scop/bash-completion) which you thus have to previously install.
|
||||
|
||||
{{< warning>}}
|
||||
There are two versions of bash-completion, v1 and v2. V1 is for Bash 3.2 (which is the default on macOS), and v2 is for Bash 4.1+. The kubectl completion script **doesn't work** correctly with bash-completion v1 and Bash 3.2. It requires **bash-completion v2** and **Bash 4.1+**. Thus, to be able to correctly use kubectl completion on macOS, you have to install and use Bash 4.1+ ([*instructions*](https://itnext.io/upgrading-bash-on-macos-7138bd1066ba)). The following instructions assume that you use Bash 4.1+ (that is, any Bash version of 4.1 or newer).
|
||||
{{< /warning >}}
|
||||
|
||||
### Upgrade Bash
|
||||
|
||||
The instructions here assume you use Bash 4.1+. You can check your Bash's version by running:
|
||||
|
||||
```bash
|
||||
echo $BASH_VERSION
|
||||
```
|
||||
|
||||
If it is too old, you can install/upgrade it using Homebrew:
|
||||
|
||||
```bash
|
||||
brew install bash
|
||||
```
|
||||
|
||||
Reload your shell and verify that the desired version is being used:
|
||||
|
||||
```bash
|
||||
echo $BASH_VERSION $SHELL
|
||||
```
|
||||
|
||||
Homebrew usually installs it at `/usr/local/bin/bash`.
|
||||
|
||||
### Install bash-completion
|
||||
|
||||
{{< note >}}
|
||||
As mentioned, these instructions assume you use Bash 4.1+, which means you will install bash-completion v2 (in contrast to Bash 3.2 and bash-completion v1, in which case kubectl completion won't work).
|
||||
{{< /note >}}
|
||||
|
||||
You can test if you have bash-completion v2 already installed with `type _init_completion`. If not, you can install it with Homebrew:
|
||||
|
||||
```bash
|
||||
brew install bash-completion@2
|
||||
```
|
||||
|
||||
As stated in the output of this command, add the following to your `~/.bash_profile` file:
|
||||
|
||||
```bash
|
||||
export BASH_COMPLETION_COMPAT_DIR="/usr/local/etc/bash_completion.d"
|
||||
[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"
|
||||
```
|
||||
|
||||
Reload your shell and verify that bash-completion v2 is correctly installed with `type _init_completion`.
|
||||
|
||||
### Enable kubectl autocompletion
|
||||
|
||||
You now have to ensure that the kubectl completion script gets sourced in all your shell sessions. There are multiple ways to achieve this:
|
||||
|
||||
- Source the completion script in your `~/.bash_profile` file:
|
||||
|
||||
```bash
|
||||
echo 'source <(kubectl completion bash)' >>~/.bash_profile
|
||||
```
|
||||
|
||||
- Add the completion script to the `/usr/local/etc/bash_completion.d` directory:
|
||||
|
||||
```bash
|
||||
kubectl completion bash >/usr/local/etc/bash_completion.d/kubectl
|
||||
```
|
||||
|
||||
- If you have an alias for kubectl, you can extend shell completion to work with that alias:
|
||||
|
||||
```bash
|
||||
echo 'alias k=kubectl' >>~/.bash_profile
|
||||
echo 'complete -F __start_kubectl k' >>~/.bash_profile
|
||||
```
|
||||
|
||||
- If you installed kubectl with Homebrew (as explained [above](#install-with-homebrew-on-macos)), then the kubectl completion script should already be in `/usr/local/etc/bash_completion.d/kubectl`. In that case, you don't need to do anything.
|
||||
|
||||
{{< note >}}
|
||||
The Homebrew installation of bash-completion v2 sources all the files in the `BASH_COMPLETION_COMPAT_DIR` directory, that's why the latter two methods work.
|
||||
{{< /note >}}
|
||||
|
||||
In any case, after reloading your shell, kubectl completion should be working.
|
||||
@@ -0,0 +1,29 @@
|
||||
---
|
||||
title: "zsh auto-completion"
|
||||
description: "Some optional configuration for zsh auto-completion."
|
||||
headless: true
|
||||
---
|
||||
|
||||
The kubectl completion script for Zsh can be generated with the command `kubectl completion zsh`. Sourcing the completion script in your shell enables kubectl autocompletion.
|
||||
|
||||
To do so in all your shell sessions, add the following to your `~/.zshrc` file:
|
||||
|
||||
```zsh
|
||||
source <(kubectl completion zsh)
|
||||
```
|
||||
|
||||
If you have an alias for kubectl, you can extend shell completion to work with that alias:
|
||||
|
||||
```zsh
|
||||
echo 'alias k=kubectl' >>~/.zshrc
|
||||
echo 'complete -F __start_kubectl k' >>~/.zshrc
|
||||
```
|
||||
|
||||
After reloading your shell, kubectl autocompletion should be working.
|
||||
|
||||
If you get an error like `complete:13: command not found: compdef`, then add the following to the beginning of your `~/.zshrc` file:
|
||||
|
||||
```zsh
|
||||
autoload -Uz compinit
|
||||
compinit
|
||||
```
|
||||
@@ -0,0 +1,34 @@
|
||||
---
|
||||
title: "verify kubectl install"
|
||||
description: "How to verify kubectl."
|
||||
headless: true
|
||||
---
|
||||
|
||||
In order for kubectl to find and access a Kubernetes cluster, it needs a
|
||||
[kubeconfig file](/docs/concepts/configuration/organize-cluster-access-kubeconfig/),
|
||||
which is created automatically when you create a cluster using
|
||||
[kube-up.sh](https://github.com/kubernetes/kubernetes/blob/master/cluster/kube-up.sh)
|
||||
or successfully deploy a Minikube cluster.
|
||||
By default, kubectl configuration is located at `~/.kube/config`.
|
||||
|
||||
Check that kubectl is properly configured by getting the cluster state:
|
||||
|
||||
```shell
|
||||
kubectl cluster-info
|
||||
```
|
||||
|
||||
If you see a URL response, kubectl is correctly configured to access your cluster.
|
||||
|
||||
If you see a message similar to the following, kubectl is not configured correctly or is not able to connect to a Kubernetes cluster.
|
||||
|
||||
```
|
||||
The connection to the server <server-name:port> was refused - did you specify the right host or port?
|
||||
```
|
||||
|
||||
For example, if you are intending to run a Kubernetes cluster on your laptop (locally), you will need a tool like Minikube to be installed first and then re-run the commands stated above.
|
||||
|
||||
If kubectl cluster-info returns the url response but you can't access your cluster, to check whether it is configured properly, use:
|
||||
|
||||
```shell
|
||||
kubectl cluster-info dump
|
||||
```
|
||||
@@ -0,0 +1,172 @@
|
||||
---
|
||||
reviewers:
|
||||
- mikedanese
|
||||
title: Install and Set Up kubectl on Linux
|
||||
content_type: task
|
||||
weight: 10
|
||||
card:
|
||||
name: tasks
|
||||
weight: 20
|
||||
title: Install kubectl on Linux
|
||||
---
|
||||
|
||||
## {{% heading "prerequisites" %}}
|
||||
|
||||
You must use a kubectl version that is within one minor version difference of your cluster.
|
||||
For example, a v1.2 client should work with v1.1, v1.2, and v1.3 master.
|
||||
Using the latest version of kubectl helps avoid unforeseen issues.
|
||||
|
||||
## Install kubectl on Linux
|
||||
|
||||
The following methods exist for installing kubectl on Linux:
|
||||
|
||||
- [Install kubectl binary with curl on Linux](#install-kubectl-binary-with-curl-on-linux)
|
||||
- [Install using native package management](#install-using-native-package-management)
|
||||
- [Install using other package management](#install-using-other-package-management)
|
||||
- [Install on Linux as part of the Google Cloud SDK](#install-on-linux-as-part-of-the-google-cloud-sdk)
|
||||
|
||||
### Install kubectl binary with curl on Linux
|
||||
|
||||
1. Download the latest release with the command:
|
||||
|
||||
```bash
|
||||
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
|
||||
```
|
||||
|
||||
{{< note >}}
|
||||
To download a specific version, replace the `$(curl -L -s https://dl.k8s.io/release/stable.txt)` portion of the command with the specific version.
|
||||
|
||||
For example, to download version {{< param "fullversion" >}} on Linux, type:
|
||||
|
||||
```bash
|
||||
curl -LO https://dl.k8s.io/release/{{< param "fullversion" >}}/bin/linux/amd64/kubectl
|
||||
```
|
||||
{{< /note >}}
|
||||
|
||||
1. Validate the binary (optional)
|
||||
|
||||
Download the kubectl checksum file:
|
||||
|
||||
```bash
|
||||
curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
|
||||
```
|
||||
|
||||
Validate the kubectl binary against the checksum file:
|
||||
|
||||
```bash
|
||||
echo "$(<kubectl.sha256) kubectl" | sha256sum --check
|
||||
```
|
||||
|
||||
If valid, the output is:
|
||||
|
||||
```console
|
||||
kubectl: OK
|
||||
```
|
||||
|
||||
If the check fails, `sha256` exits with nonzero status and prints output similar to:
|
||||
|
||||
```bash
|
||||
kubectl: FAILED
|
||||
sha256sum: WARNING: 1 computed checksum did NOT match
|
||||
```
|
||||
|
||||
{{< note >}}
|
||||
Download the same version of the binary and checksum.
|
||||
{{< /note >}}
|
||||
|
||||
1. Install kubectl
|
||||
|
||||
```bash
|
||||
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
|
||||
```
|
||||
|
||||
{{< note >}}
|
||||
If you do not have root access on the target system, you can still install kubectl to the `~/.local/bin` directory:
|
||||
|
||||
```bash
|
||||
mkdir -p ~/.local/bin/kubectl
|
||||
mv ./kubectl ~/.local/bin/kubectl
|
||||
# and then add ~/.local/bin/kubectl to $PATH
|
||||
```
|
||||
|
||||
{{< /note >}}
|
||||
|
||||
1. Test to ensure the version you installed is up-to-date:
|
||||
|
||||
```bash
|
||||
kubectl version --client
|
||||
```
|
||||
|
||||
### Install using native package management
|
||||
|
||||
{{< tabs name="kubectl_install" >}}
|
||||
{{< tab name="Ubuntu, Debian or HypriotOS" codelang="bash" >}}
|
||||
sudo apt-get update && sudo apt-get install -y apt-transport-https gnupg2 curl
|
||||
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
|
||||
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y kubectl
|
||||
{{< /tab >}}
|
||||
|
||||
{{< tab name="CentOS, RHEL or Fedora" codelang="bash" >}}cat <<EOF > /etc/yum.repos.d/kubernetes.repo
|
||||
[kubernetes]
|
||||
name=Kubernetes
|
||||
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
|
||||
enabled=1
|
||||
gpgcheck=1
|
||||
repo_gpgcheck=1
|
||||
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
|
||||
EOF
|
||||
yum install -y kubectl
|
||||
{{< /tab >}}
|
||||
{{< /tabs >}}
|
||||
|
||||
### Install using other package management
|
||||
|
||||
{{< tabs name="other_kubectl_install" >}}
|
||||
{{% tab name="Snap" %}}
|
||||
If you are on Ubuntu or another Linux distribution that support [snap](https://snapcraft.io/docs/core/install) package manager, kubectl is available as a [snap](https://snapcraft.io/) application.
|
||||
|
||||
```shell
|
||||
snap install kubectl --classic
|
||||
kubectl version --client
|
||||
```
|
||||
|
||||
{{% /tab %}}
|
||||
|
||||
{{% tab name="Homebrew" %}}
|
||||
If you are on Linux and using [Homebrew](https://docs.brew.sh/Homebrew-on-Linux) package manager, kubectl is available for [installation](https://docs.brew.sh/Homebrew-on-Linux#install).
|
||||
|
||||
```shell
|
||||
brew install kubectl
|
||||
kubectl version --client
|
||||
```
|
||||
|
||||
{{% /tab %}}
|
||||
|
||||
{{< /tabs >}}
|
||||
|
||||
### Install on Linux as part of the Google Cloud SDK
|
||||
|
||||
{{< include "included/install-kubectl-gcloud.md" >}}
|
||||
|
||||
## Verify kubectl configuration
|
||||
|
||||
{{< include "included/verify-kubectl.md" >}}
|
||||
|
||||
## Optional kubectl configurations
|
||||
|
||||
### Enable shell autocompletion
|
||||
|
||||
kubectl provides autocompletion support for Bash and Zsh, which can save you a lot of typing.
|
||||
|
||||
Below are the procedures to set up autocompletion for Bash and Zsh.
|
||||
|
||||
{{< tabs name="kubectl_autocompletion" >}}
|
||||
{{< tab name="Bash" include="included/optional-kubectl-configs-bash-linux.md" />}}
|
||||
{{< tab name="Zsh" include="included/optional-kubectl-configs-zsh.md" />}}
|
||||
{{< /tabs >}}
|
||||
|
||||
## {{% heading "whatsnext" %}}
|
||||
|
||||
{{< include "included/kubectl-whats-next.md" >}}
|
||||
@@ -0,0 +1,160 @@
|
||||
---
|
||||
reviewers:
|
||||
- mikedanese
|
||||
title: Install and Set Up kubectl on macOS
|
||||
content_type: task
|
||||
weight: 10
|
||||
card:
|
||||
name: tasks
|
||||
weight: 20
|
||||
title: Install kubectl on macOS
|
||||
---
|
||||
|
||||
## {{% heading "prerequisites" %}}
|
||||
|
||||
You must use a kubectl version that is within one minor version difference of your cluster.
|
||||
For example, a v1.2 client should work with v1.1, v1.2, and v1.3 master.
|
||||
Using the latest version of kubectl helps avoid unforeseen issues.
|
||||
|
||||
## Install kubectl on macOS
|
||||
|
||||
The following methods exist for installing kubectl on macOS:
|
||||
|
||||
- [Install kubectl binary with curl on macOS](#install-kubectl-binary-with-curl-on-macos)
|
||||
- [Install with Homebrew on macOS](#install-with-homebrew-on-macos)
|
||||
- [Install with Macports on macOS](#install-with-macports-on-macos)
|
||||
- [Install on Linux as part of the Google Cloud SDK](#install-on-linux-as-part-of-the-google-cloud-sdk)
|
||||
|
||||
### Install kubectl binary with curl on macOS
|
||||
|
||||
1. Download the latest release:
|
||||
|
||||
```bash
|
||||
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl"
|
||||
```
|
||||
|
||||
{{< note >}}
|
||||
To download a specific version, replace the `$(curl -L -s https://dl.k8s.io/release/stable.txt)` portion of the command with the specific version.
|
||||
|
||||
For example, to download version {{< param "fullversion" >}} on macOS, type:
|
||||
|
||||
```bash
|
||||
curl -LO https://dl.k8s.io/release/{{< param "fullversion" >}}/bin/darwin/amd64/kubectl
|
||||
```
|
||||
|
||||
{{< /note >}}
|
||||
|
||||
1. Validate the binary (optional)
|
||||
|
||||
Download the kubectl checksum file:
|
||||
|
||||
```bash
|
||||
curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl.sha256"
|
||||
```
|
||||
|
||||
Validate the kubectl binary against the checksum file:
|
||||
|
||||
```bash
|
||||
echo "$(<kubectl.sha256) kubectl" | shasum -a 256 --check
|
||||
```
|
||||
|
||||
If valid, the output is:
|
||||
|
||||
```console
|
||||
kubectl: OK
|
||||
```
|
||||
|
||||
If the check fails, `shasum` exits with nonzero status and prints output similar to:
|
||||
|
||||
```bash
|
||||
kubectl: FAILED
|
||||
shasum: WARNING: 1 computed checksum did NOT match
|
||||
```
|
||||
|
||||
{{< note >}}
|
||||
Download the same version of the binary and checksum.
|
||||
{{< /note >}}
|
||||
|
||||
1. Make the kubectl binary executable.
|
||||
|
||||
```bash
|
||||
chmod +x ./kubectl
|
||||
```
|
||||
|
||||
1. Move the kubectl binary to a file location on your system `PATH`.
|
||||
|
||||
```bash
|
||||
sudo mv ./kubectl /usr/local/bin/kubectl
|
||||
sudo chown root: /usr/local/bin/kubectl
|
||||
```
|
||||
|
||||
1. Test to ensure the version you installed is up-to-date:
|
||||
|
||||
```bash
|
||||
kubectl version --client
|
||||
```
|
||||
|
||||
### Install with Homebrew on macOS
|
||||
|
||||
If you are on macOS and using [Homebrew](https://brew.sh/) package manager, you can install kubectl with Homebrew.
|
||||
|
||||
1. Run the installation command:
|
||||
|
||||
```bash
|
||||
brew install kubectl
|
||||
```
|
||||
|
||||
or
|
||||
|
||||
```bash
|
||||
brew install kubernetes-cli
|
||||
```
|
||||
|
||||
1. Test to ensure the version you installed is up-to-date:
|
||||
|
||||
```bash
|
||||
kubectl version --client
|
||||
```
|
||||
|
||||
### Install with Macports on macOS
|
||||
|
||||
If you are on macOS and using [Macports](https://macports.org/) package manager, you can install kubectl with Macports.
|
||||
|
||||
1. Run the installation command:
|
||||
|
||||
```bash
|
||||
sudo port selfupdate
|
||||
sudo port install kubectl
|
||||
```
|
||||
|
||||
1. Test to ensure the version you installed is up-to-date:
|
||||
|
||||
```bash
|
||||
kubectl version --client
|
||||
```
|
||||
|
||||
|
||||
### Install on macOS as part of the Google Cloud SDK
|
||||
|
||||
{{< include "included/install-kubectl-gcloud.md" >}}
|
||||
|
||||
## Verify kubectl configuration
|
||||
|
||||
{{< include "included/verify-kubectl.md" >}}
|
||||
|
||||
## Optional kubectl configurations
|
||||
|
||||
### Enable shell autocompletion
|
||||
|
||||
kubectl provides autocompletion support for Bash and Zsh, which can save you a lot of typing.
|
||||
|
||||
Below are the procedures to set up autocompletion for Bash and Zsh.
|
||||
|
||||
{{< tabs name="kubectl_autocompletion" >}}
|
||||
{{< tab name="Bash" include="included/optional-kubectl-configs-bash-mac.md" />}}
|
||||
{{< tab name="Zsh" include="included/optional-kubectl-configs-zsh.md" />}}
|
||||
{{< /tabs >}}
|
||||
|
||||
## {{% heading "whatsnext" %}}
|
||||
|
||||
{{< include "included/kubectl-whats-next.md" >}}
|
||||
@@ -0,0 +1,179 @@
|
||||
---
|
||||
reviewers:
|
||||
- mikedanese
|
||||
title: Install and Set Up kubectl on Windows
|
||||
content_type: task
|
||||
weight: 10
|
||||
card:
|
||||
name: tasks
|
||||
weight: 20
|
||||
title: Install kubectl on Windows
|
||||
---
|
||||
|
||||
## {{% heading "prerequisites" %}}
|
||||
|
||||
You must use a kubectl version that is within one minor version difference of your cluster.
|
||||
For example, a v1.2 client should work with v1.1, v1.2, and v1.3 master.
|
||||
Using the latest version of kubectl helps avoid unforeseen issues.
|
||||
|
||||
## Install kubectl on Windows
|
||||
|
||||
The following methods exist for installing kubectl on Windows:
|
||||
|
||||
- [Install kubectl binary with curl on Windows](#install-kubectl-binary-with-curl-on-windows)
|
||||
- [Install with PowerShell from PSGallery](#install-with-powershell-from-psgallery)
|
||||
- [Install on Windows using Chocolatey or Scoop](#install-on-windows-using-chocolatey-or-scoop)
|
||||
- [Install on Windows as part of the Google Cloud SDK](#install-on-windows-as-part-of-the-google-cloud-sdk)
|
||||
|
||||
|
||||
### Install kubectl binary with curl on Windows
|
||||
|
||||
1. Download the [latest release {{< param "fullversion" >}}](https://dl.k8s.io/release/{{< param "fullversion" >}}/bin/windows/amd64/kubectl.exe).
|
||||
|
||||
Or if you have `curl` installed, use this command:
|
||||
|
||||
```powershell
|
||||
curl -LO https://dl.k8s.io/release/{{< param "fullversion" >}}/bin/windows/amd64/kubectl.exe
|
||||
```
|
||||
|
||||
{{< note >}}
|
||||
To find out the latest stable version (for example, for scripting), take a look at [https://dl.k8s.io/release/stable.txt](https://dl.k8s.io/release/stable.txt).
|
||||
{{< /note >}}
|
||||
|
||||
1. Validate the binary (optional)
|
||||
|
||||
Download the kubectl checksum file:
|
||||
|
||||
```powershell
|
||||
curl -LO https://dl.k8s.io/{{< param "fullversion" >}}/bin/windows/amd64/kubectl.exe.sha256
|
||||
```
|
||||
|
||||
Validate the kubectl binary against the checksum file:
|
||||
|
||||
- Using Command Prompt to manually compare `CertUtil`'s output to the checksum file downloaded:
|
||||
|
||||
```cmd
|
||||
CertUtil -hashfile kubectl.exe SHA256
|
||||
type kubectl.exe.sha256
|
||||
```
|
||||
|
||||
- Using PowerShell to automate the verification using the `-eq` operator to get a `True` or `False` result:
|
||||
|
||||
```powershell
|
||||
$($(CertUtil -hashfile .\kubectl.exe SHA256)[1] -replace " ", "") -eq $(type .\kubectl.exe.sha256)
|
||||
```
|
||||
|
||||
1. Add the binary in to your `PATH`.
|
||||
|
||||
1. Test to ensure the version of `kubectl` is the same as downloaded:
|
||||
|
||||
```cmd
|
||||
kubectl version --client
|
||||
```
|
||||
|
||||
{{< note >}}
|
||||
[Docker Desktop for Windows](https://docs.docker.com/docker-for-windows/#kubernetes) adds its own version of `kubectl` to `PATH`.
|
||||
If you have installed Docker Desktop before, you may need to place your `PATH` entry before the one added by the Docker Desktop installer or remove the Docker Desktop's `kubectl`.
|
||||
{{< /note >}}
|
||||
|
||||
### Install with PowerShell from PSGallery
|
||||
|
||||
If you are on Windows and using the [PowerShell Gallery](https://www.powershellgallery.com/) package manager, you can install and update kubectl with PowerShell.
|
||||
|
||||
1. Run the installation commands (making sure to specify a `DownloadLocation`):
|
||||
|
||||
```powershell
|
||||
Install-Script -Name 'install-kubectl' -Scope CurrentUser -Force
|
||||
install-kubectl.ps1 [-DownloadLocation <path>]
|
||||
```
|
||||
|
||||
{{< note >}}
|
||||
If you do not specify a `DownloadLocation`, `kubectl` will be installed in the user's `temp` Directory.
|
||||
{{< /note >}}
|
||||
|
||||
The installer creates `$HOME/.kube` and instructs it to create a config file.
|
||||
|
||||
1. Test to ensure the version you installed is up-to-date:
|
||||
|
||||
```powershell
|
||||
kubectl version --client
|
||||
```
|
||||
|
||||
{{< note >}}
|
||||
Updating the installation is performed by rerunning the two commands listed in step 1.
|
||||
{{< /note >}}
|
||||
|
||||
### Install on Windows using Chocolatey or Scoop
|
||||
|
||||
1. To install kubectl on Windows you can use either [Chocolatey](https://chocolatey.org) package manager or [Scoop](https://scoop.sh) command-line installer.
|
||||
|
||||
{{< tabs name="kubectl_win_install" >}}
|
||||
{{% tab name="choco" %}}
|
||||
```powershell
|
||||
choco install kubernetes-cli
|
||||
```
|
||||
{{% /tab %}}
|
||||
{{% tab name="scoop" %}}
|
||||
```powershell
|
||||
scoop install kubectl
|
||||
```
|
||||
{{% /tab %}}
|
||||
{{< /tabs >}}
|
||||
|
||||
|
||||
1. Test to ensure the version you installed is up-to-date:
|
||||
|
||||
```powershell
|
||||
kubectl version --client
|
||||
```
|
||||
|
||||
1. Navigate to your home directory:
|
||||
|
||||
```powershell
|
||||
# If you're using cmd.exe, run: cd %USERPROFILE%
|
||||
cd ~
|
||||
```
|
||||
|
||||
1. Create the `.kube` directory:
|
||||
|
||||
```powershell
|
||||
mkdir .kube
|
||||
```
|
||||
|
||||
1. Change to the `.kube` directory you just created:
|
||||
|
||||
```powershell
|
||||
cd .kube
|
||||
```
|
||||
|
||||
1. Configure kubectl to use a remote Kubernetes cluster:
|
||||
|
||||
```powershell
|
||||
New-Item config -type file
|
||||
```
|
||||
|
||||
{{< note >}}
|
||||
Edit the config file with a text editor of your choice, such as Notepad.
|
||||
{{< /note >}}
|
||||
|
||||
### Install on Windows as part of the Google Cloud SDK
|
||||
|
||||
{{< include "included/install-kubectl-gcloud.md" >}}
|
||||
|
||||
## Verify kubectl configuration
|
||||
|
||||
{{< include "included/verify-kubectl.md" >}}
|
||||
|
||||
## Optional kubectl configurations
|
||||
|
||||
### Enable shell autocompletion
|
||||
|
||||
kubectl provides autocompletion support for Bash and Zsh, which can save you a lot of typing.
|
||||
|
||||
Below are the procedures to set up autocompletion for Zsh, if you are running that on Windows.
|
||||
|
||||
{{< include "included/optional-kubectl-configs-zsh.md" >}}
|
||||
|
||||
## {{% heading "whatsnext" %}}
|
||||
|
||||
{{< include "included/kubectl-whats-next.md" >}}
|
||||
@@ -1,634 +0,0 @@
|
||||
---
|
||||
reviewers:
|
||||
- mikedanese
|
||||
title: Install and Set Up kubectl
|
||||
content_type: task
|
||||
weight: 10
|
||||
card:
|
||||
name: tasks
|
||||
weight: 20
|
||||
title: Install kubectl
|
||||
---
|
||||
|
||||
<!-- overview -->
|
||||
The Kubernetes command-line tool, [kubectl](/docs/reference/kubectl/kubectl/), allows
|
||||
you to run commands against Kubernetes clusters.
|
||||
You can use kubectl to deploy applications, inspect and manage cluster resources,
|
||||
and view logs. For a complete list of kubectl operations, see
|
||||
[Overview of kubectl](/docs/reference/kubectl/overview/).
|
||||
|
||||
|
||||
## {{% heading "prerequisites" %}}
|
||||
|
||||
You must use a kubectl version that is within one minor version difference of your cluster.
|
||||
For example, a v1.2 client should work with v1.1, v1.2, and v1.3 master.
|
||||
Using the latest version of kubectl helps avoid unforeseen issues.
|
||||
|
||||
<!-- steps -->
|
||||
|
||||
## Install kubectl on Linux
|
||||
|
||||
### Install kubectl binary with curl on Linux
|
||||
|
||||
1. Download the latest release with the command:
|
||||
|
||||
```bash
|
||||
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
|
||||
```
|
||||
|
||||
{{< note >}}
|
||||
To download a specific version, replace the `$(curl -L -s https://dl.k8s.io/release/stable.txt)` portion of the command with the specific version.
|
||||
|
||||
For example, to download version {{< param "fullversion" >}} on Linux, type:
|
||||
|
||||
```bash
|
||||
curl -LO https://dl.k8s.io/release/{{< param "fullversion" >}}/bin/linux/amd64/kubectl
|
||||
```
|
||||
{{< /note >}}
|
||||
|
||||
1. Validate the binary (optional)
|
||||
|
||||
Download the kubectl checksum file:
|
||||
|
||||
```bash
|
||||
curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
|
||||
```
|
||||
|
||||
Validate the kubectl binary against the checksum file:
|
||||
|
||||
```bash
|
||||
echo "$(<kubectl.sha256) kubectl" | sha256sum --check
|
||||
```
|
||||
|
||||
If valid, the output is:
|
||||
|
||||
```bash
|
||||
kubectl: OK
|
||||
```
|
||||
|
||||
If the check fails, `sha256` exits with nonzero status and prints output similar to:
|
||||
|
||||
```bash
|
||||
kubectl: FAILED
|
||||
sha256sum: WARNING: 1 computed checksum did NOT match
|
||||
```
|
||||
|
||||
{{< note >}}
|
||||
Download the same version of the binary and checksum.
|
||||
{{< /note >}}
|
||||
|
||||
1. Install kubectl
|
||||
|
||||
```bash
|
||||
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
|
||||
```
|
||||
|
||||
{{< note >}}
|
||||
If you do not have root access on the target system, you can still install kubectl to the `~/.local/bin` directory:
|
||||
|
||||
```bash
|
||||
mkdir -p ~/.local/bin/kubectl
|
||||
mv ./kubectl ~/.local/bin/kubectl
|
||||
# and then add ~/.local/bin/kubectl to $PATH
|
||||
```
|
||||
|
||||
{{< /note >}}
|
||||
|
||||
1. Test to ensure the version you installed is up-to-date:
|
||||
|
||||
```bash
|
||||
kubectl version --client
|
||||
```
|
||||
|
||||
### Install using native package management
|
||||
|
||||
{{< tabs name="kubectl_install" >}}
|
||||
{{< tab name="Ubuntu, Debian or HypriotOS" codelang="bash" >}}
|
||||
sudo apt-get update && sudo apt-get install -y apt-transport-https gnupg2 curl
|
||||
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
|
||||
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y kubectl
|
||||
{{< /tab >}}
|
||||
|
||||
{{< tab name="CentOS, RHEL or Fedora" codelang="bash" >}}cat <<EOF > /etc/yum.repos.d/kubernetes.repo
|
||||
[kubernetes]
|
||||
name=Kubernetes
|
||||
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
|
||||
enabled=1
|
||||
gpgcheck=1
|
||||
repo_gpgcheck=1
|
||||
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
|
||||
EOF
|
||||
yum install -y kubectl
|
||||
{{< /tab >}}
|
||||
{{< /tabs >}}
|
||||
|
||||
### Install using other package management
|
||||
|
||||
{{< tabs name="other_kubectl_install" >}}
|
||||
{{% tab name="Snap" %}}
|
||||
If you are on Ubuntu or another Linux distribution that support [snap](https://snapcraft.io/docs/core/install) package manager, kubectl is available as a [snap](https://snapcraft.io/) application.
|
||||
|
||||
```shell
|
||||
snap install kubectl --classic
|
||||
|
||||
kubectl version --client
|
||||
```
|
||||
|
||||
{{% /tab %}}
|
||||
|
||||
{{% tab name="Homebrew" %}}
|
||||
If you are on Linux and using [Homebrew](https://docs.brew.sh/Homebrew-on-Linux) package manager, kubectl is available for [installation](https://docs.brew.sh/Homebrew-on-Linux#install).
|
||||
|
||||
```shell
|
||||
brew install kubectl
|
||||
|
||||
kubectl version --client
|
||||
```
|
||||
|
||||
{{% /tab %}}
|
||||
|
||||
{{< /tabs >}}
|
||||
|
||||
|
||||
## Install kubectl on macOS
|
||||
|
||||
### Install kubectl binary with curl on macOS
|
||||
|
||||
1. Download the latest release:
|
||||
|
||||
```bash
|
||||
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl"
|
||||
```
|
||||
|
||||
{{< note >}}
|
||||
To download a specific version, replace the `$(curl -L -s https://dl.k8s.io/release/stable.txt)` portion of the command with the specific version.
|
||||
|
||||
For example, to download version {{< param "fullversion" >}} on macOS, type:
|
||||
|
||||
```bash
|
||||
curl -LO https://dl.k8s.io/release/{{< param "fullversion" >}}/bin/darwin/amd64/kubectl
|
||||
```
|
||||
|
||||
{{< /note >}}
|
||||
|
||||
1. Validate the binary (optional)
|
||||
|
||||
Download the kubectl checksum file:
|
||||
|
||||
```bash
|
||||
curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl.sha256"
|
||||
```
|
||||
|
||||
Validate the kubectl binary against the checksum file:
|
||||
|
||||
```bash
|
||||
echo "$(<kubectl.sha256) kubectl" | shasum -a 256 --check
|
||||
```
|
||||
|
||||
If valid, the output is:
|
||||
|
||||
```bash
|
||||
kubectl: OK
|
||||
```
|
||||
|
||||
If the check fails, `shasum` exits with nonzero status and prints output similar to:
|
||||
|
||||
```bash
|
||||
kubectl: FAILED
|
||||
shasum: WARNING: 1 computed checksum did NOT match
|
||||
```
|
||||
|
||||
{{< note >}}
|
||||
Download the same version of the binary and checksum.
|
||||
{{< /note >}}
|
||||
|
||||
1. Make the kubectl binary executable.
|
||||
|
||||
```bash
|
||||
chmod +x ./kubectl
|
||||
```
|
||||
|
||||
1. Move the kubectl binary to a file location on your system `PATH`.
|
||||
|
||||
```bash
|
||||
sudo mv ./kubectl /usr/local/bin/kubectl && \
|
||||
sudo chown root: /usr/local/bin/kubectl
|
||||
```
|
||||
|
||||
1. Test to ensure the version you installed is up-to-date:
|
||||
|
||||
```bash
|
||||
kubectl version --client
|
||||
```
|
||||
|
||||
### Install with Homebrew on macOS
|
||||
|
||||
If you are on macOS and using [Homebrew](https://brew.sh/) package manager, you can install kubectl with Homebrew.
|
||||
|
||||
1. Run the installation command:
|
||||
|
||||
```bash
|
||||
brew install kubectl
|
||||
```
|
||||
|
||||
or
|
||||
|
||||
```bash
|
||||
brew install kubernetes-cli
|
||||
```
|
||||
|
||||
1. Test to ensure the version you installed is up-to-date:
|
||||
|
||||
```bash
|
||||
kubectl version --client
|
||||
```
|
||||
|
||||
### Install with Macports on macOS
|
||||
|
||||
If you are on macOS and using [Macports](https://macports.org/) package manager, you can install kubectl with Macports.
|
||||
|
||||
1. Run the installation command:
|
||||
|
||||
```bash
|
||||
sudo port selfupdate
|
||||
sudo port install kubectl
|
||||
```
|
||||
|
||||
1. Test to ensure the version you installed is up-to-date:
|
||||
|
||||
```bash
|
||||
kubectl version --client
|
||||
```
|
||||
|
||||
## Install kubectl on Windows
|
||||
|
||||
### Install kubectl binary with curl on Windows
|
||||
|
||||
1. Download the [latest release {{< param "fullversion" >}}](https://dl.k8s.io/release/{{< param "fullversion" >}}/bin/windows/amd64/kubectl.exe).
|
||||
|
||||
Or if you have `curl` installed, use this command:
|
||||
|
||||
```powershell
|
||||
curl -LO https://dl.k8s.io/release/{{< param "fullversion" >}}/bin/windows/amd64/kubectl.exe
|
||||
```
|
||||
|
||||
{{< note >}}
|
||||
To find out the latest stable version (for example, for scripting), take a look at [https://dl.k8s.io/release/stable.txt](https://dl.k8s.io/release/stable.txt).
|
||||
{{< /note >}}
|
||||
|
||||
1. Validate the binary (optional)
|
||||
|
||||
Download the kubectl checksum file:
|
||||
|
||||
```powershell
|
||||
curl -LO https://dl.k8s.io/{{< param "fullversion" >}}/bin/windows/amd64/kubectl.exe.sha256
|
||||
```
|
||||
|
||||
Validate the kubectl binary against the checksum file:
|
||||
|
||||
- Using Command Prompt to manually compare `CertUtil`'s output to the checksum file downloaded:
|
||||
|
||||
```cmd
|
||||
CertUtil -hashfile kubectl.exe SHA256
|
||||
type kubectl.exe.sha256
|
||||
```
|
||||
|
||||
- Using PowerShell to automate the verification using the `-eq` operator to get a `True` or `False` result:
|
||||
|
||||
```powershell
|
||||
$($(CertUtil -hashfile .\kubectl.exe SHA256)[1] -replace " ", "") -eq $(type .\kubectl.exe.sha256)
|
||||
```
|
||||
|
||||
1. Add the binary in to your `PATH`.
|
||||
|
||||
1. Test to ensure the version of `kubectl` is the same as downloaded:
|
||||
|
||||
```cmd
|
||||
kubectl version --client
|
||||
```
|
||||
|
||||
{{< note >}}
|
||||
[Docker Desktop for Windows](https://docs.docker.com/docker-for-windows/#kubernetes) adds its own version of `kubectl` to `PATH`.
|
||||
If you have installed Docker Desktop before, you may need to place your `PATH` entry before the one added by the Docker Desktop installer or remove the Docker Desktop's `kubectl`.
|
||||
{{< /note >}}
|
||||
|
||||
### Install with PowerShell from PSGallery
|
||||
|
||||
If you are on Windows and using the [PowerShell Gallery](https://www.powershellgallery.com/) package manager, you can install and update kubectl with PowerShell.
|
||||
|
||||
1. Run the installation commands (making sure to specify a `DownloadLocation`):
|
||||
|
||||
```powershell
|
||||
Install-Script -Name 'install-kubectl' -Scope CurrentUser -Force
|
||||
install-kubectl.ps1 [-DownloadLocation <path>]
|
||||
```
|
||||
|
||||
{{< note >}}
|
||||
If you do not specify a `DownloadLocation`, `kubectl` will be installed in the user's `temp` Directory.
|
||||
{{< /note >}}
|
||||
|
||||
The installer creates `$HOME/.kube` and instructs it to create a config file.
|
||||
|
||||
1. Test to ensure the version you installed is up-to-date:
|
||||
|
||||
```powershell
|
||||
kubectl version --client
|
||||
```
|
||||
|
||||
{{< note >}}
|
||||
Updating the installation is performed by rerunning the two commands listed in step 1.
|
||||
{{< /note >}}
|
||||
|
||||
### Install on Windows using Chocolatey or Scoop
|
||||
|
||||
1. To install kubectl on Windows you can use either [Chocolatey](https://chocolatey.org) package manager or [Scoop](https://scoop.sh) command-line installer.
|
||||
|
||||
{{< tabs name="kubectl_win_install" >}}
|
||||
{{% tab name="choco" %}}
|
||||
```powershell
|
||||
choco install kubernetes-cli
|
||||
```
|
||||
{{% /tab %}}
|
||||
{{% tab name="scoop" %}}
|
||||
```powershell
|
||||
scoop install kubectl
|
||||
```
|
||||
{{% /tab %}}
|
||||
{{< /tabs >}}
|
||||
|
||||
|
||||
1. Test to ensure the version you installed is up-to-date:
|
||||
|
||||
```powershell
|
||||
kubectl version --client
|
||||
```
|
||||
|
||||
1. Navigate to your home directory:
|
||||
|
||||
```powershell
|
||||
# If you're using cmd.exe, run: cd %USERPROFILE%
|
||||
cd ~
|
||||
```
|
||||
|
||||
1. Create the `.kube` directory:
|
||||
|
||||
```powershell
|
||||
mkdir .kube
|
||||
```
|
||||
|
||||
1. Change to the `.kube` directory you just created:
|
||||
|
||||
```powershell
|
||||
cd .kube
|
||||
```
|
||||
|
||||
1. Configure kubectl to use a remote Kubernetes cluster:
|
||||
|
||||
```powershell
|
||||
New-Item config -type file
|
||||
```
|
||||
|
||||
{{< note >}}
|
||||
Edit the config file with a text editor of your choice, such as Notepad.
|
||||
{{< /note >}}
|
||||
|
||||
## Download as part of the Google Cloud SDK
|
||||
|
||||
You can install kubectl as part of the Google Cloud SDK.
|
||||
|
||||
1. Install the [Google Cloud SDK](https://cloud.google.com/sdk/).
|
||||
|
||||
1. Run the `kubectl` installation command:
|
||||
|
||||
```shell
|
||||
gcloud components install kubectl
|
||||
```
|
||||
|
||||
1. Test to ensure the version you installed is up-to-date:
|
||||
|
||||
```shell
|
||||
kubectl version --client
|
||||
```
|
||||
|
||||
## Verifying kubectl configuration
|
||||
|
||||
In order for kubectl to find and access a Kubernetes cluster, it needs a
|
||||
[kubeconfig file](/docs/concepts/configuration/organize-cluster-access-kubeconfig/),
|
||||
which is created automatically when you create a cluster using
|
||||
[kube-up.sh](https://github.com/kubernetes/kubernetes/blob/master/cluster/kube-up.sh)
|
||||
or successfully deploy a Minikube cluster.
|
||||
By default, kubectl configuration is located at `~/.kube/config`.
|
||||
|
||||
Check that kubectl is properly configured by getting the cluster state:
|
||||
|
||||
```shell
|
||||
kubectl cluster-info
|
||||
```
|
||||
|
||||
If you see a URL response, kubectl is correctly configured to access your cluster.
|
||||
|
||||
If you see a message similar to the following, kubectl is not configured correctly or is not able to connect to a Kubernetes cluster.
|
||||
|
||||
```
|
||||
The connection to the server <server-name:port> was refused - did you specify the right host or port?
|
||||
```
|
||||
|
||||
For example, if you are intending to run a Kubernetes cluster on your laptop (locally), you will need a tool like Minikube to be installed first and then re-run the commands stated above.
|
||||
|
||||
If kubectl cluster-info returns the url response but you can't access your cluster, to check whether it is configured properly, use:
|
||||
|
||||
```shell
|
||||
kubectl cluster-info dump
|
||||
```
|
||||
|
||||
## Optional kubectl configurations
|
||||
|
||||
### Enabling shell autocompletion
|
||||
|
||||
kubectl provides autocompletion support for Bash and Zsh, which can save you a lot of typing.
|
||||
|
||||
Below are the procedures to set up autocompletion for Bash (including the difference between Linux and macOS) and Zsh.
|
||||
|
||||
{{< tabs name="kubectl_autocompletion" >}}
|
||||
|
||||
{{% tab name="Bash on Linux" %}}
|
||||
|
||||
### Introduction
|
||||
|
||||
The kubectl completion script for Bash can be generated with the command `kubectl completion bash`. Sourcing the completion script in your shell enables kubectl autocompletion.
|
||||
|
||||
However, the completion script depends on [**bash-completion**](https://github.com/scop/bash-completion), which means that you have to install this software first (you can test if you have bash-completion already installed by running `type _init_completion`).
|
||||
|
||||
### Install bash-completion
|
||||
|
||||
bash-completion is provided by many package managers (see [here](https://github.com/scop/bash-completion#installation)). You can install it with `apt-get install bash-completion` or `yum install bash-completion`, etc.
|
||||
|
||||
The above commands create `/usr/share/bash-completion/bash_completion`, which is the main script of bash-completion. Depending on your package manager, you have to manually source this file in your `~/.bashrc` file.
|
||||
|
||||
To find out, reload your shell and run `type _init_completion`. If the command succeeds, you're already set, otherwise add the following to your `~/.bashrc` file:
|
||||
|
||||
```bash
|
||||
source /usr/share/bash-completion/bash_completion
|
||||
```
|
||||
|
||||
Reload your shell and verify that bash-completion is correctly installed by typing `type _init_completion`.
|
||||
|
||||
### Enable kubectl autocompletion
|
||||
|
||||
You now need to ensure that the kubectl completion script gets sourced in all your shell sessions. There are two ways in which you can do this:
|
||||
|
||||
- Source the completion script in your `~/.bashrc` file:
|
||||
|
||||
```bash
|
||||
echo 'source <(kubectl completion bash)' >>~/.bashrc
|
||||
```
|
||||
|
||||
- Add the completion script to the `/etc/bash_completion.d` directory:
|
||||
|
||||
```bash
|
||||
kubectl completion bash >/etc/bash_completion.d/kubectl
|
||||
```
|
||||
|
||||
If you have an alias for kubectl, you can extend shell completion to work with that alias:
|
||||
|
||||
```bash
|
||||
echo 'alias k=kubectl' >>~/.bashrc
|
||||
echo 'complete -F __start_kubectl k' >>~/.bashrc
|
||||
```
|
||||
|
||||
{{< note >}}
|
||||
bash-completion sources all completion scripts in `/etc/bash_completion.d`.
|
||||
{{< /note >}}
|
||||
|
||||
Both approaches are equivalent. After reloading your shell, kubectl autocompletion should be working.
|
||||
|
||||
{{% /tab %}}
|
||||
|
||||
|
||||
{{% tab name="Bash on macOS" %}}
|
||||
|
||||
|
||||
### Introduction
|
||||
|
||||
The kubectl completion script for Bash can be generated with `kubectl completion bash`. Sourcing this script in your shell enables kubectl completion.
|
||||
|
||||
However, the kubectl completion script depends on [**bash-completion**](https://github.com/scop/bash-completion) which you thus have to previously install.
|
||||
|
||||
{{< warning>}}
|
||||
There are two versions of bash-completion, v1 and v2. V1 is for Bash 3.2 (which is the default on macOS), and v2 is for Bash 4.1+. The kubectl completion script **doesn't work** correctly with bash-completion v1 and Bash 3.2. It requires **bash-completion v2** and **Bash 4.1+**. Thus, to be able to correctly use kubectl completion on macOS, you have to install and use Bash 4.1+ ([*instructions*](https://itnext.io/upgrading-bash-on-macos-7138bd1066ba)). The following instructions assume that you use Bash 4.1+ (that is, any Bash version of 4.1 or newer).
|
||||
{{< /warning >}}
|
||||
|
||||
### Upgrade Bash
|
||||
|
||||
The instructions here assume you use Bash 4.1+. You can check your Bash's version by running:
|
||||
|
||||
```bash
|
||||
echo $BASH_VERSION
|
||||
```
|
||||
|
||||
If it is too old, you can install/upgrade it using Homebrew:
|
||||
|
||||
```bash
|
||||
brew install bash
|
||||
```
|
||||
|
||||
Reload your shell and verify that the desired version is being used:
|
||||
|
||||
```bash
|
||||
echo $BASH_VERSION $SHELL
|
||||
```
|
||||
|
||||
Homebrew usually installs it at `/usr/local/bin/bash`.
|
||||
|
||||
### Install bash-completion
|
||||
|
||||
{{< note >}}
|
||||
As mentioned, these instructions assume you use Bash 4.1+, which means you will install bash-completion v2 (in contrast to Bash 3.2 and bash-completion v1, in which case kubectl completion won't work).
|
||||
{{< /note >}}
|
||||
|
||||
You can test if you have bash-completion v2 already installed with `type _init_completion`. If not, you can install it with Homebrew:
|
||||
|
||||
```bash
|
||||
brew install bash-completion@2
|
||||
```
|
||||
|
||||
As stated in the output of this command, add the following to your `~/.bash_profile` file:
|
||||
|
||||
```bash
|
||||
export BASH_COMPLETION_COMPAT_DIR="/usr/local/etc/bash_completion.d"
|
||||
[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"
|
||||
```
|
||||
|
||||
Reload your shell and verify that bash-completion v2 is correctly installed with `type _init_completion`.
|
||||
|
||||
### Enable kubectl autocompletion
|
||||
|
||||
You now have to ensure that the kubectl completion script gets sourced in all your shell sessions. There are multiple ways to achieve this:
|
||||
|
||||
- Source the completion script in your `~/.bash_profile` file:
|
||||
|
||||
```bash
|
||||
echo 'source <(kubectl completion bash)' >>~/.bash_profile
|
||||
```
|
||||
|
||||
- Add the completion script to the `/usr/local/etc/bash_completion.d` directory:
|
||||
|
||||
```bash
|
||||
kubectl completion bash >/usr/local/etc/bash_completion.d/kubectl
|
||||
```
|
||||
|
||||
- If you have an alias for kubectl, you can extend shell completion to work with that alias:
|
||||
|
||||
```bash
|
||||
echo 'alias k=kubectl' >>~/.bash_profile
|
||||
echo 'complete -F __start_kubectl k' >>~/.bash_profile
|
||||
```
|
||||
|
||||
- If you installed kubectl with Homebrew (as explained [above](#install-with-homebrew-on-macos)), then the kubectl completion script should already be in `/usr/local/etc/bash_completion.d/kubectl`. In that case, you don't need to do anything.
|
||||
|
||||
{{< note >}}
|
||||
The Homebrew installation of bash-completion v2 sources all the files in the `BASH_COMPLETION_COMPAT_DIR` directory, that's why the latter two methods work.
|
||||
{{< /note >}}
|
||||
|
||||
In any case, after reloading your shell, kubectl completion should be working.
|
||||
{{% /tab %}}
|
||||
|
||||
{{% tab name="Zsh" %}}
|
||||
|
||||
The kubectl completion script for Zsh can be generated with the command `kubectl completion zsh`. Sourcing the completion script in your shell enables kubectl autocompletion.
|
||||
|
||||
To do so in all your shell sessions, add the following to your `~/.zshrc` file:
|
||||
|
||||
```zsh
|
||||
source <(kubectl completion zsh)
|
||||
```
|
||||
|
||||
If you have an alias for kubectl, you can extend shell completion to work with that alias:
|
||||
|
||||
```zsh
|
||||
echo 'alias k=kubectl' >>~/.zshrc
|
||||
echo 'complete -F __start_kubectl k' >>~/.zshrc
|
||||
```
|
||||
|
||||
After reloading your shell, kubectl autocompletion should be working.
|
||||
|
||||
If you get an error like `complete:13: command not found: compdef`, then add the following to the beginning of your `~/.zshrc` file:
|
||||
|
||||
```zsh
|
||||
autoload -Uz compinit
|
||||
compinit
|
||||
```
|
||||
{{% /tab %}}
|
||||
{{< /tabs >}}
|
||||
|
||||
## {{% heading "whatsnext" %}}
|
||||
|
||||
* [Install Minikube](https://minikube.sigs.k8s.io/docs/start/)
|
||||
* See the [getting started guides](/docs/setup/) for more about creating clusters.
|
||||
* [Learn how to launch and expose your application.](/docs/tasks/access-application-cluster/service-access-application-cluster/)
|
||||
* If you need access to a cluster you didn't create, see the
|
||||
[Sharing Cluster Access document](/docs/tasks/access-application-cluster/configure-access-multiple-clusters/).
|
||||
* Read the [kubectl reference docs](/docs/reference/kubectl/kubectl/)
|
||||
|
||||
@@ -59,6 +59,22 @@ If you installed minikube locally, run `minikube start`.
|
||||
|
||||
4. Katacoda environment only: Type `30000`, and then click **Display Port**.
|
||||
|
||||
{{< note >}}
|
||||
The `dashboard` command enables the dashboard add-on and opens the proxy in the default web browser. You can create Kubernetes resources on the dashboard such as Deployment and Service.
|
||||
|
||||
If you are running in an environment as root, see [Open Dashboard with URL](/docs/tutorials/hello-minikube#open-dashboard-with-url).
|
||||
|
||||
To stop the proxy, run `Ctrl+C` to exit the process. The dashboard remains running.
|
||||
{{< /note >}}
|
||||
|
||||
## Open Dashboard with URL
|
||||
|
||||
If you don't want to open a web browser, run the dashboard command with the url flag to emit a URL:
|
||||
|
||||
```shell
|
||||
minikube dashboard --url
|
||||
```
|
||||
|
||||
## Create a Deployment
|
||||
|
||||
A Kubernetes [*Pod*](/docs/concepts/workloads/pods/) is a group of one or more Containers,
|
||||
|
||||
@@ -31,7 +31,7 @@ weight: 10
|
||||
Once you have a running Kubernetes cluster, you can deploy your containerized applications on top of it.
|
||||
To do so, you create a Kubernetes <b>Deployment</b> configuration. The Deployment instructs Kubernetes
|
||||
how to create and update instances of your application. Once you've created a Deployment, the Kubernetes
|
||||
master schedules the application instances included in that Deployment to run on individual Nodes in the
|
||||
control plane schedules the application instances included in that Deployment to run on individual Nodes in the
|
||||
cluster.
|
||||
</p>
|
||||
|
||||
|
||||
+557
-226
@@ -1,5 +1,32 @@
|
||||
<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">
|
||||
<style type="text/css">.st0{fill:#FFFFFF;stroke:#006DE9;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
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="svg1987">
|
||||
<metadata
|
||||
id="metadata1993">
|
||||
<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="defs1991" />
|
||||
<style
|
||||
type="text/css"
|
||||
id="style1792">.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;}
|
||||
.st2{fill:#FFFFFF;stroke:#326DE6;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
|
||||
.st3{opacity:0.71;fill:#326CE6;}
|
||||
@@ -63,231 +90,535 @@
|
||||
.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;}
|
||||
.st63{fill:none;stroke:#011F38;stroke-width:0.2813;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}</style>
|
||||
<symbol id="master_x5F_level1_1_" viewBox="-68.6 -66.9 137.2 133.9">
|
||||
<g id="svg_1">
|
||||
<g id="svg_2">
|
||||
<line class="st0" x1="0" y1="-11.1" x2="0" y2="0.7" id="svg_3"/>
|
||||
<line class="st0" x1="5.9" y1="-5.2" x2="-5.9" y2="-5.2" id="svg_4"/>
|
||||
</g>
|
||||
<polygon class="st1" 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 " id="svg_5"/>
|
||||
</g>
|
||||
</symbol>
|
||||
<symbol id="node_high_level" viewBox="-81 -93 162 186.1">
|
||||
<polygon class="st2" points="-80,-46 -80,46 0,92 80,46 80,-46 0,-92 " id="svg_6"/>
|
||||
<g id="Isolation_Mode_3_"/>
|
||||
</symbol>
|
||||
<symbol id="node_x5F_empty" viewBox="-87.5 -100.6 175.1 201.1">
|
||||
<use xlink:href="#node_high_level" width="162" height="186.1" id="XMLID_201_" x="-81" y="-93" transform="matrix(1.0808,0,0,1.0808,-0.00003292006,-0.00003749943) "/>
|
||||
<g id="svg_7">
|
||||
<polygon class="st3" points="76.8,-28.1 -14,-80.3 0,-88.3 76.7,-44.4 " id="svg_8"/>
|
||||
<polygon class="st4" points="76.8,-28.1 32.1,-53.8 38.8,-66.1 76.7,-44.4 " id="svg_9"/>
|
||||
</g>
|
||||
</symbol>
|
||||
<symbol id="node_x5F_new" viewBox="-87.6 -101 175.2 202">
|
||||
<polygon class="st5" points="0,-100 -86.6,-50 -86.6,50 0,100 86.6,50 86.6,-50 " id="svg_10"/>
|
||||
<polygon class="st6" points="-86.6,-20.2 -86.6,-50 0,-100 25.8,-85.1 " id="svg_11"/>
|
||||
<polygon class="st7" points="-40.8,-70.7 -32.9,-57 15.7,-85.1 0,-94.3 " id="svg_12"/>
|
||||
<text transform="matrix(0.866,-0.5,-0.5,-0.866,-33.9256,-70.7388) " class="st8" font-size="11.3632px" font-family="'RobotoSlab-Regular'" id="svg_13">Docker</text>
|
||||
<text transform="matrix(0.866,-0.5,-0.5,-0.866,-76.0668,-46.4087) " class="st8" font-size="11.3632px" font-family="'RobotoSlab-Regular'" id="svg_14">Kubelt</text>
|
||||
</symbol>
|
||||
<g>
|
||||
<title>Layer 1</title>
|
||||
<g id="CLUSTER">
|
||||
<g id="XMLID_8_" class="st9">
|
||||
<g id="svg_15">
|
||||
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="27.9955" y1="185.5114" x2="342.4509" y2="185.5114">
|
||||
<stop offset="0" stop-color="#326DE6"/>
|
||||
<stop offset="1" stop-color="#10FFC6"/>
|
||||
</linearGradient>
|
||||
<polygon class="st10" points="311.3,92.9 342.5,229.4 255.2,338.8 115.3,338.8 28,229.4 59.1,92.9 185.2,32.2 " id="svg_16"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="master">
|
||||
<g id="master_x5F_level1"/>
|
||||
<use xlink:href="#master_x5F_level1_1_" width="137.2" height="133.9" x="-68.6" y="-66.9" transform="matrix(0.4,0,0,-0.4,185.2213,187.4709) " id="svg_17"/>
|
||||
</g>
|
||||
<g id="Node">
|
||||
<g id="Node_x5F_level3_x5F_1">
|
||||
<g id="Isolation_Mode"/>
|
||||
</g>
|
||||
<polygon class="st16" points="224.6,160.7 189,140.1 189,98.9 224.6,78.4 260.3,98.9 260.3,140.1 " id="svg_18"/>
|
||||
<polygon class="st13" points="189,127.8 189,140.1 224.6,160.7 235.2,154.5 " id="svg_19"/>
|
||||
<polygon class="st7" points="207.8,148.6 211.1,143 231.1,154.5 224.6,158.3 " id="svg_20"/>
|
||||
<g id="svg_21">
|
||||
<path class="st8" d="m213.7,146.5c0.4,0.2 0.6,0.5 0.7,0.9c0.1,0.4 0,0.7 -0.2,1.1l-0.2,0.4c-0.2,0.4 -0.5,0.6 -0.9,0.7c-0.4,0.1 -0.7,0 -1.1,-0.2l-1.2,-0.7l0.1,-0.2l0.4,0.1l1.3,-2.3l-0.3,-0.2l0.1,-0.3l0.3,0.2l1,0.5zm-0.6,0l-1.3,2.3l0.5,0.3c0.3,0.2 0.5,0.2 0.8,0.1c0.3,-0.1 0.5,-0.3 0.6,-0.5l0.2,-0.4c0.2,-0.3 0.2,-0.5 0.2,-0.8c-0.1,-0.3 -0.2,-0.5 -0.5,-0.6l-0.5,-0.4z" id="svg_22"/>
|
||||
<path class="st8" d="m214.3,149.2c0.2,-0.3 0.4,-0.5 0.7,-0.6c0.3,-0.1 0.6,-0.1 0.9,0.1c0.3,0.2 0.5,0.4 0.5,0.7c0.1,0.3 0,0.6 -0.2,0.9l0,0c-0.2,0.3 -0.4,0.5 -0.7,0.6c-0.3,0.1 -0.6,0.1 -0.9,-0.1c-0.3,-0.2 -0.5,-0.4 -0.5,-0.7c0,-0.2 0,-0.5 0.2,-0.9l0,0zm0.4,0.3c-0.1,0.2 -0.2,0.4 -0.2,0.6c0,0.2 0.1,0.4 0.3,0.5c0.2,0.1 0.4,0.1 0.5,0c0.2,-0.1 0.3,-0.3 0.5,-0.5l0,0c0.1,-0.2 0.2,-0.4 0.2,-0.6c0,-0.2 -0.1,-0.4 -0.3,-0.5c-0.2,-0.1 -0.4,-0.1 -0.6,0s-0.2,0.2 -0.4,0.5l0,0z" id="svg_23"/>
|
||||
<path class="st8" d="m217.1,151.9c0.1,0.1 0.3,0.1 0.4,0.1c0.1,0 0.2,-0.1 0.3,-0.2l0.4,0.2l0,0c-0.1,0.2 -0.3,0.3 -0.5,0.3c-0.3,0 -0.5,0 -0.7,-0.1c-0.3,-0.2 -0.5,-0.4 -0.5,-0.7c0,-0.3 0,-0.6 0.2,-0.9l0,-0.1c0.2,-0.3 0.4,-0.5 0.7,-0.6c0.3,-0.1 0.6,-0.1 0.9,0.1c0.2,0.1 0.3,0.2 0.4,0.4c0.1,0.1 0.2,0.3 0.2,0.4l-0.3,0.5l-0.3,-0.2l0.1,-0.4c0,-0.1 -0.1,-0.1 -0.1,-0.2c-0.1,-0.1 -0.1,-0.1 -0.2,-0.2c-0.2,-0.1 -0.4,-0.1 -0.6,0c-0.2,0.1 -0.3,0.3 -0.4,0.5l0,0.1c-0.1,0.2 -0.2,0.4 -0.2,0.6c-0.1,0.2 0,0.3 0.2,0.4z" id="svg_24"/>
|
||||
<path class="st8" d="m219.7,150l0.1,-0.3l0.7,0.4l-1,1.8l0.2,0.1l0.8,-0.3l-0.2,-0.1l0.1,-0.3l0.9,0.5l-0.1,0.3l-0.3,-0.1l-1,0.3l0.2,1.3l0.2,0.2l-0.1,0.2l-0.9,-0.5l0.1,-0.2l0.2,0.1l-0.2,-1l-0.3,-0.1l-0.1,0.7l0.3,0.2l-0.1,0.2l-1,-0.6l0.1,-0.2l0.4,0.1l1.4,-2.5l-0.4,-0.2z" id="svg_25"/>
|
||||
<path class="st8" d="m221.5,154.9c-0.3,-0.2 -0.5,-0.4 -0.5,-0.7s0,-0.6 0.2,-0.9l0,-0.1c0.2,-0.3 0.4,-0.5 0.7,-0.6c0.3,-0.1 0.6,-0.1 0.8,0.1c0.3,0.2 0.5,0.4 0.5,0.6c0,0.3 0,0.5 -0.2,0.8l-0.1,0.2l-1.4,-0.8l0,0c-0.1,0.2 -0.2,0.4 -0.1,0.6c0,0.2 0.1,0.3 0.3,0.4c0.1,0.1 0.3,0.1 0.4,0.1c0.1,0 0.2,0 0.3,0l0,0.3c-0.1,0 -0.3,0 -0.4,0c-0.1,0.2 -0.3,0.1 -0.5,0zm1.1,-1.9c-0.1,-0.1 -0.3,-0.1 -0.4,0c-0.2,0.1 -0.3,0.2 -0.4,0.3l0,0l1,0.6l0,-0.1c0.1,-0.2 0.1,-0.3 0.1,-0.5c-0.1,-0.1 -0.2,-0.2 -0.3,-0.3z" id="svg_26"/>
|
||||
<path class="st8" d="m223.9,153.7l0.1,-0.3l0.7,0.4l-0.1,0.3c0.1,-0.1 0.2,-0.1 0.4,-0.1c0.1,0 0.2,0 0.4,0.1c0,0 0.1,0 0.1,0.1c0,0 0.1,0 0.1,0.1l-0.3,0.3l-0.2,-0.1c-0.1,-0.1 -0.2,-0.1 -0.3,-0.1c-0.1,0 -0.2,0 -0.3,0.1l-0.7,1.2l0.3,0.2l-0.1,0.2l-1,-0.6l0.1,-0.2l0.4,0.1l0.9,-1.5l-0.5,-0.2z" id="svg_27"/>
|
||||
</g>
|
||||
<g id="svg_28">
|
||||
<path class="st8" d="m194.3,135.3l0.1,-0.3l0.7,0.4l-1,1.8l0.2,0.1l0.8,-0.3l-0.2,-0.1l0.1,-0.3l0.9,0.5l-0.1,0.3l-0.3,-0.1l-1,0.3l0.2,1.3l0.2,0.2l-0.1,0.2l-0.9,-0.5l0.1,-0.2l0.2,0.1l-0.2,-1l-0.3,-0.1l-0.4,0.7l0.3,0.2l-0.1,0.2l-1,-0.6l0.1,-0.2l0.4,0.1l1.4,-2.5l-0.1,-0.2z" id="svg_29"/>
|
||||
<path class="st8" d="m196.8,140.2c-0.1,0.1 -0.3,0.1 -0.4,0.1c-0.1,0 -0.3,0 -0.4,-0.1c-0.2,-0.1 -0.4,-0.3 -0.4,-0.5c0,-0.2 0,-0.5 0.2,-0.8l0.6,-1l-0.2,-0.2l0.1,-0.3l0.2,0.1l0.4,0.2l-0.7,1.3c-0.1,0.2 -0.2,0.4 -0.2,0.5c0,0.1 0.1,0.2 0.2,0.3c0.1,0.1 0.3,0.1 0.4,0.1s0.2,0 0.3,-0.1l0.7,-1.2l-0.3,-0.2l0.1,-0.3l0.3,0.2l0.4,0.2l-1.1,1.8l0.2,0.2l-0.1,0.2l-0.6,-0.3l0.3,-0.2z" id="svg_30"/>
|
||||
<path class="st8" d="m200.1,141.2c-0.2,0.3 -0.4,0.5 -0.7,0.6c-0.3,0.1 -0.5,0.1 -0.8,-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.4l-0.2,0.3l-0.3,-0.2l1.6,-2.8l-0.3,-0.2l0.1,-0.3l0.7,0.4l-0.7,1.2c0.1,-0.1 0.2,-0.1 0.4,-0.1c0.1,0 0.3,0 0.4,0.1c0.3,0.2 0.4,0.4 0.4,0.7c0.1,0.4 0,0.7 -0.2,1.1l0,0zm-0.4,-0.3c0.1,-0.2 0.2,-0.5 0.2,-0.7c0,-0.2 -0.1,-0.4 -0.3,-0.5c-0.1,-0.1 -0.2,-0.1 -0.4,-0.1c-0.1,0 -0.2,0.1 -0.3,0.1l-0.5,0.9c0,0.1 0,0.2 0.1,0.3c0.1,0.1 0.1,0.2 0.3,0.3c0.2,0.1 0.4,0.1 0.5,0c0.2,0.1 0.3,0 0.4,-0.3l0,0z" id="svg_31"/>
|
||||
<path class="st8" d="m200.9,143c-0.3,-0.2 -0.5,-0.4 -0.5,-0.7s0,-0.6 0.2,-0.9l0,-0.1c0.2,-0.3 0.4,-0.5 0.7,-0.6c0.3,-0.1 0.6,-0.1 0.8,0.1c0.3,0.2 0.5,0.4 0.5,0.6c0,0.3 0,0.5 -0.2,0.8l-0.1,0.2l-1.4,-0.8l0,0c-0.1,0.2 -0.2,0.4 -0.1,0.6c0,0.2 0.1,0.3 0.3,0.4c0.1,0.1 0.3,0.1 0.4,0.1c0.1,0 0.2,0 0.3,0l0,0.3c-0.1,0 -0.3,0 -0.4,0c-0.2,0.2 -0.3,0.1 -0.5,0zm1,-2c-0.1,-0.1 -0.3,-0.1 -0.4,0c-0.2,0.1 -0.3,0.2 -0.4,0.3l0,0l1,0.6l0,-0.1c0.1,-0.2 0.1,-0.3 0.1,-0.5c0,0 -0.1,-0.2 -0.3,-0.3z" id="svg_32"/>
|
||||
<path class="st8" d="m203.7,140.8l0.1,-0.3l0.7,0.4l-1.6,2.8l0.3,0.2l-0.1,0.2l-1,-0.6l0.1,-0.2l0.4,0.1l1.4,-2.5l-0.3,-0.1z" id="svg_33"/>
|
||||
<path class="st8" d="m204.3,145c-0.3,-0.2 -0.5,-0.4 -0.5,-0.7c-0.1,-0.3 0,-0.6 0.2,-0.9l0,-0.1c0.2,-0.3 0.4,-0.5 0.7,-0.6c0.3,-0.1 0.6,-0.1 0.8,0.1c0.3,0.2 0.5,0.4 0.5,0.6c0,0.3 0,0.5 -0.2,0.8l-0.1,0.2l-1.4,-0.8l0,0c-0.1,0.2 -0.2,0.4 -0.1,0.6c0,0.2 0.1,0.3 0.3,0.4c0.1,0.1 0.3,0.1 0.4,0.1s0.2,0 0.3,0l0,0.3c-0.1,0 -0.3,0 -0.4,0c-0.1,0.1 -0.3,0.1 -0.5,0zm1.1,-2c-0.1,-0.1 -0.3,-0.1 -0.4,0c-0.2,0.1 -0.3,0.2 -0.4,0.3l0,0l1,0.6l0,-0.1c0.1,-0.2 0.1,-0.3 0.1,-0.5c-0.1,-0.1 -0.2,-0.2 -0.3,-0.3z" id="svg_34"/>
|
||||
<path class="st8" d="m207.8,143.4l-0.3,0.5l0.4,0.2l-0.2,0.3l-0.4,-0.2l-0.8,1.3c-0.1,0.1 -0.1,0.2 -0.1,0.2c0,0.1 0.1,0.1 0.1,0.2c0,0 0.1,0 0.1,0.1c0,0 0.1,0 0.1,0l-0.1,0.3c-0.1,0 -0.1,0 -0.2,0c-0.1,0 -0.2,-0.1 -0.2,-0.1c-0.2,-0.1 -0.3,-0.2 -0.3,-0.4s0,-0.3 0.1,-0.5l0.8,-1.3l-0.3,-0.2l0.2,-0.3l0.3,0.2l0.3,-0.5l0.5,0.2z" id="svg_35"/>
|
||||
</g>
|
||||
<polygon class="st16" points="182.3,140.1 146.6,160.7 111,140.1 111,99 146.6,78.4 182.3,99 " id="svg_36"/>
|
||||
<polygon class="st13" points="136,154.5 146.6,160.7 182.3,140.1 182.2,127.9 " id="svg_37"/>
|
||||
<polygon class="st7" points="163.4,148.6 160.2,143 180.2,131.4 180.2,138.9 " id="svg_38"/>
|
||||
<g id="svg_39">
|
||||
<path class="st8" d="m164.6,142.5c0.4,-0.2 0.7,-0.3 1.1,-0.2c0.4,0.1 0.6,0.3 0.9,0.7l0.2,0.4c0.2,0.4 0.3,0.7 0.2,1.1c-0.1,0.4 -0.3,0.7 -0.7,0.9l-1.2,0.7l-0.1,-0.2l0.3,-0.2l-1.3,-2.3l-0.4,0.1l-0.1,-0.3l0.3,-0.2l0.8,-0.5zm-0.3,0.6l1.3,2.3l0.5,-0.3c0.3,-0.2 0.4,-0.4 0.5,-0.6c0.1,-0.3 0,-0.5 -0.2,-0.8l-0.2,-0.4c-0.2,-0.3 -0.4,-0.5 -0.6,-0.5c-0.3,-0.1 -0.5,-0.1 -0.8,0.1l-0.5,0.2z" id="svg_40"/>
|
||||
<path class="st8" d="m167.3,143.4c-0.2,-0.3 -0.2,-0.6 -0.2,-0.9c0.1,-0.3 0.2,-0.5 0.5,-0.7c0.3,-0.2 0.6,-0.2 0.9,-0.1c0.3,0.1 0.5,0.3 0.7,0.6l0,0c0.2,0.3 0.2,0.6 0.2,0.9c-0.1,0.3 -0.2,0.5 -0.5,0.7c-0.3,0.2 -0.6,0.2 -0.9,0.1c-0.3,0 -0.5,-0.3 -0.7,-0.6l0,0zm0.4,-0.2c0.1,0.2 0.3,0.4 0.5,0.5s0.4,0.1 0.6,0c0.2,-0.1 0.3,-0.3 0.3,-0.5c0,-0.2 0,-0.4 -0.2,-0.6l0,0c-0.1,-0.2 -0.3,-0.4 -0.5,-0.5c-0.2,-0.1 -0.4,-0.1 -0.6,0c-0.2,0.1 -0.3,0.3 -0.3,0.5s0,0.3 0.2,0.6l0,0z" id="svg_41"/>
|
||||
<path class="st8" d="m171,142.3c0.1,-0.1 0.2,-0.2 0.3,-0.3c0.1,-0.1 0,-0.3 0,-0.4l0.3,-0.2l0,0c0.1,0.2 0.1,0.4 0,0.6c-0.1,0.2 -0.2,0.4 -0.5,0.6c-0.3,0.2 -0.6,0.2 -0.9,0.1c-0.3,-0.1 -0.5,-0.3 -0.7,-0.6l0,-0.1c-0.2,-0.3 -0.2,-0.6 -0.2,-0.9c0,-0.3 0.2,-0.5 0.5,-0.7c0.2,-0.1 0.3,-0.2 0.5,-0.2s0.3,0 0.5,0l0.3,0.5l-0.3,0.2l-0.3,-0.3c-0.1,0 -0.2,0 -0.2,0c-0.1,0 -0.2,0 -0.3,0.1c-0.2,0.1 -0.3,0.3 -0.3,0.5c0,0.2 0.1,0.4 0.2,0.6l0,0.1c0.1,0.2 0.3,0.4 0.4,0.5c0.3,0.1 0.5,0.1 0.7,-0.1z" id="svg_42"/>
|
||||
<path class="st8" d="m170.6,139.1l-0.1,-0.3l0.7,-0.4l1,1.8l0.2,-0.1l0.1,-0.8l-0.2,0.1l-0.1,-0.3l0.9,-0.5l0.1,0.3l-0.2,0.2l-0.2,1l1.2,0.5l0.3,-0.1l0.1,0.2l-0.9,0.5l-0.1,-0.2l0.2,-0.1l-1,-0.4l-0.3,0.1l0.4,0.7l0.4,-0.1l0.1,0.2l-1,0.6l-0.1,-0.2l0.3,-0.2l-1.4,-2.6l-0.4,0.1z" id="svg_43"/>
|
||||
<path class="st8" d="m175.8,140c-0.3,0.2 -0.6,0.2 -0.9,0.1c-0.3,-0.1 -0.5,-0.3 -0.7,-0.6l-0.1,-0.1c-0.2,-0.3 -0.2,-0.6 -0.2,-0.9c0.1,-0.3 0.2,-0.5 0.5,-0.7c0.3,-0.2 0.6,-0.2 0.8,-0.1c0.2,0.1 0.5,0.3 0.6,0.6l0.1,0.2l-1.4,0.8l0,0c0.1,0.2 0.3,0.3 0.4,0.4c0.2,0.1 0.4,0.1 0.5,0c0.1,-0.1 0.2,-0.2 0.3,-0.3c0.1,-0.1 0.1,-0.2 0.2,-0.3l0.3,0.2c0,0.1 -0.1,0.2 -0.2,0.4c0.1,0.1 -0.1,0.2 -0.2,0.3zm-1.2,-1.9c-0.1,0.1 -0.2,0.2 -0.2,0.4c0,0.2 0,0.3 0.1,0.5l0,0l1,-0.6l0,-0.1c-0.1,-0.2 -0.2,-0.3 -0.3,-0.3c-0.3,0 -0.4,0 -0.6,0.1z" id="svg_44"/>
|
||||
<path class="st8" d="m175.8,137.4l-0.1,-0.3l0.7,-0.4l0.2,0.3c0,-0.1 0,-0.3 0.1,-0.4c0.1,-0.1 0.1,-0.2 0.3,-0.3c0,0 0.1,0 0.1,0c0,0 0.1,0 0.1,0l0.2,0.4l-0.2,0.1c-0.1,0.1 -0.2,0.1 -0.2,0.2s-0.1,0.2 0,0.3l0.7,1.2l0.4,-0.1l0.1,0.2l-1,0.6l-0.1,-0.2l0.3,-0.2l-0.9,-1.5l-0.7,0.1z" id="svg_45"/>
|
||||
</g>
|
||||
<g id="svg_46">
|
||||
<path class="st8" d="m145.1,153.8l-0.1,-0.3l0.7,-0.4l1,1.8l0.2,-0.1l0.1,-0.8l-0.2,0.1l-0.1,-0.3l0.9,-0.5l0.1,0.3l-0.2,0.2l-0.2,1l1.2,0.5l0.3,-0.1l0.1,0.2l-0.9,0.5l-0.1,-0.2l0.2,-0.1l-1,-0.4l-0.3,0.1l0.4,0.7l0.4,-0.1l0.1,0.2l-1,0.6l-0.1,-0.2l0.3,-0.2l-1.4,-2.5l-0.4,0z" id="svg_47"/>
|
||||
<path class="st8" d="m150.6,154c0,0.2 0,0.3 -0.1,0.4c-0.1,0.1 -0.2,0.2 -0.3,0.3c-0.2,0.1 -0.5,0.2 -0.7,0.1c-0.2,-0.1 -0.4,-0.3 -0.6,-0.6l-0.6,-1l-0.3,0.1l-0.1,-0.3l0.2,-0.1l0.4,-0.2l0.7,1.3c0.1,0.2 0.3,0.4 0.4,0.4c0.1,0 0.2,0 0.4,-0.1c0.1,-0.1 0.2,-0.2 0.3,-0.3c0.1,-0.1 0.1,-0.2 0.1,-0.4l-0.7,-1.2l-0.3,0.1l-0.1,-0.3l0.3,-0.2l0.4,-0.2l1.1,1.8l0.3,-0.1l0.1,0.2l-0.6,0.3l-0.3,0z" id="svg_48"/>
|
||||
<path class="st8" d="m153.1,151.7c0.2,0.3 0.2,0.6 0.2,0.9c0,0.3 -0.2,0.5 -0.4,0.6c-0.1,0.1 -0.3,0.1 -0.4,0.1c-0.1,0 -0.3,0 -0.4,-0.1l0.1,0.3l-0.3,0.2l-1.6,-2.8l-0.4,0.1l-0.1,-0.3l0.7,-0.4l0.7,1.2c0,-0.1 0.1,-0.3 0.1,-0.4c0.1,-0.1 0.2,-0.2 0.3,-0.3c0.3,-0.2 0.5,-0.2 0.8,0c0.3,0.2 0.5,0.5 0.7,0.9l0,0zm-0.4,0.1c-0.1,-0.2 -0.3,-0.4 -0.5,-0.5s-0.4,-0.1 -0.5,0c-0.1,0.1 -0.2,0.2 -0.3,0.3c0,0.1 -0.1,0.2 -0.1,0.3l0.5,0.9c0.1,0.1 0.2,0.1 0.3,0.1c0.1,0 0.2,0 0.4,-0.1c0.2,-0.1 0.3,-0.2 0.3,-0.4c0.1,-0.1 0.1,-0.3 -0.1,-0.6l0,0z" id="svg_49"/>
|
||||
<path class="st8" d="m155.1,151.9c-0.3,0.2 -0.6,0.2 -0.9,0.1s-0.5,-0.3 -0.7,-0.6l-0.1,-0.1c-0.2,-0.3 -0.2,-0.6 -0.2,-0.9c0.1,-0.3 0.2,-0.5 0.5,-0.7c0.3,-0.2 0.6,-0.2 0.8,-0.1c0.2,0.1 0.5,0.3 0.6,0.6l0.1,0.2l-1.4,0.8l0,0c0.1,0.2 0.3,0.3 0.4,0.4c0.2,0.1 0.4,0.1 0.5,0c0.1,-0.1 0.2,-0.2 0.3,-0.3c0.1,-0.1 0.1,-0.2 0.2,-0.3l0.3,0.2c0,0.1 -0.1,0.2 -0.2,0.4c0.1,0.1 0,0.2 -0.2,0.3zm-1.2,-1.9c-0.1,0.1 -0.2,0.2 -0.2,0.4c0,0.2 0,0.3 0.1,0.5l0,0l1,-0.6l0,-0.1c-0.1,-0.2 -0.2,-0.3 -0.3,-0.3c-0.3,0 -0.4,0 -0.6,0.1z" id="svg_50"/>
|
||||
<path class="st8" d="m154.6,148.4l-0.1,-0.3l0.7,-0.4l1.6,2.8l0.4,-0.1l0.1,0.2l-1,0.6l-0.1,-0.2l0.3,-0.2l-1.4,-2.5l-0.5,0.1z" id="svg_51"/>
|
||||
<path class="st8" d="m158.6,149.9c-0.3,0.2 -0.6,0.2 -0.9,0.1c-0.3,-0.1 -0.5,-0.3 -0.7,-0.6l-0.1,-0.1c-0.2,-0.3 -0.2,-0.6 -0.2,-0.9c0.1,-0.3 0.2,-0.5 0.5,-0.7c0.3,-0.2 0.6,-0.2 0.8,-0.1c0.2,0.1 0.5,0.3 0.6,0.6l0.1,0.2l-1.4,0.8l0,0c0.1,0.2 0.3,0.3 0.4,0.4c0.2,0.1 0.4,0.1 0.5,0c0.1,-0.1 0.2,-0.2 0.3,-0.3c0.1,-0.1 0.1,-0.2 0.2,-0.3l0.3,0.2c0,0.1 -0.1,0.2 -0.2,0.4c0.1,0.1 -0.1,0.2 -0.2,0.3zm-1.2,-1.9c-0.1,0.1 -0.2,0.2 -0.2,0.4c0,0.2 0,0.3 0.1,0.5l0,0l1,-0.6l0,-0.1c-0.1,-0.2 -0.2,-0.3 -0.3,-0.3c-0.3,0 -0.5,0 -0.6,0.1z" id="svg_52"/>
|
||||
<path class="st8" d="m158.9,146.1l0.3,0.5l0.4,-0.2l0.2,0.3l-0.4,0.2l0.8,1.3c0.1,0.1 0.1,0.2 0.2,0.2c0.1,0 0.1,0 0.2,0c0,0 0.1,0 0.1,-0.1c0,0 0.1,-0.1 0.1,-0.1l0.2,0.2c0,0 -0.1,0.1 -0.1,0.2c-0.1,0.1 -0.1,0.1 -0.2,0.1c-0.2,0.1 -0.3,0.1 -0.5,0.1c-0.1,0 -0.3,-0.2 -0.4,-0.4l-0.7,-1.3l-0.3,0.2l-0.2,-0.3l0.3,-0.2l-0.3,-0.5l0.3,-0.2z" id="svg_53"/>
|
||||
</g>
|
||||
<polygon class="st16" points="146.2,296.6 110.6,276.1 110.6,234.9 146.2,214.4 181.9,234.9 181.9,276.1 " id="svg_54"/>
|
||||
<polygon class="st13" points="135.6,220.5 146.2,214.4 181.9,234.9 181.8,247.2 " id="svg_55"/>
|
||||
<polygon class="st7" points="163,226.4 159.8,232.1 179.8,243.6 179.8,236.1 " id="svg_56"/>
|
||||
<g id="svg_57">
|
||||
<path class="st8" d="m145.8,218.8l0.1,-0.3l0.7,0.4l-1,1.8l0.2,0.1l0.8,-0.3l-0.2,-0.1l0.1,-0.3l0.9,0.5l-0.1,0.3l-0.3,-0.1l-1,0.3l0.2,1.3l0.2,0.2l-0.1,0.2l-0.9,-0.5l0.1,-0.2l0.2,0.1l-0.2,-1l-0.3,-0.1l-0.4,0.7l0.3,0.2l-0.1,0.2l-1,-0.6l0.1,-0.2l0.4,0.1l1.4,-2.5l-0.1,-0.2z" id="svg_58"/>
|
||||
<path class="st8" d="m148.4,223.7c-0.1,0.1 -0.3,0.1 -0.4,0.1c-0.1,0 -0.3,0 -0.4,-0.1c-0.2,-0.1 -0.4,-0.3 -0.4,-0.5c0,-0.2 0,-0.5 0.2,-0.8l0.6,-1l-0.2,-0.2l0.1,-0.3l0.2,0.1l0.4,0.2l-0.7,1.3c-0.1,0.2 -0.2,0.4 -0.2,0.5c0,0.1 0.1,0.2 0.2,0.3c0.1,0.1 0.3,0.1 0.4,0.1c0.1,0 0.2,0 0.3,-0.1l0.7,-1.2l-0.3,-0.2l0.1,-0.3l0.3,0.2l0.4,0.2l-1.1,1.8l0.2,0.2l-0.1,0.2l-0.6,-0.3l0.3,-0.2z" id="svg_59"/>
|
||||
<path class="st8" d="m151.7,224.7c-0.2,0.3 -0.4,0.5 -0.7,0.6c-0.3,0.1 -0.5,0.1 -0.8,-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.4l-0.2,0.3l-0.3,-0.2l1.6,-2.8l-0.3,-0.2l0.1,-0.3l0.7,0.4l-0.7,1.2c0.1,-0.1 0.2,-0.1 0.4,-0.1c0.1,0 0.3,0 0.4,0.1c0.3,0.2 0.4,0.4 0.4,0.7c0.1,0.4 0,0.7 -0.2,1.1l0,0zm-0.4,-0.3c0.1,-0.2 0.2,-0.5 0.2,-0.7c0,-0.2 -0.1,-0.4 -0.3,-0.5c-0.1,-0.1 -0.2,-0.1 -0.4,-0.1c-0.1,0 -0.2,0.1 -0.3,0.1l-0.5,0.9c0,0.1 0,0.2 0.1,0.3c0.1,0.1 0.1,0.2 0.3,0.3c0.2,0.1 0.4,0.1 0.5,0c0.1,0.1 0.3,-0.1 0.4,-0.3l0,0z" id="svg_60"/>
|
||||
<path class="st8" d="m152.5,226.5c-0.3,-0.2 -0.5,-0.4 -0.5,-0.7s0,-0.6 0.2,-0.9l0.1,-0.1c0.2,-0.3 0.4,-0.5 0.7,-0.6c0.3,-0.1 0.6,-0.1 0.8,0.1c0.3,0.2 0.5,0.4 0.5,0.6c0,0.3 0,0.5 -0.2,0.8l-0.1,0.2l-1.4,-0.8l0,0c-0.1,0.2 -0.2,0.4 -0.1,0.6c0,0.2 0.1,0.3 0.3,0.4c0.1,0.1 0.3,0.1 0.4,0.1c0.1,0 0.2,0 0.3,0l0,0.3c-0.1,0 -0.3,0 -0.4,0c-0.3,0.1 -0.5,0.1 -0.6,0zm1,-2c-0.1,-0.1 -0.3,-0.1 -0.4,0c-0.2,0.1 -0.3,0.2 -0.4,0.3l0,0l1,0.6l0,-0.1c0.1,-0.2 0.1,-0.3 0.1,-0.5s-0.1,-0.2 -0.3,-0.3z" id="svg_61"/>
|
||||
<path class="st8" d="m155.3,224.3l0.1,-0.3l0.7,0.4l-1.6,2.8l0.3,0.2l-0.1,0.2l-1,-0.6l0.1,-0.2l0.4,0.1l1.4,-2.5l-0.3,-0.1z" id="svg_62"/>
|
||||
<path class="st8" d="m155.9,228.5c-0.3,-0.2 -0.5,-0.4 -0.5,-0.7s0,-0.6 0.2,-0.9l0,-0.1c0.2,-0.3 0.4,-0.5 0.7,-0.6c0.3,-0.1 0.6,-0.1 0.8,0.1c0.3,0.2 0.5,0.4 0.5,0.6c0,0.3 0,0.5 -0.2,0.8l-0.1,0.2l-1.4,-0.8l0,0c-0.1,0.2 -0.2,0.4 -0.1,0.6c0,0.2 0.1,0.3 0.3,0.4c0.1,0.1 0.3,0.1 0.4,0.1c0.1,0 0.2,0 0.3,0l0,0.3c-0.1,0 -0.3,0 -0.4,0c-0.1,0.1 -0.3,0.1 -0.5,0zm1.1,-2c-0.1,-0.1 -0.3,-0.1 -0.4,0s-0.3,0.2 -0.4,0.3l0,0l1,0.6l0,-0.1c0.1,-0.2 0.1,-0.3 0.1,-0.5c-0.1,-0.1 -0.2,-0.2 -0.3,-0.3z" id="svg_63"/>
|
||||
<path class="st8" d="m159.4,226.9l-0.3,0.5l0.4,0.2l-0.2,0.3l-0.4,-0.2l-0.8,1.3c-0.1,0.1 -0.1,0.2 -0.1,0.2c0,0.1 0.1,0.1 0.1,0.2c0,0 0.1,0 0.1,0.1c0,0 0.1,0 0.1,0l-0.1,0.3c-0.1,0 -0.1,0 -0.2,0c-0.1,0 -0.2,-0.1 -0.2,-0.1c-0.2,-0.1 -0.3,-0.2 -0.3,-0.4s0,-0.3 0.1,-0.5l0.8,-1.3l-0.3,-0.2l0.2,-0.3l0.3,0.2l0.3,-0.5l0.5,0.2z" id="svg_64"/>
|
||||
</g>
|
||||
<g id="svg_65">
|
||||
<path class="st8" d="m166.1,230.5c0.4,0.2 0.6,0.5 0.7,0.9c0.1,0.4 0,0.7 -0.2,1.1l-0.2,0.4c-0.2,0.4 -0.5,0.6 -0.9,0.7s-0.7,0 -1.1,-0.2l-1.2,-0.7l0.1,-0.2l0.4,0.1l1.3,-2.3l-0.3,-0.2l0.1,-0.3l0.3,0.2l1,0.5zm-0.7,0l-1.3,2.3l0.5,0.3c0.3,0.2 0.5,0.2 0.8,0.1c0.3,-0.1 0.5,-0.3 0.6,-0.5l0.2,-0.4c0.2,-0.3 0.2,-0.5 0.2,-0.8c-0.1,-0.3 -0.2,-0.5 -0.5,-0.6l-0.5,-0.4z" id="svg_66"/>
|
||||
<path class="st8" d="m166.7,233.2c0.2,-0.3 0.4,-0.5 0.7,-0.6c0.3,-0.1 0.6,-0.1 0.9,0.1c0.3,0.2 0.5,0.4 0.5,0.7c0.1,0.3 0,0.6 -0.2,0.9l0,0c-0.2,0.3 -0.4,0.5 -0.7,0.6c-0.3,0.1 -0.6,0.1 -0.9,-0.1c-0.3,-0.2 -0.5,-0.4 -0.5,-0.7c-0.1,-0.2 0,-0.5 0.2,-0.9l0,0zm0.3,0.3c-0.1,0.2 -0.2,0.4 -0.2,0.6c0,0.2 0.1,0.4 0.3,0.5c0.2,0.1 0.4,0.1 0.5,0c0.2,-0.1 0.3,-0.3 0.5,-0.5l0,0c0.1,-0.2 0.2,-0.4 0.2,-0.6c0,-0.2 -0.1,-0.4 -0.3,-0.5c-0.2,-0.1 -0.4,-0.1 -0.6,0c-0.1,0.1 -0.2,0.2 -0.4,0.5l0,0z" id="svg_67"/>
|
||||
<path class="st8" d="m169.4,235.9c0.1,0.1 0.3,0.1 0.4,0.1s0.2,-0.1 0.3,-0.2l0.3,0.2l0,0c-0.1,0.2 -0.3,0.3 -0.5,0.3c-0.3,0 -0.5,0 -0.7,-0.1c-0.3,-0.2 -0.5,-0.4 -0.5,-0.7c0,-0.3 0,-0.6 0.2,-0.9l0,-0.1c0.2,-0.3 0.4,-0.5 0.7,-0.6c0.3,-0.1 0.6,-0.1 0.9,0.1c0.2,0.1 0.3,0.2 0.4,0.4c0.1,0.1 0.2,0.3 0.2,0.4l-0.3,0.5l-0.3,-0.2l0.1,-0.4c0,-0.1 -0.1,-0.1 -0.1,-0.2c-0.1,-0.1 -0.1,-0.1 -0.2,-0.2c-0.2,-0.1 -0.4,-0.1 -0.6,0c-0.2,0.1 -0.3,0.3 -0.4,0.5l0,0.1c-0.1,0.2 -0.2,0.4 -0.2,0.6c0,0.1 0.1,0.3 0.3,0.4z" id="svg_68"/>
|
||||
<path class="st8" d="m172.1,234l0.1,-0.3l0.7,0.4l-1,1.8l0.2,0.1l0.8,-0.3l-0.2,-0.1l0.1,-0.3l0.9,0.5l-0.1,0.3l-0.3,-0.1l-1,0.3l0.2,1.3l0.2,0.2l-0.1,0.2l-0.9,-0.5l0.1,-0.2l0.2,0.1l-0.2,-1l-0.3,-0.1l-0.4,0.7l0.3,0.2l-0.1,0.2l-1,-0.6l0.1,-0.2l0.4,0.1l1.4,-2.5l-0.1,-0.2z" id="svg_69"/>
|
||||
<path class="st8" d="m173.9,238.9c-0.3,-0.2 -0.5,-0.4 -0.5,-0.7c-0.1,-0.3 0,-0.6 0.2,-0.9l0,-0.1c0.2,-0.3 0.4,-0.5 0.7,-0.6c0.3,-0.1 0.6,-0.1 0.8,0.1c0.3,0.2 0.5,0.4 0.5,0.6c0,0.3 0,0.5 -0.2,0.8l-0.1,0.2l-1.4,-0.8l0,0c-0.1,0.2 -0.2,0.4 -0.1,0.6c0,0.2 0.1,0.3 0.3,0.4c0.1,0.1 0.3,0.1 0.4,0.1c0.1,0 0.2,0 0.3,0l0,0.3c-0.1,0 -0.3,0 -0.4,0c-0.2,0.2 -0.4,0.1 -0.5,0zm1,-2c-0.1,-0.1 -0.3,-0.1 -0.4,0c-0.2,0.1 -0.3,0.2 -0.4,0.3l0,0l1,0.6l0,-0.1c0.1,-0.2 0.1,-0.3 0.1,-0.5c0,0 -0.1,-0.2 -0.3,-0.3z" id="svg_70"/>
|
||||
<path class="st8" d="m176.2,237.7l0.1,-0.3l0.7,0.4l-0.1,0.3c0.1,-0.1 0.2,-0.1 0.4,-0.1c0.1,0 0.2,0 0.4,0.1c0,0 0.1,0 0.1,0.1c0,0 0.1,0 0.1,0.1l-0.3,0.3l-0.2,-0.1c-0.1,-0.1 -0.2,-0.1 -0.3,-0.1c-0.1,0 -0.2,0 -0.3,0.1l-0.7,1.2l0.3,0.2l-0.1,0.2l-1,-0.6l0.1,-0.2l0.4,0.1l0.9,-1.5l-0.5,-0.2z" id="svg_71"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="service"/>
|
||||
<g id="pods">
|
||||
<circle class="st29" cx="146.2" cy="119.5" r="20.9" id="svg_72"/>
|
||||
</g>
|
||||
<g id="IP"/>
|
||||
<g id="deployments">
|
||||
<g id="svg_73">
|
||||
<g id="svg_74">
|
||||
<circle class="st47" cx="177.4" cy="181.7" r="10.1" id="svg_75"/>
|
||||
<g id="svg_76">
|
||||
<g id="svg_77">
|
||||
<path class="st48" d="m180.9,176c1.9,1.2 3.2,3.3 3.2,5.8c0,3.7 -3,6.7 -6.7,6.7c-3.7,0 -6.7,-3 -6.7,-6.7c0,-2.9 1.9,-5.4 4.5,-6.4" id="svg_78"/>
|
||||
<g id="svg_79">
|
||||
<polygon class="st42" points="182.1,178.9 181.2,176.2 183.9,175.3 182.4,174.5 179.6,175.4 180.5,178.1 " id="svg_80"/>
|
||||
</g>
|
||||
<symbol
|
||||
id="master_x5F_level1_1_"
|
||||
viewBox="-68.6 -66.9 137.2 133.9">
|
||||
<g
|
||||
id="svg_1">
|
||||
<g
|
||||
id="svg_2">
|
||||
<line
|
||||
class="st0"
|
||||
x1="0"
|
||||
y1="-11.1"
|
||||
x2="0"
|
||||
y2="0.7"
|
||||
id="svg_3" />
|
||||
<line
|
||||
class="st0"
|
||||
x1="5.9"
|
||||
y1="-5.2"
|
||||
x2="-5.9"
|
||||
y2="-5.2"
|
||||
id="svg_4" />
|
||||
</g>
|
||||
</g>
|
||||
<g id="svg_81">
|
||||
<path class="st42" d="m174.8,185.1l0,-6.7l2.3,0c0.8,0 1.5,0.3 2,0.8c0.5,0.5 0.8,1.2 0.8,2l0,1.1c0,0.8 -0.3,1.5 -0.8,2c-0.5,0.5 -1.2,0.8 -2,0.8l-2.3,0zm1.3,-5.7l0,4.7l0.9,0c0.5,0 0.9,-0.2 1.1,-0.5c0.3,-0.3 0.4,-0.8 0.4,-1.3l0,-1.1c0,-0.5 -0.1,-0.9 -0.4,-1.3c-0.3,-0.3 -0.7,-0.5 -1.1,-0.5l-0.9,0z" id="svg_82"/>
|
||||
</g>
|
||||
<polygon
|
||||
class="st1"
|
||||
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 "
|
||||
id="svg_5" />
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<symbol
|
||||
id="node_high_level"
|
||||
viewBox="-81 -93 162 186.1">
|
||||
<polygon
|
||||
class="st2"
|
||||
points="-80,-46 -80,46 0,92 80,46 80,-46 0,-92 "
|
||||
id="svg_6" />
|
||||
<g
|
||||
id="Isolation_Mode_3_" />
|
||||
</symbol>
|
||||
<symbol
|
||||
id="node_x5F_empty"
|
||||
viewBox="-87.5 -100.6 175.1 201.1">
|
||||
<use
|
||||
xlink:href="#node_high_level"
|
||||
width="162"
|
||||
height="186.1"
|
||||
id="XMLID_201_"
|
||||
x="-81"
|
||||
y="-93"
|
||||
transform="matrix(1.0808,0,0,1.0808,-0.00003292006,-0.00003749943) " />
|
||||
<g
|
||||
id="svg_7">
|
||||
<polygon
|
||||
class="st3"
|
||||
points="76.8,-28.1 -14,-80.3 0,-88.3 76.7,-44.4 "
|
||||
id="svg_8" />
|
||||
<polygon
|
||||
class="st4"
|
||||
points="76.8,-28.1 32.1,-53.8 38.8,-66.1 76.7,-44.4 "
|
||||
id="svg_9" />
|
||||
</g>
|
||||
</symbol>
|
||||
<symbol
|
||||
id="node_x5F_new"
|
||||
viewBox="-87.6 -101 175.2 202">
|
||||
<polygon
|
||||
class="st5"
|
||||
points="0,-100 -86.6,-50 -86.6,50 0,100 86.6,50 86.6,-50 "
|
||||
id="svg_10" />
|
||||
<polygon
|
||||
class="st6"
|
||||
points="-86.6,-20.2 -86.6,-50 0,-100 25.8,-85.1 "
|
||||
id="svg_11" />
|
||||
<polygon
|
||||
class="st7"
|
||||
points="-40.8,-70.7 -32.9,-57 15.7,-85.1 0,-94.3 "
|
||||
id="svg_12" />
|
||||
<text
|
||||
transform="matrix(0.866,-0.5,-0.5,-0.866,-33.9256,-70.7388) "
|
||||
class="st8"
|
||||
font-size="11.3632px"
|
||||
font-family="'RobotoSlab-Regular'"
|
||||
id="svg_13">Docker</text>
|
||||
<text
|
||||
transform="matrix(0.866,-0.5,-0.5,-0.866,-76.0668,-46.4087) "
|
||||
class="st8"
|
||||
font-size="11.3632px"
|
||||
font-family="'RobotoSlab-Regular'"
|
||||
id="svg_14">Kubelt</text>
|
||||
</symbol>
|
||||
<g
|
||||
id="g1985">
|
||||
<title
|
||||
id="title1814">Layer 1</title>
|
||||
<g
|
||||
id="CLUSTER"
|
||||
transform="translate(-22)">
|
||||
<g
|
||||
id="XMLID_8_"
|
||||
class="st9">
|
||||
<g
|
||||
id="svg_15">
|
||||
<linearGradient
|
||||
id="SVGID_1_"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="27.995501"
|
||||
y1="185.5114"
|
||||
x2="342.4509"
|
||||
y2="185.5114">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#326DE6"
|
||||
id="stop1816" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#10FFC6"
|
||||
id="stop1818" />
|
||||
</linearGradient>
|
||||
<polygon
|
||||
class="st10"
|
||||
points="28,229.4 59.1,92.9 185.2,32.2 311.3,92.9 342.5,229.4 255.2,338.8 115.3,338.8 "
|
||||
id="svg_16"
|
||||
style="fill:url(#SVGID_1_)" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="master"
|
||||
transform="translate(-24)">
|
||||
<g
|
||||
id="master_x5F_level1" />
|
||||
<use
|
||||
xlink:href="#master_x5F_level1_1_"
|
||||
width="137.2"
|
||||
height="133.89999"
|
||||
x="-68.599998"
|
||||
y="-66.900002"
|
||||
transform="matrix(0.4,0,0,-0.4,185.2213,187.4709)"
|
||||
id="svg_17" />
|
||||
</g>
|
||||
<g
|
||||
id="Node"
|
||||
transform="translate(-24)">
|
||||
<g
|
||||
id="Node_x5F_level3_x5F_1">
|
||||
<g
|
||||
id="Isolation_Mode" />
|
||||
</g>
|
||||
<polygon
|
||||
class="st16"
|
||||
points="224.6,160.7 189,140.1 189,98.9 224.6,78.4 260.3,98.9 260.3,140.1 "
|
||||
id="svg_18" />
|
||||
<polygon
|
||||
class="st13"
|
||||
points="189,127.8 189,140.1 224.6,160.7 235.2,154.5 "
|
||||
id="svg_19" />
|
||||
<polygon
|
||||
class="st7"
|
||||
points="207.8,148.6 211.1,143 231.1,154.5 224.6,158.3 "
|
||||
id="svg_20" />
|
||||
<g
|
||||
id="svg_21">
|
||||
<path
|
||||
class="st8"
|
||||
d="m 213.7,146.5 c 0.4,0.2 0.6,0.5 0.7,0.9 0.1,0.4 0,0.7 -0.2,1.1 l -0.2,0.4 c -0.2,0.4 -0.5,0.6 -0.9,0.7 -0.4,0.1 -0.7,0 -1.1,-0.2 l -1.2,-0.7 0.1,-0.2 0.4,0.1 1.3,-2.3 -0.3,-0.2 0.1,-0.3 0.3,0.2 z m -0.6,0 -1.3,2.3 0.5,0.3 c 0.3,0.2 0.5,0.2 0.8,0.1 0.3,-0.1 0.5,-0.3 0.6,-0.5 l 0.2,-0.4 c 0.2,-0.3 0.2,-0.5 0.2,-0.8 -0.1,-0.3 -0.2,-0.5 -0.5,-0.6 z"
|
||||
id="svg_22" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 214.3,149.2 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 0.3,0.2 0.5,0.4 0.5,0.7 0.1,0.3 0,0.6 -0.2,0.9 v 0 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 -0.3,-0.2 -0.5,-0.4 -0.5,-0.7 0,-0.2 0,-0.5 0.2,-0.9 z m 0.4,0.3 c -0.1,0.2 -0.2,0.4 -0.2,0.6 0,0.2 0.1,0.4 0.3,0.5 0.2,0.1 0.4,0.1 0.5,0 0.2,-0.1 0.3,-0.3 0.5,-0.5 v 0 c 0.1,-0.2 0.2,-0.4 0.2,-0.6 0,-0.2 -0.1,-0.4 -0.3,-0.5 -0.2,-0.1 -0.4,-0.1 -0.6,0 -0.2,0.1 -0.2,0.2 -0.4,0.5 z"
|
||||
id="svg_23" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 217.1,151.9 c 0.1,0.1 0.3,0.1 0.4,0.1 0.1,0 0.2,-0.1 0.3,-0.2 l 0.4,0.2 v 0 c -0.1,0.2 -0.3,0.3 -0.5,0.3 -0.3,0 -0.5,0 -0.7,-0.1 -0.3,-0.2 -0.5,-0.4 -0.5,-0.7 0,-0.3 0,-0.6 0.2,-0.9 v -0.1 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 0.2,0.1 0.3,0.2 0.4,0.4 0.1,0.1 0.2,0.3 0.2,0.4 l -0.3,0.5 -0.3,-0.2 0.1,-0.4 c 0,-0.1 -0.1,-0.1 -0.1,-0.2 -0.1,-0.1 -0.1,-0.1 -0.2,-0.2 -0.2,-0.1 -0.4,-0.1 -0.6,0 -0.2,0.1 -0.3,0.3 -0.4,0.5 v 0.1 c -0.1,0.2 -0.2,0.4 -0.2,0.6 -0.1,0.2 0,0.3 0.2,0.4 z"
|
||||
id="svg_24" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 219.7,150 0.1,-0.3 0.7,0.4 -1,1.8 0.2,0.1 0.8,-0.3 -0.2,-0.1 0.1,-0.3 0.9,0.5 -0.1,0.3 -0.3,-0.1 -1,0.3 0.2,1.3 0.2,0.2 -0.1,0.2 -0.9,-0.5 0.1,-0.2 0.2,0.1 -0.2,-1 -0.3,-0.1 -0.1,0.7 0.3,0.2 -0.1,0.2 -1,-0.6 0.1,-0.2 0.4,0.1 1.4,-2.5 z"
|
||||
id="svg_25" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 221.5,154.9 c -0.3,-0.2 -0.5,-0.4 -0.5,-0.7 0,-0.3 0,-0.6 0.2,-0.9 v -0.1 c 0.2,-0.3 0.4,-0.5 0.7,-0.6 0.3,-0.1 0.6,-0.1 0.8,0.1 0.3,0.2 0.5,0.4 0.5,0.6 0,0.3 0,0.5 -0.2,0.8 l -0.1,0.2 -1.4,-0.8 v 0 c -0.1,0.2 -0.2,0.4 -0.1,0.6 0,0.2 0.1,0.3 0.3,0.4 0.1,0.1 0.3,0.1 0.4,0.1 0.1,0 0.2,0 0.3,0 v 0.3 c -0.1,0 -0.3,0 -0.4,0 -0.1,0.2 -0.3,0.1 -0.5,0 z m 1.1,-1.9 c -0.1,-0.1 -0.3,-0.1 -0.4,0 -0.2,0.1 -0.3,0.2 -0.4,0.3 v 0 l 1,0.6 v -0.1 c 0.1,-0.2 0.1,-0.3 0.1,-0.5 -0.1,-0.1 -0.2,-0.2 -0.3,-0.3 z"
|
||||
id="svg_26" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 223.9,153.7 0.1,-0.3 0.7,0.4 -0.1,0.3 c 0.1,-0.1 0.2,-0.1 0.4,-0.1 0.1,0 0.2,0 0.4,0.1 0,0 0.1,0 0.1,0.1 0,0 0.1,0 0.1,0.1 l -0.3,0.3 -0.2,-0.1 c -0.1,-0.1 -0.2,-0.1 -0.3,-0.1 -0.1,0 -0.2,0 -0.3,0.1 l -0.7,1.2 0.3,0.2 -0.1,0.2 -1,-0.6 0.1,-0.2 0.4,0.1 0.9,-1.5 z"
|
||||
id="svg_27" />
|
||||
</g>
|
||||
<g
|
||||
id="svg_28">
|
||||
<path
|
||||
class="st8"
|
||||
d="m 194.3,135.3 0.1,-0.3 0.7,0.4 -1,1.8 0.2,0.1 0.8,-0.3 -0.2,-0.1 0.1,-0.3 0.9,0.5 -0.1,0.3 -0.3,-0.1 -1,0.3 0.2,1.3 0.2,0.2 -0.1,0.2 -0.9,-0.5 0.1,-0.2 0.2,0.1 -0.2,-1 -0.3,-0.1 -0.4,0.7 0.3,0.2 -0.1,0.2 -1,-0.6 0.1,-0.2 0.4,0.1 1.4,-2.5 z"
|
||||
id="svg_29" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 196.8,140.2 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.4,-0.3 -0.4,-0.5 0,-0.2 0,-0.5 0.2,-0.8 l 0.6,-1 -0.2,-0.2 0.1,-0.3 0.2,0.1 0.4,0.2 -0.7,1.3 c -0.1,0.2 -0.2,0.4 -0.2,0.5 0,0.1 0.1,0.2 0.2,0.3 0.1,0.1 0.3,0.1 0.4,0.1 0.1,0 0.2,0 0.3,-0.1 l 0.7,-1.2 -0.3,-0.2 0.1,-0.3 0.3,0.2 0.4,0.2 -1.1,1.8 0.2,0.2 -0.1,0.2 -0.6,-0.3 z"
|
||||
id="svg_30" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 200.1,141.2 c -0.2,0.3 -0.4,0.5 -0.7,0.6 -0.3,0.1 -0.5,0.1 -0.8,-0.1 -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.2,0.3 -0.3,-0.2 1.6,-2.8 -0.3,-0.2 0.1,-0.3 0.7,0.4 -0.7,1.2 c 0.1,-0.1 0.2,-0.1 0.4,-0.1 0.1,0 0.3,0 0.4,0.1 0.3,0.2 0.4,0.4 0.4,0.7 0.1,0.4 0,0.7 -0.2,1.1 z m -0.4,-0.3 c 0.1,-0.2 0.2,-0.5 0.2,-0.7 0,-0.2 -0.1,-0.4 -0.3,-0.5 -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.5,0.9 c 0,0.1 0,0.2 0.1,0.3 0.1,0.1 0.1,0.2 0.3,0.3 0.2,0.1 0.4,0.1 0.5,0 0.2,0.1 0.3,0 0.4,-0.3 z"
|
||||
id="svg_31" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 200.9,143 c -0.3,-0.2 -0.5,-0.4 -0.5,-0.7 0,-0.3 0,-0.6 0.2,-0.9 v -0.1 c 0.2,-0.3 0.4,-0.5 0.7,-0.6 0.3,-0.1 0.6,-0.1 0.8,0.1 0.3,0.2 0.5,0.4 0.5,0.6 0,0.3 0,0.5 -0.2,0.8 l -0.1,0.2 -1.4,-0.8 v 0 c -0.1,0.2 -0.2,0.4 -0.1,0.6 0,0.2 0.1,0.3 0.3,0.4 0.1,0.1 0.3,0.1 0.4,0.1 0.1,0 0.2,0 0.3,0 v 0.3 c -0.1,0 -0.3,0 -0.4,0 -0.2,0.2 -0.3,0.1 -0.5,0 z m 1,-2 c -0.1,-0.1 -0.3,-0.1 -0.4,0 -0.2,0.1 -0.3,0.2 -0.4,0.3 v 0 l 1,0.6 v -0.1 c 0.1,-0.2 0.1,-0.3 0.1,-0.5 0,0 -0.1,-0.2 -0.3,-0.3 z"
|
||||
id="svg_32" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 203.7,140.8 0.1,-0.3 0.7,0.4 -1.6,2.8 0.3,0.2 -0.1,0.2 -1,-0.6 0.1,-0.2 0.4,0.1 1.4,-2.5 z"
|
||||
id="svg_33" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 204.3,145 c -0.3,-0.2 -0.5,-0.4 -0.5,-0.7 -0.1,-0.3 0,-0.6 0.2,-0.9 v -0.1 c 0.2,-0.3 0.4,-0.5 0.7,-0.6 0.3,-0.1 0.6,-0.1 0.8,0.1 0.3,0.2 0.5,0.4 0.5,0.6 0,0.3 0,0.5 -0.2,0.8 l -0.1,0.2 -1.4,-0.8 v 0 c -0.1,0.2 -0.2,0.4 -0.1,0.6 0,0.2 0.1,0.3 0.3,0.4 0.1,0.1 0.3,0.1 0.4,0.1 0.1,0 0.2,0 0.3,0 v 0.3 c -0.1,0 -0.3,0 -0.4,0 -0.1,0.1 -0.3,0.1 -0.5,0 z m 1.1,-2 c -0.1,-0.1 -0.3,-0.1 -0.4,0 -0.2,0.1 -0.3,0.2 -0.4,0.3 v 0 l 1,0.6 v -0.1 c 0.1,-0.2 0.1,-0.3 0.1,-0.5 -0.1,-0.1 -0.2,-0.2 -0.3,-0.3 z"
|
||||
id="svg_34" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 207.8,143.4 -0.3,0.5 0.4,0.2 -0.2,0.3 -0.4,-0.2 -0.8,1.3 c -0.1,0.1 -0.1,0.2 -0.1,0.2 0,0.1 0.1,0.1 0.1,0.2 0,0 0.1,0 0.1,0.1 0,0 0.1,0 0.1,0 l -0.1,0.3 c -0.1,0 -0.1,0 -0.2,0 -0.1,0 -0.2,-0.1 -0.2,-0.1 -0.2,-0.1 -0.3,-0.2 -0.3,-0.4 0,-0.2 0,-0.3 0.1,-0.5 l 0.8,-1.3 -0.3,-0.2 0.2,-0.3 0.3,0.2 0.3,-0.5 z"
|
||||
id="svg_35" />
|
||||
</g>
|
||||
<polygon
|
||||
class="st16"
|
||||
points="182.3,140.1 146.6,160.7 111,140.1 111,99 146.6,78.4 182.3,99 "
|
||||
id="svg_36" />
|
||||
<polygon
|
||||
class="st13"
|
||||
points="136,154.5 146.6,160.7 182.3,140.1 182.2,127.9 "
|
||||
id="svg_37" />
|
||||
<polygon
|
||||
class="st7"
|
||||
points="163.4,148.6 160.2,143 180.2,131.4 180.2,138.9 "
|
||||
id="svg_38" />
|
||||
<g
|
||||
id="svg_39">
|
||||
<path
|
||||
class="st8"
|
||||
d="m 164.6,142.5 c 0.4,-0.2 0.7,-0.3 1.1,-0.2 0.4,0.1 0.6,0.3 0.9,0.7 l 0.2,0.4 c 0.2,0.4 0.3,0.7 0.2,1.1 -0.1,0.4 -0.3,0.7 -0.7,0.9 l -1.2,0.7 -0.1,-0.2 0.3,-0.2 -1.3,-2.3 -0.4,0.1 -0.1,-0.3 0.3,-0.2 z m -0.3,0.6 1.3,2.3 0.5,-0.3 c 0.3,-0.2 0.4,-0.4 0.5,-0.6 0.1,-0.3 0,-0.5 -0.2,-0.8 l -0.2,-0.4 c -0.2,-0.3 -0.4,-0.5 -0.6,-0.5 -0.3,-0.1 -0.5,-0.1 -0.8,0.1 z"
|
||||
id="svg_40" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 167.3,143.4 c -0.2,-0.3 -0.2,-0.6 -0.2,-0.9 0.1,-0.3 0.2,-0.5 0.5,-0.7 0.3,-0.2 0.6,-0.2 0.9,-0.1 0.3,0.1 0.5,0.3 0.7,0.6 v 0 c 0.2,0.3 0.2,0.6 0.2,0.9 -0.1,0.3 -0.2,0.5 -0.5,0.7 -0.3,0.2 -0.6,0.2 -0.9,0.1 -0.3,0 -0.5,-0.3 -0.7,-0.6 z m 0.4,-0.2 c 0.1,0.2 0.3,0.4 0.5,0.5 0.2,0.1 0.4,0.1 0.6,0 0.2,-0.1 0.3,-0.3 0.3,-0.5 0,-0.2 0,-0.4 -0.2,-0.6 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 -0.2,0.1 -0.3,0.3 -0.3,0.5 0,0.2 0,0.3 0.2,0.6 z"
|
||||
id="svg_41" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 171,142.3 c 0.1,-0.1 0.2,-0.2 0.3,-0.3 0.1,-0.1 0,-0.3 0,-0.4 l 0.3,-0.2 v 0 c 0.1,0.2 0.1,0.4 0,0.6 -0.1,0.2 -0.2,0.4 -0.5,0.6 -0.3,0.2 -0.6,0.2 -0.9,0.1 -0.3,-0.1 -0.5,-0.3 -0.7,-0.6 V 142 c -0.2,-0.3 -0.2,-0.6 -0.2,-0.9 0,-0.3 0.2,-0.5 0.5,-0.7 0.2,-0.1 0.3,-0.2 0.5,-0.2 0.2,0 0.3,0 0.5,0 l 0.3,0.5 -0.3,0.2 -0.3,-0.3 c -0.1,0 -0.2,0 -0.2,0 -0.1,0 -0.2,0 -0.3,0.1 -0.2,0.1 -0.3,0.3 -0.3,0.5 0,0.2 0.1,0.4 0.2,0.6 v 0.1 c 0.1,0.2 0.3,0.4 0.4,0.5 0.3,0.1 0.5,0.1 0.7,-0.1 z"
|
||||
id="svg_42" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 170.6,139.1 -0.1,-0.3 0.7,-0.4 1,1.8 0.2,-0.1 0.1,-0.8 -0.2,0.1 -0.1,-0.3 0.9,-0.5 0.1,0.3 -0.2,0.2 -0.2,1 1.2,0.5 0.3,-0.1 0.1,0.2 -0.9,0.5 -0.1,-0.2 0.2,-0.1 -1,-0.4 -0.3,0.1 0.4,0.7 0.4,-0.1 0.1,0.2 -1,0.6 -0.1,-0.2 0.3,-0.2 -1.4,-2.6 z"
|
||||
id="svg_43" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 175.8,140 c -0.3,0.2 -0.6,0.2 -0.9,0.1 -0.3,-0.1 -0.5,-0.3 -0.7,-0.6 l -0.1,-0.1 c -0.2,-0.3 -0.2,-0.6 -0.2,-0.9 0.1,-0.3 0.2,-0.5 0.5,-0.7 0.3,-0.2 0.6,-0.2 0.8,-0.1 0.2,0.1 0.5,0.3 0.6,0.6 l 0.1,0.2 -1.4,0.8 v 0 c 0.1,0.2 0.3,0.3 0.4,0.4 0.2,0.1 0.4,0.1 0.5,0 0.1,-0.1 0.2,-0.2 0.3,-0.3 0.1,-0.1 0.1,-0.2 0.2,-0.3 l 0.3,0.2 c 0,0.1 -0.1,0.2 -0.2,0.4 0.1,0.1 -0.1,0.2 -0.2,0.3 z m -1.2,-1.9 c -0.1,0.1 -0.2,0.2 -0.2,0.4 0,0.2 0,0.3 0.1,0.5 v 0 l 1,-0.6 v -0.1 c -0.1,-0.2 -0.2,-0.3 -0.3,-0.3 -0.3,0 -0.4,0 -0.6,0.1 z"
|
||||
id="svg_44" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 175.8,137.4 -0.1,-0.3 0.7,-0.4 0.2,0.3 c 0,-0.1 0,-0.3 0.1,-0.4 0.1,-0.1 0.1,-0.2 0.3,-0.3 0,0 0.1,0 0.1,0 0,0 0.1,0 0.1,0 l 0.2,0.4 -0.2,0.1 c -0.1,0.1 -0.2,0.1 -0.2,0.2 0,0.1 -0.1,0.2 0,0.3 l 0.7,1.2 0.4,-0.1 0.1,0.2 -1,0.6 -0.1,-0.2 0.3,-0.2 -0.9,-1.5 z"
|
||||
id="svg_45" />
|
||||
</g>
|
||||
<g
|
||||
id="svg_46">
|
||||
<path
|
||||
class="st8"
|
||||
d="m 145.1,153.8 -0.1,-0.3 0.7,-0.4 1,1.8 0.2,-0.1 0.1,-0.8 -0.2,0.1 -0.1,-0.3 0.9,-0.5 0.1,0.3 -0.2,0.2 -0.2,1 1.2,0.5 0.3,-0.1 0.1,0.2 -0.9,0.5 -0.1,-0.2 0.2,-0.1 -1,-0.4 -0.3,0.1 0.4,0.7 0.4,-0.1 0.1,0.2 -1,0.6 -0.1,-0.2 0.3,-0.2 -1.4,-2.5 z"
|
||||
id="svg_47" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 150.6,154 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.5,0.2 -0.7,0.1 -0.2,-0.1 -0.4,-0.3 -0.6,-0.6 l -0.6,-1 -0.3,0.1 -0.1,-0.3 0.2,-0.1 0.4,-0.2 0.7,1.3 c 0.1,0.2 0.3,0.4 0.4,0.4 0.1,0 0.2,0 0.4,-0.1 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.7,-1.2 -0.3,0.1 -0.1,-0.3 0.3,-0.2 0.4,-0.2 1.1,1.8 0.3,-0.1 0.1,0.2 -0.6,0.3 z"
|
||||
id="svg_48" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 153.1,151.7 c 0.2,0.3 0.2,0.6 0.2,0.9 0,0.3 -0.2,0.5 -0.4,0.6 -0.1,0.1 -0.3,0.1 -0.4,0.1 -0.1,0 -0.3,0 -0.4,-0.1 l 0.1,0.3 -0.3,0.2 -1.6,-2.8 -0.4,0.1 -0.1,-0.3 0.7,-0.4 0.7,1.2 c 0,-0.1 0.1,-0.3 0.1,-0.4 0.1,-0.1 0.2,-0.2 0.3,-0.3 0.3,-0.2 0.5,-0.2 0.8,0 0.3,0.2 0.5,0.5 0.7,0.9 z m -0.4,0.1 c -0.1,-0.2 -0.3,-0.4 -0.5,-0.5 -0.2,-0.1 -0.4,-0.1 -0.5,0 -0.1,0.1 -0.2,0.2 -0.3,0.3 0,0.1 -0.1,0.2 -0.1,0.3 l 0.5,0.9 c 0.1,0.1 0.2,0.1 0.3,0.1 0.1,0 0.2,0 0.4,-0.1 0.2,-0.1 0.3,-0.2 0.3,-0.4 0.1,-0.1 0.1,-0.3 -0.1,-0.6 z"
|
||||
id="svg_49" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 155.1,151.9 c -0.3,0.2 -0.6,0.2 -0.9,0.1 -0.3,-0.1 -0.5,-0.3 -0.7,-0.6 l -0.1,-0.1 c -0.2,-0.3 -0.2,-0.6 -0.2,-0.9 0.1,-0.3 0.2,-0.5 0.5,-0.7 0.3,-0.2 0.6,-0.2 0.8,-0.1 0.2,0.1 0.5,0.3 0.6,0.6 l 0.1,0.2 -1.4,0.8 v 0 c 0.1,0.2 0.3,0.3 0.4,0.4 0.2,0.1 0.4,0.1 0.5,0 0.1,-0.1 0.2,-0.2 0.3,-0.3 0.1,-0.1 0.1,-0.2 0.2,-0.3 l 0.3,0.2 c 0,0.1 -0.1,0.2 -0.2,0.4 0.1,0.1 0,0.2 -0.2,0.3 z m -1.2,-1.9 c -0.1,0.1 -0.2,0.2 -0.2,0.4 0,0.2 0,0.3 0.1,0.5 v 0 l 1,-0.6 v -0.1 c -0.1,-0.2 -0.2,-0.3 -0.3,-0.3 -0.3,0 -0.4,0 -0.6,0.1 z"
|
||||
id="svg_50" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 154.6,148.4 -0.1,-0.3 0.7,-0.4 1.6,2.8 0.4,-0.1 0.1,0.2 -1,0.6 -0.1,-0.2 0.3,-0.2 -1.4,-2.5 z"
|
||||
id="svg_51" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 158.6,149.9 c -0.3,0.2 -0.6,0.2 -0.9,0.1 -0.3,-0.1 -0.5,-0.3 -0.7,-0.6 l -0.1,-0.1 c -0.2,-0.3 -0.2,-0.6 -0.2,-0.9 0.1,-0.3 0.2,-0.5 0.5,-0.7 0.3,-0.2 0.6,-0.2 0.8,-0.1 0.2,0.1 0.5,0.3 0.6,0.6 l 0.1,0.2 -1.4,0.8 v 0 c 0.1,0.2 0.3,0.3 0.4,0.4 0.2,0.1 0.4,0.1 0.5,0 0.1,-0.1 0.2,-0.2 0.3,-0.3 0.1,-0.1 0.1,-0.2 0.2,-0.3 l 0.3,0.2 c 0,0.1 -0.1,0.2 -0.2,0.4 0.1,0.1 -0.1,0.2 -0.2,0.3 z m -1.2,-1.9 c -0.1,0.1 -0.2,0.2 -0.2,0.4 0,0.2 0,0.3 0.1,0.5 v 0 l 1,-0.6 v -0.1 c -0.1,-0.2 -0.2,-0.3 -0.3,-0.3 -0.3,0 -0.5,0 -0.6,0.1 z"
|
||||
id="svg_52" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 158.9,146.1 0.3,0.5 0.4,-0.2 0.2,0.3 -0.4,0.2 0.8,1.3 c 0.1,0.1 0.1,0.2 0.2,0.2 0.1,0 0.1,0 0.2,0 0,0 0.1,0 0.1,-0.1 0,0 0.1,-0.1 0.1,-0.1 l 0.2,0.2 c 0,0 -0.1,0.1 -0.1,0.2 -0.1,0.1 -0.1,0.1 -0.2,0.1 -0.2,0.1 -0.3,0.1 -0.5,0.1 -0.1,0 -0.3,-0.2 -0.4,-0.4 l -0.7,-1.3 -0.3,0.2 -0.2,-0.3 0.3,-0.2 -0.3,-0.5 z"
|
||||
id="svg_53" />
|
||||
</g>
|
||||
<polygon
|
||||
class="st16"
|
||||
points="146.2,296.6 110.6,276.1 110.6,234.9 146.2,214.4 181.9,234.9 181.9,276.1 "
|
||||
id="svg_54" />
|
||||
<polygon
|
||||
class="st13"
|
||||
points="135.6,220.5 146.2,214.4 181.9,234.9 181.8,247.2 "
|
||||
id="svg_55" />
|
||||
<polygon
|
||||
class="st7"
|
||||
points="163,226.4 159.8,232.1 179.8,243.6 179.8,236.1 "
|
||||
id="svg_56" />
|
||||
<g
|
||||
id="svg_57">
|
||||
<path
|
||||
class="st8"
|
||||
d="m 145.8,218.8 0.1,-0.3 0.7,0.4 -1,1.8 0.2,0.1 0.8,-0.3 -0.2,-0.1 0.1,-0.3 0.9,0.5 -0.1,0.3 -0.3,-0.1 -1,0.3 0.2,1.3 0.2,0.2 -0.1,0.2 -0.9,-0.5 0.1,-0.2 0.2,0.1 -0.2,-1 -0.3,-0.1 -0.4,0.7 0.3,0.2 -0.1,0.2 -1,-0.6 0.1,-0.2 0.4,0.1 1.4,-2.5 z"
|
||||
id="svg_58" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 148.4,223.7 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.4,-0.3 -0.4,-0.5 0,-0.2 0,-0.5 0.2,-0.8 l 0.6,-1 -0.2,-0.2 0.1,-0.3 0.2,0.1 0.4,0.2 -0.7,1.3 c -0.1,0.2 -0.2,0.4 -0.2,0.5 0,0.1 0.1,0.2 0.2,0.3 0.1,0.1 0.3,0.1 0.4,0.1 0.1,0 0.2,0 0.3,-0.1 l 0.7,-1.2 -0.3,-0.2 0.1,-0.3 0.3,0.2 0.4,0.2 -1.1,1.8 0.2,0.2 -0.1,0.2 -0.6,-0.3 z"
|
||||
id="svg_59" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 151.7,224.7 c -0.2,0.3 -0.4,0.5 -0.7,0.6 -0.3,0.1 -0.5,0.1 -0.8,-0.1 -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.2,0.3 -0.3,-0.2 1.6,-2.8 -0.3,-0.2 0.1,-0.3 0.7,0.4 -0.7,1.2 c 0.1,-0.1 0.2,-0.1 0.4,-0.1 0.1,0 0.3,0 0.4,0.1 0.3,0.2 0.4,0.4 0.4,0.7 0.1,0.4 0,0.7 -0.2,1.1 z m -0.4,-0.3 c 0.1,-0.2 0.2,-0.5 0.2,-0.7 0,-0.2 -0.1,-0.4 -0.3,-0.5 -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.5,0.9 c 0,0.1 0,0.2 0.1,0.3 0.1,0.1 0.1,0.2 0.3,0.3 0.2,0.1 0.4,0.1 0.5,0 0.1,0.1 0.3,-0.1 0.4,-0.3 z"
|
||||
id="svg_60" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 152.5,226.5 c -0.3,-0.2 -0.5,-0.4 -0.5,-0.7 0,-0.3 0,-0.6 0.2,-0.9 l 0.1,-0.1 c 0.2,-0.3 0.4,-0.5 0.7,-0.6 0.3,-0.1 0.6,-0.1 0.8,0.1 0.3,0.2 0.5,0.4 0.5,0.6 0,0.3 0,0.5 -0.2,0.8 l -0.1,0.2 -1.4,-0.8 v 0 c -0.1,0.2 -0.2,0.4 -0.1,0.6 0,0.2 0.1,0.3 0.3,0.4 0.1,0.1 0.3,0.1 0.4,0.1 0.1,0 0.2,0 0.3,0 v 0.3 c -0.1,0 -0.3,0 -0.4,0 -0.3,0.1 -0.5,0.1 -0.6,0 z m 1,-2 c -0.1,-0.1 -0.3,-0.1 -0.4,0 -0.2,0.1 -0.3,0.2 -0.4,0.3 v 0 l 1,0.6 v -0.1 c 0.1,-0.2 0.1,-0.3 0.1,-0.5 0,-0.2 -0.1,-0.2 -0.3,-0.3 z"
|
||||
id="svg_61" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 155.3,224.3 0.1,-0.3 0.7,0.4 -1.6,2.8 0.3,0.2 -0.1,0.2 -1,-0.6 0.1,-0.2 0.4,0.1 1.4,-2.5 z"
|
||||
id="svg_62" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 155.9,228.5 c -0.3,-0.2 -0.5,-0.4 -0.5,-0.7 0,-0.3 0,-0.6 0.2,-0.9 v -0.1 c 0.2,-0.3 0.4,-0.5 0.7,-0.6 0.3,-0.1 0.6,-0.1 0.8,0.1 0.3,0.2 0.5,0.4 0.5,0.6 0,0.3 0,0.5 -0.2,0.8 l -0.1,0.2 -1.4,-0.8 v 0 c -0.1,0.2 -0.2,0.4 -0.1,0.6 0,0.2 0.1,0.3 0.3,0.4 0.1,0.1 0.3,0.1 0.4,0.1 0.1,0 0.2,0 0.3,0 v 0.3 c -0.1,0 -0.3,0 -0.4,0 -0.1,0.1 -0.3,0.1 -0.5,0 z m 1.1,-2 c -0.1,-0.1 -0.3,-0.1 -0.4,0 -0.1,0.1 -0.3,0.2 -0.4,0.3 v 0 l 1,0.6 v -0.1 c 0.1,-0.2 0.1,-0.3 0.1,-0.5 -0.1,-0.1 -0.2,-0.2 -0.3,-0.3 z"
|
||||
id="svg_63" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 159.4,226.9 -0.3,0.5 0.4,0.2 -0.2,0.3 -0.4,-0.2 -0.8,1.3 c -0.1,0.1 -0.1,0.2 -0.1,0.2 0,0.1 0.1,0.1 0.1,0.2 0,0 0.1,0 0.1,0.1 0,0 0.1,0 0.1,0 l -0.1,0.3 c -0.1,0 -0.1,0 -0.2,0 -0.1,0 -0.2,-0.1 -0.2,-0.1 -0.2,-0.1 -0.3,-0.2 -0.3,-0.4 0,-0.2 0,-0.3 0.1,-0.5 l 0.8,-1.3 -0.3,-0.2 0.2,-0.3 0.3,0.2 0.3,-0.5 z"
|
||||
id="svg_64" />
|
||||
</g>
|
||||
<g
|
||||
id="svg_65">
|
||||
<path
|
||||
class="st8"
|
||||
d="m 166.1,230.5 c 0.4,0.2 0.6,0.5 0.7,0.9 0.1,0.4 0,0.7 -0.2,1.1 l -0.2,0.4 c -0.2,0.4 -0.5,0.6 -0.9,0.7 -0.4,0.1 -0.7,0 -1.1,-0.2 l -1.2,-0.7 0.1,-0.2 0.4,0.1 1.3,-2.3 -0.3,-0.2 0.1,-0.3 0.3,0.2 z m -0.7,0 -1.3,2.3 0.5,0.3 c 0.3,0.2 0.5,0.2 0.8,0.1 0.3,-0.1 0.5,-0.3 0.6,-0.5 l 0.2,-0.4 c 0.2,-0.3 0.2,-0.5 0.2,-0.8 -0.1,-0.3 -0.2,-0.5 -0.5,-0.6 z"
|
||||
id="svg_66" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 166.7,233.2 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 0.3,0.2 0.5,0.4 0.5,0.7 0.1,0.3 0,0.6 -0.2,0.9 v 0 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 -0.3,-0.2 -0.5,-0.4 -0.5,-0.7 -0.1,-0.2 0,-0.5 0.2,-0.9 z m 0.3,0.3 c -0.1,0.2 -0.2,0.4 -0.2,0.6 0,0.2 0.1,0.4 0.3,0.5 0.2,0.1 0.4,0.1 0.5,0 0.2,-0.1 0.3,-0.3 0.5,-0.5 v 0 c 0.1,-0.2 0.2,-0.4 0.2,-0.6 0,-0.2 -0.1,-0.4 -0.3,-0.5 -0.2,-0.1 -0.4,-0.1 -0.6,0 -0.1,0.1 -0.2,0.2 -0.4,0.5 z"
|
||||
id="svg_67" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 169.4,235.9 c 0.1,0.1 0.3,0.1 0.4,0.1 0.1,0 0.2,-0.1 0.3,-0.2 l 0.3,0.2 v 0 c -0.1,0.2 -0.3,0.3 -0.5,0.3 -0.3,0 -0.5,0 -0.7,-0.1 -0.3,-0.2 -0.5,-0.4 -0.5,-0.7 0,-0.3 0,-0.6 0.2,-0.9 v -0.1 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 0.2,0.1 0.3,0.2 0.4,0.4 0.1,0.1 0.2,0.3 0.2,0.4 l -0.3,0.5 -0.3,-0.2 0.1,-0.4 c 0,-0.1 -0.1,-0.1 -0.1,-0.2 -0.1,-0.1 -0.1,-0.1 -0.2,-0.2 -0.2,-0.1 -0.4,-0.1 -0.6,0 -0.2,0.1 -0.3,0.3 -0.4,0.5 v 0.1 c -0.1,0.2 -0.2,0.4 -0.2,0.6 0,0.1 0.1,0.3 0.3,0.4 z"
|
||||
id="svg_68" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 172.1,234 0.1,-0.3 0.7,0.4 -1,1.8 0.2,0.1 0.8,-0.3 -0.2,-0.1 0.1,-0.3 0.9,0.5 -0.1,0.3 -0.3,-0.1 -1,0.3 0.2,1.3 0.2,0.2 -0.1,0.2 -0.9,-0.5 0.1,-0.2 0.2,0.1 -0.2,-1 -0.3,-0.1 -0.4,0.7 0.3,0.2 -0.1,0.2 -1,-0.6 0.1,-0.2 0.4,0.1 1.4,-2.5 z"
|
||||
id="svg_69" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 173.9,238.9 c -0.3,-0.2 -0.5,-0.4 -0.5,-0.7 -0.1,-0.3 0,-0.6 0.2,-0.9 v -0.1 c 0.2,-0.3 0.4,-0.5 0.7,-0.6 0.3,-0.1 0.6,-0.1 0.8,0.1 0.3,0.2 0.5,0.4 0.5,0.6 0,0.3 0,0.5 -0.2,0.8 l -0.1,0.2 -1.4,-0.8 v 0 c -0.1,0.2 -0.2,0.4 -0.1,0.6 0,0.2 0.1,0.3 0.3,0.4 0.1,0.1 0.3,0.1 0.4,0.1 0.1,0 0.2,0 0.3,0 v 0.3 c -0.1,0 -0.3,0 -0.4,0 -0.2,0.2 -0.4,0.1 -0.5,0 z m 1,-2 c -0.1,-0.1 -0.3,-0.1 -0.4,0 -0.2,0.1 -0.3,0.2 -0.4,0.3 v 0 l 1,0.6 v -0.1 c 0.1,-0.2 0.1,-0.3 0.1,-0.5 0,0 -0.1,-0.2 -0.3,-0.3 z"
|
||||
id="svg_70" />
|
||||
<path
|
||||
class="st8"
|
||||
d="m 176.2,237.7 0.1,-0.3 0.7,0.4 -0.1,0.3 c 0.1,-0.1 0.2,-0.1 0.4,-0.1 0.1,0 0.2,0 0.4,0.1 0,0 0.1,0 0.1,0.1 0,0 0.1,0 0.1,0.1 l -0.3,0.3 -0.2,-0.1 c -0.1,-0.1 -0.2,-0.1 -0.3,-0.1 -0.1,0 -0.2,0 -0.3,0.1 l -0.7,1.2 0.3,0.2 -0.1,0.2 -1,-0.6 0.1,-0.2 0.4,0.1 0.9,-1.5 z"
|
||||
id="svg_71" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="service" />
|
||||
<g
|
||||
id="pods"
|
||||
transform="translate(-24)">
|
||||
<circle
|
||||
class="st29"
|
||||
cx="146.2"
|
||||
cy="119.5"
|
||||
r="20.9"
|
||||
id="svg_72" />
|
||||
</g>
|
||||
<g
|
||||
id="IP" />
|
||||
<g
|
||||
id="deployments"
|
||||
transform="translate(-22)">
|
||||
<g
|
||||
id="svg_73">
|
||||
<g
|
||||
id="svg_74">
|
||||
<circle
|
||||
class="st47"
|
||||
cx="177.39999"
|
||||
cy="181.7"
|
||||
r="10.1"
|
||||
id="svg_75" />
|
||||
<g
|
||||
id="svg_76">
|
||||
<g
|
||||
id="svg_77">
|
||||
<path
|
||||
class="st48"
|
||||
d="m 180.9,176 c 1.9,1.2 3.2,3.3 3.2,5.8 0,3.7 -3,6.7 -6.7,6.7 -3.7,0 -6.7,-3 -6.7,-6.7 0,-2.9 1.9,-5.4 4.5,-6.4"
|
||||
id="svg_78" />
|
||||
<g
|
||||
id="svg_79">
|
||||
<polygon
|
||||
class="st42"
|
||||
points="182.4,174.5 179.6,175.4 180.5,178.1 182.1,178.9 181.2,176.2 183.9,175.3 "
|
||||
id="svg_80" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="svg_81">
|
||||
<path
|
||||
class="st42"
|
||||
d="m 174.8,185.1 v -6.7 h 2.3 c 0.8,0 1.5,0.3 2,0.8 0.5,0.5 0.8,1.2 0.8,2 v 1.1 c 0,0.8 -0.3,1.5 -0.8,2 -0.5,0.5 -1.2,0.8 -2,0.8 z m 1.3,-5.7 v 4.7 h 0.9 c 0.5,0 0.9,-0.2 1.1,-0.5 0.3,-0.3 0.4,-0.8 0.4,-1.3 v -1.1 c 0,-0.5 -0.1,-0.9 -0.4,-1.3 -0.3,-0.3 -0.7,-0.5 -1.1,-0.5 z"
|
||||
id="svg_82" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="containers_x2F_volumes"
|
||||
transform="translate(-24)">
|
||||
<g
|
||||
id="svg_83">
|
||||
<polygon
|
||||
class="st50"
|
||||
points="155.9,113.9 146.2,119.5 136.5,113.9 146.2,108.3 "
|
||||
id="svg_84" />
|
||||
<polygon
|
||||
class="st50"
|
||||
points="146.2,119.5 146.2,130.7 136.5,125.1 136.5,113.9 "
|
||||
id="svg_85" />
|
||||
<polygon
|
||||
class="st50"
|
||||
points="155.9,113.9 155.9,125.1 146.2,130.7 146.2,119.5 "
|
||||
id="svg_86" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="labels_x2F_selectors" />
|
||||
<g
|
||||
id="description"
|
||||
transform="translate(-22)">
|
||||
<line
|
||||
class="st62"
|
||||
x1="360"
|
||||
y1="203.89999"
|
||||
x2="188.60001"
|
||||
y2="203.89999"
|
||||
id="svg_113" />
|
||||
<line
|
||||
class="st62"
|
||||
x1="360"
|
||||
y1="181.7"
|
||||
x2="181.5"
|
||||
y2="181.7"
|
||||
id="svg_125" />
|
||||
<line
|
||||
class="st62"
|
||||
x1="360"
|
||||
y1="229"
|
||||
x2="159.39999"
|
||||
y2="229"
|
||||
id="svg_126" />
|
||||
<line
|
||||
class="st62"
|
||||
x1="360"
|
||||
y1="101.5"
|
||||
x2="242.8"
|
||||
y2="101.5"
|
||||
id="svg_127" />
|
||||
<line
|
||||
class="st62"
|
||||
x1="360"
|
||||
y1="123.7"
|
||||
x2="150.2"
|
||||
y2="123.7"
|
||||
id="svg_145" />
|
||||
<g
|
||||
id="svg_146" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:13.3333px;line-height:1.25;font-family:Courier;-inkscape-font-specification:'Courier, Normal'"
|
||||
x="361.82697"
|
||||
y="104.54287"
|
||||
id="text1997"><tspan
|
||||
id="tspan1995"
|
||||
x="361.82697"
|
||||
y="104.54287">Node</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:13.3333px;line-height:1.25;font-family:Courier;-inkscape-font-specification:'Courier, Normal'"
|
||||
x="361.24179"
|
||||
y="126.47728"
|
||||
id="text2001"><tspan
|
||||
id="tspan1999"
|
||||
x="361.24179"
|
||||
y="126.47728">containerized app</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:13.3333px;line-height:1.25;font-family:Courier;-inkscape-font-specification:'Courier, Normal'"
|
||||
x="361.82697"
|
||||
y="185.326"
|
||||
id="text2005"><tspan
|
||||
id="tspan2003"
|
||||
x="361.82697"
|
||||
y="185.326">Deployment</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:13.3333px;line-height:1.25;font-family:Courier;-inkscape-font-specification:'Courier, Normal'"
|
||||
x="361.60068"
|
||||
y="207.72804"
|
||||
id="text2009"><tspan
|
||||
id="tspan2007"
|
||||
x="361.60068"
|
||||
y="207.72804">Control Plane</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:13.3333px;line-height:1.25;font-family:Courier;-inkscape-font-specification:'Courier, Normal'"
|
||||
x="360.92181"
|
||||
y="232.16661"
|
||||
id="text2013"><tspan
|
||||
id="tspan2011"
|
||||
x="360.92181"
|
||||
y="232.16661">node processes</tspan></text>
|
||||
<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="113.36793"
|
||||
y="350.73907"
|
||||
id="text2017"><tspan
|
||||
id="tspan2015"
|
||||
x="113.36793"
|
||||
y="350.73907">Kubernetes Cluster</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
id="Layer_14" />
|
||||
</g>
|
||||
<g id="containers_x2F_volumes">
|
||||
<g id="svg_83">
|
||||
<polygon class="st50" points="136.5,113.9 146.2,108.3 155.9,113.9 146.2,119.5 " id="svg_84"/>
|
||||
<polygon class="st50" points="136.5,125.1 136.5,113.9 146.2,119.5 146.2,130.7 " id="svg_85"/>
|
||||
<polygon class="st50" points="146.2,130.7 146.2,119.5 155.9,113.9 155.9,125.1 " id="svg_86"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="labels_x2F_selectors"/>
|
||||
<g id="description">
|
||||
<g id="svg_87">
|
||||
<path class="st42" d="m373.8,200.8l0,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.8l-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.5l0.2,-3.4z" id="svg_88"/>
|
||||
<path class="st42" d="m380.8,207.6c0,-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.8,-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.3,0.3 0.7,0.3z" id="svg_89"/>
|
||||
<path class="st42" d="m388.2,203.3l-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" id="svg_90"/>
|
||||
<path class="st42" d="m391.5,199.8l0,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" id="svg_91"/>
|
||||
<path class="st42" d="m396.7,207.8c-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.7c-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" id="svg_92"/>
|
||||
<path class="st42" d="m400.3,202l0,-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" id="svg_93"/>
|
||||
</g>
|
||||
<g id="svg_94">
|
||||
<path class="st42" d="m365.4,230.3l1,-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.1,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.1,0l0,-0.6l-0.2,0z" id="svg_95"/>
|
||||
<path class="st42" d="m373.2,227.8c0,-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" id="svg_96"/>
|
||||
<path class="st42" d="m384.2,230.3c-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.2c0,-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.7zm-3.1,-2.2c0,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" id="svg_97"/>
|
||||
<path class="st42" d="m390,231.1c-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" id="svg_98"/>
|
||||
<path class="st42" d="m396.4,232.7l1,-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.7c0,-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" id="svg_99"/>
|
||||
<path class="st42" d="m403.8,225.4l0,-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" id="svg_100"/>
|
||||
<path class="st42" d="m408.7,227.8c0,-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" id="svg_101"/>
|
||||
<path class="st42" d="m418.3,230.2c0.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" id="svg_102"/>
|
||||
<path class="st42" d="m424.8,231.1c-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" id="svg_103"/>
|
||||
<path class="st42" d="m433.2,226.7l-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" id="svg_104"/>
|
||||
<path class="st42" d="m439.3,226.7l-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" id="svg_105"/>
|
||||
<path class="st42" d="m443.5,231.1c-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" id="svg_106"/>
|
||||
<path class="st42" d="m451.9,226.7l-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" id="svg_107"/>
|
||||
</g>
|
||||
<g id="svg_108">
|
||||
<path class="st42" d="m373.8,95l0,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" id="svg_109"/>
|
||||
<path class="st42" d="m374.7,100.3c0,-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" id="svg_110"/>
|
||||
<path class="st42" d="m385.7,102.8c-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.2c0,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" id="svg_111"/>
|
||||
<path class="st42" d="m391.5,103.6c-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" id="svg_112"/>
|
||||
</g>
|
||||
<line class="st62" x1="360" y1="203.9" x2="188.6" y2="203.9" id="svg_113"/>
|
||||
<g id="svg_114">
|
||||
<path class="st42" d="m369,176.9c1.1,0 2,0.3 2.7,1s1,1.6 1,2.7l0,1.2c0,1.1 -0.3,2 -1,2.7s-1.6,1 -2.7,1l-3.6,0l0,-0.7l1,-0.2l0,-6.7l-1,-0.2l0,-0.7l1,0l2.6,0l0,-0.1zm-1.4,0.9l0,6.7l1.5,0c0.8,0 1.4,-0.3 1.9,-0.8s0.7,-1.2 0.7,-2l0,-1.2c0,-0.8 -0.2,-1.5 -0.7,-2s-1.1,-0.8 -1.9,-0.8l-1.5,0l0,0.1z" id="svg_115"/>
|
||||
<path class="st42" d="m376.8,185.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" id="svg_116"/>
|
||||
<path class="st42" d="m380.2,187.1l1,-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" id="svg_117"/>
|
||||
<path class="st42" d="m387.4,177l0,-0.7l2.1,0l0,8.2l1,0.2l0,0.7l-3.1,0l0,-0.7l1,-0.2l0,-7.3l-1,-0.2z" id="svg_118"/>
|
||||
<path class="st42" d="m391.2,182.2c0,-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" id="svg_119"/>
|
||||
<path class="st42" d="m403.9,179.8l-0.6,0.1l-2.4,6.5c-0.2,0.4 -0.4,0.8 -0.7,1.1s-0.7,0.5 -1.2,0.5c-0.1,0 -0.2,0 -0.4,0s-0.3,0 -0.3,-0.1l0.1,-0.9c0,0 0,0 0.2,0s0.3,0 0.3,0c0.2,0 0.4,-0.1 0.6,-0.3s0.3,-0.5 0.4,-0.7l0.3,-0.7l-2.1,-5.4l-0.6,-0.1l0,-0.7l2.6,0l0,0.7l-0.7,0.1l1.1,3.1l0.2,0.8l0,0l1.3,-3.9l-0.7,-0.1l0,-0.7l2.6,0l0,0.7z" id="svg_120"/>
|
||||
<path class="st42" d="m404.4,184.7l1,-0.2l0,-4.5l-1,-0.2l0,-0.7l2,0l0.1,0.8c0.2,-0.3 0.5,-0.5 0.8,-0.7s0.7,-0.2 1.1,-0.2s0.8,0.1 1.1,0.3s0.5,0.5 0.7,0.9c0.2,-0.4 0.5,-0.6 0.8,-0.9s0.7,-0.3 1.1,-0.3c0.6,0 1.2,0.2 1.5,0.7s0.6,1.1 0.6,2l0,2.9l1,0.2l0,0.7l-3.1,0l0,-0.7l1,-0.2l0,-2.9c0,-0.6 -0.1,-1.1 -0.3,-1.3s-0.5,-0.4 -1,-0.4c-0.4,0 -0.7,0.1 -1,0.4s-0.4,0.6 -0.4,1.1l0,3.1l1,0.2l0,0.7l-3.1,0l0,-0.7l1,-0.2l0,-2.9c0,-0.6 -0.1,-1 -0.3,-1.3s-0.5,-0.4 -1,-0.4c-0.4,0 -0.6,0.1 -0.9,0.2s-0.4,0.3 -0.5,0.6l0,3.8l1,0.2l0,0.7l-3.1,0l0,-0.8l-0.1,0z" id="svg_121"/>
|
||||
<path class="st42" d="m418.8,185.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" id="svg_122"/>
|
||||
<path class="st42" d="m422.2,184.7l1,-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.1,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.1,0l0,-0.6l-0.2,0z" id="svg_123"/>
|
||||
<path class="st42" d="m432.1,177.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" id="svg_124"/>
|
||||
</g>
|
||||
<line class="st62" x1="360" y1="181.7" x2="181.5" y2="181.7" id="svg_125"/>
|
||||
<line class="st62" x1="360" y1="229" x2="159.4" y2="229" id="svg_126"/>
|
||||
<line class="st62" x1="360" y1="101.5" x2="242.8" y2="101.5" id="svg_127"/>
|
||||
<g id="svg_128">
|
||||
<path class="st42" d="m368.5,126.3c0.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.6,0.7 1.3,0.7z" id="svg_129"/>
|
||||
<path class="st42" d="m372.1,123.8c0,-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" id="svg_130"/>
|
||||
<path class="st42" d="m378.6,126.3l1,-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.1,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.1,0l0,-0.6l-0.2,0z" id="svg_131"/>
|
||||
<path class="st42" d="m388.6,119.2l0,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" id="svg_132"/>
|
||||
<path class="st42" d="m395.1,127c0,-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" id="svg_133"/>
|
||||
<path class="st42" d="m397.5,126.3l1,-0.2l0,-4.5l-1,-0.2l0,-0.7l2.1,0l0,5.4l1,0.2l0,0.7l-3.1,0l0,-0.7zm2.1,-7.2l-1.2,0l0,-1.2l1.2,0l0,1.2z" id="svg_134"/>
|
||||
<path class="st42" d="m401.3,126.3l1,-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.1,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.1,0l0,-0.6l-0.2,0z" id="svg_135"/>
|
||||
<path class="st42" d="m412,127.2c-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.7c-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" id="svg_136"/>
|
||||
<path class="st42" d="m415.6,121.4l0,-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" id="svg_137"/>
|
||||
<path class="st42" d="m420.6,126.3l1,-0.2l0,-4.5l-1,-0.2l0,-0.7l2.1,0l0,5.4l1,0.2l0,0.7l-3.1,0l0,-0.7zm2.1,-7.2l-1.2,0l0,-1.2l1.2,0l0,1.2z" id="svg_138"/>
|
||||
<path class="st42" d="m426,126.1l2.6,0l0.1,-1l1,0l0,1.9l-5,0l0,-0.8l3.4,-4.6l-2.3,0l-0.1,1l-1,0l0,-1.9l4.8,0l0,0.8l-3.5,4.6z" id="svg_139"/>
|
||||
<path class="st42" d="m433.7,127.2c-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.7c-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" id="svg_140"/>
|
||||
<path class="st42" d="m441.5,126.3c-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.2c0,-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.7zm-3.1,-2.2c0,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" id="svg_141"/>
|
||||
<path class="st42" d="m451.5,127c0,-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.8,-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.3,0.3 0.7,0.3z" id="svg_142"/>
|
||||
<path class="st42" d="m453.9,128.7l1,-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.7c0,-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" id="svg_143"/>
|
||||
<path class="st42" d="m461.1,128.7l1,-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.7c0,-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" id="svg_144"/>
|
||||
</g>
|
||||
<line class="st62" x1="360" y1="123.7" x2="150.2" y2="123.7" id="svg_145"/>
|
||||
<g id="svg_146">
|
||||
<path class="st42" d="m120.9,356.9l1,-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.9l-1.1,0l0,2.7l1,0.2l0,1.2l-4,0l0,-1.2z" id="svg_147"/>
|
||||
<path class="st42" d="m135.6,357.1c-0.2,0.3 -0.5,0.6 -0.9,0.8s-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.1s0.4,0.3 0.8,0.3c0.3,0 0.6,0 0.8,-0.1s0.4,-0.2 0.5,-0.4l0,-3.9l-0.8,-0.2l0,-1.2l0.8,0l1.9,0l0,5.8l0.9,0.2l0,1.2l-2.6,0l0,-0.8z" id="svg_148"/>
|
||||
<path class="st42" d="m146,354.6c0,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.3s-0.6,-0.4 -0.8,-0.8l-0.1,0.9l-1.7,0l0,-9l-1,-0.2l0,-1.2l3,0l0,3.9c0.2,-0.3 0.5,-0.5 0.7,-0.7s0.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.2zm-1.9,-0.1c0,-0.7 -0.1,-1.3 -0.3,-1.7s-0.6,-0.6 -1.1,-0.6c-0.3,0 -0.6,0.1 -0.8,0.2s-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.5c0.2,-0.4 0.3,-0.9 0.3,-1.5l0,-0.1l0.1,0z" id="svg_149"/>
|
||||
<path class="st42" d="m150.3,358.2c-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.1s0.6,-0.2 0.9,-0.4l0.5,1.2c-0.3,0.2 -0.7,0.4 -1.2,0.6s-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,-1c-0.3,-0.2 -0.6,-0.3 -0.9,-0.3z" id="svg_150"/>
|
||||
<path class="st42" d="m154.3,356.9l0.9,-0.2l0,-4.5l-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.2z" id="svg_151"/>
|
||||
<path class="st42" d="m159.7,356.9l0.9,-0.2l0,-4.5l-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.7c0.4,0.5 0.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.1l0.1,0z" id="svg_152"/>
|
||||
<path class="st42" d="m171.9,358.2c-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.1s0.6,-0.2 0.9,-0.4l0.5,1.2c-0.3,0.2 -0.7,0.4 -1.2,0.6s-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,-1c-0.2,-0.2 -0.5,-0.3 -0.9,-0.3z" id="svg_153"/>
|
||||
<path class="st42" d="m178.5,349.1l0,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" id="svg_154"/>
|
||||
<path class="st42" d="m184.2,358.2c-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.1s0.6,-0.2 0.9,-0.4l0.5,1.2c-0.3,0.2 -0.7,0.4 -1.2,0.6s-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,-1c-0.2,-0.2 -0.5,-0.3 -0.9,-0.3z" id="svg_155"/>
|
||||
<path class="st42" d="m193.69375,353.3l-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.2c-0.2,0.2 -0.3,0.3 -0.3,0.6c0,0.2 0.1,0.4 0.3,0.5s0.6,0.3 1.1,0.4c0.9,0.2 1.5,0.4 2,0.8s0.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.2c0.2,0 0.4,0.1 0.6,0.1c0.4,0 0.7,-0.1 0.9,-0.2s0.3,-0.3 0.3,-0.6c0,-0.2 -0.1,-0.4 -0.3,-0.6s-0.6,-0.3 -1.1,-0.4c-0.8,-0.2 -1.5,-0.4 -1.9,-0.8s-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.2s0.9,0.3 1.2,0.6l-0.2,2z" id="svg_157" fill="black"/>
|
||||
<path class="st42" d="m211.9,351.6l-1.4,0l-0.2,-1.3c-0.2,-0.2 -0.4,-0.3 -0.7,-0.5s-0.6,-0.2 -1,-0.2c-0.8,0 -1.5,0.3 -1.9,0.9c-0.5,0.6 -0.7,1.4 -0.7,2.4l0,0.3c0,1 0.2,1.8 0.7,2.4c0.5,0.6 1.1,0.9 1.9,0.9c0.4,0 0.7,-0.1 1,-0.2c0.3,-0.1 0.6,-0.3 0.7,-0.5l0.2,-1.3l1.4,0l0,1.9c-0.4,0.5 -0.9,0.8 -1.5,1.1c-0.6,0.3 -1.3,0.4 -2,0.4c-1.3,0 -2.4,-0.4 -3.2,-1.3s-1.2,-2.1 -1.2,-3.5l0,-0.1c0,-1.4 0.4,-2.6 1.2,-3.5c0.8,-0.9 1.9,-1.4 3.2,-1.4c0.7,0 1.4,0.1 2,0.4c0.6,0.3 1.1,0.6 1.5,1.1l0,2z" id="svg_158"/>
|
||||
<path class="st42" d="m212.6,348.8l0,-1.2l3,0l0,9l0.9,0.2l0,1.2l-3.8,0l0,-1.2l0.9,-0.2l0,-7.6l-1,-0.2z" id="svg_159"/>
|
||||
<path class="st42" d="m222.2,357.1c-0.2,0.3 -0.5,0.6 -0.9,0.8s-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.7,-0.2l0,-1.2l0.8,0l1.9,0l0,4.3c0,0.5 0.1,0.9 0.3,1.1s0.4,0.3 0.8,0.3c0.3,0 0.6,0 0.8,-0.1s0.4,-0.2 0.5,-0.4l0,-3.9l-0.8,-0.2l0,-1.2l0.8,0l1.9,0l0,5.8l0.9,0.2l0,1.2l-2.6,0l-0.1,-0.8z" id="svg_160"/>
|
||||
<path class="st42" d="m231.5,353.3l-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.2c-0.2,0.2 -0.3,0.3 -0.3,0.6c0,0.2 0.1,0.4 0.3,0.5s0.6,0.3 1.1,0.4c0.9,0.2 1.5,0.4 2,0.8s0.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.2c0.2,0 0.4,0.1 0.6,0.1c0.4,0 0.7,-0.1 0.9,-0.2s0.3,-0.3 0.3,-0.6c0,-0.2 -0.1,-0.4 -0.3,-0.6s-0.6,-0.3 -1.1,-0.4c-0.8,-0.2 -1.5,-0.4 -1.9,-0.8s-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.2s0.9,0.3 1.2,0.6l-0.2,2z" id="svg_161"/>
|
||||
<path class="st42" d="m235.5,349.1l0,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" id="svg_162"/>
|
||||
<path class="st42" d="m241.2,358.2c-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.1s0.6,-0.2 0.9,-0.4l0.5,1.2c-0.3,0.2 -0.7,0.4 -1.2,0.6s-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,-1c-0.2,-0.2 -0.5,-0.3 -0.9,-0.3z" id="svg_163"/>
|
||||
<path class="st42" d="m245.1,356.9l0.9,-0.2l0,-4.5l-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.2z" id="svg_164"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Layer_14"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 32 KiB |
@@ -148,7 +148,7 @@ kubectl apply -f ./content/en/examples/application/guestbook/frontend-deployment
|
||||
|
||||
### Creating the Frontend Service
|
||||
|
||||
The `mongo` Services you applied is only accessible within the Kubernetes cluster because the default type for a Service is [ClusterIP](/docs/concepts/services-networking/service/#publishing-services---service-types). `ClusterIP` provides a single IP address for the set of Pods the Service is pointing to. This IP address is accessible only within the cluster.
|
||||
The `mongo` Services you applied is only accessible within the Kubernetes cluster because the default type for a Service is [ClusterIP](/docs/concepts/services-networking/service/#publishing-services-service-types). `ClusterIP` provides a single IP address for the set of Pods the Service is pointing to. This IP address is accessible only within the cluster.
|
||||
|
||||
If you want guests to be able to access your guestbook, you must configure the frontend Service to be externally visible, so a client can request the Service from outside the Kubernetes cluster. However a Kubernetes user you can use `kubectl port-forward` to access the service even though it uses a `ClusterIP`.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user