一些限制
- k8s中,master節點必須部署在linux節點上,windows節點只能以工作結點的方式加入集群
- windows節點系統需要windows server 2016(1703)以上
- windows節點系統內核版本和window容器的操作系統內核版本需要匹配(17xx 版本需要大小版本都匹配 18xx 19xx 只要大版本匹配就可以)才能使用進程隔離,節點大於容器時只能使用內核隔離,不能小於
- kubernters 本版需要1.14以上,但是用1.17之后更好,因為這個版本之后node有自動加上lable,標識這個節點的操作系統類型和版本號,有利於部署
- 需要給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
修改一下下載來的腳本
- windows 1809沒有curl,改為wget
- 我們前面已經下載了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