ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

docker swarm集群---基础设施篇

2021-07-31 23:00:31  阅读:193  来源: 互联网

标签:sudo --- swarm 集群 portainer docker 节点


前端时间一直在研究docker相关技术,想把他用在我最近的项目上,最开始想使用的kubernates,但是不知道为什么一直下载不下来相关镜像,科学上网都没用,于是转战docker swarm,并且在学校的四个免费的2C4G服务器上搭建了一个实验性质的集群,最近打算把这个实验性质的集群转移到生产环境中,并将其中的一些过程记录下来。
简单说下我目前用这种方式之后的好处吧

  • 第一是简化了部署,再不需要打包、选择可用节点上传,最后运行这种方式了,现在都是一键然后集群根据目前的负载情况自行选择服务部署节点。
  • 第二是简化了运维,平时都是服务出了问题,收到报告,然后登录服务器,手动重启服务,但是现在服务会在崩溃之后自启。
  • 第三是可伸缩,可以根据需求来选择服务的副本,而且节点增加也不用去重新配置Java、MySQL、Python等环境,只需要安装docker即可。

目前只想到了以上三个优势吧,不过我觉得已经很足够了。
本文所有节点的操作系统均为Ubuntu 18.04

1.docker的安装

首先需要在各台机器上都安装docker环境,使用如下命令都可以安装好了

curl -sSL https://get.daocloud.io/docker | sh

接下来需要修改/etc/docker/daemon.json文件,修改它有两个目的,第一是为了加快镜像的下载速度,另外一个原因是docker0接口会占用ip地址172.17.0.0/24,由此可能导致内网环境下登录不上服务器,因此需要配置让docker0去占用其他的ip。

sudo vim /etc/docker/daemon.json

编辑为如下的内容

{
"bip" : "192.168.200.1/24",
"mtu" : 1400,
"registry-mirrors": ["https://pee6w651.mirror.aliyuncs.com","http://hub-mirror.c.163.com", "https://registry.docker-cn.com"]
}

然后用如下命令使修改生效

sudo apt-get install bridge-utils
sudo systemctl stop docker
sudo ip link set dev docker0 down
sudo brctl delbr docker0
sudo systemctl start docker

最后将用户添加到docker组中,这样执行docker相关的命令就不需要sudo了。

# 添加docker用户组,一般已存在,不需要执行
sudo groupadd docker
# 将登陆用户加入到docker用户组中
sudo gpasswd -a $USER docker
# 更新用户组
newgrp docker
# 测试docker命令是否可以脱离sudo正常使用
docker version

到这里docker安装完毕。

2.创建docker swarm集群

这里假设有一个主节点,IP为A,一个从节点,IP为B

首先需要开放2375端口来方便portainer进行管理,这里至少需要给从节点配置,主节点不配置似乎也可以正常使用

sudo cp /lib/systemd/system/docker.service /lib/systemd/system/docker.service.bak
sudo vim /lib/systemd/system/docker.service
# 找到ExecStart行改成这样的: ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375
sudo systemctl daemon-reload
sudo systemctl restart docker

2.1.主节点配置

运行如下命令来初始化集群

docker swarm init --advertise-addr A

会得到如下输出

在这里插入图片描述

2.2.从节点配置

让其他节点加入swarm集群,这里如果是内网环境的话,只需要执行主节点执行初始化集群之后输出的那一行命令即可,但是这里是使用公网环境的,所以需要指定公网的nodeIP

docker swarm join --token SWMTKN-1-0fgcvcltafdsafdsafdsafdsaed5b4skmash31l2c0jyvus44z-77uyqrafdsafdsad5ia602oyy A:2377  --advertise-addr B:2377

这里参考了公网情况下的docker swarm搭建,更细节的内容可以参考这篇博文,使用公网环境时,需要保证TCP2377,TCP7946,TCP4789与UDP7946和UDP4789被放通。

3.管理程序服务安装

这里我使用了两个服务来对集群进行监控和管理,visualizer和portainer。

3.1.visualizer

用如下命令启动visualizer服务

docker service create --replicas 1 --mount type=bind,target=/var/run/docker.sock,source=/var/run/docker.sock --name visualizer -p 8080:8080 dockersamples/visualizer

然后访问http://A:8080,可以看到各节点部署的容器。

在这里插入图片描述

3.2.portainer

接下来是portainer,这是一个更加全面的管理工具,可以对各节点的服务、镜像、容器等进行管理。

利用如下命令启动portainer服务,该服务需要在主节点运行。

docker pull portainer/portainer	# 拉取portainer镜像
mkdir portainer_data # 创建数据文件夹
docker run -d -p 8000:8000 -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v /home/zekdot/portainer_data:/data portainer/portainer	# 启动容器

启动之后访问浏览器http://A:9000,可以看到要求创建一个账户的窗口,输入密码与确认密码后点击下一步

在这里插入图片描述

然后这里选择local,直接连接。

在这里插入图片描述

然后点击Endpoints那一个条目,再点击Add endpoint来增加对从节点B的管理

在这里插入图片描述

选择Docker项,输入B相关信息之后点击Add endpoint。

在这里插入图片描述

然后可以看到两个节点都在管理之下了。

在这里插入图片描述

到这里基础的管理和运行环境就配置好了。

标签:sudo,---,swarm,集群,portainer,docker,节点
来源: https://blog.csdn.net/zekdot/article/details/119282552

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有