准备windows server 2019主机
安装windows server 2019 虚拟机。
如果使用 VXLAN/覆盖(Overlay)联网设施,必须安装 KB4489899,见官方文档。
可下载、安装最新独立程序包,若安装时提示“此更新不适用于此系统”,没有关系,点击“开始菜单”->“设置”->”更新和安全”,立即更新、重启操作系统。
建议使用 datacenter版本,不能使用 essential及以下版本。
建议更新到最新状态。
windows server 2019安装docker
参考微软官方文档windows server安装docker。
官方文档未指定版本,建议确定版本
安装模块 DockerMsftProvider
Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
输入’Y’,进行安装。
安装 docker
Install-Package -Name docker -RequiredVersion 19.03 -ProviderName DockerMsftProvider
输入’A’,进行安装。
重启
Restart-Computer -Force
控制节点操作
在全部控制节点执行
sudo sysctl net.bridge.bridge-nf-call-iptables=1
下载 Linux 版本的 Flannel
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
配置 Linux 版本的 Flannel
修改 kube-flannel.yml 清单中的 net-conf.json 部分,将 VNI 设置为 4096,并将 Port 设置为 4789。 结果看起来像下面这样:
net-conf.json: |
{
"Network": "10.244.0.0/16",
"Backend": {
"Type": "vxlan",
"VNI": 4096,
"Port": 4789
}
}
指定flannel 网卡
如果有多个网卡,注意指定。
安装 Linux 版本的 Flannel
kubectl create -f kube-flannel.yml
安装 windows 节点需要的kube-proxy
注意版本,这里使用版本v1.18.20。
curl -L https://github.com/kubernetes-sigs/sig-windows-tools/releases/download/v0.1.5/kube-proxy.yml | sed 's/VERSION/v1.18.20/g' | kubectl apply -f -
安装 windows 节点需要的flannel
注意flannel网卡,这里使用网卡Ethernet0
curl -L https://github.com/kubernetes-sigs/sig-windows-tools/releases/download/v0.1.5/flannel-overlay.yml | sed 's/Ethernet/Ethernet0/g' | kubectl apply -f -
注意:若 windows节点上容器不能ping node_ip,可修改flannel-overlay.yml 中配置,增加节点网段:
#$cniJson.delegate.policies[0].Value.ExceptionList = $serviceSubnet, $podSubnet
$cniJson.delegate.policies[0].Value.ExceptionList = $serviceSubnet, $podSubnet, "192.168.3.0/24"
windows 节点操作
windows安装 wins、kubelet 和 kubeadm
curl.exe -LO https://github.com/kubernetes-sigs/sig-windows-tools/releases/download/v0.1.5/PrepareNode.ps1
.\PrepareNode.ps1 -KubernetesVersion v1.18.20
windows节点加入到集群
kubeadm join 192.168.146.131:6443 --token h1czvj.pksgum8s9yw3a683 --discovery-token-ca-cert-hash sha256:33bec7e235a7c621c83ec24ff3992df60754d90828c754192c1ab67d54050e3a
如果加入集群有bug,证书文件路径不对。
第一次加入失败后,执行下面2步:
- 把c:/etc目录拷贝到 c:/var/lib/kubelet之下
cp -r C:\etc C:\var\lib\kubelet
- 重新把windows节点加入到集群,需跳过preflight,control-plane-prepare
kubeadm join 192.168.146.131:6443 --token h1czvj.pksgum8s9yw3a683 --discovery-token-ca-cert-hash sha256:33bec7e235a7c621c83ec24ff3992df60754d90828c754192c1ab67d54050e3a --skip-phases=preflight,control-plane-prepare
测试
测试 yaml
vim hello-win.yml
输入如下内容
apiVersion: v1
kind: Pod
metadata:
name: hello
spec:
containers:
- name: hello-c
image: mcr.microsoft.com/windows/servercore:1809
resources:
limits:
memory: "2000Mi"
requests:
memory: "100Mi"
command: ['powershell.exe','-command','while(1 -le 2) { echo hello; Get-Date; Start-Sleep -s 3 }']
创建pod
kubectl create -f hello-win.yml