Windows利用Swarm原生Docker集群踩坑总结
admin
2023-03-18 04:21:09
0次

环境:

角色机器名称操作系统IP备注
MaterWeb30Windows Server 2016 GUI192.168.2.30安装最新推荐补丁
NodeWeb31Windows Server 2016 Core192.168.2.31安装最新推荐补丁
NodeWeb32Windows Server 2016 Core192.168.2.32安装最新推荐补丁


第一坑:Windows Server 2016 Core

1.操作系统分区坑

   由于我们使用的Windows镜像都是基于microsoft/windowsservercore大小都在10G左右,还需要安装IIS、aspnet等等,另外如果涉及到镜像导出也会占用C盘空间,如果是做Docker的话建议C盘空间不小于60G,或者干脆只分C盘。

  踩坑解决办法:在硬盘还有大量富余空间的情况下,可采用挂载文件夹的形式,挂载C:\ProgramData\docker\windowsfilter文件夹

Windows利用Swarm原生Docker集群踩坑总结


2.命令行如何设置机器IP及机器名称及开启远程桌面

在CMD命令提示符下执行sconfig即可,建议开启远程桌面方面命令输入

Windows利用Swarm原生Docker集群踩坑总结 

3.安装Docker之前一定需要安装最新的Windows补丁

方法:sconfig--->6)下载并安装更新--->R)仅搜索推荐的更新---->A)安装所有


4.文件如何复制到Windows Server Core下,在命令行下

打开可写共享

cd \

mkdir share

net share share=c:\share /grant:everyone,full

连接共享

net use z: \\192.168.2.30\share password /user:administrator

于是就映射共享到Z盘,进入Z盘即可操作文件

删除共享

net share c:\share /del /y


5.在Windows命令行如何查看文件

type filename.txt

追加文件

echo 127.0.0.1 web30 >>\windows\system32\drivers\etc\hosts


6.查看Windows进程

tasklist


7.杀死进程

tskill


第二坑:Windows 2016原生Docker

1.Windows安装Docker

在命令提示符出入powershell,

Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
Install-Package -Name docker -ProviderName DockerMsftProvider

如果第二部提示未安装补丁,则需要安装最新Windows补丁,输入sconfig第6步

安装完成之后重启服务器


2.配置所有服务器的防火墙规则

TCP 端口 2377 用于群集管理通信

TCP 和 UDP 端口 7946 用于节点间通信

TCP 和 UDP 端口 4789 用于覆盖网络通信

netsh advfirewall firewall add rule name="swm 2377" dir=in action=allow protocol=TCP localport=2377 
netsh advfirewall firewall add rule name="swm 7946" dir=in action=allow protocol=TCP localport=7946
netsh advfirewall firewall add rule name="swm 7946udp" dir=in action=allow protocol=UDP localport=7946
netsh advfirewall firewall add rule name="swm 4789" dir=in action=allow protocol=TCP localport=4789
netsh advfirewall firewall add rule name="swm 4789udp" dir=in action=allow protocol=UDP localport=4789


3.初始化群集模式

在Master上执行

C:\> docker swarm init --advertise-addr=192.168.2.30 --listen-addr 192.168.2.30:2377

坑:在Linux上执行docker swarm init即可初始化集群,但是在Windows上会卡住不动,在windows上需要指定IP及端口


4.加入集群(在Web31和Web32执行)

在上面提示输入

docker swarm join \
    --token SWMTKN-1-1lbjx00s1qsjbjfuoq92f6d95mf41arbhwbkkigmo1smjqs38r-8i0bdakwhc3lvbbog8fnmvgmw \
    192.168.2.30:2377

即可加入集群,注意此处需要修改为一行

docker swarm join --token SWMTKN-1-1lbjx00s1qsjbjfuoq92f6d95mf41arbhwbkkigmo1smjqs38r-8i0bdakwhc3lvbbog8fnmvgmw 192.168.2.30:2377

坑1:加入集群命令只可以用一行,不可以使用\来进行换行

坑2:一定要在防火墙打开相应的规则,打开2377/TCP、7946/TCP、7946/UDP、4789/TCP、4789/UDP端口

坑3:目前测试Linux可以加入Windows Swarm集群,Windows也可以加入Linux Swarm集群,经过测试我将Linux节点加入Windows Swarm集群是正常工作的,但是Linux Swarm Master管理Windows节点报错,不知是否跟版本存在关系


在Windows Swarm Master节点上执行

docker service create --name=ping --constraint "Node.Platform.OS==Linux" --network=myspace centos ping 127.0.0.1


注意:--constraint "Node.Platform.OS==Linux"一定是双引号,不能是单引号,否则报Error response from daemon: rpc error: code = 2 desc = key ''node.Platform.OS' is invalid



5.服务端口映射问题

在Linux环境下我们可以通过

docker service create -name web -p 80:80 nginx

在执行之后各个节点都可以通过80端口进行服务,但是在Windows是不行的

docker service create -name iis -p 80:80 microsoft/iis执行之后是无法通过80端口访问

目前是通过

docker service create -name iis -p mode=host,target=80,published=80,protocol=tcp microsoft/iis


然后通过docker service ps iis

C:\Users\Administrator>docker service ps iis
ID            NAME   IMAGE                 NODE   DESIRED STATE  CURRENT STATE        ERROR  PORTS
e118tf9vu15l  iis.2  microsoft/iis:latest  Web32  Running        Running 2 hours ago         *:8090->80/tcp

 可以看到容器在Web32上,这个时候访问192.168.2.32:8090即可正常访问,但是访问主机的8090端口是无法使用的


6.Docker私有仓库配置

配置私有仓库

方法1:更改注册表[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Docker]

修改为C:\Program Files\Docker\dockerd.exe --run-service --insecure-registry "192.168.2.234:5000"

方法2:修改Docker配置文件,建议修改配置文件

C:\ProgramData\docker\config\daemon.json

{

  "insecure-registries" : ["192.168.2.234:5000"]

}

如果没有该文件可以创建以ASSIC形式


7.Windows Docker开启远程端口访问

方法一:注册表修改Docker启动参数

C:\Program Files\Docker\dockerd.exe --run-service -D -H tcp://0.0.0.0:2375 -H npipe://

方法二:修改Docker daemon.json配置文件

{
    "hosts": ["tcp://0.0.0.0:2376", "npipe://"]
}



相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...