You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardexpand all lines: docs/getting-started-guides/windows/index.md
+71-20
Original file line number
Diff line number
Diff line change
@@ -17,21 +17,21 @@ The Kubernetes control plane (API Server, Scheduler, Controller Manager, etc) co
17
17
{: .note}
18
18
19
19
## Build
20
-
We recommend using the release binaries that can be found at [https://github.com/kubernetes/kubernetes/releases](https://github.com/kubernetes/kubernetes/releases). Look for the Node Binaries section by visiting the binary downloads link.
20
+
We recommend using the release binaries that can be found at [https://github.com/kubernetes/kubernetes/releases](https://github.com/kubernetes/kubernetes/releases). Look for the Node Binaries section by visiting the binary downloads link.
21
21
22
22
If you wish to build the code yourself, please follow the next instructions:
2. Run the following commands to build kubelet and kube-proxy:
30
30
31
31
```bash
32
32
K8SREPO="github.com/kubernetes/kubernetes"
33
33
go get -d $K8SREPO
34
-
# Note: the above command may spit out a message about
34
+
# Note: the above command may spit out a message about
35
35
# "no Go files in...", but it can be safely ignored!
36
36
37
37
cd $GOPATH/src/k8s.io/kubernetes
@@ -56,7 +56,7 @@ In Kubernetes version 1.9 or later, Windows Server Containers for Kubernetes are
56
56
57
57
## Networking
58
58
There are several supported network configurations with Kubernetes v1.9 on Windows, including both Layer-3 routed and overlay topologies using third-party network plugins.
59
-
59
+
60
60
1.[Upstream L3 Routing](#upstream-l3-routing-topology) - IP routes configured in upstream ToR
61
61
2.[Host-Gateway](#host-gateway-topology) - IP routes configured on each host
62
62
3.[Open vSwitch (OVS) & Open Virtual Network (OVN) with Overlay](#using-ovn-with-ovs) - overlay networks (supports STT and Geneve tunneling types)
@@ -72,7 +72,7 @@ An additional two CNI plugins [win-l2bridge (host-gateway) and win-overlay (vxla
72
72
The above networking approaches are already supported on Linux using a bridge interface, which essentially creates a private network local to the node. Similar to the Windows side, routes to all other pod CIDRs must be created in order to send packets via the "public" NIC.
73
73
74
74
### Windows
75
-
Windows supports the CNI network model and uses plugins to interface with the Windows Host Networking Service (HNS) to configure host networking and policy. At the time of this writing, the only publicly available CNI plugin from Microsoft is built from a private repo and available here [wincni.exe](https://github.com/Microsoft/SDN/blob/master/Kubernetes/windows/cni/wincni.exe). It uses an l2bridge network created through the Windows Host Networking Service (HNS) by an administrator using HNS PowerShell commands on each node as documented in the [Windows Host Setup](#windows-host-setup) section below. Source code for the future CNI plugins will be made available publicly.
75
+
Windows supports the CNI network model and uses plugins to interface with the Windows Host Networking Service (HNS) to configure host networking and policy. At the time of this writing, the only publicly available CNI plugin from Microsoft is built from a private repo and available here [wincni.exe](https://github.com/Microsoft/SDN/blob/master/Kubernetes/windows/cni/wincni.exe). It uses an l2bridge network created through the Windows Host Networking Service (HNS) by an administrator using HNS PowerShell commands on each node as documented in the [Windows Host Setup](#windows-host-setup) section below. Source code for the future CNI plugins will be made available publicly.
76
76
77
77
#### Upstream L3 Routing Topology
78
78
In this topology, networking is achieved using L3 routing with static IP routes configured in an upstream Top of Rack (ToR) switch/router. Each cluster node is connected to the management network with a host IP. Additionally, each node uses a local 'l2bridge' network with a pod CIDR assigned. All pods on a given worker node will be connected to the pod CIDR subnet ('l2bridge' network). In order to enable network communication between pods running on different nodes, the upstream router has static routes configured with pod CIDR prefix => Host IP.
@@ -92,7 +92,7 @@ The following diagram gives a general overview of the architecture and interacti
92
92
93
93
(The above image is from [https://github.com/openvswitch/ovn-kubernetes#overlay-mode-architecture-diagram](https://github.com/openvswitch/ovn-kubernetes#overlay-mode-architecture-diagram))
94
94
95
-
Due to its architecture, OVN has a central component which stores your networking intent in a database. Other components i.e. kube-apiserver, kube-controller-manager, kube-scheduler etc. can be deployed on that central node as well.
95
+
Due to its architecture, OVN has a central component which stores your networking intent in a database. Other components i.e. kube-apiserver, kube-controller-manager, kube-scheduler etc. can be deployed on that central node as well.
96
96
97
97
## Setting up Windows Server Containers on Kubernetes
98
98
To run Windows Server Containers on Kubernetes, you'll need to set up both your host machines and the Kubernetes node components for Windows. Depending on your network topology, routes may need to be set up for pod communication on different nodes.
@@ -103,7 +103,7 @@ To run Windows Server Containers on Kubernetes, you'll need to set up both your
103
103
104
104
##### Linux Host Setup
105
105
106
-
1. Linux hosts should be setup according to their respective distro documentation and the requirements of the Kubernetes version you will be using.
106
+
1. Linux hosts should be setup according to their respective distro documentation and the requirements of the Kubernetes version you will be using.
107
107
2. Configure Linux Master node using steps [here](https://github.com/MicrosoftDocs/Virtualization-Documentation/blob/live/virtualization/windowscontainers/kubernetes/creating-a-linux-master.md)
108
108
3.[Optional] CNI network plugin installed.
109
109
@@ -119,7 +119,7 @@ To run Windows Server Containers on Kubernetes, you'll need to set up both your
119
119
120
120
More detailed instructions can be found [here](https://github.com/MicrosoftDocs/Virtualization-Documentation/blob/live/virtualization/windowscontainers/kubernetes/getting-started-kubernetes-windows.md).
121
121
122
-
**Windows CNI Config Example**
122
+
**Windows CNI Config Example**
123
123
Today, Windows CNI plugin is based on wincni.exe code with the following example, configuration file.
124
124
125
125
Note: this file assumes that a user previous created 'l2bridge' host networks on each Windows node using `<Verb>-HNSNetwork` cmdlets as shown in the `start-kubelet.ps1` and `start-kubeproxy.ps1` scripts linked above
@@ -287,7 +287,7 @@ Because your cluster has both Linux and Windows nodes, you must explicitly set t
287
287
```
288
288
## Support for kubeadm join
289
289
290
-
If your cluster has been created by [kubeadm](https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/),
290
+
If your cluster has been created by [kubeadm](https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/),
291
291
and your networking is setup correctly using one of the methods listed above (networking is setup outside of kubeadm), you can use kubeadm to add a Windows node to your cluster. At a high level, you first have to initialize the master with kubeadm (Linux), then set up the CNI based networking (outside of kubeadm), and finally start joining Windows or Linux worker nodes to the cluster. For additional documentation and reference material, visit the kubeadm link above.
292
292
293
293
The kubeadm binary can be found at [Kubernetes Releases](https://github.com/kubernetes/kubernetes/releases), inside the node binaries archive. Adding a Windows node is not any different than adding a Linux node:
@@ -313,9 +313,9 @@ Secrets and ConfigMaps can be utilized in Windows Server Containers, but must be
313
313
data:
314
314
username: YWRtaW4=
315
315
password: MWYyZDFlMmU2N2Rm
316
-
316
+
317
317
---
318
-
318
+
319
319
apiVersion: v1
320
320
kind: Pod
321
321
metadata:
@@ -338,7 +338,7 @@ Secrets and ConfigMaps can be utilized in Windows Server Containers, but must be
338
338
nodeSelector:
339
339
beta.kubernetes.io/os: windows
340
340
```
341
-
341
+
342
342
Windows pod with configMap values mapped to environment variables
343
343
344
344
```yaml
@@ -374,14 +374,14 @@ spec:
374
374
nodeSelector:
375
375
beta.kubernetes.io/os: windows
376
376
```
377
-
377
+
378
378
### Volumes
379
379
Some supported Volume Mounts are local, emptyDir, hostPath. One thing to remember is that paths must either be escaped, or use forward slashes, for example `mountPath: "C:\\etc\\foo"` or `mountPath: "C:/etc/foo"`.
380
380
381
381
Persistent Volume Claims are supported for supported volume types.
382
382
383
383
**Examples:**
384
-
384
+
385
385
Windows pod with a hostPath volume
386
386
```yaml
387
387
apiVersion: v1
@@ -403,9 +403,9 @@ Persistent Volume Claims are supported for supported volume types.
403
403
hostPath:
404
404
path: "C:\\etc\\foo"
405
405
```
406
-
406
+
407
407
Windows pod with multiple emptyDir volumes
408
-
408
+
409
409
```yaml
410
410
apiVersion: v1
411
411
kind: Pod
@@ -428,18 +428,69 @@ Persistent Volume Claims are supported for supported volume types.
428
428
nodeSelector:
429
429
beta.kubernetes.io/os: windows
430
430
```
431
-
431
+
432
432
### Metrics
433
433
434
434
Windows Stats use a hybrid model: pod and container level stats come from CRI (via dockershim), while node level stats come from the "winstats" package that exports cadvisor like datastructures using windows specific perf counters from the node.
435
435
436
+
### Container Resources
437
+
438
+
Container resources (CPU and memory) could be set now for windows containers in v1.10.
439
+
440
+
```yaml
441
+
apiVersion: extensions/v1beta1
442
+
kind: Deployment
443
+
metadata:
444
+
name: iis
445
+
spec:
446
+
replicas: 3
447
+
template:
448
+
metadata:
449
+
labels:
450
+
app: iis
451
+
spec:
452
+
containers:
453
+
- name: iis
454
+
image: microsoft/iis
455
+
resources:
456
+
limits:
457
+
memory: "128Mi"
458
+
cpu: 2
459
+
ports:
460
+
- containerPort: 80
461
+
```
462
+
463
+
### Hyper-V Containers
464
+
465
+
Hyper-V containers are supported as experimental in v1.10. To create a Hyper-V container, kubelet should be started with feature gates `HyperVContainer=true` and Pod should include annotation `experimental.windows.kubernetes.io/isolation-type=hyperv`.
## Known Limitations for Windows Server Containers with v1.9
437
489
Some of these limitations will be addressed by the community in future releases of Kubernetes
438
490
- Shared network namespace (compartment) with multiple Windows Server containers (shared kernel) per pod is only supported on Windows Server 1709 or later
439
-
- Using Secrets and ConfigMaps as volume mounts is not supported
491
+
- Using Secrets and ConfigMaps as volume mounts is not supported
440
492
- The StatefulSet functionality for stateful applications is not supported
441
493
- Horizontal Pod Autoscaling for Windows Server Container pods has not been verified to work end-to-end
442
-
- Hyper-V Containers are not supported
443
494
444
495
445
-
> As of this writing, the Kube-proxy binary requires a pending Kubernetes [pull request](https://github.com/kubernetes/kubernetes/pull/56529) to work properly. You may need to [build](#build) the binaries manually to work around this.
496
+
> As of this writing, the Kube-proxy binary requires a pending Kubernetes [pull request](https://github.com/kubernetes/kubernetes/pull/56529) to work properly. You may need to [build](#build) the binaries manually to work around this.
0 commit comments