设为首页 收藏本站
查看: 1287|回复: 0

[经验分享] Windows利用Swarm原生Docker集群踩坑总结

[复制链接]

尚未签到

发表于 2018-5-27 13:03:04 | 显示全部楼层 |阅读模式
  环境:
角色机器名称操作系统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文件夹
DSC0000.jpg

  

  2.命令行如何设置机器IP及机器名称及开启远程桌面
  在CMD命令提示符下执行sconfig即可,建议开启远程桌面方面命令输入
   DSC0001.jpg
  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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-481804-1-1.html 上篇帖子: docker存储与通信 下篇帖子: Docker基础配置简介
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表