Merge branch 'staging' into levlaz-windows-rewrite

This commit is contained in:
Lev Lazinskiy
2019-05-29 23:58:24 -04:00
committed by GitHub
57 changed files with 2405 additions and 267 deletions
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
+16 -2
View File
@@ -12,7 +12,7 @@
right: 0;
bottom: 0;
left: 0;
z-index: 1000;
z-index: 100001;
display: flex;
visibility: hidden;
flex-direction: column;
@@ -54,11 +54,25 @@
border: none;
background-color: transparent;
color: #f0f0f0;
font-size: 6rem;
font-size: 5rem;
font-family: monospace;
line-height: 1;
cursor: pointer;
transition: color .3s ease;
@media (max-width: 540px) {
margin-top: 0;
margin-left: 0;
.tingle-modal__closeIcon {
margin-right: .25rem;
font-size: 2rem;
}
.tingle-modal__closeLabel {
font-size: 14px;
font-weight: bold;
}
}
}
.tingle-modal__closeLabel {
+190 -52
View File
@@ -1,69 +1,207 @@
---
title: "Documentation | Rancher Labs"
pageHeader: "Rancher Docs"
description: "Rancher is open source software that combines everything an organization needs to adopt and run containers in production. Built on Kubernetes, Rancher makes it easy for DevOps teams to test, deploy and manage their applications. Operations teams use Rancher to deploy, manage and secure every Kubernetes deployment regardless of where it is running."
layout: blank
title: "Documentation | Rancher Labs"
description: "Rancher is open source software that combines everything an organization needs to adopt and run containers in production. Built on Kubernetes, Rancher makes it easy for DevOps teams to test, deploy and manage their applications. Operations teams use Rancher to deploy, manage and secure every Kubernetes deployment regardless of where it is running."
layout: "no-hero"
ctaBanner: true
ctaBannerTheme: "line"
---
<section class="wrapper p-v-lg">
<div class="row center-xs">
<div class="cards col-md-9">
<div class="cards-item col-md-6">
<div class="card">
<div class="card-content">
<div class="card-text">
<h3 class="m-t-0">Rancher 2.x</h3>
<p>Rancher manages all of your Kubernetes clusters everywhere, unifies them under centralized RBAC, monitors them and lets you easily deploy and manage workloads through an intuitive user interface.</p>
</div>
<div class="border-top p-t-xs m-t-sm">
<p>Read about how to <a href="{{< baseurl >}}/rancher/v2.x/en/v1.6-migration/">migrate from Rancher v1.6 Cattle to v2.x</a></p>
<a href="{{< baseurl >}}/rancher/v2.x/en/" class="btn bg-link">Read the Docs</a>
</div>
<section class="docs-screen1">
<div class="grid-container">
<div class="row max-sized">
<div class="
col-xl-7
col-lg-7
col-md-8
col-sm-10
col-xs-12
col-12
texts-container">
<div class="texts-wrap">
<h1 class="title-label">Rancher docs</h1>
<h3 class="description-label">Rancher is open source software that combines everything an organization needs to adopt and run containers in production. Built on Kubernetes, Rancher makes it easy for DevOps teams to test, deploy and manage their applications. </h3>
</div>
</div>
</div>
</div>
<div class="cards-item col-md-6">
<div class="card">
<div class="card-content">
<div class="card-text">
<h3 class="m-t-0">Rancher 1.6</h3>
<p>If you haven't yet migrated to Rancher 2.x, you can still find documentation for 1.6 here. This is only for legacy users of the 1.6 product.</p>
</div>
<div class="border-top p-t-xs m-t-sm">
<a href="https://rancher.com/docs/rancher/v1.6/en/" target="_blank" class="btn bg-link">Read the Docs</a>
</div>
<div class="row">
<div class="col-12 lower-container">
<div class="decoration ground">
<img class="ground-lower" src="/imgs/docs/screen1-background-ground-lower.svg">
<img class="ground-upper" src="/imgs/docs/screen1-background-ground-upper.svg">
</div>
</div>
</div>
</div>
</section>
<section class="docs-note-item floating">
<div class="grid-container contents-container">
<div class="row max-sized set-lines contents-wrap">
<div class="decoration floating">
<img class="document" src="/imgs/docs/icon-document-for-note.svg">
</div>
<div class="cards-item col-md-6">
<div class="card">
<div class="card-content">
<div class="card-text">
<h3 class="m-t-0">RancherOS</h3>
<p>RancherOS is the lightest, easiest way to run Docker in production. Engineered from the ground up for security and speed, it runs all system services and user workloads within Docker containers.</p>
</div>
<div class="border-top p-t-xs m-t-sm">
<a href="{{< baseurl >}}/os/v1.x/en/" class="btn bg-link">Read the Docs</a>
</div>
</div>
<div class="
col-xl-8
col-lg-8
col-md-8
col-sm-7
col-xs-7
hide-sm-down
"></div>
<div class="
col-xl-4 offset-xl-0
col-lg-4 offset-lg-0
col-md-4 offset-md-0
col-sm-10 offset-sm-1
col-xs-10 offset-xs-1
col-12 offset-0
texts-container background-white background-white-side-right">
<div class="icon-container">
<img class="icon" src="/imgs/docs/icon-document.svg">
</div>
<div class="texts-wrap">
<div class="label">Featured resource</div>
<p class="description-label">Read about how to migrate from Rancher v1.6 Cattle to v2.x</p>
</div>
</div>
<div class="cards-item col-md-6">
<div class="card">
<div class="card-content">
<div class="card-text">
<h3 class="m-t-0">RKE</h3>
<p>Rancher Kubernetes Engine (RKE) is an extremely simple, lightning fast Kubernetes installer that works everywhere.</p>
</div>
<div class="border-top p-t-xs m-t-sm">
<a href="{{< baseurl >}}/rke/latest/en" class="btn bg-link">Read the Docs</a>
</div>
</div>
<div class="buttons-container">
<a href="{{< baseurl >}}/rancher/v2.x/en/v1.6-migration/">
<button class="button text">
<span>Read More</span>
</button>
</a>
</div>
</div>
</div>
</div>
</section>
<section class="docs-screen2">
<div class="grid-container">
<div class="row max-sized set-lines set-ground">
<div class="col-4"></div>
<div class="col-4"></div>
<div class="col-4"></div>
</div>
<div class="row max-sized cards-container">
<div class="col-12 cards-wrap">
<div class="row card-items-wrap">
<div class="
col-xl-6
col-lg-6
col-md-6
col-sm-12
col-xs-12
col-12
card-item">
<div class="card-wrap">
<h3 class="title-label">
<span class="background">2.x</span>
Rancher 2.x
</h3>
<hr/>
<p class="description-label">Rancher manages all of your Kubernetes clusters everywhere, unifies them under centralized RBAC, monitors them and lets you easily deploy and manage workloads through an intuitive user interface.</p>
<div class="buttons-container">
<a href="{{< baseurl >}}/rancher/v2.x/en/">
<button class="button text">
<span>Read the docs</span>
</button>
</a>
</div>
</div>
</div>
<div class="
col-xl-6
col-lg-6
col-md-6
col-sm-12
col-xs-12
col-12
card-item">
<div class="card-wrap">
<h3 class="title-label">
<span class="background">1.6</span>
Rancher 1.6
</h3>
<hr/>
<p class="description-label">If you haven't yet migrated to Rancher 2.x, you can still find documentation for 1.6 here. This is only for legacy users of the 1.6 product.</p>
<div class="buttons-container">
<a href="https://rancher.com/docs/rancher/v1.6/en/">
<button class="button text">
<span>Read the docs</span>
</button>
</a>
</div>
</div>
</div>
<div class="
col-xl-6
col-lg-6
col-md-6
col-sm-12
col-xs-12
col-12
card-item">
<div class="card-wrap">
<h3 class="title-label">
<span class="background">OS</span>
RancherOS
</h3>
<hr/>
<p class="description-label">RancherOS is the lightest, easiest way to run Docker in production. Engineered from the ground up for security and speed, it runs all system services and user workloads within Docker containers.</p>
<div class="buttons-container">
<a href="{{< baseurl >}}/os/v1.x/en/">
<button class="button text">
<span>Read the docs</span>
</button>
</a>
</div>
</div>
</div>
<div class="
col-xl-6
col-lg-6
col-md-6
col-sm-12
col-xs-12
col-12
card-item">
<div class="card-wrap">
<h3 class="title-label">
<span class="background">RKE</span>
Rancher Kubernetes Engine
</h3>
<hr/>
<p class="description-label">Rancher Kubernetes Engine (RKE) is an extremely simple, lightning fast Kubernetes installer that works everywhere.</p>
<div class="buttons-container">
<a href="{{< baseurl >}}/rke/v0.1.x/en/">
<button class="button text">
<span>Read the docs</span>
</button>
</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
@@ -15,7 +15,7 @@ rancher:
auth: dXNlcm5hbWU6cGFzc3dvcmQ=
```
The `auth` key is generated by base64 encoding a string of the form `username:password`. The `docker login` command can be be used to generate an `auth` key. After running the command and authenticating successfully, the key can be found in the `$HOME/.docker/config.json` file.
The `auth` key is generated by base64 encoding a string of the form `username:password`. The `docker login` command can be used to generate an `auth` key. After running the command and authenticating successfully, the key can be found in the `$HOME/.docker/config.json` file.
```json
{
@@ -144,7 +144,7 @@ $ ldapsearch -x -D "acme\jdoe" -w "secret" -p 389 \
-h ad.acme.com -b "dc=acme,dc=com" -s sub "sAMAccountName=jdoe"
```
This command performs an LDAP search with the search base set to the domain root (`-b "dc=acme,dc=com"`) and a filter targeting the the user account (`sAMAccountNam=jdoe`), returning the attributes for said user:
This command performs an LDAP search with the search base set to the domain root (`-b "dc=acme,dc=com"`) and a filter targeting the user account (`sAMAccountNam=jdoe`), returning the attributes for said user:
![LDAP User]({{< baseurl >}}/img/rancher/ldapsearch-user.png)
@@ -11,7 +11,7 @@ After you configure external authentication, the users that display on the **Use
- If you are logged in as a local user, only local users display.
- If you are logged in an an external user, both external and local users display.
- If you are logged in an external user, both external and local users display.
## Users and Roles
@@ -3,7 +3,7 @@ title: Creating Backups—High Availability Installs
weight: 50
aliases:
- /rancher/v2.x/en/installation/after-installation/ha-backup-and-restoration/
- /rancher/v2.x/en/installation/backups-and-restoration/ha-backup-and-restoration/
- /rancher/v2.x/en/installation/backups-and-restoration/ha-backup-and-restoration/
---
This section describes how to create backups of your high-availability Rancher install.
@@ -45,36 +45,51 @@ To take recurring snapshots, enable the `etcd-snapshot` service, which is a serv
1. Open `rancher-cluster.yml` with your favorite text editor.
2. Add the following code block to the bottom of the file:
2. Edit the code for the `etcd` service to enable recurring snapshots. As of RKE v0.2.0, snapshots can be saved in a S3 compatible backend.
```
services:
etcd:
snapshot: true # enables recurring etcd snapshots
creation: 6h0s # time increment between snapshots
retention: 24h # time increment before snapshot purge
```
_Using RKE v0.2.0+_
3. Edit the code according to your requirements.
```
services:
etcd:
backup_config:
enabled: true # enables recurring etcd snapshots
interval_hours: 6 # time increment between snapshots
retention: 60 # time in days before snapshot purge
# Optional S3
s3_backup_config:
access_key: "myaccesskey"
secret_key: "myaccesssecret"
bucket_name: "my-backup-bucket"
endpoint: "s3.eu-west-1.amazonaws.com"
region: "eu-west-1"
```
_Using RKE v0.1.x_
```
services:
etcd:
snapshot: true # enables recurring etcd snapshots
creation: 6h0s # time increment between snapshots
retention: 24h # time increment before snapshot purge
```
4. Save and close `rancher-cluster.yml`.
5. Open **Terminal** and change directory to the location of the RKE binary. Your `rancher-cluster.yml` file must reside in the same directory.
6. Run the following command:
```
rke up --config rancher-cluster.yml
```
**Result:** RKE is configured to take recurring snapshots of `etcd` on all nodes running the `etcd` role. Snapshots are saved to the following directory: `/opt/rke/etcd-snapshots/`.
**Result:** RKE is configured to take recurring snapshots of `etcd` on all nodes running the `etcd` role. Snapshots are saved locally to the following directory: `/opt/rke/etcd-snapshots/`. If configured, the snapshots are also uploaded to your S3 compatible backend.
#### Option B: One-Time Snapshots
When you're about to upgrade Rancher or restore it to a previous snapshot, you should snapshot your live image so that you have a backup of `etcd` in its last known state.
**To Take a One-Time Snapshot:**
**To Take a One-Time Local Snapshot:**
1. Open **Terminal** and change directory to the location of the RKE binary. Your `rancher-cluster.yml` file must reside in the same directory.
@@ -86,7 +101,25 @@ When you're about to upgrade Rancher or restore it to a previous snapshot, you s
**Result:** RKE takes a snapshot of `etcd` running on each `etcd` node. The file is saved to `/opt/rke/etcd-snapshots`.
### 2. Backup Snapshots to a Safe Location
**To Take a One-Time S3 Snapshot:**
_Available as of RKE v0.2.0_
1. Open **Terminal** and change directory to the location of the RKE binary. Your `rancher-cluster.yml` file must reside in the same directory.
2. Enter the following command. Replace `<SNAPSHOT.db>` with any name that you want to use for the snapshot (e.g. `upgrade.db`).
```shell
rke etcd snapshot-save --config rancher-cluster.yml --name snapshot-name \
--s3 --access-key S3_ACCESS_KEY --secret-key S3_SECRET_KEY \
--bucket-name s3-bucket-name --s3-endpoint s3.amazonaws.com
```
**Result:** RKE takes a snapshot of `etcd` running on each `etcd` node. The file is saved to `/opt/rke/etcd-snapshots`. It is also uploaded to the S3 compatible backend.
### 2. Backup Local Snapshots to a Safe Location
> **Note:** If you are using RKE v0.2.0, you can enable saving the backups to a S3 compatible backend directly and skip this step.
After taking the `etcd` snapshots, save them to a safe location so that they're unaffected if your cluster experiences a disaster scenario. This location should be persistent.
@@ -7,19 +7,19 @@ aliases:
This procedure describes how to use RKE to restore a snapshot of the Rancher Kubernetes cluster. The cluster snapshot will include Kubernetes configuration and the Rancher database and state.
Additionally, the `pki.bundle.tar.gz` file usage is no longer required as v0.2.0 has changed how the [Kubernetes cluster state is stored]({{< baseurl >}}/rke/latest/en/installation/#kubernetes-cluster-state).
## Restore Outline
<!-- TOC -->
- [1. Preparation](#1-preparation)
- [2. Place Snapshot and PKI Bundle](#2-place-snapshot-and-pki-bundle)
- [2. Place Snapshot](#2-place-snapshot)
- [3. Configure RKE](#3-configure-rke)
- [4. Restore Database](#4-restore-database)
- [5. Bring Up the Cluster](#5-bring-up-the-cluster)
<!-- /TOC -->
<br/>
### 1. Preparation
@@ -29,11 +29,22 @@ Prepare by creating 3 new nodes to be the target for the restored Rancher instan
We recommend that you start with fresh nodes and a clean state. Alternatively you can clear Kubernetes and Rancher configurations from the existing nodes. This will destroy the data on these nodes. See [Node Cleanup]({{< baseurl >}}/rancher/v2.x/en/faq/cleaning-cluster-nodes/) for the procedure.
> **IMPORTANT:** Before starting the restore make sure all the kubernetes services on the old cluster nodes are stopped. We recommend powering off the nodes to be sure.
> **IMPORTANT:** Before starting the restore make sure all the Kubernetes services on the old cluster nodes are stopped. We recommend powering off the nodes to be sure.
### 2. Place Snapshot and PKI Bundle
### 2. Place Snapshot
The snapshot used to restore your etcd cluster is handled differently based on your version of RKE.
Pick a one of the clean nodes. That node will be the "target node" for the initial restore. Place the snapshot and PKI certificate bundle files in the `/opt/rke/etcd-snapshots` directory on the "target node".
#### RKE v0.2.0+
As of RKE v0.2.0, snapshots could be saved in an S3 compatible backend. To restore your cluster from the snapshot stored in S3 compatible backend, you can skip this step and retrieve the snapshot in [Step 4: Restore Database](#4-restore-database). Otherwise, you will need to place the snapshot directly on the nodes.
Pick one of the clean nodes. That node will be the "target node" for the initial restore. Place your snapshot in `/opt/rke/etcd-snapshots` on the target node.
#### RKE v0.1.x
When you take a snapshot, RKE saves a backup of the certificates, i.e. a file named `pki.bundle.tar.gz`, in the same location. The snapshot and PKI bundle file are required for the restore process, and they are expected to be in the same location.
Pick one of the clean nodes. That node will be the "target node" for the initial restore. Place the snapshot and PKI certificate bundle files in the `/opt/rke/etcd-snapshots` directory on the target node.
* Snapshot - `<snapshot>.db`
* PKI Bundle - `pki.bundle.tar.gz`
@@ -81,15 +92,54 @@ nodes:
Use RKE with the new `rancher-cluster-restore.yml` configuration and restore the database to the single "target node".
RKE will create an `etcd` container with the restored database on the target node. This container will not complete the `etcd` initialization and stay in a running state until the cluster brought up in the next step.
#### Restoring from a Local Snapshot
When restoring etcd from a local snapshot, the snapshot is assumed to be located on the target node in the directory `/opt/rke/etcd-snapshots`.
> **Note:** For RKE v0.1.x, the `pki.bundle.tar.gz` file is also expected to be in the same location.
```
rke etcd snapshot-restore --name <snapshot>.db --config ./rancher-cluster-restore.yml
```
> **Note:** RKE will create an `etcd` container with the restored database on the "target node". This container will not complete the `etcd` initialization and stay in a running state until the cluster brought up in the next step.
#### Restoring from a Snapshot in S3
_Available as of RKE v0.2.0_
When restoring etcd from a snapshot located in an S3 compatible backend, the command needs the S3 information in order to connect to the S3 backend and retrieve the snapshot.
> **Note:** Ensure your `cluster.rkestate` is present before starting the restore, as this contains your certificate data for the cluster.
```
$ rke etcd snapshot-restore --config cluster.yml --name snapshot-name \
--s3 --access-key S3_ACCESS_KEY --secret-key S3_SECRET_KEY \
--bucket-name s3-bucket-name --s3-endpoint s3.amazonaws.com
```
#### Options for `rke etcd snapshot-restore`
S3 specific options are only available for RKE v0.2.0+.
| Option | Description | S3 Specific |
| --- | --- | ---|
| `--name` value | Specify snapshot name | |
| `--config` value | Specify an alternate cluster YAML file (default: "cluster.yml") [$RKE_CONFIG] | |
| `--s3` | Enabled backup to s3 |* |
| `--s3-endpoint` value | Specify s3 endpoint url (default: "s3.amazonaws.com") | * |
| `--access-key` value | Specify s3 accessKey | *|
| `--secret-key` value | Specify s3 secretKey | *|
| `--bucket-name` value | Specify s3 bucket name | *|
| `--region` value | Specify the s3 bucket location (optional) | *|
| `--ssh-agent-auth` | [Use SSH Agent Auth defined by SSH_AUTH_SOCK]({{< baseurl >}}/rke/latest/en/config-options/#ssh-agent) | |
| `--ignore-docker-version` | [Disable Docker version check]({{< baseurl >}}/rke/latest/en/config-options/#supported-docker-versions) |
### 5. Bring Up the Cluster
Use RKE and bring up the cluster on the single "target node".
Use RKE and bring up the cluster on the single "target node."
> **Note:** For users running RKE v0.2.0+, ensure your `cluster.rkestate` is present before starting the restore, as this contains your certificate data for the cluster.
```
rke up --config ./rancher-cluster-restore.yml
@@ -179,6 +229,6 @@ rke up --config ./rancher-cluster-restore.yml
#### Finishing Up
Rancher should now be running and available to manage your Kubernetes clusters. Swap your Rancher DNS or Load Balancer endpoints to target the new cluster. Once this is done the agents on your managed clusters should automatically reconnect. This may take 10-15 minutes due to reconnect back off timeouts.
Rancher should now be running and available to manage your Kubernetes clusters. Swap your Rancher DNS or Load Balancer endpoints to target the new cluster. Once this is done the agents on your managed clusters should automatically reconnect. This may take 10-15 minutes due to reconnect back off timeouts.
> **IMPORTANT:** Remember to save your new RKE config (`rancher-cluster-restore.yml`) and `kubectl` credentials (`kube_config_rancher-cluster-restore.yml`) files in a safe place for future maintenance.
@@ -35,7 +35,7 @@ Rancher supports two different backup targets:
#### Local Backup Target
By default, the `local` backup target is selected. The benefits of this option is that there is no external configuration. Snapshots are automatically saved locally to the etcd nodes in the [Rancher launched Kubernetes clusters]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/). All recurring snapshots are taken at configured intervals. The downside of using the `local` backup target is that if there is a total disaster and _all_ etcd nodes are lost, there is no ability to restore the cluster.
By default, the `local` backup target is selected. The benefits of this option is that there is no external configuration. Snapshots are automatically saved locally to the etcd nodes in the [Rancher launched Kubernetes clusters]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/) in `/opt/rke/etcd-snapshots`. All recurring snapshots are taken at configured intervals. The downside of using the `local` backup target is that if there is a total disaster and _all_ etcd nodes are lost, there is no ability to restore the cluster.
#### S3 Backup Target
@@ -10,8 +10,6 @@ After you launch a Kubernetes cluster in Rancher, you can manage individual node
To manage individual nodes, browse to the cluster that you want to manage and then select **Nodes** from the main menu. You can open the options menu for a node by clicking its **Ellipsis** icon (**...**).
![Node Options]({{< baseurl >}}/img/rancher/node-edit.png)
>**Note:** If you want to manage the _cluster_ and not individual nodes, see [Editing Clusters]({{< baseurl >}}/rancher/v2.x/en/k8s-in-rancher/editing-clusters).
The following table lists which node options are available for each [type of cluster]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/#cluster-creation-options) in Rancher. Click the links in the **Option** column for more detailed information about each feature.
@@ -45,11 +43,26 @@ _Draining_ is the process of first cordoning the node, and then evicting all its
You can drain nodes that are in either a `cordoned` or `active` state. When you drain a node, the node is cordoned, the nodes are evaluated for conditions they must meet to be drained, and then (if it meets the conditions) the node evicts its pods.
However, you can override the conditions draining when you initiate the drain (see [below](#below)). You're also given an opportunity to set a grace period and timeout value.
However, you can override the conditions draining when you initiate the drain. You're also given an opportunity to set a grace period and timeout value.
![Drain]({{< baseurl >}}/img/rancher/node-drain.png)
The node draining options are different based on your version of Rancher.
### Aggressive and Safe Draining Options for Rancher v2.2.x+
There are two drain modes: aggressive and safe.
- **Aggressive Mode**
In this mode, pods won't get rescheduled to a new node, even if they do not have a controller. Kubernetes expects you to have your own logic that handles the deletion of these pods.
Kubernetes also expects the implementation to decide what to do with pods using emptyDir. If a pod uses emptyDir to store local data, you might not be able to safely delete it, since the data in the emptyDir will be deleted once the pod is removed from the node. Choosing aggressive mode will delete these pods.
- **Safe Mode**
If a node has standalone pods or ephemeral data it will be cordoned but not drained.
### Aggressive and Safe Draining Options for Rancher Prior to v2.2.x
<a id="below"></a>
The following list describes each drain option:
- **Even if there are pods not managed by a ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet**
@@ -64,15 +77,18 @@ The following list describes each drain option:
If a pod uses emptyDir to store local data, you might not be able to safely delete it, since the data in the emptyDir will be deleted once the pod is removed from the node. Similar to the first option, Kubernetes expects the implementation to decide what to do with these pods. Choosing this option will delete these pods.
- **Grace Period**
The timeout given to each pod for cleaning things up, so they will have chance to exit gracefully. For example, when pods might need to finish any outstanding requests, roll back transactions or save state to some external storage. If negative, the default value specified in the pod will be used.
### Grace Period
- **Timeout**
The timeout given to each pod for cleaning things up, so they will have chance to exit gracefully. For example, when pods might need to finish any outstanding requests, roll back transactions or save state to some external storage. If negative, the default value specified in the pod will be used.
The amount of time drain should continue to wait before giving up.
### Timeout
>**Kubernetes Known Issue:** Currently, the [timeout setting](https://github.com/kubernetes/kubernetes/pull/64378) is not enforced while draining a node. This issue will be corrected as of Kubernetes 1.12.
The amount of time drain should continue to wait before giving up.
>**Kubernetes Known Issue:** Currently, the [timeout setting](https://github.com/kubernetes/kubernetes/pull/64378) is not enforced while draining a node. This issue will be corrected as of Kubernetes 1.12.
### Drained and Cordoned State
If there's any error related to user input, the node enters a `cordoned` state because the drain failed. You can either correct the input and attempt to drain the node again, or you can abort by uncordoning the node.
@@ -104,9 +120,6 @@ Use **Delete** to remove defective nodes from the cloud provider. When you the d
For nodes hosted by an infrastructure provider, you can scale the number of nodes in each node pool by using the scale controls. This option isn't available for other cluster types.
![Scaling Nodes]({{< baseurl >}}/img/rancher/iaas-scale-nodes.png)
## SSH into a Node Hosted by an Infrastructure Provider
For [nodes hosted by an infrastructure provider]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/node-pools/), you have the option of downloading its SSH key so that you can connect to it remotely from your desktop.
@@ -12,9 +12,10 @@ Create a service account using [Google Cloud Platform](https://console.cloud.goo
The service account requires the following roles:
- `project/viewer`
- `kubernetes-engine/admin`
- `service-account/user`
- **Compute Viewer:** `roles/compute.viewer`
- **Project Viewer:** `roles/viewer`
- **Kubernetes Engine Admin:** `roles/container.admin`
- **Service Account User:** `roles/iam.serviceAccountUser`
[Google Documentation: Creating and Enabling Service Accounts](https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances)
@@ -28,7 +28,7 @@ Use {{< product >}} to create a Kubernetes cluster in Azure.
{{< step_create-cloud-credential >}}
- **Placement** sets the geographical region where where your cluster is hosted and other location metadata.
- **Placement** sets the geographical region where your cluster is hosted and other location metadata.
- **Network** configures the networking used in your cluster.
@@ -64,7 +64,7 @@ If you are using a private registry with authentication for your Docker images,
_Available as of v2.2.0_
Authorized Cluster Endpoint can be used to directly access the Kubernetes API server, without requiring communication through Rancher. This is enabled by default, using the IP of the node with the `controlplane` role and the default Kubernetes self signed certificates. It is recommended to create an FQDN pointing to a load balancer which load balances across your nodes with the `controlplane` role. If you are using private CA signed certificates on the load balancer, you have to supply the CA certificate which will be included in the generated kubeconfig to validate the certificate chain. See the [Kubeconfig Files]({{< baseurl >}}/rancher/v2.x/en/k8s-in-rancher/kubeconfig/) for more information.
Authorized Cluster Endpoint can be used to directly access the Kubernetes API server, without requiring communication through Rancher. This is enabled by default, using the IP of the node with the `controlplane` role and the default Kubernetes self signed certificates. It is recommended to create an FQDN pointing to a load balancer which load balances across your nodes with the `controlplane` role. If you are using private CA signed certificates on the load balancer, you have to supply the CA certificate which will be included in the generated kubeconfig to validate the certificate chain. See the [Kubeconfig Files]({{< baseurl >}}/rancher/v2.x/en/k8s-in-rancher/kubeconfig/) and [API Keys]({{< baseurl >}}/v2.x/en/user-settings/api-keys/#creating-an-api-key) documentation for more information.
### Advanced Cluster Options
@@ -5,8 +5,8 @@ weight: 2240
>**Notes:**
>
>- Windows support is new and improved for Rancher v2.3!
>- Still using v2.1.x or v2.2.x? As of v2.1.10 and v2.2.3, the previous Windows feature has been removed. See the windows documentation for [previous versions]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/docs-for-2.1-and-2.2/).
>- Configuring Windows clusters is new and improved for Rancher v2.3.0!
>- Still using v2.1.x or v2.2.x? See the documentation for how to provision Windows clusters on [previous versions]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/docs-for-2.1-and-2.2/). As of v2.1.10 and v2.2.4, the ability to provision Windows clusters has been removed in the 2.1.x and 2.2.x lines.
_Available as of v2.3.0-alpha1_
@@ -50,7 +50,7 @@ To set up a custom cluster with support for Windows nodes and containers, you wi
- [4. Add Linux Worker Node](#4-add-linux-worker-node)
- [5. Add Windows Workers](#5-add-windows-workers)
- [6. Cloud-host VM Routes Configuration for Host Gateway Mode (Optional)](#6-cloud-hosted-vm-routes-configuration-for-host-gateway-mode)
- [7. Configuration for Azure Files (Optional)](#7-configuration-for-azure-files)
<!-- /TOC -->
## 1. Provision Hosts
@@ -209,4 +209,43 @@ Google GCE | For GCE, add a static route for each node: [Adding a Static Route](
Azure VM | For Azure, create a routing table: [Custom Routes: User-defined](https://docs.microsoft.com/en-us/azure/virtual-network/virtual-networks-udr-overview#user-defined).
` `
## 7. Configuration for Azure Files
If you are using Azure VMs for your nodes, you can use [Azure files](https://docs.microsoft.com/en-us/azure/aks/azure-files-dynamic-pv) as a [storage class]({{< baseurl >}}/rancher/v2.x/en/cluster-admin/volumes-and-storage/#adding-storage-classes) for the cluster.
In order to have the Azure platform create the required storage resources, follow these steps:
1. [Configure the Azure cloud provider.]({{< baseurl >}}rancher/v2.x/en/cluster-provisioning/rke-clusters/options/cloud-providers/#azure)
1. Configure `kubectl` to connect to your cluster.
1. Copy the `ClusterRole` and `ClusterRoleBinding` manifest for service account.
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: system:azure-cloud-provider
rules:
- apiGroups: ['']
resources: ['secrets']
verbs: ['get','create']
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: system:azure-cloud-provider
roleRef:
kind: ClusterRole
apiGroup: rbac.authorization.k8s.io
name: system:azure-cloud-provider
subjects:
- kind: ServiceAccount
name: persistent-volume-binder
namespace: kube-system
1. Create these in your cluster using one of the follow command.
```
# kubectl create -f <MANIFEST>
```
@@ -3,9 +3,9 @@ title: v2.1.x and v2.2.x Windows Documentation (Experimental)
weight: 9100
---
>**Note:** This section describes the Windows feature as implemented in Rancher v2.1.x and v2.2.x. If you are using Rancher v2.3 or later, where Windows have been significantly improved, please refer to the new documentation for [v2.3 or later]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/).
>**Note:** This section describes how to provision Windows clusters in Rancher v2.1.x and v2.2.x. If you are using Rancher v2.3.0 or later, please refer to the new documentation for [v2.3.0 or later]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/).
_Available from v2.1.0 to v2.1.9 and v2.2.0 to v2.2.2_
_Available from v2.1.0 to v2.1.9 and v2.2.0 to v2.2.3_
>**Important:**
>
@@ -107,8 +107,8 @@ By default, Rancher generates a CA and uses cert manger to issue the certificate
--name rancher \
--namespace cattle-system \
--set hostname=<RANCHER.YOURDOMAIN.COM> \
--set rancherImage=<REGISTRY.YOURDOMAIN.COM:PORT>/rancher/rancher
--set ingress.tls.source=secret \
--set rancherImage=<REGISTRY.YOURDOMAIN.COM:PORT>/rancher/rancher \
--set ingress.tls.source=secret
```
1. See [Adding TLS Secrets]({{< baseurl >}}/rancher/v2.x/en/installation/ha/helm-rancher/tls-secrets/) to publish the certificate files so Rancher and the ingress controller can use them.
@@ -198,7 +198,7 @@ If you are using a Certificate Signed By A Recognized Certificate Authority, you
## 8. Configure FQDN
There is one reference to `<FQDN>` in the RKE config file. Replace this reference with the FQDN you chose in in [3. Configure DNS](#3-configure-dns).
There is one reference to `<FQDN>` in the RKE config file. Replace this reference with the FQDN you chose in [3. Configure DNS](#3-configure-dns).
1. Open `rancher-cluster.yml`.
@@ -28,7 +28,7 @@ When using High Availability Installation, the environment variables need to be
* [High Availability Installation with External Load Balancer (TCP/Layer 4) RKE Config File Template]({{< baseurl >}}/rancher/v2.x/en/installation/ha-server-install/#5-download-rke-config-file-template)
* [High Availability Installation with External Load Balancer (HTTPS/Layer 7) RKE Config File Template]({{< baseurl >}}/rancher/v2.x/en/installation/ha-server-install-external-lb/#5-download-rke-config-file-template)
The environment variables should be defined in the `Deployment` inside the RKE Config File Template. You only have to add the the part starting with `env:` to (but not including) `ports:`. Make sure the indentation is identical to the preceding `name:`. Required values for `NO_PROXY` are:
The environment variables should be defined in the `Deployment` inside the RKE Config File Template. You only have to add the part starting with `env:` to (but not including) `ports:`. Make sure the indentation is identical to the preceding `name:`. Required values for `NO_PROXY` are:
* `localhost`
* `127.0.0.1`
@@ -97,7 +97,7 @@ For production environments, you also have the option of using [Let's Encrypt](h
>- Open port `TCP/80` on your Linux host. The Let's Encrypt http-01 challenge can come from any source IP address, so port `TCP/80` must be open to all IP addresses.
After you fulfill the prerequisites, you can install Rancher using a Let's Encrypt certificate by running the following command. Replace `<YOUR.DNS.NAME>` with your your domain.
After you fulfill the prerequisites, you can install Rancher using a Let's Encrypt certificate by running the following command. Replace `<YOUR.DNS.NAME>` with your domain.
docker run -d --restart=unless-stopped \
-p 80:80 -p 443:443 \
@@ -4,7 +4,7 @@ weight: 252
aliases:
- /rancher/v2.x/en/installation/single-node-install-external-lb/
---
For development and testing environments that have a special requirement to terminate TLS/SSL at a load balancer instead of your Rancher Server container, deploy Rancher and configure a load balancer to work with it it conjunction. This install procedure walks you through deployment of Rancher using a single container, and then provides a sample configuration for a layer 7 Nginx load balancer.
For development and testing environments that have a special requirement to terminate TLS/SSL at a load balancer instead of your Rancher Server container, deploy Rancher and configure a load balancer to work with it conjunction. This install procedure walks you through deployment of Rancher using a single container, and then provides a sample configuration for a layer 7 Nginx load balancer.
>**Want to skip the external load balancer?**
> See [Single Node Installation]({{< baseurl >}}/rancher/v2.x/en/installation/single-node) instead.
@@ -405,7 +405,7 @@ spec:
1. Test that pod autoscaling works as intended.<br/></br>
**To Test Autoscaling Using Resource Metrics:**
{{% accordion id="observe-upscale-2-pods-cpu" label="Upscale to 2 Pods: CPU Usage Up to Target" %}}
Use your load testing tool to to scale up to two pods based on CPU Usage.
Use your load testing tool to scale up to two pods based on CPU Usage.
1. View your HPA.
```
@@ -491,7 +491,7 @@ Use your load testing tool to upspace to 3 pods based on CPU usage with `horizon
```
{{% /accordion %}}
{{% accordion id="observe-downscale-1-pod" label="Downscale to 1 Pod: All Metrics Below Target" %}}
Use your load testing to to scale down to 1 pod when all metrics are below target for `horizontal-pod-autoscaler-downscale-delay` (5 minutes by default).
Use your load testing to scale down to 1 pod when all metrics are below target for `horizontal-pod-autoscaler-downscale-delay` (5 minutes by default).
1. Enter the following command.
```
@@ -794,7 +794,7 @@ To create HPA resources based on resource metrics such as CPU and memory use, yo
```
# kubectl -n kube-system logs metrics-server-6fbfb84cdd-t2fk9
```
Then review the log to confirm that that the `metrics-server` package is running.
Then review the log to confirm that the `metrics-server` package is running.
{{% accordion id="metrics-server-run-check" label="Metrics Server Log Output" %}}
I0723 08:09:56.193136 1 heapster.go:71] /metrics-server --source=kubernetes.summary_api:''
I0723 08:09:56.193574 1 heapster.go:72] Metrics Server version v0.2.1
@@ -816,7 +816,7 @@ To create HPA resources based on resource metrics such as CPU and memory use, yo
```
# kubectl get --raw /k8s/clusters/<CLUSTER_ID>/apis/metrics.k8s.io/v1beta1
```
If the the API is working correctly, you should receive output similar to the output below.
If the API is working correctly, you should receive output similar to the output below.
```
{"kind":"APIResourceList","apiVersion":"v1","groupVersion":"metrics.k8s.io/v1beta1","resources":[{"name":"nodes","singularName":"","namespaced":false,"kind":"NodeMetrics","verbs":["get","list"]},{"name":"pods","singularName":"","namespaced":true,"kind":"PodMetrics","verbs":["get","list"]}]}
```
@@ -825,7 +825,7 @@ To create HPA resources based on resource metrics such as CPU and memory use, yo
```
# kubectl get --raw /apis/metrics.k8s.io/v1beta1
```
If the the API is working correctly, you should receive output similar to the output below.
If the API is working correctly, you should receive output similar to the output below.
```
{"kind":"APIResourceList","apiVersion":"v1","groupVersion":"metrics.k8s.io/v1beta1","resources":[{"name":"nodes","singularName":"","namespaced":false,"kind":"NodeMetrics","verbs":["get","list"]},{"name":"pods","singularName":"","namespaced":true,"kind":"PodMetrics","verbs":["get","list"]}]}
```
@@ -28,7 +28,7 @@ Create a new namespace to isolate apps and resources in a project.
1. From the **Global** view, open the project where you want to create a namespace.
>**Tip:** As a best practice, we recommend creating namespaces from the project level. However, cluster owners and members can can create them from the cluster level as well.
>**Tip:** As a best practice, we recommend creating namespaces from the project level. However, cluster owners and members can create them from the cluster level as well.
1. From the main menu, select **Namespace**. The click **Add Namespace**.
@@ -31,7 +31,7 @@ The following steps will quickly deploy a Rancher Server with a single node clus
6. Run `terraform init`.
7. To initiate the creation of the environment, run `terraform apply`. Then wait for the the following output:
7. To initiate the creation of the environment, run `terraform apply`. Then wait for the following output:
```
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
@@ -115,4 +115,4 @@ When you run the command below, all the resources listed [above](#remove) will b
| ---------------------------------------------- | ------------
| `--kubeconfig <KUBECONFIG_PATH>, -c <KUBECONFIG_PATH>` | The cluster's kubeconfig file
| `--namespace <NAMESPACE>, -n cattle-system` | Rancher 2.x deployment namespace (`<NAMESPACE>`). If no namespace is defined, the options defaults to `cattle-system`.
| `--force` | Skips the the interactive removal confirmation and removes the Rancher deployment without prompt.
| `--force` | Skips the interactive removal confirmation and removes the Rancher deployment without prompt.
@@ -30,7 +30,7 @@ This section contains information to help you troubleshoot issues when using Ran
- [Rancher HA]({{< baseurl >}}/rancher/v2.x/en/troubleshooting/rancherha/)
If you experience issues issues with your [High Availability (HA) Install]({{< baseurl >}}/rancher/v2.x/en/installation/ha/)
If you experience issues with your [High Availability (HA) Install]({{< baseurl >}}/rancher/v2.x/en/installation/ha/)
- [Imported clusters]({{< baseurl >}}/rancher/v2.x/en/troubleshooting/imported-clusters/)
@@ -15,7 +15,7 @@ During upgrade, you'll enter a series of commands, filling placeholders with dat
docker run --volumes-from rancher-data -v $PWD:/backup alpine tar zcvf /backup/rancher-data-backup-<RANCHER_VERSION>-<DATE>.tar.gz /var/lib/rancher
```
In this command, `<RANCHER_VERSION>-<DATE>` is the the version number and date of creation for a backup of Rancher.
In this command, `<RANCHER_VERSION>-<DATE>` is the version number and date of creation for a backup of Rancher.
Cross reference the image and reference table below to learn how to obtain this placeholder data. Write down or copy this information before starting the [procedure below](#completing-the-upgrade).
@@ -25,9 +25,11 @@ API Keys are composed of four components:
2. Click **Add Key**.
3. **Optional:** Enter a description for the API key and select an expiration period. We recommend setting an expiration date.
3. **Optional:** Enter a description for the API key and select an expiration period or a scope. We recommend setting an expiration date.
The API key won't be valid after expiration. Shorter expiration periods are more secure.
A scope will limit the API key so that it will only work against the Kubernetes API of the specified cluster. If the cluster is configured with an Authroized Cluster Endpoint, you will be able to use a scoped token directly against the cluster's API without proxying through the Rancher server. See [Authorized Cluster Endpoints]({{< baseurl >}}/v2.x/en/cluster-provisioning/rke-clusters/options/#authorized-cluster-endpoint) for more information.
4. Click **Create**.
@@ -183,7 +183,7 @@ Rancher v1.6 included the ability to deploy [global services]({{< baseurl >}}/ra
In Rancher v2.x, you can schedule a pod to each node using a [Kubernetes DaemonSet](https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/), which is a specific type of workload <!-- link -->). A _DaemonSet_ functions exactly like a Rancher v1.6 global service. The Kubernetes scheduler deploys a pod on each node of the cluster, and as new nodes are added, the scheduler will start new pods on them provided they match the scheduling requirements of the workload. Additionally, in v2.x, you can also limit a DaemonSet to be deployed to nodes that have a specific label.
To create a daemonset while configuring a workload, choose **Run one pod on each node** from the the **Workload Type** options.
To create a daemonset while configuring a workload, choose **Run one pod on each node** from the **Workload Type** options.
### Scheduling Pods Using Resource Constraints
+1 -1
View File
@@ -80,7 +80,7 @@ INFO[0033] [worker] Successfully restarted Worker Plane..
### Rotating the CA and all service certificates
If the CA certificate needs to be rotated, you are required to rotate all the services certificates as they need to be signed with the newly rotated CA certificate. To include rotating the CA with the service certificates, add the `--rotate-ca` option. After the the CA and all the service certificates are rotated, these services will automatically be restarted to start using the new certificate.
If the CA certificate needs to be rotated, you are required to rotate all the services certificates as they need to be signed with the newly rotated CA certificate. To include rotating the CA with the service certificates, add the `--rotate-ca` option. After the CA and all the service certificates are rotated, these services will automatically be restarted to start using the new certificate.
Rotating the CA certificate will result in restarting other system pods, that will also use the new CA certificate. This includes:
@@ -18,7 +18,7 @@ RKE only adds additional add-ons when using `rke up` multiple times. RKE does **
As of v0.1.8, RKE will update an add-on if it is the same name.
Prior to v0.1.8, update any add-ons by by using `kubectl edit`.
Prior to v0.1.8, update any add-ons by using `kubectl edit`.
## Critical and Non-Critical Add-ons
@@ -18,7 +18,7 @@ RKE only adds additional add-ons when using `rke up` multiple times. RKE does **
As of v0.1.8, RKE will update an add-on if it is the same name.
Prior to v0.1.8, update any add-ons by by using `kubectl edit`.
Prior to v0.1.8, update any add-ons by using `kubectl edit`.
## In-line Add-ons
+11 -4
View File
@@ -158,14 +158,18 @@ $ rke etcd snapshot-restore --config cluster.yml --name mysnapshot
_Available as of v0.2.0_
> **Note:** Ensure your `cluster.rkestate` is present before starting the restore, as this contains your certificate data for the cluster
When restoring etcd from a snapshot located in S3, the command needs the S3 information in order to connect to the S3 backend and retrieve the snapshot.
```
```shell
$ rke etcd snapshot-restore --config cluster.yml --name snapshot-name \
--s3 --access-key S3_ACCESS_KEY --secret-key S3_SECRET_KEY \
--bucket-name s3-bucket-name --s3-endpoint s3.amazonaws.com
```
## Example
> **Note:** if you were restoring a cluster that had rancher installed the UI should start-up after a few minutes; you don't need to re-run helm.
### Example Scenario of restoring from a Local Snapshot
In this example, the Kubernetes cluster was deployed on two AWS nodes.
@@ -185,7 +189,7 @@ $ rke etcd snapshot-save --name snapshot.db --config cluster.yml
![etcd snapshot]({{< baseurl >}}/img/rke/rke-etcd-backup.png)
### Store the Snapshot Externally to S3
### Store the Snapshot Externally in S3
As of v0.2.0, this step is no longer required, as RKE can upload and download snapshots automatically from S3 by adding in [S3 options](#options-for-rke-etcd-snapshot-save) when running the `rke etcd snapshot-save` command.
@@ -253,7 +257,7 @@ nodes:
After the new node is added to the `cluster.yml`, run `rke etcd snapshot-restore` to launch `etcd` from the backup. The snapshot and `pki.bundle.tar.gz` file are expected to be saved at `/opt/rke/etcd-snapshots`.
As of v0.2.0, if you want to directly retrieve the snapshot from S3, add in the [S3 options](#options-for-rke-etcd-snapshot-restore).
> **Note:** As of v0.2.0, the file **pki.bundle.tar.gz** is no longer required for the restore process.
> **Note:** As of v0.2.0, the file **pki.bundle.tar.gz** is no longer required for the restore process as the certificates required to restore are preserved within the `cluster.rkestate`
```
$ rke etcd snapshot-restore --name snapshot.db --config cluster.yml
@@ -294,3 +298,6 @@ docker container inspect rke-bundle-cert
```
The important thing to note is the mounts of the container and location of the **pki.bundle.tar.gz**.
+1 -1
View File
@@ -99,7 +99,7 @@ rpm -q docker-ce
When using the upstream Docker packages, please follow [Manage Docker as a non-root user](https://docs.docker.com/install/linux/linux-postinstall/#manage-docker-as-a-non-root-user).
#### Using RHEL/CentOS packaged Docker
If you are using the Docker Docker package supplied by Red Hat / CentOS, the package name is `docker`. You can check the installed package by executing:
If you are using the Docker package supplied by Red Hat / CentOS, the package name is `docker`. You can check the installed package by executing:
```
rpm -q docker
+275 -83
View File
@@ -6,96 +6,288 @@
{{ end }}
{{ define "main" }}
<div class="wrapper">
<section class="docs-container">
<div class="grid-container">
<div class="row max-sized set-lines set-ground">
<div class="col-4"></div>
<div class="col-4"></div>
<div class="col-4"></div>
</div>
<div class="row m-t-sm">
<div class="head-blank"></div>
<aside class="col-md-3 col-xs-12 p-l-0">
<div class="row max-sized contents-container background-base-gray-side">
<div class="
col-xl-3
col-lg-4
col-md-4
col-sm-12
col-xs-12
col-12
side-menus">
<div class="search-container">
<input class="search input" placeholder="SEARCH" />
</div>
<!-- <div class="side-menus-wrap jquery-accordion-menu"> -->
{{ partial "docs-side-nav.html" . }}
</aside>
<!-- </div> -->
</div>
<div class="
col-xl-9
col-lg-8
col-md-8
col-sm-12
col-xs-12
col-12
texts-container">
<div class="docs-wrap">
{{ with .Params.Title }}
<h1 class="m-t-0">{{ . }}</h1>
<hr/>
{{end}}
{{ if .Params.ctaBanner }}
{{ with index .Site.Data.cta .Params.ctaBanner }}
<div class="docs-banner">
<h3 class="">{{ .header }}</h3>
<article class="{{ if ($.Scratch.Get "showSidebar") }}col-sm-6{{else}}col-md-9 p-l-lg {{end}}col-xs-12">
{{ with .Params.Title }}
<h1 class="m-t-0">{{ . }}</h1>
<hr/>
{{end}}
{{ if .Params.ctaBanner }}
{{ with index .Site.Data.cta .Params.ctaBanner }}
<div class="row center-xs middle-xs bg-info shadow rounded-corners">
<h3 class="m-v-sm m-r-sm text-white">{{ .header }}</h3>
<a href="{{ .link }}" target="_blank" class="btn border-btn">{{ .button }}</a>
</div>
{{ end }}
{{ end }}
<div class="main-content docs-body">
<!-- this is a test -->
<!-- {{ partial "page-nav.html" . }} -->
<!-- end test -->
{{ .Content }}
{{ $paginator := .Scratch.Get "paginator" }}
{{ range $paginator.Pages }}
<div class="box m-b-md">
<div class="p-a-sm">
<h3><a href="{{.URL}}">{{.Title}}</a></h3>
{{ if .Params.Image }}
<div class="thumbnail"><img src="{{ .Params.Image }}" alt="{{ .Params.Title }}"></div>
{{end}}
<p>{{ .Summary | safeHTML }}</p>
{{ if .Truncated }}
<div>
<a href="{{ .RelPermalink }}">Read More…</a>
<div class="buttons-container">
<a href="{{ .link }}" target="_blank" class="btn border-btn">
<button class="button has-icon-right">
<span>{{ .button }}</span>
<svg class="icon right" enable-background="new 0 0 34 34" viewBox="0 0 34 34" xmlns="http://www.w3.org/2000/svg">
<g>
<path class="svg-linear" d="m19.5 12 5 5-5 5"></path>
<path class="svg-linear" d="m24.5 17h-15"></path>
</g>
</svg>
</button>
</a>
</div>
</div>
{{ end }}
{{ end }}
<div class="main-content docs-body">
<!-- this is a test -->
<!-- {{ partial "page-nav.html" . }} -->
<!-- end test -->
{{ .Content }}
{{ $paginator := .Scratch.Get "paginator" }}
{{ range $paginator.Pages }}
<div class="box m-b-md">
<div class="p-a-sm">
<h3><a href="{{.URL}}">{{.Title}}</a></h3>
{{ if .Params.Image }}
<div class="thumbnail"><img src="{{ .Params.Image }}" alt="{{ .Params.Title }}"></div>
{{end}}
<p>{{ .Summary | safeHTML }}</p>
{{ if .Truncated }}
<div>
<a href="{{ .RelPermalink }}">Read More…</a>
</div>
{{ end }}
</div>
<div class="bg-default">
<div class="row">
{{ with .Params.Author }}
<div class="p-h-sm p-v-xs"><i class="material-icons">person_outline</i> By: {{ . }}</div>
{{end}}
{{ if eq .Section "events" }}
{{ with .Params.EventDate }}
<div class="p-h-sm p-v-xs"><i class="material-icons">event</i> {{ . }}</div>
{{end}}
{{ else }}
{{ with .Params.Date }}
<div class="p-h-sm p-v-xs"><i class="material-icons">event</i> {{ .Format "January 2, 2006" }}</div>
{{end}}
{{end}}
{{ if eq .Section "blog" }}
<div class="p-h-sm p-v-xs"><i class="material-icons">timer</i> Read Time: {{.ReadingTime}} minutes</div>
{{end}}
{{ with .Params.Location }}
<div class="p-h-sm p-v-xs"><i class="material-icons">location_on</i> {{ . }}</div>
{{end}}
</div>
</div>
</div>
{{ end }}
</div>
<div class="bg-default">
<div class="row">
{{ with .Params.Author }}
<div class="p-h-sm p-v-xs"><i class="material-icons">person_outline</i> By: {{ . }}</div>
{{end}}
{{ if eq .Section "events" }}
{{ with .Params.EventDate }}
<div class="p-h-sm p-v-xs"><i class="material-icons">event</i> {{ . }}</div>
{{end}}
{{ else }}
{{ with .Params.Date }}
<div class="p-h-sm p-v-xs"><i class="material-icons">event</i> {{ .Format "January 2, 2006" }}</div>
{{end}}
{{end}}
{{ if eq .Section "blog" }}
<div class="p-h-sm p-v-xs"><i class="material-icons">timer</i> Read Time: {{.ReadingTime}} minutes</div>
{{end}}
{{ with .Params.Location }}
<div class="p-h-sm p-v-xs"><i class="material-icons">location_on</i> {{ . }}</div>
{{end}}
</div>
</div>
</div>
{{ end }}
{{ template "_internal/pagination.html" . }}
<div class="p-v-xs">{{ partial "page-edit.html" . }}</div>
</article>
<!-- {{ with .TableOfContents }}
<div class="offset-watch invisible"></div>
<aside class="col-sm-2 col-xs-12 unstyled toc-container hidden-md">
<h4 class="m-b-0">On this page</h4>
{{ . }}
</aside>
{{ end }} -->
</div>
{{ template "_internal/pagination.html" . }}
<div class="p-v-xs">{{ partial "page-edit.html" . }}</div>
</article>
<!-- {{ with .TableOfContents }}
<div class="offset-watch invisible"></div>
<aside class="col-sm-2 col-xs-12 unstyled toc-container hidden-md">
<h4 class="m-b-0">On this page</h4>
{{ . }}
</aside>
{{ end }} -->
</div>
</div>
</div>
</section>
<script>
$(document).ready(function() {
// Side menu script
;(function ( $, window, document, undefined ) {
var pluginName = "jqueryAccordionMenu";
var defaults = {
speed: 300,
showDelay: 0,
hideDelay: 0,
singleOpen: true,
clickEffect: true
};
function Plugin ( element, options ) {
this.element = element;
this.settings = $.extend( {}, defaults, options );
this._defaults = defaults;
this._name = pluginName;
this.init();
};
$.extend(Plugin.prototype, {
init: function () {
this.openSubmenu();
this.submenuIndicators();
if(this.settings.clickEffect){
this.addClickEffect();
}
},
openSubmenu: function () {
var opts = this.settings; //to differ from local variable "this"
$(this.element).children("ul").find("li").bind("click touchstart", function(e){
e.stopPropagation();
e.preventDefault();
if ($(this).attr('class') === 'back-to-the-top') {
$('.side-menus-container').scrollTop(0);
}
if($(this).children(".submenu").length > 0) {
if($(this).children(".submenu").css("display") == "none") {
$(this).children(".submenu").delay(opts.showDelay).slideDown(opts.speed);
$(this).children(".submenu").siblings("a").addClass("submenu-indicator-minus");
$(this).addClass("activate");
if(opts.singleOpen){
$(this).siblings().children(".submenu").slideUp(opts.speed);
$(this).siblings().children(".submenu").siblings("a").removeClass("submenu-indicator-minus");
$(this).removeClass("activate");
}
return false;
} else {
$(this).children(".submenu").delay(opts.hideDelay).slideUp(opts.speed);
$(this).removeClass("activate");
}
if($(this).children(".submenu").siblings("a").hasClass("submenu-indicator-minus")){
$(this).children(".submenu").siblings("a").removeClass("submenu-indicator-minus");
}
}
window.location.href = $(this).children("a").attr("href");
});
},
submenuIndicators: function () {
if($(this.element).find(".submenu").length > 0){
$(this.element).find(".submenu").siblings("a").append("<span class='submenu-indicator'><span class='object1'></span><span class='object2'></span><span class='object3'></span></span>");
}
},
addClickEffect: function () {
var ink, d, x, y;
$(this.element).find("a").bind("click touchstart", function(e){
$(".ink").remove();
if($(this).children(".ink").length === 0){
$(this).prepend("<span class='ink'></span>");
}
ink = $(this).find(".ink");
ink.removeClass("animate-ink");
if(!ink.height() && !ink.width()){
d = Math.max($(this).outerWidth(), $(this).outerHeight());
ink.css({height: d, width: d});
}
x = e.pageX - $(this).offset().left - ink.width()/2;
y = e.pageY - $(this).offset().top - ink.height()/2;
ink.css({top: y+'px', left: x+'px'}).addClass("animate-ink");
});
}
});
$.fn[ pluginName ] = function ( options ) {
this.each(function() {
if ( !$.data( this, "plugin_" + pluginName ) ) {
$.data( this, "plugin_" + pluginName, new Plugin( this, options ) );
}
});
return this;
};
})( jQuery, window, document );
var sideNavMenus = $('.side-menus-container');
sideNavMenus.jqueryAccordionMenu();
var sideNavMenusMobile = $('.docs-container .side-menus');
$('.guide-menus-activator').click(function() {
if (sideNavMenusMobile.hasClass('show')) {
sideNavMenusMobile.removeClass('show');
} else {
sideNavMenusMobile.addClass('show');
}
});
// anchor click control.
$("a[href*='#']").click(function(e) {
// e.preventDefault();
if ($(this).attr('data-target') === undefined && $(this).attr('href').length > 1) {
var hash = $(this).attr('href').substring(1),
objt = $('#' + hash),
objt_mt = Number(objt.css('margin-top').replace(/[^0-9]/g,"")),
depth = 80,
scrn = $(window).width();
scrn_check = 1025;
if (scrn < scrn_check) {
depth = 120;
}
if (objt_mt > 0) {
depth = depth + objt_mt
}
if ($(this).attr('href').charAt(0) === '#') {
var objectTop = $($(this).attr('href')).offset().top;
setTimeout(function() {
$('html').scrollTop(objectTop - depth);
}, 100);
}
}
});
});
</script>
{{ end }}
+1 -16
View File
@@ -1,19 +1,4 @@
{{ define "hero" }}
<section class="hero">
<div class="wrapper">
<div class="row center-xs">
<div class="col-md-8 p-b-lg">
{{ with .Params.pageHeader }}
<h1>{{ . }}</h1>
{{end}}
{{ with .Params.description }}
<p class="p-t-sm">{{ . }}</p>
{{end}}
</div>
</div>
</div>
</section>
{{ end }}
{{ define "main" }}
<div>
+58 -33
View File
@@ -12,53 +12,78 @@
{{end}}
<!-- product dropdown -->
<ul class="dropdown sub-menu unstyled">
<li class="m-b-0">
<a href="{{ ($.Scratch.Get "topLevel").Permalink }}" class="btn bg-link p-a-0">
<span class="p-h-xs">
{{ range $product := $.Site.Sections }}
{{ range $version := .Sections }}
{{ range $language := .Sections }}
{{if $.CurrentSection}}
{{ if .IsAncestor $.CurrentSection }}
{{ .Params.shortTitle }}
<div class="side-menus-container product-select jquery-accordion-menu">
<ul class="side-menus-wrap">
<li class="">
<a href="{{ ($.Scratch.Get "topLevel").Permalink }}" class="">
<span class="">
{{ range $product := $.Site.Sections }}
{{ range $version := .Sections }}
{{ range $language := .Sections }}
{{if $.CurrentSection}}
{{ if .IsAncestor $.CurrentSection }}
{{ .Params.shortTitle }}
{{end}}
{{end}}
{{end}}
{{end}}
{{end}}
{{end}}
</span>
<i class="material-icons darken p-a-xs">keyboard_arrow_down</i>
</a>
</span>
</a>
<ul class="sub dropdown-menu bg-white unstyled">
{{ range $product := $.Site.Sections }}
{{ range $version := .Sections }}
{{ range $language := .Sections }}
<li class="m-b-0"><a href="{{ .Permalink }}">{{ .Params.shortTitle }}</a></li>
{{ if .Params.insertonesix }}
<li class="m-b-0"><a href="https://rancher.com/docs/rancher/v1.6/en/" target="blank">Rancher 1.6</a></li>
<ul class="submenu submenus-wrap">
{{ range $product := $.Site.Sections }}
{{ range $version := .Sections }}
{{ range $language := .Sections }}
<li><a href="{{ .Permalink }}">{{ .Params.shortTitle }}</a></li>
{{ if .Params.insertonesix }}
<li><a href="https://rancher.com/docs/rancher/v1.6/en/" target="blank">Rancher 1.6</a></li>
{{end}}
{{end}}
{{end}}
{{end}}
{{end}}
</ul>
</li>
</ul>
<div class="tree-nav invisible">
<ul>
<!-- {{ template "section-tree-nav" ($.Scratch.Get "secondLevel") }} -->
{{ template "section-tree-nav" ($.Scratch.Get "topLevel") }}
</ul>
</li>
</ul>
</div>
<div class="guide-menus-activator">
{{ if .Title }}
{{.Title}}
{{ else }}
Quick Start Guide
{{end}}
<span class="indicator">
<span class="object1"></span>
<span class="object2"></span>
<span class="object3"></span>
</span>
</div>
<div class="side-menus-container guide-menus jquery-accordion-menu">
<ul class="side-menus-wrap second">
{{ template "section-tree-nav" ($.Scratch.Get "topLevel") }}
<li class="back-to-the-top">
<a href="#" class="submenu-indicator-close">
Back to the top
<svg class="svg-icon" enable-background="new 0 0 34 34" viewBox="0 0 34 34" xmlns="http://www.w3.org/2000/svg">
<g class="svg-linear" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10">
<path d="m12 14.5 5-5 5 5"></path><path d="m17 9.5v15"></path>
</g>
</svg>
<span class="submenu-indicator"><span class="object1"></span><span class="object2"></span><span class="object3"></span></span>
</a>
</li>
</ul>
</div>
{{ define "section-tree-nav" }}
{{ range .Sections}}
<li class="tree-nav-item"><a href="{{ .RelPermalink}}">{{ .Title }}</a>
{{if gt (len .Sections) 0}}
<i class="material-icons expand-toggle">add_box</i>
<ul class="tree-nav-sublist hide">
<ul class="tree-nav-sublist submenu submenus-wrap">
{{ range .Pages }}
<li class="tree-nav-item-child"><a href="{{ .RelPermalink}}">{{ .Title }}</a></li>
{{ end }}
+13 -2
View File
@@ -1,2 +1,13 @@
<a href="{{.Site.Params.ghdocsrepo}}/edit/master/content/{{.File.Path}}" class="btn bg-link">Edit this page <i class="material-icons">
edit</i></a>
<div class="buttons-container">
<a href="{{.Site.Params.ghdocsrepo}}/edit/master/content/{{.File.Path}}" class="btn bg-link">
<button class="button has-icon-right">
<span>Edit this page</span>
<svg class="icon right" enable-background="new 0 0 34 34" viewBox="0 0 34 34" xmlns="http://www.w3.org/2000/svg">
<g>
<path class="svg-linear" d="m19.5 12 5 5-5 5"></path>
<path class="svg-linear" d="m24.5 17h-15"></path>
</g>
</svg>
</button>
</a>
</div>
Binary file not shown.

After

Width:  |  Height:  |  Size: 234 B

@@ -0,0 +1 @@
<svg enable-background="new 0 0 313.7 265.5" viewBox="0 0 313.7 265.5" xmlns="http://www.w3.org/2000/svg"><path d="m294 240.6c0 4.4-3.5 7.9-7.9 7.9h-262.5c-4.4 0-7.9-3.5-7.9-7.9v-170.6c0-4.3 3.5-7.9 7.9-7.9h262.5c4.3 0 7.9 3.5 7.9 7.9z" fill="#f2c40f"/><path d="m294 240.6c0 4.4-3.5 7.9-7.9 7.9h-262.5c-4.4 0-7.9-3.5-7.9-7.9v-170.6c0-4.3 3.5-7.9 7.9-7.9h262.5c4.3 0 7.9 3.5 7.9 7.9z" fill="#313131" opacity=".25"/><path d="m30.8 258.7h132.3 113.9v-47.5-132.6h-49.1-64.8-132.3z" fill="#d0d4d7"/><path d="m256.4 256.2v-132.3-66.4l-47.5-47.5h-132.6v49.1 64.8 132.3z" fill="#ecf0f1"/><path d="m208.9 57.5h47.5l-47.5-47.5z" fill="#f2f5f5"/><path d="m276.4 246.2v-132.3-66.4-47.5h-180.1v49.1 64.8 132.3z" fill="#fff"/><g fill="#f2f5f5"><path d="m123.6 117h126.9v3.1h-126.9z"/><path d="m123.6 124.5h130.1v3.1h-130.1z"/><path d="m123.6 132h127.4v3.1h-127.4z"/><path d="m123.6 139.5h112.4v3.1h-112.4z"/><path d="m123.6 58.7h126.9v3.1h-126.9z"/><path d="m123.6 66.2h130.1v3.1h-130.1z"/><path d="m123.6 73.7h127.4v3.1h-127.4z"/><path d="m123.6 81.2h77.1v3.1h-77.1z"/><path d="m123.6 94.5h126.9v3.1h-126.9z"/><path d="m123.6 102h130.1v3.1h-130.1z"/><path d="m123.6 109.5h127.4v3.1h-127.4z"/><path d="m123.6 153.3h126.9v3.1h-126.9z"/><path d="m123.6 160.8h130.1v3.1h-130.1z"/><path d="m123.6 168.3h127.4v3.1h-127.4z"/><path d="m123.6 175.7h77.1v3.1h-77.1z"/><path d="m123.6 189.1h126.9v3.1h-126.9z"/><path d="m123.6 196.5h130.1v3.1h-130.1z"/><path d="m123.6 204h41.8v3.1h-41.8z"/></g><path d="m123.4 43.8h60.6v5.1h-60.6z" fill="#0075a8"/><path d="m313.7 127.7c0-4.3-3.5-7.9-7.9-7.9h-133.1l-11.3 18.4h-153.5c-4.3 0-7.9 3.5-7.9 7.9l15.7 111.5c0 4.4 3.5 7.9 7.9 7.9h262.5c4.3 0 7.9-3.5 7.9-7.9z" fill="#f2c40f"/></svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

+1
View File
@@ -0,0 +1 @@
<svg enable-background="new 0 0 65 90" viewBox="0 0 65 90" xmlns="http://www.w3.org/2000/svg"><g fill="#0b6f9f"><path d="m48 0v17h17z"/><path d="m3 82h59v3h-59z"/><path d="m53.1 36.1h-42.2v-5.5h42.2zm0 8.3h-42.2v-5.5h42.2zm-14.1 8.6h-28.1v-5.6h28.1zm6-33v-20h-45v80h65v-60z"/><path d="m6 87h53v3h-53z"/></g></svg>

After

Width:  |  Height:  |  Size: 313 B

+11
View File
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 100 100" style="enable-background:new 0 0 100 100;" xml:space="preserve">
<style type="text/css">
.st0{fill:#88BD42;}
</style>
<path class="st0" d="M41.7,60.4c-10.4,0-18.8-8.3-18.8-18.8s8.3-18.8,18.8-18.8s18.8,8.3,18.8,18.8C60.4,52.1,52.1,60.4,41.7,60.4z
M85.2,79.4L63.5,57.7c3.3-4.4,5.2-10,5.2-16c0-15-12.1-27.1-27.1-27.1S14.6,26.7,14.6,41.7s12.1,27.1,27.1,27.1
c6,0,11.5-1.9,16-5.2l21.7,21.7c0.8,0.8,1.9,1.2,2.9,1.2s2.1-0.4,2.9-1.2C86.9,83.5,86.9,81,85.2,79.4L85.2,79.4z"/>
</svg>

After

Width:  |  Height:  |  Size: 762 B

@@ -0,0 +1 @@
<svg enable-background="new 0 0 1370.5 236" viewBox="0 0 1370.5 236" xmlns="http://www.w3.org/2000/svg"><path d="m1370.5 236h-1370.5c183.6-137.6 440.4-223.2 724.6-223.2 245.6 0 470.7 63.9 645.9 170.1z" fill="#8dc63f"/><path d="m713.2 41.5c0 22.9 18.6 41.5 41.5 41.5s41.5-18.6 41.5-41.5-18.6-41.5-41.5-41.5c-23 0-41.5 18.6-41.5 41.5z" fill="#6ba939"/><path d="m713.2 41.5c0-22.9 18.6-41.5 41.5-41.5v82.9c-23 0-41.5-18.6-41.5-41.4z" fill="#5c9531"/><g fill="#594a41"><path d="m754.6 107.6c1.1 0 2.1-.9 2.1-2.1v-58.1c0-1.1-.9-2.1-2.1-2.1-1.1 0-2.1.9-2.1 2.1v58.1c.1 1.2 1 2.1 2.1 2.1z"/><path d="m754.6 70.7c.5 0 1.1-.2 1.5-.6.8-.8.8-2.1 0-2.9l-8.6-8.6c-.8-.8-2.1-.8-2.9 0s-.8 2.1 0 2.9l8.6 8.6c.4.4.9.6 1.4.6z"/><path d="m754.6 63.2c.5 0 1.1-.2 1.5-.6l11.5-11.5c.8-.8.8-2.1 0-2.9s-2.1-.8-2.9 0l-11.5 11.5c-.8.8-.8 2.1 0 2.9.4.3.9.6 1.4.6z"/></g><path d="m324.7 82.4c0-26 7.4-56.1 22.4-56.1s22.4 30.1 22.4 56.1c0 9.5-7.4 17.2-22.4 17.2-15.1 0-22.4-7.7-22.4-17.2z" fill="#dbe13a"/><path d="m324.7 82.4c0-26 7.4-56.1 22.4-56.1v73.3c-15.1 0-22.4-7.7-22.4-17.2z" fill="#bbd644"/><path d="m347.1 126.6c1.1 0 2.1-.9 2.1-2.1v-64.1c0-1.1-.9-2.1-2.1-2.1s-2.1.9-2.1 2.1v64.2c0 1.1.9 2 2.1 2z" fill="#594a41"/><path d="m347.1 85.9c.5 0 1.1-.2 1.5-.6l9.5-9.5c.8-.8.8-2.1 0-2.9s-2.1-.8-2.9 0l-9.5 9.5c-.8.8-.8 2.1 0 2.9.3.4.8.6 1.4.6z" fill="#594a41"/><path d="m347.1 77.6c.5 0 1.1-.2 1.5-.6.8-.8.8-2.1 0-2.9l-12.7-12.7c-.8-.8-2.1-.8-2.9 0s-.8 2.1 0 2.9l12.6 12.7c.4.4.9.6 1.5.6z" fill="#594a41"/></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

@@ -0,0 +1 @@
<svg enable-background="new 0 0 1397.6 422.2" viewBox="0 0 1397.6 422.2" xmlns="http://www.w3.org/2000/svg"><path d="m784.4 422.3h-171.2-613.2v100h613.2 171.2 613.2v-100z" fill="#bbd644"/><path d="m709.4 111.5c-3.5 0-7.1 0-10.6.1-3.5 0-7.1-.1-10.6-.1-301.4.1-562.3 126.6-688.2 310.7h613.2 171.2 613.2c-125.9-184.1-386.8-310.6-688.2-310.7z" fill="#bbd644"/><g fill="#abc53e"><circle cx="357.4" cy="440.8" r="16.3"/><circle cx="524.9" cy="310.4" r="16.3"/><circle cx="872.7" cy="506" r="16.3"/><ellipse cx="1040.2" cy="375.6" rx="16.3" ry="16.3" transform="matrix(.3827 -.9239 .9239 .3827 295.1238 1192.8838)"/><path d="m993.5 359.3h-136.4c-9 0-16.3-7.3-16.3-16.3s7.3-16.3 16.3-16.3h112.6c9 0 16.3-7.3 16.3-16.3s-7.3-16.3-16.3-16.3h-307.9-87.8c-9 0-16.3 7.3-16.3 16.3s7.3 16.3 16.3 16.3h53.9c9 0 16.3 7.3 16.3 16.3s-7.3 16.3-16.3 16.3h-199.9c-9 0-16.3 7.3-16.3 16.3s7.3 16.3 16.3 16.3h64.5c9 0 16.3 7.3 16.3 16.3s-7.3 16.3-16.3 16.3h-88.4c-9 0-16.3 7.3-16.3 16.3s7.3 16.3 16.3 16.3h136.4c9 0 16.3 7.3 16.3 16.3s-7.3 16.3-16.3 16.3h-112.6c-9 0-16.3 7.3-16.3 16.3s7.3 16.3 16.3 16.3h356.5 39.2c9 0 16.3-7.3 16.3-16.3s-7.3-16.3-16.3-16.3h-39.2v-32.6h185.2c9 0 16.3-7.3 16.3-16.3s-7.3-16.3-16.3-16.3h-64.5c-9 0-16.3-7.3-16.3-16.3s7.3-16.3 16.3-16.3h88.4c9 0 16.3-7.3 16.3-16.3s-7.3-16.3-16.3-16.3z"/></g><ellipse cx="267.7" cy="172.1" fill="#8dc63f" rx="60.7" ry="60.7"/><path d="m328.4 172.1c0-33.5-27.2-60.7-60.7-60.7v121.4c33.5 0 60.7-27.2 60.7-60.7z" fill="#6ba939"/><path d="m267.7 268c-1.1 0-2.1-.9-2.1-2.1v-85.1c0-1.1.9-2.1 2.1-2.1 1.1 0 2.1.9 2.1 2.1v85.1c0 1.1-1 2.1-2.1 2.1z" fill="#594a41"/><path d="m267.7 213.9c-.5 0-1.1-.2-1.5-.6-.8-.8-.8-2.1 0-2.9l12.6-12.6c.8-.8 2.1-.8 2.9 0s.8 2.1 0 2.9l-12.7 12.7c-.2.3-.8.5-1.3.5z" fill="#594a41"/><path d="m267.7 202.9c-.5 0-1.1-.2-1.5-.6l-16.8-16.8c-.8-.8-.8-2.1 0-2.9s2.1-.8 2.9 0l16.8 16.8c.8.8.8 2.1 0 2.9-.3.4-.9.6-1.4.6z" fill="#594a41"/><path d="m624 74.4c0-34.5-9.8-74.4-29.7-74.4s-29.7 39.9-29.7 74.4c0 12.6 9.8 22.9 29.7 22.9 19.9-.1 29.7-10.3 29.7-22.9z" fill="#bbd644"/><path d="m624 74.4c0-34.5-9.8-74.4-29.7-74.4v97.2c19.9 0 29.7-10.2 29.7-22.8z" fill="#abc53e"/><path d="m594.3 132.4c-1.1 0-2.1-.9-2.1-2.1v-85.1c0-1.1.9-2.1 2.1-2.1 1.1 0 2.1.9 2.1 2.1v85.1c0 1.2-.9 2.1-2.1 2.1z" fill="#594a41"/><path d="m594.3 78.4c-.5 0-1.1-.2-1.5-.6l-12.7-12.7c-.8-.8-.8-2.1 0-2.9s2.1-.8 2.9 0l12.7 12.7c.8.8.8 2.1 0 2.9-.3.4-.8.6-1.4.6z" fill="#594a41"/><path d="m594.3 67.3c-.5 0-1.1-.2-1.5-.6-.8-.8-.8-2.1 0-2.9l16.9-16.8c.8-.8 2.1-.8 2.9 0s.8 2.1 0 2.9l-16.8 16.8c-.4.4-.9.6-1.5.6z" fill="#594a41"/><path d="m738.5 266.2c0-47.2-14-125.6-31.3-125.6s-31.3 78.4-31.3 125.6c0 17.3 14 31.3 31.3 31.3s31.3-14 31.3-31.3z" fill="#dbe13a"/><path d="m738.5 266.2c0-47.2-14-125.6-31.3-125.6v156.9c17.3 0 31.3-14 31.3-31.3z" fill="#abc53e"/><path d="m707.2 332.7c-1.1 0-2.1-.9-2.1-2.1v-85.1c0-1.1.9-2.1 2.1-2.1 1.1 0 2.1.9 2.1 2.1v85.1c0 1.1-.9 2.1-2.1 2.1z" fill="#594a41"/><path d="m707.2 278.6c-.5 0-1.1-.2-1.5-.6l-12.7-12.7c-.8-.8-.8-2.1 0-2.9s2.1-.8 2.9 0l12.6 12.7c.8.8.8 2.1 0 2.9-.2.4-.7.6-1.3.6z" fill="#594a41"/><path d="m707.2 267.6c-.5 0-1.1-.2-1.5-.6-.8-.8-.8-2.1 0-2.9l16.8-16.8c.8-.8 2.1-.8 2.9 0s.8 2.1 0 2.9l-16.7 16.8c-.4.4-.9.6-1.5.6z" fill="#594a41"/></svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

+1
View File
@@ -0,0 +1 @@
<svg enable-background="new 0 0 23 23" viewBox="0 0 23 23" xmlns="http://www.w3.org/2000/svg"><path d="m18.6 2.4h-14.2c-1.2 0-2.2 1-2.2 2.2v14.4c0 1.2 1 2.2 2.2 2.2h14.3c1.2 0 2.2-1 2.2-2.2v-14.3c0-1.3-1-2.3-2.3-2.3zm-1.7 6.7h-.9c-1 0-1.3.2-1.3.9v1.3h2.2l-.4 2.2h-1.8v6.7h-2.2v-6.7h-1.8v-2.2h1.8v-1.3c0-1.8.9-3.1 2.7-3.1 1.3 0 1.8.4 1.8.4v1.8z" fill="#fff"/></svg>

After

Width:  |  Height:  |  Size: 364 B

+1
View File
@@ -0,0 +1 @@
<svg enable-background="new 0 0 23 23" viewBox="0 0 23 23" xmlns="http://www.w3.org/2000/svg"><path d="m8.3 21.8c.3-.1.5-.5.5-.8v-2.4c0-.1 0-.2 0-.3s-1.3 0-1.6 0c-.7 0-1.3-.3-1.5-.8-.3-.5-.5-1.5-1.3-2.1-.1-.1 0-.2.2-.2.3 0 .8.4 1.2.9.5.5.9.9 1.6.9 1.1 0 1.7-.1 2.1-.2.4-.6 1-1.1 1.6-1.1-2.5-.1-4.2-.9-4.9-2.2-1.6 0-3.1.2-3.9.3 0-.1 0-.3-.1-.4.8-.2 2.2-.4 3.7-.4-.1-.1-.1-.2-.1-.4-1.6-.1-2.9 0-3.7 0 0-.1 0-.3 0-.4.7-.1 2.1-.1 3.6 0 0-.2-.1-.5-.1-.7 0-.8.3-1.6.8-2.2-.2-.8-.5-2.4.1-3 1.2 0 2.1.6 2.5.9.8-.3 1.6-.5 2.5-.5s1.8.2 2.5.5c.4-.4 1.3-.9 2.5-.9.7.6.3 2.2.1 2.9.5.7.8 1.4.7 2.2v.6c1.6-.1 2.9 0 3.7 0v.4c-.7-.1-2.1-.1-3.7 0 0 .2-.1.3-.1.4 1.6 0 3 .2 3.8.3 0 .1 0 .3-.1.4-.9-.1-2.3-.3-4-.3-.7 1.3-2.3 2.1-4.8 2.2 1.2 0 2.2 1.7 2.2 2.9v2.7c0 .4.2.7.5.8 4.1-1.4 7.1-5.2 7.1-9.8 0-5.7-4.6-10.3-10.3-10.3s-10.4 4.7-10.4 10.4c0 4.5 3 8.4 7.1 9.7z" fill="#fff"/></svg>

After

Width:  |  Height:  |  Size: 866 B

+1
View File
@@ -0,0 +1 @@
<svg enable-background="new 0 0 23 23" viewBox="0 0 23 23" xmlns="http://www.w3.org/2000/svg"><path d="m18.6 2.4h-14.2c-1.2 0-2.2 1-2.2 2.2v14.4c0 1.2 1 2.2 2.2 2.2h14.3c1.2 0 2.2-1 2.2-2.2v-14.3c0-1.3-1-2.3-2.3-2.3zm-10.7 7.2v8.5h-2.7v-8.5zm-2.7-2.5c0-.6.6-1.1 1.4-1.1s1.3.5 1.3 1.1-.5 1.1-1.3 1.1c-.8.1-1.4-.5-1.4-1.1zm12.6 11h-2.7s0-4.1 0-4.5c0-.9-.4-1.8-1.6-1.8-1.1 0-1.5.9-1.5 1.8v4.5h-2.7v-8.5h2.7v1.1s.9-1.1 2.6-1.1c1.8 0 3.2 1.2 3.2 3.7z" fill="#fff"/></svg>

After

Width:  |  Height:  |  Size: 466 B

+14
View File
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 149.1 149.1" style="enable-background:new 0 0 149.1 149.1;" xml:space="preserve">
<style type="text/css">
.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#939393;}
</style>
<g>
<path class="st0" d="M117.6,112L91.5,85.9c-0.1-0.1-0.2-0.2-0.3-0.2l-2.4-2.2l-0.6-0.6l0.4-0.7l1.7-2.8c3.1-5.1,4.8-11,4.8-17.1
c0-18-14.7-32.7-32.7-32.7c-18,0-32.7,14.7-32.7,32.7c0,18,14.7,32.7,32.7,32.7c5.7,0,11.3-1.5,16.2-4.3l2.9-1.7l0.7-0.4l0.5,0.7
l2.1,2.6c0.1,0.1,0.1,0.2,0.2,0.3l26.1,26.1c0.8,0.8,2,1.3,3.1,1.3c1.2,0,2.3-0.5,3.1-1.3C119.3,116.5,119.3,113.7,117.6,112z
M62.4,87.3c-13.8,0-25-11.2-25-25c0-13.8,11.2-25,25-25c13.8,0,25,11.2,25,25C87.4,76.1,76.2,87.3,62.4,87.3z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 952 B

+12
View File
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 150 150" style="enable-background:new 0 0 150 150;" xml:space="preserve">
<style type="text/css">
.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#89939C;}
</style>
<path class="st0" d="M57.2,90.5c18.7,0,33.9-15.2,33.9-33.9c0-18.7-15.2-33.9-33.9-33.9S23.3,37.9,23.3,56.6
C23.3,75.3,38.4,90.5,57.2,90.5z M85.2,105.8c-8.3,4.7-17.9,7.4-28.1,7.4c-31.3,0-56.6-25.3-56.6-56.6C0.6,25.3,25.9,0,57.2,0
c31.3,0,56.6,25.3,56.6,56.6c0,10.8-3,20.9-8.3,29.5c0.2,0.2,0.4,0.4,0.6,0.6l39.2,39.2c5.5,5.5,5.5,14.5,0,20
c-5.5,5.5-14.5,5.5-20,0l-39.2-39.2C85.8,106.4,85.5,106.1,85.2,105.8L85.2,105.8z"/>
</svg>

After

Width:  |  Height:  |  Size: 867 B

+1
View File
@@ -0,0 +1 @@
<svg enable-background="new 0 0 23 23" viewBox="0 0 23 23" xmlns="http://www.w3.org/2000/svg"><path d="m12.8 2c-.2 0-.4 0-.6.1-.9.3-1.3 1.2-1 2.1l.7 2.4-3.3 1-.7-2.2c-.3-.9-1.2-1.3-2-1-.9.2-1.3 1.1-1 2l.7 2.3-2.4.8c-.8.3-1.3 1.2-1 2.1.2.7.9 1.1 1.5 1.1.2 0 .4 0 .5-.1l2.4-.8 1 3.1-2.6.9c-.9.2-1.3 1.2-1 2 .2.7.8 1.2 1.5 1.2.1 0 .3 0 .5-.1l2.5-.9.8 2.5c.2.7.9 1.1 1.5 1.1.2 0 .4 0 .5-.1.8-.3 1.3-1.2 1-2.1l-.7-2.4 3.2-1.1.7 2.4c.2.7.9 1.1 1.5 1.1.2 0 .4 0 .5-.1.8-.3 1.3-1.2 1-2.1l-.7-2.4 2-.7c.8-.3 1.3-1.3.9-2.1-.3-.9-1.2-1.3-2-1l-2 .7-.9-3.1 2.2-.7c.9-.3 1.3-1.2 1-2.1s-1.2-1.3-2-1l-2.1.7-.7-2.4c-.2-.7-.8-1.1-1.4-1.1zm0 7.7.9 3.1-3.2 1.1-1-3.1z" fill="#fff"/></svg>

After

Width:  |  Height:  |  Size: 668 B

+1
View File
@@ -0,0 +1 @@
<svg enable-background="new 0 0 23 23" viewBox="0 0 23 23" xmlns="http://www.w3.org/2000/svg"><path d="m22.7 4.9c-.8.4-1.7.6-2.6.7.9-.6 1.7-1.5 2-2.5-.9.5-1.9.9-2.9 1.1-.8-.9-2-1.5-3.4-1.5-2.5 0-4.6 2.1-4.6 4.6 0 .4 0 .7.1 1-3.8-.2-7.2-2-9.5-4.8-.3.7-.6 1.5-.6 2.4 0 1.6.8 3 2 3.8-.8 0-1.5-.2-2.1-.6v.1c0 2.2 1.6 4.1 3.7 4.5-.4.1-.8.2-1.2.2-.3 0-.6 0-.9-.1.6 1.8 2.3 3.2 4.3 3.2-1.6 1.2-3.6 2-5.7 2-.4 0-.7 0-1.1-.1 2 1.3 4.4 2.1 7 2.1 8.5 0 13.1-7 13.1-13.1 0-.2 0-.4 0-.6 1-.7 1.8-1.5 2.4-2.4z" fill="#fff"/></svg>

After

Width:  |  Height:  |  Size: 516 B

+1
View File
@@ -0,0 +1 @@
<svg enable-background="new 0 0 23 23" viewBox="0 0 23 23" xmlns="http://www.w3.org/2000/svg"><path d="m20.6 7.1c-.2-1-1-1.7-2-1.9-1.5-.3-4.2-.5-7.1-.5s-5.7.2-7.2.5c-1 .2-1.8.9-2 1.9-.3 1.2-.4 2.7-.4 4.7s.2 3.6.4 4.7c.2 1 1 1.7 2 1.9 1.6.3 4.2.5 7.2.5s5.6-.2 7.2-.5c1-.2 1.8-.9 2-1.9.2-1.1.4-2.7.4-4.7-.1-2-.3-3.5-.5-4.7zm-11.6 7.9v-6.3l5.5 3.1z" fill="#fff"/></svg>

After

Width:  |  Height:  |  Size: 366 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

+1
View File
@@ -0,0 +1 @@
<svg enable-background="new 0 0 242 108.2" viewBox="0 0 242 108.2" xmlns="http://www.w3.org/2000/svg"><g fill="#006ca1"><g clip-rule="evenodd" fill-rule="evenodd"><path d="m194.6 11.5h-12.1-13.1-25.2s.3-11.1-3-11.1-6.2 18.8-6 25.2 5 7.1 5 7.1h21c-1.1 2.3-2.9 3.5-4.3 4h-8.6-12.1s-6-.2-6-6 2.7-11.1 2-15.1-5-4-5-4h-102.9s-3 .5-4 2-20.2 29.1-20.2 29.1-.7 2.3 1 4 3 3 3 3 .7 1 3-1c2.4-2 12.1-10.1 12.1-10.1v36.4 28.2c0 2.8 2.3 5 5 5h30.2c2.8 0 5-2.3 5-5v-22.6c0-2.5 2-4.6 4.6-4.6h73.5c2.5 0 4.6 2 4.6 4.6v22.6c0 2.8 2.3 5 5 5h30.2c2.8 0 5-2.3 5-5v-24.2h-16.1c-4.5 0-8.1-3.6-8.1-8.1v-16.1c0-2.5 1.2-4.8 3-6.3v18.4c0 4.5 3.6 8.1 8.1 8.1h25.2c4.5 0 8.1-3.6 8.1-8.1v-47.3c.2-4.5-3.4-8.1-7.9-8.1z"/><path d="m206.7 21.6v11.1h17.1s6-2.1 6-8.1-4.5-24.2-7.1-24.2-3 9.7-3 15.1-6 6-6 6h-7z"/><path d="m236.5 0c-3.1 0-5.5 2.5-5.5 5.5s2.5 5.5 5.5 5.5c3.1 0 5.5-2.5 5.5-5.5s-2.5-5.5-5.5-5.5zm0 10.1c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z"/></g><path d="m236.6 6.3h-.7v1.8h-1.2v-5.1h2c.6 0 1.1.1 1.4.4s.5.6.5 1.1c0 .3-.1.6-.2.9-.1.2-.4.4-.7.6l1 2v.1h-1.3zm-.7-1h.8c.2 0 .4-.1.5-.2s.2-.3.2-.5-.1-.4-.2-.5-.3-.1-.5-.1h-.8z"/></g></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB