• Frank Mai's avatar
    Windows support 1809 · 12bc6edc
    Frank Mai authored
    **Problem:**
    - Cannot set up kubelet on Windows
    - Sometimes, host kubelet cannot connect controlplanes via container nginx proxy, but we found that only the connection between kubelet and container nginx has been broken.
    - Upgraded from previous existing cluster causes Windows agent failed
    - Running a few days, Windows host will crash by OOM, as `docker create
    -> docker start` leaks none-page memory
    - The Windows code doesn't look very clear
    - Need to support Flannel vxlan mode
    - Need to support CI
    - Need to support Docker manifest images
    - Need to add unit test
    
    **Solution:**
    - Adjust kubelet options
    - Replace container Nginx proxy by host Nginx
    - Fix Windows error when upgrading rancher
        + Use `AllK8sWindowsVersions` to index system images
        + Specify the `NetworkMode` of Process to `none`
    - For Windows, replace `docker create -> docker start` to `docker run`
    - Refactor Windows agent
        + Separate logrus hook into a file
        + Create `winRunner` to execute main logic
        + Remove ugly break label
        + Separate connecting into a single method
        + Only treat Powershell active retry exit status
        + Adjust PowerShell script
            + Redirect log to c:\var\log
            + Reduce retry count
            + Change log.ps interval to 1s
            + Log to file if running background
    - Support Flannel Vxlan Mode
        + Adjust PowerShell script via moving `net-conf.json` into `start-flanneld`
        + Support to configure Flanneld backend via `FlannelBackendConfig`
    - Support CI
        + Use dapper
        + Patch Linux pipelines with OS info
        + Add Windows 1809 Drone support
        + Add .gitattributes file to fix https://github.com/golang/go/issues/16355
    - Support Docker manifest images
        + Remove the processing of Windows image suffix in everywhere
    - Unit test
        + There is not syslog implemented on Windows, so separate by os
        + Add test logic into CI
    
    **Issue:**
    - https://github.com/rancher/rancher/issues/17341
    - https://github.com/rancher/rancher/issues/16074
    - https://github.com/rancher/rancher/issues/19048
    - https://github.com/rancher/rancher/issues/17499
    - https://github.com/rancher/rancher/issues/17499
    12bc6edc