部署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

posted @ 2020-05-23 13:10  马肯尼煤牙巴骨  阅读(1562)  评论(3编辑  收藏  举报