Quickstart

6 MINUTE READ

Big picture

Install Calico for Windows on your Kubernetes cluster in approximately 5 minutes.

Concepts

Calico for Windows is a hybrid implementation that requires a Linux control node for Calico components, and a Windows cluster for Windows nodes.

Before you begin

Datastore requirements

Whether you use etcd or Kubernetes datastore (kdd), the datastore for the Windows node/Kubernetes cluster must be the same as the datastore for the Linux control node. (You cannot mix datastores in a Calico for Windows implementation.)

Kubernetes cluster requirements

  • Kubernetes clusters with versions 1.18, 1.17, or 1.16

Windows node requirements

  • Windows Server 1903 (AKA 19H1) build 18317 or greater, with Docker service enabled
  • Remote access to the Windows node via Remote Desktop Protocol (RDP) or Windows Remote Management (WinRM)
  • Additionally, for EKS:
    • The VPC controllers must be installed be installed to run Windows pods.
    • The Windows instance role must have access to secrets in the kube-system namespace.

Linux control node requirements

  • Installed with Calico v3.12+
  • If Calico networking is being used:
    • Networking must be VXLAN. (Note: for EKS, networking is set to none since AWS VPC networking is used.)
    • Strict affinity must be set to true

How to

Configure strict affinity for clusters using Calico networking

For Linux control nodes using Calico networking, strict affinity must be set to true. This is required to prevent Linux nodes from borrowing IP addresses from Windows nodes:

calicoctl ipam configure --strictaffinity=true

Install Calico for Windows

The following steps install a Kubernetes cluster on a single Windows node, with a Linux control node.

  • Kubernetes

    The geeky details of what you get by default:

Policy
Calico
IPAM
Calico
CNI
Calico
Overlay
VXLAN
Routing
BGP
Datastore
Kubernetes
?
  • EKS

    The geeky details of what you get by default:

Policy
Calico
IPAM
AWS
CNI
AWS
Overlay
No
Routing
VPC Native
Datastore
Kubernetes
?
  1. Prepare directory for Kubernetes files on Windows node.

    mkdir c:\k
    
  2. Copy the Kubernetes kubeconfig file from the master node (default, Location $HOME/.kube/config), to c:\k.

  3. Download the powershell script, install-calico-windows.ps1.

    Invoke-WebRequest https://docs.projectcalico.org/scripts/install-calico-windows.ps1 -OutFile c:\install-calico-windows.ps1
    
  4. Run install-calico-windows.ps1 with correct parameters. The powershell script will perform following tasks.

    • Downloads Calico for Windows release binary and other Windows utilities files.
    • Downloads Kubernetes binaries.
    • Configures Calico for Windows and starts the Calico service.
  5. To skip any of the above tasks, see Configure installation parameters.

  6. Run install-calico-windows.ps1 for your datastore with parameters for your implementation. You do not need to pass a parameter if the default value of the parameter is correct for you cluster.

    Kubernetes datastore (default)

    c:\install-calico-windows.ps1 -KubeVersion <your Kubernetes version (e.g. 1.18.6)> \
                                  -ServiceCidr <your service cidr (default 10.96.0.0/12)> \
                                  -DNSServerIPs <your DNS service IP (default 10.96.0.10)>
    

    etcd datastore

    c:\install-calico-windows.ps1 -KubeVersion <your Kubernetes version (e.g. 1.18.6)> \
                                  -Datastore etcdv3
                                  -EtcdEndpoints <your etcd endpoint ip>
                                  -ServiceCidr <your service cidr (default 10.96.0.0/12)> \
                                  -DNSServerIPs <your DNS server IPs (default 10.96.0.10)>
    

    Note: You do not need to pass a parameter if the default value of the parameter is correct for you cluster.

  7. Verify that the Calico services are running.

    PS C:\> Get-Service -Name CalicoNode
    
    Status   Name               DisplayName
    ------   ----               -----------
    Running  CalicoNode         Calico Windows Startup
    
    
    PS C:\> Get-Service -Name CalicoFelix
    
    Status   Name               DisplayName
    ------   ----               -----------
    Running  CalicoFelix        Calico Windows Agent
    
  8. Install and start kubelet/kube-proxy service. Execute following powershell script/commands.

    C:\CalicoWindows\kubernetes\install-kube-services.ps1
    Start-Service -Name kubelet
    Start-Service -Name kube-proxy
    
  9. Verify kubelet/kube-proxy services are running.

    PS C:\> Get-Service -Name kubelet
    
    Status   Name               DisplayName
    ------   ----               -----------
    Running  kubelet            kubelet service
    
    
    PS C:\> Get-Service -Name kube-proxy
    
    Status   Name               DisplayName
    ------   ----               -----------
    Running  kube-proxy         kube-proxy service
    
  1. Prepare directory for Kubernetes files on Windows node.

    mkdir c:\k
    
  2. Install kubectl and move the kubectl binary to c:\k.

  3. Download the powershell script, install-calico-windows.ps1.

    Invoke-WebRequest https://docs.projectcalico.org/scripts/install-calico-windows.ps1 -OutFile c:\install-calico-windows.ps1
    
  4. Run install-calico-windows.ps1 with correct parameters. The powershell script will perform following tasks.

    • Downloads Calico for Windows release binary and other Windows utilities files.
    • Downloads Kubernetes binaries.
    • Configures Calico for Windows and starts the Calico service.
  5. To skip any of the above tasks, see Configure installation parameters.

  6. Run install-calico-windows.ps1 for your datastore with parameters for your implementation. You do not need to pass a parameter if the default value of the parameter is correct for you cluster.

    Kubernetes datastore (default)

    c:\install-calico-windows.ps1 -ServiceCidr <your service cidr (default 10.96.0.0/12)> \
                                  -DNSServerIPs <your DNS service IP (default 10.96.0.10)>
    

    etcd datastore

    c:\install-calico-windows.ps1 -Datastore etcdv3
                                  -EtcdEndpoints <your etcd endpoint ip>
                                  -ServiceCidr <your service cidr (default 10.96.0.0/12)> \
                                  -DNSServerIPs <your DNS server IPs (default 10.96.0.10)>
    

    Note: You do not need to pass a parameter if the default value of the parameter is correct for you cluster.

  7. Verify that the Calico services are running.

    PS C:\> Get-Service -Name CalicoNode
    
    Status   Name               DisplayName
    ------   ----               -----------
    Running  CalicoNode         Calico Windows Startup
    
    
    PS C:\> Get-Service -Name CalicoFelix
    
    Status   Name               DisplayName
    ------   ----               -----------
    Running  CalicoFelix        Calico Windows Agent
    
  8. Verify kubelet and kube-proxy services are running.

    PS C:\> Get-Service -Name kubelet
    
    Status   Name               DisplayName
    ------   ----               -----------
    Running  kubelet            kubelet service
    
    
    PS C:\> Get-Service -Name kube-proxy
    
    Status   Name               DisplayName
    ------   ----               -----------
    Running  kube-proxy         kube-proxy service
    

Configure installation parameters

Parameter Name Description Default
KubeVersion Version of Kubernetes binaries to use. If value is empty string (default), the Calico for Windows installation script does not download Kubernetes binaries and run Kubernetes service. Use the default for managed public cloud. ””
DownloadOnly Download without installing Calico for Windows. Set to yes to manually install and configure Calico for Windows. For example, Calico for Windows the hard way. no
Datastore Calico for Windows datastore type [kubernetes or etcdv3] for reading endpoints and policy information. kubernetes
EtcdEndpoints Comma-delimited list of etcd connection endpoints. Example: http://127.0.0.1:2379,http://127.0.0.2:2379. Valid only if Datastore is set to etcdv3. ””
ServiceCidr Service IP range of the Kubernetes cluster. Not required for most managed Kubernetes clusters. Note: EKS has non-default value. 10.96.0.0/12
DNSServerIPs Comma-delimited list of DNS service IPs used by Windows pod. Not required for most managed Kubernetes clusters. Note: EKS has a non-default value. 10.96.0.10

Congratulations! You now have a Kubernetes cluster with Calico for Windows and a Linux control node.

Next steps

You can now use the Calico Linux-based docs site for your documentation. Before you continue, review the Limitations and known issues to understand the features (and sections of documentation) that do not apply to Windows.