部署kubernetes v1.18的windows 節點


一些限制

  1. k8s中,master節點必須部署在linux節點上,windows節點只能以工作結點的方式加入集群
  2. windows節點系統需要windows server 2016(1703)以上
  3. windows節點系統內核版本和window容器的操作系統內核版本需要匹配(17xx 版本需要大小版本都匹配 18xx 19xx 只要大版本匹配就可以)才能使用進程隔離,節點大於容器時只能使用內核隔離,不能小於
  4. kubernters 本版需要1.14以上,但是用1.17之后更好,因為這個版本之后node有自動加上lable,標識這個節點的操作系統類型和版本號,有利於部署
  5. 需要給windows server 2019打補丁kb4489899

准備flannel網絡

在文檔01中我們已經下載了flannel.yaml
我們先將它備份一下

cp flannel.yaml flannel_backup.yaml

然后 修改flannel.yaml里的net-conf.json

  net-conf.json: |
    {
      "Network": "10.244.0.0/16",
      "Backend": {
        "Type": "vxlan"
      }
    }

改為

  net-conf.json: |
    {
      "Network": "10.244.0.0/16",
      "Backend": {
        "Type": "vxlan",
        "VNI" : 4096,
        "Port": 4789
      }
    }

應用flannel配置

kubectl apply -f flannel.yaml

創建結點選擇器flanel補丁

 vim node-selector-patch.yml
spec:
  template:
    spec:
      nodeSelector:
        kubernetes.io/os: linux

查看daemonset

[root@m1 k8s]# kubectl get ds -A
NAMESPACE     NAME                            DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR              AGE
kube-system   kube-flannel-ds-amd64           1         1         1       1            1                                      93m
kube-system   kube-flannel-ds-arm             0         0         0       0            0           <none>                     93m
kube-system   kube-flannel-ds-arm64           0         0         0       0            0           <none>                     93m
kube-system   kube-flannel-ds-ppc64le         0         0         0       0            0           <none>                     93m
kube-system   kube-flannel-ds-s390x           0         0         0       0            0           <none>                     93m
kube-system   kube-flannel-ds-windows-amd64   1         1         1       1            1           <none>                     53m
kube-system   kube-proxy                      1         1         1       1            1           kubernetes.io/os=linux     157m
kube-system   kube-proxy-windows              1         1         1       1            1           kubernetes.io/os=windows   89m

打補丁

kubectl patch -n kube-system ds/kube-flannel-ds-amd64 --patch "$(cat node-selector-patch.yml)"

這個時候查看daemonset 看到已經打上linux標簽就算成功了

[root@m1 k8s]# kubectl get ds -A
NAMESPACE     NAME                            DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR              AGE
kube-system   kube-flannel-ds-amd64           1         1         1       1            1           kubernetes.io/os=linux     93m

觸類旁通 一通百通, 接下來的windows容器 也要會打window節點選擇器補丁,或在寫yaml時時候就寫進去

創建一個windows 的工作結點 並加入集群

打開hyper-v新建一個虛擬機w1,4GB內存,不鈎選動態內存,存盤40G,系統盤選擇一個下載好的windows server 2019鏡像文件,這里不要用中文版本,否則會滑鐵盧。。。
看到安裝畫面一直下一步,選擇數據中心桌面版, 因為純命令行操作起來比較菜怕操作不來

之后就是安裝畫面完成要你設置密碼,我設置Abc12345 計算機名改為w1

ip地址規划到10.7.1.221

更新補丁

需要給windows server 2019打補丁kb4489899
如果補丁打不上也不要驚慌,因為你的系統可能已經有更新的更新了,最好的方法是聯網更新一下系統,本文使用1809內核版本。

導入需要的docker images

需要的docker images

PS C:\k> docker images
REPOSITORY                             TAG                 IMAGE ID            CREATED             SIZE
sigwindowstools/kube-proxy             v1.18.1             1df35c13f175        4 weeks ago         5.04GB
microsoft/nanoserver                   latest              716bb79b7dcd        4 weeks ago         251MB
mcr.microsoft.com/windows/nanoserver   1809                716bb79b7dcd        4 weeks ago         251MB
sigwindowstools/flannel                0.12.0              9499a92cb176        7 weeks ago         5.06GB
mcr.microsoft.com/k8s/core/pause       1.2.0               a74290a8271a        10 months ago       253MB

在windows虛擬機中安裝docker

#添加docker repo
Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
#安裝docker
Install-Package -Name Docker -ProviderName DockerMsftProvider

#如果要安裝指定的版本在后面加上可選參數 --MaximumVersiona或RequireVersion
Install-Package -Name docker -ProviderName DockerMSFTProvider -Force -MaximumVersion 19.03
Install-Package Docker -ProviderName DockerMSFTProvider -Force -RequiredVersion 19.03

#重啟
Restart-Computer -Force

#重啟后看一下docker有無正常工作
PS C:\Users\Administrator> docker -v
Docker version 19.03.5, build 2ee0c57608

復制master上的kubeconf到window節點 w1

在w1上創建 c:\k文件夾

mkdir c:\k
cd c:\k

將master的 $HOME/.kube/config復制到w1的c:\k

下載kubernetes的windows二進制


k8s github 下載地址
我的集群安裝的版本是1.18.1,所以下載的版本要相匹配
在自己自己電腦上下載下來解壓了再用復制過去w1 的c:\k
最終c:\k文件夾里要有這些東西

用powershell把kubernetes二進制文件添加到path

#臨時
$env:Path += ";C:\k"
#永久(需要管理員權限的powershell)
[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\k", [EnvironmentVariableTarget]::Machine)

設置環境變量設置kubectl讀配置文件

#臨時
$env:KUBECONFIG="C:\k\config"
#永久
[Environment]::SetEnvironmentVariable("KUBECONFIG", "C:\k\config", [EnvironmentVariableTarget]::User)
#驗證
PS C:\k> kubectl config view
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://haoyun.k8s.vip:8443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
PS C:\k>
#如果錯誤則要檢查一下上面的操作   

在主節點上配置windows的flannel和kube-proxy相關的daemonset

curl -L https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/kube-proxy.yml | sed 's/VERSION/v1.18.1/g' | kubectl apply -f -
kubectl apply -f https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/flannel-overlay.yml

下載kuberentes官網上的腳本把windows結點加入集群

下載

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12  
wget https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/PrepareNode.ps1

修改一下下載來的腳本

  1. windows 1809沒有curl,改為wget
  2. 我們前面已經下載了kubernetes二進制,不用重復下載,所以要注釋掉
    執行腳本,把windows 節點加入kubernetes集群
PS C:\k> .\PrepareNode.ps1 -KubernetesVersion v1.18.1

順利的話,windows節點就已經加進去了 節點狀態應該如下

[root@m1 k8s]# kubectl get no
NAME              STATUS   ROLES    AGE    VERSION
m1                Ready    master   179m   v1.18.1
w1                Ready    <none>   57m    v1.18.1

pod

[root@m1 k8s]# kubectl get pod -A
NAMESPACE     NAME                                  READY   STATUS    RESTARTS   AGE
kube-system   coredns-66bff467f8-7mc92              1/1     Running   0          3h
kube-system   coredns-66bff467f8-sr6vs              1/1     Running   0          3h
kube-system   etcd-m1                               1/1     Running   1          3h
kube-system   kube-apiserver-m1                     1/1     Running   3          3h
kube-system   kube-controller-manager-m1            1/1     Running   2          3h
kube-system   kube-flannel-ds-amd64-z5w4j           1/1     Running   0          113m
kube-system   kube-flannel-ds-windows-amd64-fg4zr   1/1     Running   0          57m
kube-system   kube-proxy-s8sn8                      1/1     Running   1          3h
kube-system   kube-proxy-windows-htp85              1/1     Running   0          57m
kube-system   kube-scheduler-m1                     1/1     Running   3          3h


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM