sigs.k8s.io/cluster-api-provider-azure@v1.17.0/docs/book/src/self-managed/windows.md (about) 1 # Windows Clusters 2 3 ## Overview 4 5 CAPZ enables you to create Windows Kubernetes clusters on Microsoft Azure. We recommend using Containerd for the Windows runtime in Cluster API for Azure. 6 7 ### Using Containerd for Windows Clusters 8 9 To deploy a cluster using Windows, use the [Windows flavor template](https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-azure/main/templates/cluster-template-windows.yaml). 10 11 ## Deploy a workload 12 13 After you Windows VM is up and running you can deploy a workload. Using the deployment file below: 14 15 ``` 16 apiVersion: apps/v1 17 kind: Deployment 18 metadata: 19 name: iis-1809 20 labels: 21 app: iis-1809 22 spec: 23 replicas: 1 24 template: 25 metadata: 26 name: iis-1809 27 labels: 28 app: iis-1809 29 spec: 30 containers: 31 - name: iis 32 image: mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019 33 resources: 34 limits: 35 cpu: 1 36 memory: 800m 37 requests: 38 cpu: .1 39 memory: 300m 40 ports: 41 - containerPort: 80 42 nodeSelector: 43 "kubernetes.io/os": windows 44 selector: 45 matchLabels: 46 app: iis-1809 47 --- 48 apiVersion: v1 49 kind: Service 50 metadata: 51 name: iis 52 spec: 53 type: LoadBalancer 54 ports: 55 - protocol: TCP 56 port: 80 57 selector: 58 app: iis-1809 59 ``` 60 61 Save this file to iis.yaml then deploy it: 62 63 ``` 64 kubectl apply -f .\iis.yaml 65 ``` 66 67 Get the Service endpoint and curl the website: 68 69 ``` 70 kubectl get services 71 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE 72 iis LoadBalancer 10.0.9.47 <pending> 80:31240/TCP 1m 73 kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 46m 74 75 curl <EXTERNAL-IP> 76 ``` 77 78 #### Kube-proxy and CNIs for Containerd 79 80 The Windows HostProcess Container feature is Alpha for Kubernetes v1.22 and Beta for v1.23. In v1.28, this feature is on by default and the `WindowsHostProcessContainers` feature gate is no longer recognized. See the Windows [Hostprocess KEP](https://github.com/kubernetes/enhancements/tree/master/keps/sig-windows/1981-windows-privileged-container-support) for more details. Kube-proxy and other CNI's have been updated to run in HostProcess containers. The current implementation is using [kube-proxy and Calico CNI built by sig-windows](https://github.com/kubernetes-sigs/sig-windows-tools/pull/161). Sig-windows is working to upstream the kube-proxy, cni implementations, and improve kubeadm support in the next few releases. 81 82 Current requirements: 83 84 - Kubernetes 1.23+ 85 - containerd 1.6+ 86 - `WindowsHostProcessContainers` feature-gate (Beta / on-by-default for v1.23) turned on for kube-apiserver and kubelet, omitted in v1.28 and later 87 88 These requirements are satisfied by the Windows Containerd Template and Azure Marketplace reference image `cncf-upstream:capi-windows:k8s-1dot22dot1-windows-2019-containerd:2021.10.15` 89 90 ## Details 91 92 See the CAPI proposal for implementation details: https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20200804-windows-support.md 93 94 ### VM and VMSS naming 95 96 Azure does not support creating Windows VM's with names longer than 15 characters ([see additional details historical restrictions](https://github.com/kubernetes-sigs/cluster-api/issues/2217#issuecomment-743336941)). 97 98 When creating a cluster with `AzureMachine` if the AzureMachine is longer than 15 characters then the first 9 characters of the cluster name and appends the last 5 characters of the machine to create a unique machine name. 99 100 When creating a cluster with `Machinepool` if the Machine Pool name is longer than 9 characters then the Machine pool uses the prefix `win` and appends the last 5 characters of the machine pool name. 101 102 ### VM password and access 103 The VM password is [random generated](https://cloudbase-init.readthedocs.io/en/latest/plugins.html#setting-password-main) 104 by Cloudbase-init during provisioning of the VM. For Access to the VM you can use ssh, which can be configured with a 105 public key you provide during deployment. 106 It's required to specify the SSH key using the `users` property in the Kubeadm config template. Specifying the `sshPublicKey` on `AzureMachine` / `AzureMachinePool` resources only works with Linux instances. 107 108 For example like this: 109 ```yaml 110 apiVersion: bootstrap.cluster.x-k8s.io/v1beta1 111 kind: KubeadmConfigTemplate 112 metadata: 113 name: test1-md-0 114 namespace: default 115 spec: 116 template: 117 spec: 118 ... 119 users: 120 - name: username 121 groups: Administrators 122 sshAuthorizedKeys: 123 - "ssh-rsa AAAA..." 124 ``` 125 126 To SSH: 127 128 ``` 129 ssh -t -i .sshkey -o 'ProxyCommand ssh -i .sshkey -W %h:%p capi@<api-server-ip>' capi@<windows-ip> 130 ``` 131 132 Refer to [SSH Access for nodes](ssh-access.md) for more instructions on how to connect using SSH. 133 134 > There is also a [CAPZ kubectl plugin](https://github.com/kubernetes-sigs/cluster-api-provider-azure/blob/main/hack/debugging/Readme.md) that automates the ssh connection using the Management cluster 135 136 To RDP you can proxy through the api server: 137 138 ``` 139 ssh -L 5555:<windows-ip>:3389 capi@<api-server-ip> 140 ``` 141 142 And then open an RDP client on your local machine to `localhost:5555` 143 144 ### Image creation 145 The images are built using [image-builder](https://github.com/kubernetes-sigs/image-builder) and published the the Azure Market place. They use [Cloudbase-init](https://cloudbase-init.readthedocs.io/en/latest/) to bootstrap the machines via Kubeadm. 146 147 Find the latest published images: 148 149 ``` 150 az vm image list --publisher cncf-upstream --offer capi-windows -o table --all 151 Offer Publisher Sku Urn Version 152 ------------ ------------- ---------------------------- ------------------------------------------------------------------ ---------- 153 capi-windows cncf-upstream k8s-1dot22dot1-windows-2019-containerd cncf-upstream:capi-windows:k8s-1dot22dot1-windows-2019-containerd:2021.10.15 2021.10.15 154 capi-windows cncf-upstream k8s-1dot22dot2-windows-2019-containerd cncf-upstream:capi-windows:k8s-1dot22dot2-windows-2019-containerd:2021.10.15 2021.10.15 155 ``` 156 157 If you would like customize your images please refer to the documentation on building your own [custom images](custom-images.md).