2019年5月15日 星期三

將 windows server 加入 kubernetes cluster 成為 worker node

k8s 官方文件

ms 官方文件

kubernetes 原本環境的調整

  • CNI 限定 flannel (其實有三種,只是裡面最常見的是 flannel,官網範例也是用 flannel)
    flannel 的設定要照官網上的建議修改 net-conf.json 及 cni-conf.json 的內容
  • 修改 DaemonSet 的 yaml ,包含 kube-proxy、kube-flannel-ds-amd64、metallb 等
    spec.template.spec.nodeSelector 加上 beta.kubernetes.io/os=linux

    既有的 DaemonSet / Deployment / StatefulSet 等等,全都要做類似的修改。
    之後新增的也都要加上 nodeSelector。


windows server 2019 上的設定 (後面的操作全都是透過 PowerShell )

  • 安裝 docker

Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
Install-Package -Name Docker -ProviderName DockerMsftProvider                            Restart-Computer -Force
Start-Service docker

  • 取得 kubernetes 的 certificate file

mkdir c:\k
cd c:\k
scp root@[master ip]:/root/.kube/config c:\k\config

  • 取得 windows node 上需要的 binary file,例如 kubelet、kube-proxy 等
    這邊兩個官網給的說明都有點不太清楚,不知道為什麼不直接提供連結
    找 node binaries 裡的 kubernetes-node-windows-amd64.tar.gz

wget -O c:\k\node.tar.gz https://dl.k8s.io/v1.13.6/kubernetes-node-windows-amd64.tar.gz
tar zxvf node.tar.gz
cd kubernetes\node\bin\
cp kube-proxy.exe c:\k\
cp kubelet.exe c:\k\
cp kubectl.exe c:\k\
      為什麼不一次 cp 三個檔案? 因為 powershell 裡就是沒辦法一次 cp 多個檔案,可能要加參數,不過我懶得查....


  • 這邊有一段是 kubernetes 官網上沒有但是 MS 官網有的環境變數設定

$env:Path += ";C:\k"
[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\k",[EnvironmentVariableTarget]::Machine)
$env:KUBECONFIG="C:\k\config"                                                                     
[Environment]::SetEnvironmentVariable("KUBECONFIG", "C:\k\config", [EnvironmentVariableTarget]::User)

  • 下載 windows 上的 flannel binary file

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
wget https://raw.githubusercontent.com/Microsoft/SDN/master/Kubernetes/flannel/start.ps1 -o c:\k\start.ps1

  • 用 start.ps1 script 啟動 flannel 並帶起 kubelet 及 kube-proxy
  • 如果 flannel 設定都是預設值的話,指令大約如下
.\start.ps1 -ManagementIP -NetworkMode overlay -ClusterCIDR 10.244.0.0/16 -ServiceCIDR 10.96.0.0/12 -KubeDnsServiceIP 10.96.0.10 -LogDir c:\k

剩下是測試驗證了,照 MS 官網的文章,和一般 kubernetes deploy 的方式一樣
不過測試用的 image 感覺下載很慢,可以先用 docker pull 下來後,再跑測試會比較方便一些。
 

沒有留言: