环境
- 系统:Windows Server 2019 Standard(带桌面的)
- 集群:CentOS 7 Master
没桌面的Core Server无法安装Kubernetes,但可以安装Docker
基础配置
# 配置网络
netsh interface ipv4 show interfaces
netsh interface ipv4 set address name="Ethernet0" source=static addr=172.16.22.105 mask=255.255.255.0 gateway=172.16.22.1
netsh interface ipv4 set dns name="Ethernet0" source=static addr=114.114.114.114 register=primary
# 配置计算机名字
netdom renamecomputer OLD-HOSTNAME /newname:NEW-HOSTNAME
# 开启3389
cscript %windir%\system32\scregedit.wsf /ar 0
cscript %windir%\system32\scregedit.wsf /cs 0
# 关闭防火墙
netsh advfirewall set allprofiles state off
# 使用系统自带更新,更新完毕重启
支持容器
Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
Install-Package -Name docker -ProviderName DockerMsftProvider
Restart-Computer -Force
docker info
配置docker镜像加速
notepad.exe C:\ProgramData\docker\config\daemon.json
在C:\ProgramData\docker\config\daemon.json
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
Restart-Service docker
修改master配置
# 修改原有Flannel网络配置
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 修改 kube-flannel.yml 中的 net-conf.json 部分,将 VNI 设置为 4096,并将 Port 设置为 4789
# Network用你自己原本的,172.19.0.0/16是我集群中的配置。
# net-conf.json: |
# {
# "Network": "172.19.0.0/16",
# "Backend": {
# "Type": "vxlan",
# "VNI" : 4096,
# "Port": 4789
# }
# }
kubectl delete -f kube-flannel.yml
kubectl apply -f kube-flannel.yml
# 添加 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.19.4/g' | kubectl apply -f -
kubectl apply -f https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/flannel-overlay.yml
下载必须的文件
# 自动初始化Windows 下 kubernetes 的脚本
https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/PrepareNode.ps1
# https://github.com/kubernetes/kubernetes/releases 中 CHANGELOG
# 下载 Windows 版 kubernetes node
# 最好和集群的版本一致,我的集群是v1.19.4
# 在 kubernetes\node\bin\ 中取出 kubeadm.exe 和 kubelet.exe
https://dl.k8s.io/v1.19.4/kubernetes-node-windows-amd64.tar.gz
https://k8stestinfrabinaries.blob.core.windows.net/nssm-mirror/nssm-2.24.zip
https://github.com/Microsoft/SDN/raw/master/Kubernetes/windows/hns.psm1
https://github.com/rancher/wins/releases/download/v0.0.4/wins.exe
修改下载的ps1文件
将PrepareNode.ps1中 DownloadFile 函数调用的代码全部注释“#”,因为上面已经下载了这些文件。
将nssm-2.24.zip改为nssm.zip。
在Windows服务器中创建新目录C:\k,将hns.psm1、kubeadm.exe、kubelet.exe、nssm.zip、wins.exe和PrepareNode.ps1都放入其中。
安装windows下kubernetes
powershell命令行执行kubeadm.exe version查看版本号。(v1.19.4)
执行.\PrepareNode.ps1 -KubernetesVersion v1.19.4 初始化Windows下kubernetes
如果执行失败了,删除C盘根目录下etc、run、var和opt(这几个目录,有就删掉),
重新复制nssm-2.24.zip改为nssm.zip,
检查执行的错误并解决,再重新执行。
在master上使用 kubeadm token create --print-join-command 生成新的tocken
在Windows服务器上执行刚刚linux生成新tocken的回显,类似以下命令
kubeadm join 172.16.22.101:6443 --token lzxi5w.qizoch3pqcbc3ozc --discovery-token-ca-cert-hash sha256:02d821acf1b0595943cb046a44356b68a85feb74e920b635713afc1fb732183f
Windows的docker会自动pull几个镜像,可能会比较慢
kubectl get node -o wide
# NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
# k8s-master01 Ready master 1d v1.19.4 172.16.22.101 <none> CentOS Linux 7 (Core) 5.9.11-1.el7.elrepo.x86_64 docker://19.3.13
# k8s-node01 Ready <none> 1d v1.19.4 172.16.22.103 <none> CentOS Linux 7 (Core) 5.9.11-1.el7.elrepo.x86_64 docker://19.3.13
# k8s-node02 Ready <none> 1d v1.19.4 172.16.22.104 <none> CentOS Linux 7 (Core) 5.9.11-1.el7.elrepo.x86_64 docker://19.3.13
# k8s-node03 Ready <none> 4m5s v1.19.4 172.16.22.105 <none> Windows Server 2019 Standard 10.0.17763.1637 docker://19.3.14
kubectl -n kube-system get all -o wide | grep node03
# pod/kube-flannel-ds-windows-amd64-78c79 1/1 Running 1 7m19s 172.16.22.105 k8s-node03 <none> <none>
# pod/kube-proxy-windows-vghgw 1/1 Running 0 7m19s 172.19.5.2 k8s-node03 <none> <none>