windows节点加入一个Linux集群组成的kubernetes集群

news2024/12/28 22:00:01

windows节点加入一个Linux集群组成的kubernetes集群

  • 背景描述
  • 一.准备环境搭建
  • 二.Windows上docker安装
  • 三.配置Windows server2019
    • 方法一:自动配置安装
    • 方法二:手动配置安装
    • 失败处理过程
  • 四.Windows的node加入Linux的kubernetes集群
  • 五.配置Linux的master

背景描述

我有一个kubernetes集群,其中有一个master节点跟两个node节点,这三个节点都是Ubuntu系统的,也就是Linux系统,但是我现在希望将一台Windows的机器加入到这个集群里面来统一管理,应该如何实现呢?

一.准备环境搭建

windows加入Linux的kubernetes集群,有很多坑,中间很容易出错,所以在执行前,要先确保自己的环境没问题,可以检查一下以下几点是否都满足了:
1.Linux的kubernetes集群中的环境是干净的,原始情况下该有的configmap之类的都存在并且未被更改过
2.windows的版本最好是windows server2019或者windows server2016,并且最好不要使用容器启动windows,建议使用真实的机器
3.windows server2019上保证网络通信是正常的,并且以非administrator用户登录到windows上

1.1 以非administrator的用户身份登录到windows上,然后进行windows更新,保证windows最新版本
在这里插入图片描述
1.2 修改hostname,先用hostname获取到本机名称,再修改

#下面命令在Windows的powershell中执行
hostname
#这里我通过hostname命令获取到的本机名称为WIN-7A3B7N76KMH,我希望修改的名称为node3-win
netdom renamecomputer WIN-7A3B7N76KMH /newname:node3-win

1.3 配置静态IP,虚拟机要先将网卡模式调为桥接模式,然后再手工配置静态IP(命令行配置,或者也可以通过鼠标点点的方式配置静态ip)

#下面命令在Windows的powershell中执行
netsh interface ipv4 set address name="Ethernet0" source=static addr=172.16.10.124 mask=255.255.255.0 gateway=172.16.10.1
netsh interface ipv4 set dns name="Ethernet0" source=static addr=114.114.114.114 register=primary

1.4 关闭防火墙

#下面命令在Windows的powershell中执行
netsh advfirewall set allprofiles state off
Uninstall-WindowsFeature Windows-Defender

1.5 更改powershell中脚本的执行策略

#下面命令在Windows的powershell中执行
Set-ExecutionPolicy Unrestricted

1.6 安装git
安装git,并将git的路径添加到环境变量中,git一般是安装在C:\Program Files\Git\bin

添加到环境变量步骤:控制面板—系统—高级系统设置—环境变量—path—编辑

Windows下安装git的方法

1.7 # 开启远程调用,这个命令在cmd中执行

#下面命令在Windows的cmd中执行
cscript %windir%\system32\scregedit.wsf /ar 0
cscript %windir%\system32\scregedit.wsf /cs 0

二.Windows上docker安装

docker安装有两种方式,可以通过命令行方式安装,也可以通过desktop的方式安装

安装docker之前,需要开启windows server2019上的hyper-v和nfs的功能,具体实现方式:服务器管理–管理–添加角色和功能–在服务器角色里面选择hyper-v,在功能里面选择nfs客户端,然后一直下一步选择安装

命令行安装方式:

#下面命令在Windows的powershell中执行
# 安装docker,命令行安装方式,第二步很可能失败
Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
Install-Package -Name docker -ProviderName DockerMsftProvider

# 指定到第二步的时候会抛出一个错误提示,这个错误能够解决,有些错误很难解决,说警告: C:\Users\DELL\AppData\Local\Temp\DockerMsftProvider\Docker-20-10-9.zip does not exist,也就是这个压缩包不存在,但是这个目录下会存在一个json文件,里面记录了各个docker版本的下载地址,我们可以手动下载好zip的压缩包,然后再放到C:\Users\DELL\AppData\Local\Temp\DockerMsftProvider\目录下去,再执行第二个命令

docker info  
Restart-Computer -Force        #这个地方是让你重启电脑

# 这条命令会打开这个文件,然后如果不存在你就新建
notepad.exe C:\ProgramData\docker\config\daemon.json

# 文件具体内容如下
{
  "debug": false,
  "experimental": false,
  "features": {
    "buildkit": true
  },
  "insecure-registries": [],
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn"
  ]
}

# 修改完后再重启docker
Restart-Service docker

desktop的安装方式:docker desktop安装地址

# 如果命令行安装方式失败了,可以直接安装docker desktop,但是注意安装的版本,因为我希望的docker engine 是20.10的版本,所以我安装的docker desktop版本是4.18  
# 安装完成后需要配置镜像加速,在设置的docker engine里面配置如下内容
{
  "experimental": true,
  "features": {
    "buildkit": true
  },
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "http://hub-mirror.c.163.com",
    "https://registry.docker-cn.com"
  ]
}  

# 在powershell里面执行docker version的命令,输出可能会有一个error
error during connect: In the default daemon configuration on Windows, 
the docker client must be run with elevated privileges to connect.: 
Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.24/containers/json: 
open //./pipe/docker_engine: The system cannot find the file specified.

# 解决方法
cd "C:\Program Files\Docker\Docker"
DockerCli.exe -SwitchDaemon    #重启docker
    

# 记得将docker desktop的docker模式更改为windows模式(右下角小图标--docker desktop --- Switch to windows container...)     

三.配置Windows server2019

执行这里的前提是前面两个大点的工作均已完成

方法一:自动配置安装

安装windows的wins、kubelet、kubeadm,可以根据自己的需要选择对应的版本

  1. powershell 可执行文件PrepareNode.ps1下载:
curl.exe -LO https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/PrepareNode.ps1
  1. 执行命令,运行PrepareNode.ps1文件,下载并安装 wins,kubelet,kubeadm
.\PrepareNode.ps1 -KubernetesVersion v1.23.6

注意:执行上面第一条命令下载PrepareNode.ps1文件,可能会非常慢;即使下载文件后,根据文件下载wins、kubelet、kubeadm 可能会非常卡顿。由于上述情况的存在,大概率导致安装不成功,建议采用手动安装

方法二:手动配置安装

  1. PrepareNode.ps1 文件下载:
    打开浏览器,输入网址 https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/PrepareNode.ps1下载文件,文件下载后,将DownloadFile 函数调用的代码全部用“#”注释

  2. wins,kubelet,kubeadm 安装文件下载:根据下载的PrepareNode.ps1文件中的DownloadFile 函数,下载安装文件
    2.1 浏览器输入 https://dl.k8s.io/v1.23.6/kubernetes-node-windows-amd64.tar.gz,解压下载后的文件,从kubernetes\node\bin\ 中取出 kubeadm.exe 和 kubelet.exe(根据自己需要的版本下载)
    2.2 浏览器输入 https://k8stestinfrabinaries.blob.core.windows.net/nssm-mirror/nssm-2.24.zip,下载zip 文件,并重命名为 nssm.zip,要在powershell中确认该文件的名称为nssm.zip而不是重命名为了nssm.zip.zip
    2.3 浏览器输入 https://github.com/Microsoft/SDN/raw/master/Kubernetes/windows/hns.psm1 ,下载psm1文件
    2.4 浏览器输入 https://github.com/rancher/wins/releases/download/v0.0.4/wins.exe,下载wins.exe 文件

  3. 安装windows下的kubernetes。
    1.在c盘根目录创建文件夹k,并将第一步,第二步的文件 hns.psm1、kubeadm.exe、kubelet.exe、nssm.zip、wins.exe和PrepareNode.ps1 全部放进文件夹k中。
    2.在目录k中,管理员权限 powershell 执行命令初始化windows 下的kubernetes:根据自己的版本来执行。

.\PrepareNode.ps1 -KubernetesVersion v1.23.6

失败处理过程

不管自动安装还是手动安装,都有可能执行失败,如果执行失败:

  1. 删除C盘根目录下etc、run、var、opt(这几个目录有就删掉),删除C盘k目录下除了hns.psm1、kubeadm.exe、kubelet.exe、nssm.zip、wins.exe和PrepareNode.ps1文件以外的其他文件
  2. 重新复制nssm-2.24.zip改为nssm.zip
  3. 在计算机服务中找到kubelet服务和rancher-wins服务,将其停止
  4. 管理员在powershell中删除kubelet和rancher-wins服务 、
  5. 重启docker服务
  6. 检查执行的错误并解决,再重新执行

四.Windows的node加入Linux的kubernetes集群

首先在Linux的master上查看加入集群的指令

kubeadm token create --print-join-command

在windows上,执行master的回显指令,指令类似于

kubeadm join 172.16.22.101:6443 --token lzxi5w.qizoch3pqcbc3ozc     --discovery-token-ca-cert-hash sha256:02d821acf1b0595943cb046a44356b68a85feb74e920b635713afc1fb732183f

此处也可能会遇到错误,windows执行这个步骤可能不成功,无法加入集群

[preflight] Reading configuration from the cluster... 
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml' error execution phase preflight: unable to fetch the kubeadm-config ConfigMap: failed 

这个问题是由于Linux上的kubernetes集群环境不够纯净导致的,很可能上面的一些原始configmap被删除了或者被更改了,可能将原有的kubernetes给kubeadm reset,然后再重新执行加入集群的命令,应该就会成功了

此时在master上kubectl get nodes应该是可以看到windows的node,但是他的状态会处于notready状态

五.配置Linux的master

建议在使用 Flannel 时为 iptables 链启用桥接方式的 IPv4 流处理, 必须在所有 Linux 节点上执行如下命令:

sudo sysctl net.bridge.bridge-nf-call-iptables=1

下载和配置Linux的flannel

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 修改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
    }
}
# 确保kube-flannel.yml文件中定义的namespace为kube-system,如果不是,就将其改为kube-system,然后再应用Linux的flannel配置
kubectl apply -f kube-flannel.yml

添加 Windows Flannel 和 kube-proxy

#现在可以添加 Windows 兼容版本的 Flannel 和 kube-proxy。为了确保你能获得兼容版本的 kube-proxy,你需要替换镜像中的标签
wget https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/kube-proxy.yml
sed -i 's/VERSION/v1.23.6/g' kube-proxy.yml
kubectl apply -f kube-proxy.yml

# windows的node状态是否出于ready状态,主要取决于windows上的flannel是否部署成功。为了确保部署成功,可以现在windows节点上docker pull flannel需要的sigwindowstools/flannel:v0.13.0-nanoserver镜像以及proxy需要的sigwindowstools/kube-proxy:v1.23.6-nanoserver镜像
wget  https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/flannel-overlay.yml
kubectl apply -f flannel-overlay.yml
# apply flannel的时候可能会出现各种报错,需要一一解决,执行这个的前提是保证windows上的kubelet服务正常启动,docker服务正常启动,以及之前的所有步骤没有问题

完成上面所有的配置后,此时在Linux的集群上查看windows的node的状态应该是ready状态,并且会有两个windows的pod处于running状态

root@master:/# kubectl get nodes
NAME        STATUS   ROLES                  AGE   VERSION
master      Ready    control-plane,master   22h   v1.23.6
node1       Ready    <none>                 22h   v1.23.6
node2       Ready    <none>                 22h   v1.23.6
node3-win   Ready    <none>                 22h   v1.23.6

root@master:/# kubectl get pod -n kube-system
NAME                                  READY   STATUS    RESTARTS   AGE
coredns-6d8c4cb4d-cd9g2               1/1     Running   0          22h
coredns-6d8c4cb4d-x6n9s               1/1     Running   0          22h
etcd-master                           1/1     Running   5          22h
kube-apiserver-master                 1/1     Running   0          22h
kube-controller-manager-master        1/1     Running   8          22h
kube-flannel-ds-8lwxc                 1/1     Running   0          22h
kube-flannel-ds-fbw42                 1/1     Running   0          22h
kube-flannel-ds-js7kw                 1/1     Running   0          22h
kube-flannel-ds-windows-amd64-h6jhw   1/1     Running   3          5h56m
kube-proxy-bz6l8                      1/1     Running   0          22h
kube-proxy-hvhld                      1/1     Running   0          22h
kube-proxy-spprt                      1/1     Running   0          22h
kube-scheduler-master                 1/1     Running   7          22h

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1922147.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在linux中查找 / 目录下的以.jar结尾的文件(find / -name *.jar)

文章目录 1、查找 / 目录下的以.jar结尾的文件 1、查找 / 目录下的以.jar结尾的文件 [rootiZuf6332h890vozldoxcprZ ~]# find / -name *.jar /etc/java/java-1.8.0-openjdk/java-1.8.0-openjdk-1.8.0.342.b07-1.el9_0.x86_64/lib/security/policy/limited/US_export_policy.ja…

初学SpringMVC之过滤器解决乱码

写个 login.jsp 页面 提交的 method 一般为 post&#xff08;写 get 不安全&#xff0c;地址栏上会显示&#xff09; action 表示提交后跳转的地址 &#xff08;不直接写控制器里的路径是因为配置 Tomcat 时设置了前缀路径&#xff0c;默认走 http://localhost:8080&#xf…

Linux ---gcc

c语言的链接类型&#xff1a; 动态链接&#xff1a; ll /lib64/libc-2.17.so 静态链接&#xff1a; ll /lib64/libc.a glibc-static安装-CSDN博客https://blog.csdn.net/itas109/article/details/104226783在Linux中下载c语言的静态库。 gcc test.c -o test.s -static 以…

代码随想录二刷7.22|977.有序数组的平方

暴力解法&#xff1a; ——如果想暴力解决这个问题的话&#xff0c;可以像题目那样&#xff0c;先将每一个元素平方&#xff0c;然后再排序 双指针&#xff1a; ——从题目中找到的信息&#xff1a;这是一个非递减顺序的整数数组&#xff0c;从例子中&#xff0c;可以容易看…

搭建NEMU与QEMU的DiffTest环境(Socket方式)

搭建NEMU与QEMU的DiffTest环境&#xff08;Socket方式&#xff09; 1 简述2 编译NEMU2.1 配置2.2 修改NEMU/scripts/build.mk2.3 修改isa_difftest_checkregs函数2.4 修改isa_pmp_check_permission函数2.5 编译 3 编译qemu-socket-difftest3.1 修改NEMU/scripts/isa.mk3.2 修改…

数据结构之单链表在不带标准头的情况下C,C#,C++分别怎么实现?

文章目录 单链表的概念单链表的操作单链表不带标准头结点示例C语言实现C#实现C实现 数据结构是计算机科学中非常重要的一部分&#xff0c;它帮助我们理解和操作数据。单链表是数据结构中的一种基本类型&#xff0c;它由一系列节点组成&#xff0c;每个节点包含数据域和指向列表…

强化学习编程实践-4-基于蒙特卡洛的方法

第3章给出了学习算法的基本思路&#xff1a;策略评估和策略改善。其中策略评估用到了以下的公式&#xff08;4.1&#xff09;&#xff1a; 策略改善则用了最简单的贪婪策略&#xff08;4.2&#xff09;&#xff1a; 为什么要用蒙特卡洛算法&#xff1f;先看公式4.1和4.2&#x…

图鸟UI框架在uni-app多端应用开发中的实践与应用

摘要&#xff1a; 随着移动互联网的蓬勃发展&#xff0c;跨平台应用开发已成为行业趋势。本文将探讨图鸟UI框架如何在uni-app开发环境下助力开发者高效构建多端应用&#xff0c;并通过具体案例展示其在实际项目中的应用效果。 一、引言 在移动应用开发领域&#xff0c;跨平台…

【错题集-编程题】栈和排序(栈 + 贪心)

牛客对于题目连接&#xff1a;栈和排序_牛客题霸_牛客网 (nowcoder.com) 一、分析题目 每次尽可能的先让当前需要的最大值弹出去。 二、代码 // 修改后的代码 class Solution { public:/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方…

百度文心4.0 Turbo开放,领跑国内AI大模型赛道!

百度文心4.0 Turbo开放&#xff0c;领跑国内AI大模型赛道&#xff01; 前言 文心一言大模型 就在7月5日&#xff0c;在2024世界人工智能大会 (WAIC) 上&#xff0c;百度副总裁谢广军宣布文心大模型4.0 Turbo正式向企业客户全面开放&#xff01;这一举动直接引发了业界的关注。那…

uniapp微信小程序 TypeError: $refs[ref].push is not a function

我的写法 this.$refs.addPopup.open();报错 打印出来是这样的 解决 参考未整理 原因 在当前页面使用的v-for循环 并且循环体内也有组件使用了ref&#xff08;而我没有把每个ref做区别命名&#xff09; 这样就导致了我有很多同名的ref&#xff0c;然后就报错了 解决办法&a…

上海-三轮摩托车—D证科目四 错题记录

目录 1.安全驾驶题 2.道路图标题 3.天气类情景题 4.事故处理类题 上海-三轮摩托车—D证科目一 错题记录: 1.安全驾驶题

阐述 C 语言中的浮点数精度问题?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01; &#x1f4d9;C 语言百万年薪修炼课程 【https://dwz.mosong.cc/cyyjc】通俗易懂&#xff0c;深入浅出&#xff0c;匠心打磨&#xff0c;死磕细节&#xff0c;6年迭代&…

tableau回归分析与时间序列分析 - 17

回归分析与时间序列分析 1. 回归分析1.1 线性回归绘制1.1.1 导入数据1.1.2 基本绘制1.1.3 趋势线显示-方法一1.1.4 趋势线显示-方法二1.1.5 趋势线显示-方法三1.1.6 添加区域注释 1.2 指数回归绘制1.2.1 创建字段1.2.2 异常区分1.2.3 创建参数1.2.4 异常区分字段修改1.2.5 显示…

MySQL学习笔记 下

MySQL学习笔记&#xff08;需接上篇&#xff09; 1. 通配符 用于替换字符串中的一个或多个字符&#xff1b;通配符常与LIKE关键字一起使用&#xff0c;用于搜索字段中的指定模式&#xff1b; 2. 别名 用于为表或表中的列提供临时名称&#xff1b; 别名用于为表或表中的字段…

【安卓学习】状态开关按钮

Switch 状态开关按钮&#xff08;Switch&#xff09;也是由 Button 派生出来的&#xff0c;所以在本质上它也算是一个比较高级的按钮&#xff0c;用户可以来回拖动“拇指”控制该按钮的开启与关闭或者只需轻按&#xff0c;就像选择复选框一样来开启该组件。 基本语法 <Sw…

外贸淡季如何应对?九大技巧告诉你!

许多外贸人都知道&#xff0c;7-9月是外贸的淡季&#xff0c;主要是因为西方国家很多公司会放假&#xff0c;或者轮流放。欧美人扎堆度假去了&#xff0c;欧洲城市街头的人数会减少很多。导致很多订单暂缓。所以这三个月经常被称为是外贸“淡季”。 大体上讲&#xff0c;外贸的…

警钟!电池储能安全事故频发!物联网技术如何加强储能安全排查?

在新能源时代背景下&#xff0c;储能系统作为能源转型的关键支撑技术&#xff0c;其安全问题日益凸显&#xff0c;尤其是近期海外电池项目连续发生的事故&#xff0c;为全球储能行业敲响了警钟。面对这一挑战&#xff0c;物联网技术以其强大的数据采集、智能分析与远程监控能力…

聊聊mysql

记录那些坑 本文会持续更新&#xff0c;陆续更新有关mysql技术内幕、实战优化、面试技巧。 文章目录 前言索引BTree之聚集索引BTree之辅助索引BTree之联合索引BTree之覆盖索引 使用到的工具1、py_innodb_page_info工具2、hexdump工具 总结 前言 重中之重的MySql数据库 mysql…

ARM功耗管理之睡眠锁

安全之安全(security)博客目录导读 思考&#xff1a;什么是睡眠锁&#xff1f;什么是唤醒源&#xff1f;什么是组合唤醒源&#xff1f; Kernel wakelocks的功能&#xff1a; 1&#xff09;允许driver创建wakelock以阻止睡眠、注销wakelock以允许睡眠。 2&#xff09;wake_lo…