From 9a7e7a20f4b05fc701856fff4ee2de947745be32 Mon Sep 17 00:00:00 2001 From: loganhz Date: Sun, 5 May 2019 13:31:33 +0800 Subject: [PATCH 1/9] Windows preview release --- .../rke-clusters/windows-clusters/_index.md | 119 +++++++++--------- .../v2.x/en/installation/references/_index.md | 1 + .../en/installation/requirements/_index.md | 4 +- layouts/shortcodes/ports-custom-nodes.html | 26 ++-- static/img/rancher/enable-windows-support.png | Bin 24009 -> 0 bytes static/img/rancher/flannel.png | Bin 10455 -> 0 bytes static/img/rancher/linux-control-plane.png | Bin 84856 -> 0 bytes 7 files changed, 81 insertions(+), 69 deletions(-) delete mode 100644 static/img/rancher/enable-windows-support.png delete mode 100644 static/img/rancher/flannel.png delete mode 100644 static/img/rancher/linux-control-plane.png diff --git a/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md b/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md index c0f110517da..29f0aa3d0d2 100644 --- a/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md +++ b/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md @@ -3,23 +3,22 @@ title: Configuring Custom Clusters for Windows (Experimental) weight: 2240 --- -_Available as of v2.1.0_ +_Available as of v2.3.0-alpha1_ ->**Important:** -> +>**Important:** +> >Support for Windows nodes is currently an experimental feature and is not yet officially supported in Rancher. Therefore, we do not recommend using Windows nodes in a production environment. When provisioning a [custom cluster]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/custom-clusters/) using Rancher, you can use a mix of Linux and Windows hosts as your cluster nodes. -This guide walks you through create of a custom cluster that includes 3 nodes: a Linux node, which serves as a Kubernetes control plane node; another Linux node, which serves as a Kubernetes worker used to support Ingress for the cluster; and a Windows node, which is assigned the Kubernetes worker role and runs your Windows containers. +This guide walks you through create of a custom cluster that includes 3 nodes: a Linux node, which serves as a Kubernetes control plane node; another Linux node, which serves as a Kubernetes worker used to support Rancher Cluster agent, Metrics server, DNS and Ingress for the cluster; and a Windows node, which is assigned the Kubernetes worker role and runs your Windows containers. >**Notes:** > ->- For a summary of Kubernetes features supported in Windows, see [Using Windows in Kubernetes](https://kubernetes.io/docs/setup/windows/intro-windows-in-kubernetes/). ->- Windows containers must run on Windows Server 1803 nodes. Windows Server 1709 and earlier versions do not support Kubernetes properly. ->- Containers built for Windows Server 1709 or earlier do not run on Windows Server 1803. You must build containers on Windows Server 1803 to run these containers on Windows Server 1803. - - +>- For a summary of Kubernetes features supported in Windows, see [Using Windows Server Containers in Kubernetes](https://kubernetes.io/docs/getting-started-guides/windows/#supported-features). +>- Windows worker adding script must run on Windows Server 2019 (core version 1809 or above) hosts. Core version 1803 and earlier versions do not support Kubernetes properly. +>- Containers built for Windows Server 1803 or earlier do not run on Windows Server 2019. You must build containers on Windows Server 2019 to run these containers on Windows Server 2019. +>- Windows Overlay networking requires [KB4489899](https://support.microsoft.com/en-us/help/4489899) hostfix. Most of Cloud-hosted VMs already have this hotfix. ## Objectives for Creating Cluster with Windows Support @@ -28,14 +27,16 @@ When setting up a custom cluster with support for Windows nodes and containers, - [1. Provision Hosts](#1-provision-hosts) -- [2. Cloud-host VM Networking Configuration](#2-cloud-hosted-vm-networking-configuration) -- [3. Create the Custom Cluster](#3-create-the-custom-cluster) -- [4. Add Linux Host for Ingress Support](#4-add-linux-host-for-ingress-support) -- [5. Adding Windows Workers](#5-adding-windows-workers) -- [6. Cloud-host VM Routes Configuration](#6-cloud-hosted-vm-routes-configuration) +- [2. Create the Custom Cluster](#2-create-the-custom-cluster) +- [3. Add Linux Master Node](#3-add-linux-master-node) +- [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) + + ## 1. Provision Hosts To begin provisioning a custom cluster with Windows support, prepare your host servers. Provision three nodes according to our [requirements]({{< baseurl >}}/rancher/v2.x/en/installation/requirements/)—two Linux, one Windows. Your hosts can be: @@ -44,73 +45,67 @@ To begin provisioning a custom cluster with Windows support, prepare your host s - VMs from virtualization clusters - Bare-metal servers -The table below lists the [Kubernetes roles]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/#kubernetes-cluster-node-components) you'll assign to each host, although you won't enable these roles until further along in the configuration process—we're just informing you of each node's purpose. The first node, a Linux host, is primarily responsible for managing the Kubernetes control plane, although, in this use case, we're installing all three roles on this node. Node 2 is also a Linux worker, which is responsible for Ingress support. Finally, the third node is your Windows worker, which will run your Windows applications. +The table below lists the [Kubernetes roles]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/#kubernetes-cluster-node-components) you'll assign to each host, although you won't enable these roles until further along in the configuration process—we're just informing you of each node's purpose. The first node, a Linux host, is primarily responsible for managing the Kubernetes control plane, although, in this use case, we’re installing all three roles on this node. The second node is also a Linux worker, which is responsible for running DNS server, Ingress controller, Metrics server and Rancher Cluster agent. Finally, the third node is the Windows worker, which will run your Windows applications. Node | Operating System | Future Cluster Role(s) --------|------------------|------ -Node 1 | Linux (Ubuntu Server 16.04 recommended) | [Control Plane]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/#control-plane-nodes), [etcd]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/#etcd), [Worker]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/#worker-nodes) -Node 2 | Linux (Ubuntu Server 16.04 recommended) | [Worker]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/#worker-nodes) (This node is used for Ingress support) -Node 3 | Windows (*Windows Server 1803 required*) | [Worker]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/#worker-nodes) +Node 1 | Linux (Ubuntu Server 18.04 recommended) | [Control Plane]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/#control-plane-nodes), [etcd]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/#etcd), [Worker]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/#worker-nodes) +Node 2 | Linux (Ubuntu Server 18.04 recommended) | [Worker]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/#worker-nodes) +Node 3 | Windows (Windows Server 2019 required) | [Worker]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/#worker-nodes) + +>**Notes:** +> +>- If you are using AWS, you can choose *Microsoft Windows Server 2019 Base with Containers* as Amazon Machine Image (AMI) +>- If you are using GCE, you can choose *Windows Server 2019 Datacenter for Containers* as OS image ### Requirements - You can view node requirements for Linux and Windows nodes in the [installation section]({{< baseurl >}}/rancher/v2.x/en/installation/requirements/). -- All nodes in a virtualization cluster or a bare metal cluster must be connected using a layer 2 network. -- To support [Ingress](https://kubernetes.io/docs/concepts/services-networking/ingress/), your cluster must include at least one Linux node dedicated to the worker role. +- For **Host Gateway (L2bridge)** networking, it's best to use the same Layer 2 network for all nodes. Otherwise, you need to configure the route rules for them. +- For **VXLAN (Overlay)** netwokring, you must confirm the Windows Server 2019 host with [KB4489899](https://support.microsoft.com/en-us/help/4489899) hotfix. Most of Cloud-hosted VMs already have this hotfix. +- Your cluster must include at least one Linux worker node to run Rancher Cluster agent, DNS, Metrics server and Ingress related containers. - Although we recommend the three node architecture listed in the table above, you can add additional Linux and Windows workers to scale up your cluster for redundancy. -## 2. Cloud-hosted VM Networking Configuration +## 2. Create the Custom Cluster ->**Note:** This step only applies to nodes hosted on cloud-hosted virtual machines. If you're using virtualization clusters or bare-metal servers, skip ahead to [Create the Custom Cluster](#3-create-the-custom-cluster). +To create a custom cluster that supports Windows nodes, follow the instructions in [Creating a Cluster with Custom Nodes]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/custom-nodes/#2-create-the-custom-cluster), starting from [2. Create the Custom Cluster]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/custom-nodes/#2-create-the-custom-cluster). While completing the linked instructions, look for steps that requires special actions for Windows nodes, which are flagged with a note. These notes will link back here, to the special Windows instructions listed below. -If you're hosting your nodes on any of the cloud services listed below, you must disable the private IP address checks for both your Linux or Windows hosts on startup. To disable this check for each node, follow the directions provided by each service below. + +1. Select `v1.14 or above` version for **Kubernetes Version**. + +1. Select **Flannel** as **Network Provider**. + +1. Select **Enable** for **Windows Support**. + +1. Choose the **Flannel Backend**. There are two options [**Host Gateway (L2bridge)**](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#host-gw) and [**VXLAN (Overlay)**](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#vxlan). Default is **VXLAN (Overlay)** mode. + +If your nodes are hosted by a **Cloud Provider** and you want automation support such as load balancers or persistent storage devices, see [Selecting Cloud Providers]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/options/cloud-providers) for configuration info. + +Finally, resume [Creating a Cluster with Custom Nodes]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/custom-nodes/#create-the-custom-cluster) from [step 6]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/custom-nodes/#step-6). + +>**Important:** If you are using *Host Gateway (L2bridge)* mode and hosting your nodes on any of the cloud services listed below, you must disable the private IP address checks for both your Linux or Windows hosts on startup. To disable this check for each node, follow the directions provided by each service below. Service | Directions to disable private IP address checks --------|------------------------------------------------ Amazon EC2 | [Disabling Source/Destination Checks](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_NAT_Instance.html#EIP_Disable_SrcDestCheck) Google GCE | [Enabling IP Forwarding for Instances](https://cloud.google.com/vpc/docs/using-routes#canipforward) -Azure VM | [Enable or Disable IP Forwarding](https://docs.microsoft.com/en-us/azure/virtual-network/virtual-network-network-interface#enable-or-disable-ip-forwarding) +Azure VM | [Enable or Disable IP Forwarding](https://docs.microsoft.com/en-us/azure/virtual-network/virtual-network-network-interface#enable-or-disable-ip-forwarding) -## 3. Create the Custom Cluster +## 3. Add Linux Master Node -To create a custom cluster that supports Windows nodes, follow the instructions in [Creating a Cluster with Custom Nodes]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/custom-nodes/#2-create-the-custom-cluster), starting from [2. Create the Custom Cluster]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/custom-nodes/#2-create-the-custom-cluster). While completing the linked instructions, look for steps that requires special actions for Windows nodes, which are flagged with a note. These notes will link back here, to the special Windows instructions listed in the subheadings below. - - -### Enable the Windows Support Option - -While choosing **Cluster Options**, set **Windows Support (Experimental)** to **Enabled**. - -![Enable Windows Support]({{< baseurl >}}/img/rancher/enable-windows-support.png) - -After you select this option, resume [Creating a Cluster with Custom Nodes]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/custom-nodes/#create-the-custom-cluster) from [step 6]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/custom-nodes/#step-6). - -### Networking Option - -When choosing a network provider for a cluster that supports Windows, the only option available is Flannel, as [host-gw](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#host-gw) is needed for IP routing. - -![Flannel]({{< baseurl >}}/img/rancher/flannel.png) - -If your nodes are hosted by a cloud provider and you want automation support such as load balancers or persistent storage devices, see [Selecting Cloud Providers]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/options/cloud-providers) for configuration info. - -### Node Configuration - -The first node in your cluster should be a Linux host that fills the Control Plane role. This role must be fulfilled before you can add Windows hosts to your cluster. At minimum, the node must have this role enabled, but we recommend enabling all three. The following table lists our recommended settings (we'll provide the recommended settings for nodes 2 and 3 later). +The first node in your cluster should be a Linux host that fills both *Control Plane* and *etcd* role. Both of this two roles must fulfill before you can add Windows hosts to your cluster. At a minimum, the node must have 2 roles enabled, but we recommend enabling all three. The following table lists our recommended settings (we'll provide the recommended settings for nodes 2 and 3 later). Option | Setting -------|-------- Node Operating System | Linux -Node Roles | etcd
Control Plane
Worker - -![Recommended Linux Control Plane Configuration]({{< baseurl >}}/img/rancher/linux-control-plane.png) +Node Roles | etcd
Control Plane
Worker (optional) When you're done with these configurations, resume [Creating a Cluster with Custom Nodes]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/custom-nodes/#create-the-custom-cluster) from [step 8]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/custom-nodes/#step-8). +## 4. Add Linux Worker Node - -## 4. Add Linux Host for Ingress Support - -After the initial provisioning of your custom cluster, your cluster only has a single Linux host. Add another Linux host, which will be used to support Ingress for your cluster. +After the initial provisioning of your custom cluster, your cluster only has a single Linux host. Add another Linux host, which will be used to support *Rancher cluster agent*, *Metrics server*, *DNS* and *Ingress* for your cluster. 1. Using the content menu, open the custom cluster your created in [2. Create the Custom Cluster](#2-create-the-custom-cluster). @@ -128,9 +123,11 @@ After the initial provisioning of your custom cluster, your cluster only has a s 1. From **Rancher**, click **Save**. -**Result:** The worker role is installed on your Linux host, and the node registers with Rancher. +**Result:** The **Worker** role is installed on your Linux host, and the node registers with Rancher. -## 5. Adding Windows Workers + + +## 5. Add Windows Workers You can add Windows hosts to a custom cluster by editing the cluster and choosing the **Windows** option. @@ -150,11 +147,13 @@ You can add Windows hosts to a custom cluster by editing the cluster and choosin 1. **Optional:** Repeat these instruction if you want to add more Windows nodes to your cluster. -**Result:** The worker role is installed on your Windows host, and the node registers with Rancher. +**Result:** The **Worker** role is installed on your Windows host, and the node registers with Rancher. -## 6. Cloud-hosted VM Routes Configuration -In Windows clusters, containers communicate with each other using the `host-gw` mode of Flannel. In `host-gw` mode, all containers on the same node belong to a private subnet, and traffic routes from a subnet on one node to a subnet on another node through the host network. + +## 6. Cloud-hosted VM Routes Configuration for Host Gateway Mode + +If using [**Host Gateway (L2bridge)**](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#host-gw) backend of Flannel, all containers on the same node belong to a private subnet, and traffic routes from a subnet on one node to a subnet on another node through the host network. - When worker nodes are provisioned on AWS, virtualization clusters, or bare metal servers, make sure they belong to the same layer 2 subnet. If the nodes don't belong to the same layer 2 subnet, `host-gw` networking will not work. @@ -171,7 +170,7 @@ Then follow the instructions for each cloud provider to configure routing rules Service | Instructions --------|------------- Google GCE | For GCE, add a static route for each node: [Adding a Static Route](https://cloud.google.com/vpc/docs/using-routes#addingroute). -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). +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). ` ` diff --git a/content/rancher/v2.x/en/installation/references/_index.md b/content/rancher/v2.x/en/installation/references/_index.md index f84bb00b71c..9ccafe15b9c 100644 --- a/content/rancher/v2.x/en/installation/references/_index.md +++ b/content/rancher/v2.x/en/installation/references/_index.md @@ -74,6 +74,7 @@ These ports are typically opened on your Kubernetes nodes, regardless of what ty | TCP | 2379 | etcd client requests | | TCP | 2380 | etcd peer communication | | UDP | 8472 | Canal/Flannel VXLAN overlay networking | +| UDP | 4789 | Flannel VXLAN overlay networking on Windows cluster | | TCP | 9099 | Canal/Flannel livenessProbe/readinessProbe | | TCP | 6783 | Weave Port | | UDP | 6783-6784 | Weave UDP Ports | diff --git a/content/rancher/v2.x/en/installation/requirements/_index.md b/content/rancher/v2.x/en/installation/requirements/_index.md index 0a79919978e..109ca0ee078 100644 --- a/content/rancher/v2.x/en/installation/requirements/_index.md +++ b/content/rancher/v2.x/en/installation/requirements/_index.md @@ -20,8 +20,8 @@ Rancher is tested on the following operating systems and their subsequent non-ma * Docker 17.03.x, 18.06.x, 18.09.x * RancherOS 1.5.1 (64-bit) * Docker 17.03.x, 18.06.x, 18.09.x -* Windows Server version 1803 (64-bit) - * Docker 17.06 +* Windows Server 2019 (64-bit) + * Docker 18.09 * _Experimental, see [Configuring Custom Clusters for Windows]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/)_ If you are using RancherOS, make sure you switch the Docker engine to a supported version using:
diff --git a/layouts/shortcodes/ports-custom-nodes.html b/layouts/shortcodes/ports-custom-nodes.html index 9b9f06e10d8..4edf822d2f6 100644 --- a/layouts/shortcodes/ports-custom-nodes.html +++ b/layouts/shortcodes/ports-custom-nodes.html @@ -21,8 +21,8 @@ git.rancher.io (2):
35.160.43.145:32
35.167.242.46:32
52.33.59.17:32 - etcd Plane Nodes - 443 TCP (3) + etcd Plane Nodes + 443 TCP (3) 2379 TCP @@ -45,6 +45,10 @@ 8472 UDP + + 4789 UDP (7) + + 9099 TCP (4) @@ -52,8 +56,8 @@ - Control Plane Nodes - 443 TCP (3) + Control Plane Nodes + 443 TCP (3) 2379 TCP @@ -76,6 +80,10 @@ 8472 UDP + + 4789 UDP (7) + + 10250 TCP @@ -93,8 +101,8 @@ - Worker Plane Nodes - 443 TCP (3) + Worker Plane Nodes + 443 TCP (3) 6443 TCP @@ -105,6 +113,10 @@ 8472 UDP + + 4789 UDP (7) + + @@ -175,7 +187,7 @@ - Notes:

1. Nodes running standalone server or Rancher HA deployment.
2. Required to fetch Rancher chart library.
3. Only without external load balancer.
4. Local traffic to the node itself (not across nodes).
5. Load balancer / proxy that handles tragging to the Rancher UI / API.
6. Only if SSL is not terminated at external load balancer. + Notes:

1. Nodes running standalone server or Rancher HA deployment.
2. Required to fetch Rancher chart library.
3. Only without external load balancer.
4. Local traffic to the node itself (not across nodes).
5. Load balancer / proxy that handles tragging to the Rancher UI / API.
6. Only if SSL is not terminated at external load balancer.
7. Only if using Overlay mode on Windows cluster. \ No newline at end of file diff --git a/static/img/rancher/enable-windows-support.png b/static/img/rancher/enable-windows-support.png deleted file mode 100644 index d7ed2d07a3154246bdd68596c81319447bb61b83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24009 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 diff --git a/static/img/rancher/flannel.png b/static/img/rancher/flannel.png deleted file mode 100644 index e53612209ad35f82a1f05003f19b77bf6db56bf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10455 zcmY+qWn7fs^9BqEQqocaBC&J`C`cn+0+LI2ce6@LE)5GyFGwR@OZSpXBOsj%DBU2a zk6-oof1c;fecvzcb3Sus&dglb%z!o26bSI1;GvQrTa&meKJ9s)ex~+UA zwW0Nr+pL->!o4P-hCm_v!K1$54FR{{U$2(Y2YPJj&F-$+l}d~&3sXxKl^+8*G_>>5 z<-q2OYMWu>J;&vydcNN3*Q)BzUT$|Lf8y+Tr*rwTtrK)vZko!=O8D(Dx||e=2Ik`s zWNh%nF1`{O&+c=V89~_-{%e_8PK@Ya#ylK042qC)TQxaN(!*71LVQO zX8H90q|!qR(V3Q)zHjhrBl$2#2991;s75fe{eOh>QsHFI2m3qv4Pd7BLJGybVvw5%VI(hE#s>+A;|3KFF;5a(7mKbJI)p z0li0MRc0KI)$5{iAoO}A1jb^~BFmH3>&V;jL3`KR@8*hz<7eY@ey@k`uju=}$I(m? zZ~B&~{jp*>Av!4u>vIET@6Fp@Zq`5p<%ksKidWeDT{e^ngYFxnO6_M?=#PJ;PcV?g zFea_nSF{*mw1pwAa;P#?+@??=Qj>|Q&NCvoo)}|?kAJPHq^C{8UJ72vB zI|Z{%?@p}yX;F00aZ^!eNd*Pb_rA_0Ud9|JRH*gHqhu%}&g~4VXL?&~75YZsX_l{)BNW3-k!7K3>A9lu{epRcLe4P1&W?-QGC8}Ju!FZHkTXg2 z$1kDO7%?oxsw|x+E$^!|ko*8<-k zV>ds4WStJ%M!K^@UmqX~{6s~<>1ZCF+^bY?!3Kk{n<|_J!J&7j=S}JxkwJI9wI5kO zOss;)+9LgLItH2i-p{MN^5^3zoCR-hzcN{Y48&tU?akT0bGQ3tav+%|>lr{nc1r8A z6e!snSZ!LE2liw=g_w4I(D+4g)ANa3r;Eaud8qig7(ckxO*Gk(@?_bQx1gy0fo0v} zh0oq}fs=Ew>Z>5S_e8leuBMV08C2s3AeyYBFClGun5U!FKIVhhfx)7>zKZYd4?rku z|Bd~=HOl0`t^Tycy$+JDyAy7zpPSENfwym%dn@-`6U;UX5{T7{6LGz}kI$Ke#iMP5 zI`B)ZO_9+sT?EU(>7rqG-{NT zfRdDQVtsG&u}gp#gxF@h-I#)SIwbbjtk7C`m#ui<#h$obH4!68M_8JvKYFf7a!IHJ z!}sg8{tPcn$?qFYlM9GlQ~UOoeXN63U$lK#yXg>T%&;BlTHrQA#i6}S09~5-0-o$fF1j)73_2UmZCrfibqkb3V}ekNHNzha zuD%NHxil2lWSk3m?$QC`ln^@;Q!~w!*3I0b1%gEdi6~ar&xR57G*5dcV4_$-*Yfu{ zt}Bs4qvY+ILaZxzn03)8jEogofKqDXjR6f6qMyT@Wv9N1NjyjB~h*g1) z_Ko>nXcLuYKD2c}ce(DXJZ-=}z7^&^eqY))NE!HN$12c}T!Otgb#nxcH ztV{E;#kenAuRi_B!0Qe&W=c`RgsqMz^2=R^ob9!?xj=ONioJ7cKr6{a~WwVc)ka zUD~4YIvP>Mr=xWf$@kKJt0}H8A$HPs1h;$~$Oy=clB~g}<0@oy=aI=mxbHEy9F|%v z(jUD93y!=}SxQ;)zgLf{3vzqV+LvqgOCi_n3;{Cg+E8l<7k2T5;4~_C5$IFW6c7ps z+JF^xp&Bz7RxC`>{qs#eTdQpbQ_K_;uKZ=4arvcMmVdH6mjY(AQw?*+IT*`b=pl-F zCf&(y9dl`UE@bCn#wRAaFYXgQVs6#Du4`~y$M1IbLkMn6V#qbDVynIs7DYrK5J=j= z`EY7#A>3rj{iI%t3fPF3VHfH+Gov=>mZbAp;mGZpN2S$%#%$AOQK0}osG5I9#sH|&}g z)VKXa7rsnMqnoX9S$KY{LAzu5t~o%>Kp8Vo>XW~4YL=nKF9sa6jwDU-Hky9FPP62` zlQEyjLLw`2Iuy{fg|&crLK#VfrxczPJ(yT^jL=$pPer%!aJiXKYkM^N7CX2l#z5bFQ-RoG>nn9uqsbCqe+^b7BqL*J2enBM8WZ4h9h&_HhY1xvDo z*viSTXx3Y zbh_{}+4yz=I`Yi(S^PlJ6J*-e`k-XM!^1J}C^<`2A~LM{@is-J5)UW1 zbO`FC7v0)?x@+TU5>`s^_4hP}&xG{bI{%&${yOA;rCM_*!-5}Q-zUW!| zRcRPs(UfLvdCVtr&??Qi5R3a#KnO>5n5wR)wU?^mX+(=E-WKHTi(%c{=b}J2;aEZ< zq-P$V)em#8VV^VDJ%tYwqe|jd8VhlSqjcfNFFT(R0ILVnx{ydqX?R*LS$i>ry20nS z=<>3tZLp2~#0%DUJlT>7_yuHVV!T#oZ6b?PY`pC1CZwF2@ChNI)-|P%p-041~IgA-&T{Q3r z1{M`T!I_BEvxU9>GFr7bjL1mO#4MT%Cqex5h(Gce0dV{6Nr@LI#F5c1P1mZtGX;V-Q*Ig`{uuq?Havy~{~nc5`Uc%m6?3tR5lxzELT|7el_ z8yr7h32nROm)>E9$|#%UxQ_middZ0_!kZ6?1>y|zUtd>s7^alBrtBss#nrFj3d?yJ zxrBAtaTQf8Q>XMu)n^mKc3C*vN=@vo|Ct9M)19oS6Asekzt|dBX%rpiEn$TjzO$K5 zsBJcNkwIe#&)eP%En;9vQ*~loH1yu?oUVv`+(E@`p^^)Y3XG1(jiW^&+J1gKmE93>^PjGz%xP0H|Feic{M4v zO8o@Lt%!8~Gh$T(o2~X1LGHBA;oF*RqTf@c|7pvcVvO0eN9=g=tC|*d7tynm<=*p+uSHe+Ntgp$|Go0Zl z`bQy)NZ0^HjJUP*a{LyZR1Ac|pv!hK=&dz%LW-52J-B5UsLFF&<0+V<%EHGjgk&Mb zZ5a@Cb_vc=Lp}HBi~LFgie!f+A#bI}Y5v_AZw z8(zqoLC@;y3VM=Bx3sjhsHmx5`}zuf+uwhquN28_p5@!7!&6}Y&r0Rk=msk7fUI(> zT~vgVNHS!f3+#?tZS|8^srls&JueqZ-$U6wvVV`QwXHQQQ0o^ky@ zlXMbd+7*7D4WF8siQCvPueYGU3y(!1io~HbwiRRpbb`;V=bZHYj`0zQ0Y$Z1;AdLC z6nw#F9HKnY@Tp#!smy;~t4E2^DfM7lUowBHv^JlMUEgBFU8SW@i8d$ANX(VWf{{T# zhCL^Cqa@dReX8R`)W*I~{9Vs8++5&rT?ljMU4_($3TFA>s7NJoYqr>oUo67*y%< zd$HR6PdbPNK<<$OklIxX^O~9}T=4yHFExdh!PCGv+0f?4*VGoD=IooWAJPgHa7m;Q zHg$3ua`L?$H{p^q)}{Aec-4kzD9;6XxxhFl_$5_Pzs`6e)^oL;<$XI@qaNYmz5a;b zOjh)`!M>}4%z7BK{~0g3`%F47B4}!y*{JL|Jh#BuW2C$x^9^W2#)A_oP@h*;L0zrZ znW?BW+F;#Jp*ub&mV>(Ns2ZK7DFZU^dpxZbkwefV;Q)=PGk^;Buia!Y2`K0P(=~Fq z+}<&jV4mTGD+V*VC zEWjC9bTj*O0LA`;K$jfA^DOvBa&~(BJA@XGm8ZpQPGp7SzF|Okjl*jb>5*Mh_PtLG z(zKPH`GP7ka_fuoX7Ou~+khpdNUa(Hd$RQDwO>XkojkAa>tDBcr>4XT+EvxVJ?4rj zwwBNQLkd=u_1|hGc~=tZ&Fziu*Wa?F5FPQXqvKI$pbZmwE#H{o4ktqF8qfMEV)ybT z?xD9-b*Hgjh-B=S^>62Si(k5Mx;}dE>-!n`gYKezFcjuY==DI|X(Yeg1WExg?hF(* zTxz^Z@<`3DJcia1mA?x)US+n$i0F`LLB+&Do^v*~0Xqy#e+z}`xwxR$4wm||y$pZ*ud(F~C6WHreEyavFZ&aeHH$#ERccA>9tOEXD z`k&0)%X){2m;n&{H00a(6ylh^mAx4SiXYvnrksoL*s_6VPje2tiK-}(eF4Wx znEr|zT|e>c=pSw5x=gGm1j71g-hx_?!XM}MNWy1_M&McpNtB+IMQ3#_(;m#v1XY55 z4Z~l^2Vxwk+>{%<@%)-uxqQ_@T2((g!~Z)XG@s$5gU0TGsJ?r@L*C|rPN4g564L7A zZD^7%-hpBBUWZvXksWM65MHCf>gxPz7LUJPPSIWr6{$;>V?1t|jcIMnXX8mhnOP*3 zkSG=dJ^)(qqb}=-oR+z2mF)Pe`H;H4BTB?mToI_01qYR2ZVy`pb(M$5bV=m`njxFa zx#wG&q5+ z*&$9_>A4iE`OV?9Amz(^f6zw=ERMM>v}&>{?X&vtBLX9EzO0qq zzIjh?!dui0)j9V0Iq$+ksJ=LNs=Pd*$$gtyl;K%Op;?lr$pJ~J=$Eak*|s_t3pCK? z4Bv4ov^o!cIrT*rB!IFn555*~UO>Aqi41eNqcJdYiZiYSu-6fj$Tso74DxJ*#vuM}jVHac#?Xax%>z0~}-O ztLF}Uz%US(P-2Rr+7-Z1U6OosJ2rE%icuRl!dXWz$}oN5b(=A5oNoyyNlGZjIl1#i zAItw*YV<5Uk)##Exur|KPpwxRi`J~4lJ_C%m#3l)(wPm+V9qa?&$)~eT=hycFgT0eG*D(CTj2IS-j+` zUS#RPlxYy%iK|a^KPzh01z(czsoHviZ{+ioQrT)7OaT3np9}i~fQtM!?tXh|VT?YhZSUuiNZogV z9~bVsIiMs9xb;dzu9NQ=z4?m1w5Oxk!EvmGhW1D z`7`AS0UQf1Qg2%jDEl!*l=ep5UI`u z%jTl%Ozm4`FtNh9?+Wb>>XZzg-C&+RGjej)BIG?%+brTmy)Y*E)!){=5-PDQxTmm- zEgjslSWz6^=RE){Gdll+IM@_|XSS0?7yxQ=Fr9%{ZxS-%L8~bMe$rZ+F|J#`WsR~O zRpXd3zKQfwgrI|TG2K{$ngI$l)^!IJ+s{zjNbtFJH#zeCg?BQ_^>?PiMqmITzk2O!MjLM&q^HYMbLJ-}ki9xaV>yXo})CD;-s; z3w@ttHbkJ}c<{>plxfU{N!)f90D30HiRXrI4j1eN>06hjQdQr7#KogG>8vywGSMhB z<6BrvZBF@tGtwsiLz-B8WqF!z5Pd<%*RzDE7L56GSM;@PIHA>X_p(|=xgO!|X|0pu zI-y8waJ#Y77lcY?{dYkl?E4M1h2`ha-g9gWD(J541B(r@#+SS)M2fa3jg(N=3ZUWG zhp`5G$(SFx#iu>8U-lEU)rKOXWM722*FIXYHPsFOOK9%l&(=LY0E*6P+xSt|_)2M9 z?K+Mr$7IG-4}W?QogC9AT31yPG>3?9$;NxOkH(JWk~6 z`L1nvPHJ6cC3-4_&kxxiNN4>i1J|^1Tfk-lxlj*-H06Sh`9Wlf$hS z#qucw!CdM=3MZ?j*|qw)9C_BR;IJ~EG4Si1Xso?H5x)M0ekVz^YD_r42nuq3Vx#*U z<<6e)PFX?%{eCSWAKSC}{GFsl9by30KgGVTDeW-w%jbIOm5^N2 zu6#7r<(u=%VvF~$W?L=KTRQt562bGoH_m^u;H;^m7nOzJ7@q zu{B@KKh3jloyg$PRG+}@QDBIza%4(c$#Qm`d@)7YG|P_i?e_NzBaxhlOUjAdp4|4X zhqhYct6w+!g*&8l#pFUtSWk?Z9CK2HwzUQ14qAmD-VQKnhtAxfW?wgf%j=EK^q1JV7Osut|G(;a8Y z&S8hLo>WP@`VAFqDieUglm+=**Agz`Bn&}oxpB#;v*Zzbdxy8<24UL0fxkT`u$(xN zzT4^75sKAyC-Oe>UQrpf%fUP7!E;NELg8gMBzaG(kZ@b{q|Zwi`9yp4>w*$rC;YVbX{wW7%=xt7#8 zFIqE;&+GfN-(AXEceO1n+qIoWh)1JRJeerAtS=o1@NUOd$Y^O9> zPC>tbG@zH5Sx^f$Z;m_oVMK#x{iRj+E8h*kSsf{r?IJPtOvH9#`(6Y~A*^954FhgT zhXS>Rw+Z(_XGuLg%}%RR4ID~ie-}lJ_Ho>l>(8NdoHL`Q%C?s}ON`_2_P{TzelKtA zJCZiSzP>_|tIZ|L6Y#afog7C_^L&X+CXP4k_s+VbC(76 zr{MeWF|o8qBm3#^$oUC|b%$6LQ1>qQpEbS#4L&-&9y(NK&|>;qyh7?9Gp8Av){6J8MSe0ndmy+0X(XtOM*ESx3SV_fJUm6 z;kKCq{dM688!ptTm@tpE`-1a0iZef%UK-x?VkQ@!GDs zH$u6*QCk+s-fk(EPQ3tmJC&!VXna8R^V8HfiqZ9}8=8!=4~*(oxXeU`a(`KD!dMPH~Ju^RGjRGJf0dKVXHqfj&m8?` zw6vlIE%&~C<6%fK4uRj7d>W1r+BzU3m@* z)6R35fu2Gor2mLNk^tQ|aFfPfvZ{FBBItt_z1g_c)#gVLv%C_|4mx|pk5o^P`DJCf^^ZyAe zOzZ~z!a)+nK$D~dfYezCMhp)t2^{-2Gz~w*5th;BDz(^ij>1vy>^eEn4$Uq?$P1Zi&5`a8M!D)2vj)t7;_kEW(wtF zU~i$C&847E^?PPHG|0rrz|6puYt;SiG;H)t+Try^Y*Knt8t`VAc1^z5u!5{3@ch11 z%!`{onPM31m_XpI-ymo+MR#hcJbssMKpif8_%dd0SvVr~#OE2UBgS~GtT)JpK1O!n2*Nl9d zy2SH!h!#w(0;*~UutXS*Fx_r5AGqwaT2LfKWQ*Bu0)nhq=CnyYPG_3`HiEIypFBAr zPzpysepI!_anO~u1Q2I3~+)B-7b`%m|r zu~LA#8j#D-s}2+zDIxAKaRQLOojh9?=lXGadWvD2RavAJ7Ym1VWCg%VslV8H*Le|I z52Nv&ffJtpZ{EjW9LFu5CpTfGAr6wbmkwV|PI=RY5*$w)|8}YwbH_!j)$(L%*n_`L z)=Fm1a|`wEMde@buJI>!!$l0N)QF8YT+)Ucx+qwmJH4wlH)l`Swn!DQTHIM^c8;~* zUv3_o`Hu_x)j5F<@mb+!nlr(yZeFV_}-y^5qfx(tkn6 znm9d1Z28P!6Fy&6F=iM&Net1kqREIeGNLw|AaHKUD*2zeQIS$bx2jeqrb;rA7MQ49=ir0wh3F>WoDyBD*x~1 zl~abCfqv~jQPQ#CIG*(Q>IUlipPt>E8P;=NyF14zDHQxWBKd!P9P%L0qW50}EQgtr zUe)iaGg$cF58XPk!K5=f_bB`MzwI^(l68DI12wSYM)y>FQx9yKL(~RvBAYnN6jF|= z_`jY~9&Jd26)-o+Pw*I&DYN0__Pf6Vk*-J~%^kXH4&!1C`AeJr8%(2!4n}fsQxy*j zZ$CxK4B*w_)=^?5Z(44a^v`H+T8EpTLJ`cL{uR!pNYaHcpq4B}EW!~+GUMhF!b2xX z0Gc{-0d`_?Nd{Pn6hVp(VfE6bNB-qNzcW1#? zRX@$CLdQyJB*JMS)zaYq-IW+qQO&C%-pIAGj5^E`H|k@YRtSyl|L+GbzS^qBJg4Qo byI&c0)hLEB3#{LhifBr5YO+<*W*`0^t2f$r diff --git a/static/img/rancher/linux-control-plane.png b/static/img/rancher/linux-control-plane.png deleted file mode 100644 index f054ae144da17e322032ae6db5345ccc03059cef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84856 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
  • _o?_X_~*TLVxS3GyN|!PS34}2Xu#h=0HR;x}JpL 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 T%662&y>4Jx6`5)& Date: Tue, 7 May 2019 10:39:45 +0800 Subject: [PATCH 2/9] fix typo --- .../rke-clusters/windows-clusters/_index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md b/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md index 29f0aa3d0d2..a3647211b59 100644 --- a/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md +++ b/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md @@ -18,7 +18,7 @@ This guide walks you through create of a custom cluster that includes 3 nodes: a >- For a summary of Kubernetes features supported in Windows, see [Using Windows Server Containers in Kubernetes](https://kubernetes.io/docs/getting-started-guides/windows/#supported-features). >- Windows worker adding script must run on Windows Server 2019 (core version 1809 or above) hosts. Core version 1803 and earlier versions do not support Kubernetes properly. >- Containers built for Windows Server 1803 or earlier do not run on Windows Server 2019. You must build containers on Windows Server 2019 to run these containers on Windows Server 2019. ->- Windows Overlay networking requires [KB4489899](https://support.microsoft.com/en-us/help/4489899) hostfix. Most of Cloud-hosted VMs already have this hotfix. +>- Windows Overlay networking requires [KB4489899](https://support.microsoft.com/en-us/help/4489899) hotfix. Most of Cloud-hosted VMs already have this hotfix. ## Objectives for Creating Cluster with Windows Support @@ -62,7 +62,7 @@ Node 3 | Windows (Windows Server 2019 required) | [Worker]({{< baseu - You can view node requirements for Linux and Windows nodes in the [installation section]({{< baseurl >}}/rancher/v2.x/en/installation/requirements/). - For **Host Gateway (L2bridge)** networking, it's best to use the same Layer 2 network for all nodes. Otherwise, you need to configure the route rules for them. -- For **VXLAN (Overlay)** netwokring, you must confirm the Windows Server 2019 host with [KB4489899](https://support.microsoft.com/en-us/help/4489899) hotfix. Most of Cloud-hosted VMs already have this hotfix. +- For **VXLAN (Overlay)** networking, you must confirm the Windows Server 2019 host with [KB4489899](https://support.microsoft.com/en-us/help/4489899) hotfix. Most of Cloud-hosted VMs already have this hotfix. - Your cluster must include at least one Linux worker node to run Rancher Cluster agent, DNS, Metrics server and Ingress related containers. - Although we recommend the three node architecture listed in the table above, you can add additional Linux and Windows workers to scale up your cluster for redundancy. From 071a663959cd1205d4b7349705e9a5a615b501d5 Mon Sep 17 00:00:00 2001 From: Lev Lazinskiy Date: Tue, 7 May 2019 18:58:56 -0700 Subject: [PATCH 3/9] Fix minor grammar, break out nodes into list. I think it makes more sense to break out the the types of nodes that we are about to configure into a list. It makes it easier to read. --- .../rke-clusters/windows-clusters/_index.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md b/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md index a3647211b59..7f3c7bca519 100644 --- a/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md +++ b/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md @@ -11,7 +11,11 @@ _Available as of v2.3.0-alpha1_ When provisioning a [custom cluster]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/custom-clusters/) using Rancher, you can use a mix of Linux and Windows hosts as your cluster nodes. -This guide walks you through create of a custom cluster that includes 3 nodes: a Linux node, which serves as a Kubernetes control plane node; another Linux node, which serves as a Kubernetes worker used to support Rancher Cluster agent, Metrics server, DNS and Ingress for the cluster; and a Windows node, which is assigned the Kubernetes worker role and runs your Windows containers. +This guide walks you through the creation of a custom cluster that includes three nodes. + +- 1. A Linux node, which serves as a Kubernetes control plane node. +- 2. Another Linux node, which serves as a Kubernetes worker used to support Rancher Cluster agent, Metrics server, DNS and Ingress for the cluster. +- 3. A Windows node, which is assigned the Kubernetes worker role and runs your Windows containers. >**Notes:** > @@ -45,7 +49,7 @@ To begin provisioning a custom cluster with Windows support, prepare your host s - VMs from virtualization clusters - Bare-metal servers -The table below lists the [Kubernetes roles]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/#kubernetes-cluster-node-components) you'll assign to each host, although you won't enable these roles until further along in the configuration process—we're just informing you of each node's purpose. The first node, a Linux host, is primarily responsible for managing the Kubernetes control plane, although, in this use case, we’re installing all three roles on this node. The second node is also a Linux worker, which is responsible for running DNS server, Ingress controller, Metrics server and Rancher Cluster agent. Finally, the third node is the Windows worker, which will run your Windows applications. +The table below lists the [Kubernetes roles]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/#kubernetes-cluster-node-components) you'll assign to each host, although you won't enable these roles until further along in the configuration process—we're just informing you of each node's purpose. The first node, a Linux host, is primarily responsible for managing the Kubernetes control plane, although, in this use case, we’re installing all three roles on this node. The second node is also a Linux worker, which is responsible for running a DNS server, Ingress controller, Metrics server and Rancher Cluster agent. Finally, the third node is the Windows worker, which will run your Windows applications. Node | Operating System | Future Cluster Role(s) --------|------------------|------ From 106b2be70737fe11524da00abd28e6ccf8a8e804 Mon Sep 17 00:00:00 2001 From: Lev Lazinskiy Date: Tue, 7 May 2019 19:26:24 -0700 Subject: [PATCH 4/9] Add required port for remote access to worker 22 for SSH 3389 for RDP These are required in order to remotely access the nodes. --- .../shortcodes/requirements_ports_rke.html | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/layouts/shortcodes/requirements_ports_rke.html b/layouts/shortcodes/requirements_ports_rke.html index c972bed77d2..1d5dfdbbb93 100644 --- a/layouts/shortcodes/requirements_ports_rke.html +++ b/layouts/shortcodes/requirements_ports_rke.html @@ -213,7 +213,29 @@ Port Source Description - + + + TCP + 22 + +

      +
    • Linux worker nodes only
    • +
    • Any network that you want to be able to remotely access this node from.
    • +
    + + Remote access over SSH + + + TCP + 3389 + +
      +
    • Windows worker nodes only
    • +
    • Any network that you want to be able to remotely access this node from.
    • +
    + + Remote access over RDP + TCP 80 From 2663f7f896fe37d09aab893796cf4e3147a015c5 Mon Sep 17 00:00:00 2001 From: Lev Lazinskiy Date: Tue, 7 May 2019 19:26:45 -0700 Subject: [PATCH 5/9] Rewording and minor grammer fixes. --- .../rke-clusters/windows-clusters/_index.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md b/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md index 7f3c7bca519..cb1e86c1fe7 100644 --- a/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md +++ b/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md @@ -20,13 +20,13 @@ This guide walks you through the creation of a custom cluster that includes thre >**Notes:** > >- For a summary of Kubernetes features supported in Windows, see [Using Windows Server Containers in Kubernetes](https://kubernetes.io/docs/getting-started-guides/windows/#supported-features). ->- Windows worker adding script must run on Windows Server 2019 (core version 1809 or above) hosts. Core version 1803 and earlier versions do not support Kubernetes properly. +>- The script to add a Windows worker must be ran on Windows Server 2019 (core version 1809 or above) hosts. Core version 1803 and earlier versions do not support Kubernetes properly. >- Containers built for Windows Server 1803 or earlier do not run on Windows Server 2019. You must build containers on Windows Server 2019 to run these containers on Windows Server 2019. >- Windows Overlay networking requires [KB4489899](https://support.microsoft.com/en-us/help/4489899) hotfix. Most of Cloud-hosted VMs already have this hotfix. ## Objectives for Creating Cluster with Windows Support -When setting up a custom cluster with support for Windows nodes and containers, complete the series of tasks below. +To set up a custom cluster with support for Windows nodes and containers, you will need to complete the series of tasks listed below. @@ -59,14 +59,14 @@ Node 3 | Windows (Windows Server 2019 required) | [Worker]({{< baseu >**Notes:** > ->- If you are using AWS, you can choose *Microsoft Windows Server 2019 Base with Containers* as Amazon Machine Image (AMI) ->- If you are using GCE, you can choose *Windows Server 2019 Datacenter for Containers* as OS image +>- If you are using AWS, you should choose *Microsoft Windows Server 2019 Base with Containers* as the Amazon Machine Image (AMI). +>- If you are using GCE, you should choose *Windows Server 2019 Datacenter for Containers* as the OS image. ### Requirements -- You can view node requirements for Linux and Windows nodes in the [installation section]({{< baseurl >}}/rancher/v2.x/en/installation/requirements/). +- You can view the requirements for Linux and Windows nodes in the [installation section]({{< baseurl >}}/rancher/v2.x/en/installation/requirements/). - For **Host Gateway (L2bridge)** networking, it's best to use the same Layer 2 network for all nodes. Otherwise, you need to configure the route rules for them. -- For **VXLAN (Overlay)** networking, you must confirm the Windows Server 2019 host with [KB4489899](https://support.microsoft.com/en-us/help/4489899) hotfix. Most of Cloud-hosted VMs already have this hotfix. +- For **VXLAN (Overlay)** networking, you must confirm the Windows Server 2019 has the [KB4489899](https://support.microsoft.com/en-us/help/4489899) hotfix installed. Most of Cloud-hosted VMs already have this hotfix. - Your cluster must include at least one Linux worker node to run Rancher Cluster agent, DNS, Metrics server and Ingress related containers. - Although we recommend the three node architecture listed in the table above, you can add additional Linux and Windows workers to scale up your cluster for redundancy. @@ -98,7 +98,7 @@ Azure VM | [Enable or Disable IP Forwarding](https://docs.microsoft.com/en-us/ ## 3. Add Linux Master Node -The first node in your cluster should be a Linux host that fills both *Control Plane* and *etcd* role. Both of this two roles must fulfill before you can add Windows hosts to your cluster. At a minimum, the node must have 2 roles enabled, but we recommend enabling all three. The following table lists our recommended settings (we'll provide the recommended settings for nodes 2 and 3 later). +The first node in your cluster should be a Linux host that fills both *Control Plane* and *etcd* role. Both of this two roles must be fulfilled before you can add Windows hosts to your cluster. At a minimum, the node must have 2 roles enabled, but we recommend enabling all three. The following table lists our recommended settings (we'll provide the recommended settings for nodes 2 and 3 later). Option | Setting -------|-------- @@ -157,7 +157,7 @@ You can add Windows hosts to a custom cluster by editing the cluster and choosin ## 6. Cloud-hosted VM Routes Configuration for Host Gateway Mode -If using [**Host Gateway (L2bridge)**](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#host-gw) backend of Flannel, all containers on the same node belong to a private subnet, and traffic routes from a subnet on one node to a subnet on another node through the host network. +If you are using the [**Host Gateway (L2bridge)**](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#host-gw) backend of Flannel, all containers on the same node belong to a private subnet, and traffic routes from a subnet on one node to a subnet on another node through the host network. - When worker nodes are provisioned on AWS, virtualization clusters, or bare metal servers, make sure they belong to the same layer 2 subnet. If the nodes don't belong to the same layer 2 subnet, `host-gw` networking will not work. From aef3e2a71415ad328b3138ea6c9f94dfd5f84c77 Mon Sep 17 00:00:00 2001 From: loganhz Date: Tue, 7 May 2019 12:12:52 +0800 Subject: [PATCH 6/9] Windows previous docs --- .../rke-clusters/windows-clusters/_index.md | 5 + .../docs-for-2.1-and-2.2/_index.md | 175 ++++++++++++++++++ 2 files changed, 180 insertions(+) create mode 100644 content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/docs-for-2.1-and-2.2/_index.md diff --git a/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md b/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md index a3647211b59..186b532c08d 100644 --- a/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md +++ b/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md @@ -3,6 +3,11 @@ title: Configuring Custom Clusters for Windows (Experimental) weight: 2240 --- +>**Notes:** +> +>- Windows are new and improved for Rancher v2.3! +>- Still using v2.1.x or v2.2.x? The previous Windows feature has been dropped since 2.1.10 and 2.2.3. See the pipeline documentation for [previous versions]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/docs-for-2.1-and-2.2/). + _Available as of v2.3.0-alpha1_ >**Important:** diff --git a/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/docs-for-2.1-and-2.2/_index.md b/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/docs-for-2.1-and-2.2/_index.md new file mode 100644 index 00000000000..c0c993f1c69 --- /dev/null +++ b/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/docs-for-2.1-and-2.2/_index.md @@ -0,0 +1,175 @@ +--- +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/docs-for-2.1-and-2.2/). + +_Available from v2.1.0 to v2.1.9 and v2.2.0 to v2.2.2_ + +>**Important:** +> +>Support for Windows nodes is currently an experimental feature and is not yet officially supported in Rancher. Therefore, we do not recommend using Windows nodes in a production environment. + +When provisioning a [custom cluster]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/custom-clusters/) using Rancher, you can use a mix of Linux and Windows hosts as your cluster nodes. + +This guide walks you through create of a custom cluster that includes 3 nodes: a Linux node, which serves as a Kubernetes control plane node; another Linux node, which serves as a Kubernetes worker used to support Ingress for the cluster; and a Windows node, which is assigned the Kubernetes worker role and runs your Windows containers. + +>**Notes:** +> +>- For a summary of Kubernetes features supported in Windows, see [Using Windows in Kubernetes](https://kubernetes.io/docs/setup/windows/intro-windows-in-kubernetes/). +>- Windows containers must run on Windows Server 1803 nodes. Windows Server 1709 and earlier versions do not support Kubernetes properly. +>- Containers built for Windows Server 1709 or earlier do not run on Windows Server 1803. You must build containers on Windows Server 1803 to run these containers on Windows Server 1803. + + + +## Objectives for Creating Cluster with Windows Support + +When setting up a custom cluster with support for Windows nodes and containers, complete the series of tasks below. + + + +- [1. Provision Hosts](#1-provision-hosts) +- [2. Cloud-host VM Networking Configuration](#2-cloud-hosted-vm-networking-configuration) +- [3. Create the Custom Cluster](#3-create-the-custom-cluster) +- [4. Add Linux Host for Ingress Support](#4-add-linux-host-for-ingress-support) +- [5. Adding Windows Workers](#5-adding-windows-workers) +- [6. Cloud-host VM Routes Configuration](#6-cloud-hosted-vm-routes-configuration) + + + +## 1. Provision Hosts + +To begin provisioning a custom cluster with Windows support, prepare your host servers. Provision three nodes according to our [requirements]({{< baseurl >}}/rancher/v2.x/en/installation/requirements/)—two Linux, one Windows. Your hosts can be: + +- Cloud-hosted VMs +- VMs from virtualization clusters +- Bare-metal servers + +The table below lists the [Kubernetes roles]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/#kubernetes-cluster-node-components) you'll assign to each host, although you won't enable these roles until further along in the configuration process—we're just informing you of each node's purpose. The first node, a Linux host, is primarily responsible for managing the Kubernetes control plane, although, in this use case, we're installing all three roles on this node. Node 2 is also a Linux worker, which is responsible for Ingress support. Finally, the third node is your Windows worker, which will run your Windows applications. + +Node | Operating System | Future Cluster Role(s) +--------|------------------|------ +Node 1 | Linux (Ubuntu Server 16.04 recommended) | [Control Plane]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/#control-plane-nodes), [etcd]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/#etcd), [Worker]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/#worker-nodes) +Node 2 | Linux (Ubuntu Server 16.04 recommended) | [Worker]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/#worker-nodes) (This node is used for Ingress support) +Node 3 | Windows (*Windows Server 1803 required*) | [Worker]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/#worker-nodes) + +### Requirements + +- You can view node requirements for Linux and Windows nodes in the [installation section]({{< baseurl >}}/rancher/v2.x/en/installation/requirements/). +- All nodes in a virtualization cluster or a bare metal cluster must be connected using a layer 2 network. +- To support [Ingress](https://kubernetes.io/docs/concepts/services-networking/ingress/), your cluster must include at least one Linux node dedicated to the worker role. +- Although we recommend the three node architecture listed in the table above, you can add additional Linux and Windows workers to scale up your cluster for redundancy. + + +## 2. Cloud-hosted VM Networking Configuration + +>**Note:** This step only applies to nodes hosted on cloud-hosted virtual machines. If you're using virtualization clusters or bare-metal servers, skip ahead to [Create the Custom Cluster](#3-create-the-custom-cluster). + +If you're hosting your nodes on any of the cloud services listed below, you must disable the private IP address checks for both your Linux or Windows hosts on startup. To disable this check for each node, follow the directions provided by each service below. + +Service | Directions to disable private IP address checks +--------|------------------------------------------------ +Amazon EC2 | [Disabling Source/Destination Checks](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_NAT_Instance.html#EIP_Disable_SrcDestCheck) +Google GCE | [Enabling IP Forwarding for Instances](https://cloud.google.com/vpc/docs/using-routes#canipforward) +Azure VM | [Enable or Disable IP Forwarding](https://docs.microsoft.com/en-us/azure/virtual-network/virtual-network-network-interface#enable-or-disable-ip-forwarding) + +## 3. Create the Custom Cluster + +To create a custom cluster that supports Windows nodes, follow the instructions in [Creating a Cluster with Custom Nodes]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/custom-nodes/#2-create-the-custom-cluster), starting from [2. Create the Custom Cluster]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/custom-nodes/#2-create-the-custom-cluster). While completing the linked instructions, look for steps that requires special actions for Windows nodes, which are flagged with a note. These notes will link back here, to the special Windows instructions listed in the subheadings below. + + +### Enable the Windows Support Option + +While choosing **Cluster Options**, set **Windows Support (Experimental)** to **Enabled**. + +After you select this option, resume [Creating a Cluster with Custom Nodes]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/custom-nodes/#create-the-custom-cluster) from [step 6]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/custom-nodes/#step-6). + +### Networking Option + +When choosing a network provider for a cluster that supports Windows, the only option available is Flannel, as [host-gw](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#host-gw) is needed for IP routing. + +If your nodes are hosted by a cloud provider and you want automation support such as load balancers or persistent storage devices, see [Selecting Cloud Providers]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/options/cloud-providers) for configuration info. + +### Node Configuration + +The first node in your cluster should be a Linux host that fills the Control Plane role. This role must be fulfilled before you can add Windows hosts to your cluster. At minimum, the node must have this role enabled, but we recommend enabling all three. The following table lists our recommended settings (we'll provide the recommended settings for nodes 2 and 3 later). + +Option | Setting +-------|-------- +Node Operating System | Linux +Node Roles | etcd
    Control Plane
    Worker + +![Recommended Linux Control Plane Configuration]({{< baseurl >}}/img/rancher/linux-control-plane.png) + +When you're done with these configurations, resume [Creating a Cluster with Custom Nodes]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/custom-nodes/#create-the-custom-cluster) from [step 8]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/custom-nodes/#step-8). + + + +## 4. Add Linux Host for Ingress Support + +After the initial provisioning of your custom cluster, your cluster only has a single Linux host. Add another Linux host, which will be used to support Ingress for your cluster. + +1. Using the content menu, open the custom cluster your created in [2. Create the Custom Cluster](#2-create-the-custom-cluster). + +1. From the main menu, select **Nodes**. + +1. Click **Edit Cluster**. + +1. Scroll down to **Node Operating System**. Choose **Linux**. + +1. Select the **Worker** role. + +1. Copy the command displayed on screen to your clipboard. + +1. Log in to your Linux host using a remote Terminal connection. Run the command copied to your clipboard. + +1. From **Rancher**, click **Save**. + +**Result:** The worker role is installed on your Linux host, and the node registers with Rancher. + +## 5. Adding Windows Workers + +You can add Windows hosts to a custom cluster by editing the cluster and choosing the **Windows** option. + +1. From the main menu, select **Nodes**. + +1. Click **Edit Cluster**. + +1. Scroll down to **Node Operating System**. Choose **Windows**. + +1. Select the **Worker** role. + +1. Copy the command displayed on screen to your clipboard. + +1. Log in to your Windows host using your preferred tool, such as [Microsoft Remote Desktop](https://docs.microsoft.com/en-us/windows-server/remote/remote-desktop-services/clients/remote-desktop-clients). Run the command copied to your clipboard in the **Command Prompt (CMD)**. + +1. From Rancher, click **Save**. + +1. **Optional:** Repeat these instruction if you want to add more Windows nodes to your cluster. + +**Result:** The worker role is installed on your Windows host, and the node registers with Rancher. + +## 6. Cloud-hosted VM Routes Configuration + +In Windows clusters, containers communicate with each other using the `host-gw` mode of Flannel. In `host-gw` mode, all containers on the same node belong to a private subnet, and traffic routes from a subnet on one node to a subnet on another node through the host network. + +- When worker nodes are provisioned on AWS, virtualization clusters, or bare metal servers, make sure they belong to the same layer 2 subnet. If the nodes don't belong to the same layer 2 subnet, `host-gw` networking will not work. + +- When worker nodes are provisioned on GCE or Azure, they are not on the same layer 2 subnet. Nodes on GCE and Azure belong to a routable layer 3 network. Follow the instructions below to configure GCE and Azure so that the cloud network knows how to route the host subnets on each node. + +To configure host subnet routing on GCE or Azure, first run the following command to find out the host subnets on each worker node: + +```bash +kubectl get nodes -o custom-columns=nodeName:.metadata.name,nodeIP:status.addresses[0].address,routeDestination:.spec.podCIDR +``` + +Then follow the instructions for each cloud provider to configure routing rules for each node: + +Service | Instructions +--------|------------- +Google GCE | For GCE, add a static route for each node: [Adding a Static Route](https://cloud.google.com/vpc/docs/using-routes#addingroute). +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). + + +` ` From a3df6e7bc504b841ebd82abea64e13c0eff93595 Mon Sep 17 00:00:00 2001 From: Denise Date: Wed, 8 May 2019 19:46:28 -0700 Subject: [PATCH 7/9] Update _index.md --- .../rke-clusters/windows-clusters/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md b/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md index 186b532c08d..570d11cfbcd 100644 --- a/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md +++ b/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md @@ -6,7 +6,7 @@ weight: 2240 >**Notes:** > >- Windows are new and improved for Rancher v2.3! ->- Still using v2.1.x or v2.2.x? The previous Windows feature has been dropped since 2.1.10 and 2.2.3. See the pipeline documentation for [previous versions]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/docs-for-2.1-and-2.2/). +>- 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/). _Available as of v2.3.0-alpha1_ From 9c3603e95f0a7f743934542f1b59c64aaf2fad06 Mon Sep 17 00:00:00 2001 From: Denise Date: Wed, 8 May 2019 19:47:33 -0700 Subject: [PATCH 8/9] Update _index.md --- .../windows-clusters/docs-for-2.1-and-2.2/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/docs-for-2.1-and-2.2/_index.md b/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/docs-for-2.1-and-2.2/_index.md index c0c993f1c69..5721f56958a 100644 --- a/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/docs-for-2.1-and-2.2/_index.md +++ b/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/docs-for-2.1-and-2.2/_index.md @@ -3,7 +3,7 @@ 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/docs-for-2.1-and-2.2/). +>**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/). _Available from v2.1.0 to v2.1.9 and v2.2.0 to v2.2.2_ From 454e390c70ba818c0f0b2576b2dc87e44c6daa17 Mon Sep 17 00:00:00 2001 From: Denise Schannon Date: Wed, 8 May 2019 22:20:01 -0700 Subject: [PATCH 9/9] small updates --- .../rke-clusters/windows-clusters/_index.md | 46 ++++++++++--------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md b/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md index d2a59a00d32..c619e902fa8 100644 --- a/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md +++ b/content/rancher/v2.x/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md @@ -10,28 +10,35 @@ weight: 2240 _Available as of v2.3.0-alpha1_ ->**Important:** -> +>**Important:** +> >Support for Windows nodes is currently an experimental feature and is not yet officially supported in Rancher. Therefore, we do not recommend using Windows nodes in a production environment. When provisioning a [custom cluster]({{< baseurl >}}/rancher/v2.x/en/cluster-provisioning/custom-clusters/) using Rancher, you can use a mix of Linux and Windows hosts as your cluster nodes. -This guide walks you through the creation of a custom cluster that includes three nodes. +This guide walks you through the creation of a custom cluster that includes three nodes. -- 1. A Linux node, which serves as a Kubernetes control plane node. -- 2. Another Linux node, which serves as a Kubernetes worker used to support Rancher Cluster agent, Metrics server, DNS and Ingress for the cluster. -- 3. A Windows node, which is assigned the Kubernetes worker role and runs your Windows containers. +* A Linux node, which serves as a Kubernetes control plane node. +* Another Linux node, which serves as a Kubernetes worker used to support Rancher Cluster agent, Metrics server, DNS and Ingress for the cluster. +* A Windows node, which is assigned the Kubernetes worker role and runs your Windows containers. ->**Notes:** -> ->- For a summary of Kubernetes features supported in Windows, see [Using Windows Server Containers in Kubernetes](https://kubernetes.io/docs/getting-started-guides/windows/#supported-features). ->- The script to add a Windows worker must be ran on Windows Server 2019 (core version 1809 or above) hosts. Core version 1803 and earlier versions do not support Kubernetes properly. ->- Containers built for Windows Server 1803 or earlier do not run on Windows Server 2019. You must build containers on Windows Server 2019 to run these containers on Windows Server 2019. ->- Windows Overlay networking requires [KB4489899](https://support.microsoft.com/en-us/help/4489899) hotfix. Most of Cloud-hosted VMs already have this hotfix. +## Pre-Prerequisites + +For a summary of Kubernetes features supported in Windows, see [Using Windows Server Containers in Kubernetes](https://kubernetes.io/docs/getting-started-guides/windows/#supported-features). + +### Node Requirements + +In order to add Windows worker nodes, the node must be running Windows Server 2019 (i.e. core version 1809 or above). Any earlier versions (e.g. core version 1803 and earlier) do not properly support Kubernetes. + +Windows overlay networking requires that [KB4489899](https://support.microsoft.com/en-us/help/4489899) hotfix is installed. Most cloud-hosted VMs already have this hotfix. + +### Container Requirements + +Windows requires that containers must be built on the same Windows server version that they are being deployed on. Therefore, containers must be built on Windows Server 2019 in order to be used with the node requirements of running Windows Server 2019. If you have existing containers built for Windows Server 1803 or earlier, they must be re-built to use Windows Server 2019. ## Objectives for Creating Cluster with Windows Support -To set up a custom cluster with support for Windows nodes and containers, you will need to complete the series of tasks listed below. +To set up a custom cluster with support for Windows nodes and containers, you will need to complete the series of tasks listed below. @@ -44,11 +51,9 @@ To set up a custom cluster with support for Windows nodes and containers, you wi - - ## 1. Provision Hosts -To begin provisioning a custom cluster with Windows support, prepare your host servers. Provision three nodes according to our [requirements]({{< baseurl >}}/rancher/v2.x/en/installation/requirements/)—two Linux, one Windows. Your hosts can be: +To begin provisioning a custom cluster with Windows support, prepare your hosts. Provision three nodes according to our [installation requirements]({{< baseurl >}}/rancher/v2.x/en/installation/requirements/) - two Linux, one Windows. Your hosts can be: - Cloud-hosted VMs - VMs from virtualization clusters @@ -69,12 +74,11 @@ Node 3 | Windows (Windows Server 2019 required) | [Worker]({{< baseu ### Requirements -- You can view the requirements for Linux and Windows nodes in the [installation section]({{< baseurl >}}/rancher/v2.x/en/installation/requirements/). +- You can view the general requirements for Linux and Windows nodes in the [installation section]({{< baseurl >}}/rancher/v2.x/en/installation/requirements/). - For **Host Gateway (L2bridge)** networking, it's best to use the same Layer 2 network for all nodes. Otherwise, you need to configure the route rules for them. -- For **VXLAN (Overlay)** networking, you must confirm the Windows Server 2019 has the [KB4489899](https://support.microsoft.com/en-us/help/4489899) hotfix installed. Most of Cloud-hosted VMs already have this hotfix. +- For **VXLAN (Overlay)** networking, you must confirm that the Windows Server 2019 has the [KB4489899](https://support.microsoft.com/en-us/help/4489899) hotfix installed. Most cloud-hosted VMs already have this hotfix. - Your cluster must include at least one Linux worker node to run Rancher Cluster agent, DNS, Metrics server and Ingress related containers. -- Although we recommend the three node architecture listed in the table above, you can add additional Linux and Windows workers to scale up your cluster for redundancy. - +- Although we recommend the three node architecture listed in the table above, you can always add additional Linux and Windows workers to scale up your cluster for redundancy. ## 2. Create the Custom Cluster @@ -103,7 +107,7 @@ Azure VM | [Enable or Disable IP Forwarding](https://docs.microsoft.com/en-us/ ## 3. Add Linux Master Node -The first node in your cluster should be a Linux host that fills both *Control Plane* and *etcd* role. Both of this two roles must be fulfilled before you can add Windows hosts to your cluster. At a minimum, the node must have 2 roles enabled, but we recommend enabling all three. The following table lists our recommended settings (we'll provide the recommended settings for nodes 2 and 3 later). +The first node in your cluster should be a Linux host that fills both *Control Plane* and *etcd* role. Both of these two roles must be fulfilled before you can add Windows hosts to your cluster. At a minimum, the node must have 2 roles enabled, but we recommend enabling all three. The following table lists our recommended settings (we'll provide the recommended settings for nodes 2 and 3 later). Option | Setting -------|--------