docker swarm 集群搭建 + docker stack 部署可视化管理

docker swarm 集群搭建 + docker stack 部署可视化管理

  • 准备阶段
    • 修改hostname及hosts文件
  • 安装docker
    • 官方脚本自动安装方式
    • 手动安装方式
    • 安装docker compose
  • 构建docker swarm集群
    • 初始化swarm
    • 如果后期还有机器加入集群
  • 集群管理
    • 查看信息
    • 查看节点
    • 删除节点
    • 更新节点
    • worker 节点和 manager 节点互转
  • 搭建私有仓库(registry)
    • 打开IP转发
    • 安装``registry``镜像
    • 查看私仓数据
    • 使用私仓
      • 修改service(每个主机都需要修改)
    • 上传镜像
  • docker 集群信息可视化(visualizer及portainer)
    • 准备阶段
    • 编写 docker-compose.yml
    • 部署后查看信息
  • docker网络管理

准备阶段

IP HOSTNAME
192.168.0.101 node1
192.168.0.102 node2
192.168.0.103 node3
192.168.0.104 node4
192.168.0.105 node5

修改hostname及hosts文件

1.修改hosts

[root@localhost ~]# vi /etc/hosts
# 将上面对应的IP地址对应写入
# 每台服务器都需要
192.168.0.101 node1
192.168.0.102 node2
192.168.0.103 node3
192.168.0.104 node4
192.168.0.105 node5

然后通过scp命令将hosts文件拷贝到另外几台服务器,如果不嫌麻烦也可以一个一个手动修改。

2.然后对应IP修改hostname

比如在192.168.0.101的服务器中输入以下命令,需要在所有服务器中修改对应的hostname,为了后期方便管理。

[root@localhost ~]# hostnamectl set-hostname node1

安装docker

官方脚本自动安装方式

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

手动安装方式

卸载旧版本

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

安装依赖

sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

安装docker

sudo yum install docker-ce docker-ce-cli containerd.io

如果提示您接受 GPG 密钥,请选是。

安装完默认并没有启动,需要手动通过service或systemctl启动。

记得安装完后,使用docker -v命令查看版本,尽量确保这几台服务器的docker版本相同,虽然不同也可以构建swarm集群。

安装docker compose

yum -y install epel-release
yum -y install python3
pip3 install --upgrade pip
pip3 install docker-compose 

构建docker swarm集群

初始化swarm

在当前node1节点(作为manager节点)运行以下命令

docker swarm init --advertise-addr 192.168.0.101

它会在控制台显示下面类似下面这段文字:

Swarm initialized: current node (wmqsnwnwv4jcvjt1tmq47zzkp) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-8d9aum4b9egagaymoe8r3kmo23hx0y6nwmdt3b9kmxpfcn7vmu-btou5dm6kn8rb33euaoz4605w 192.168.0.101:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions

意思是让你在其他主机运行上面那段docker swarm join --token SWMTKN-1-8d9aum4b9egagaymoe8r3kmo23hx0y6nwmdt3b9kmxpfcn7vmu-btou5dm6kn8rb33euaoz4605w 192.168.0.101:2377,就可以添加为worker节点。

注意:上面给了5台服务器做测试。3个worker,2个manager,自由组合,你也可以只用3台做测试。

如果后期还有机器加入集群

manager节点运行docker swarm join-token managerdocker swarm join-token worker,控制台会显示类似之前那段文字,所以不需要去记录token,如果忘记,输入一遍这2条命令中的其中一条即可,第一条命令会显示添加为manager节点的命令及token,第二条命令为worker节点的命令及token


集群管理

docker文档
注意,集群管理的命令只能在manager节点中运行(除了docker info这种命令)。

查看信息

docker info
# 或下面这条命令
# docker node inspect
# 其实inspect的信息在docker info中就能看见。

查看节点

docker nodes ls

删除节点

节点ID通过 docker nodes ls 查看

docker node rm 节点ID或hostname

更新节点

节点ID通过 docker nodes ls 查看

docker node update –-availability active 节点ID或hostname # 更新节点状态 (active 激活|pause 暂停|drain 排除自身work任务)
docker node update ––label-add 标签名 节点ID或hostname # 更新节点标签名
docker node update ––label-rm 节点ID或hostname # 删除节点标签名,如果有
docker node update ––role manager 节点ID或hostname # 更新为manager节点

worker 节点和 manager 节点互转

node3节点变为manager节点

docker promote node3

node2节点变为worker节点

docker demote node2

搭建私有仓库(registry)

有更高需求可以替换为Harbor

打开IP转发

注意,我们是永久开启,并不是临时开启。(集群内所有服务器都要开启)

文件路径:/etc/sysctl.conf ,它的内容全部是对应于/proc/sys/这个目录的子目录及文件。

vi /etc/sysctl.conf
# 写入一下内容
net.ipv4.ip_forward = 1

然后执行sysctl -p,加载刚才修改的配置文件。

临时开启方法:

sysctl -w net.ipv4.ip_forward=1

echo 1 > /proc/sys/net/ipv4/ip_forward

安装registry镜像

mkdir /opt/data/registry # 为了将容器内的volume映射出来。
docker pull registry:2
# 1版本是python写的,2版本是GO语言。
docker run -d -p 5000:5000 --restart always -v /opt/data/registry/:/var/lib/registry/ --name private_registry registry:2

查看私仓数据

curl 私仓节点ip:5000/v2/_catalog

使用私仓

修改service(每个主机都需要修改)

使用--insecure-registry的原因是,我们搭建的是http的,并没有弄https,所以需要使用insecure

vi /usr/lib/systemd/system/docker.service
# 在ExecStart 最后面增加一个Option,--insecure-registry 私仓ip:端口

ExecStart = /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry 192.168.0.101:5000,然后需要重启docker服务。

第二种方式
/etc/docker/daemon.json 加入insecure-registries配置

"iinsecure-registries":["192.168.0.101:5000"]

上传镜像

打标签

打标签的原因是要在push的时候让docker知道私仓地址及端口

docker tag httpd:latest 192.168.0.101:5000/httpd

push到私仓

docker push 192.168.0.101:5000/httpd

docker 集群信息可视化(visualizer及portainer)

准备阶段

docker pull dockersamples/visualizer # 拉取visualizer镜像
docker tag dockersamples/visualizer:latest 192.168.0.101:5000/visualizer # 打个标签
docker push 192.168.0.101:5000/visualizer # 传到私仓

编写 docker-compose.yml

version: "3"

services:
  visualizer:
    image: 192.168.0.101:5000/visualizer
    ports:
      - "9001:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      replicas: 1
      placement:
        constraints: [node.role == manager] # 约束条件为部署在manager节点
  portainer:
    image: portainer/portainer
    ports:
      - "9000:9000"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      replicas: 1
      placement:
        constraints: [node.role == manager]

使用docker stack部署

docker stack deploy -c docker-compose.yml visual_manager

部署后查看信息

 docker stack services visual_manager

docker网络管理

使用docker network命令可以创建你自己的网络。

docker network ls # 列出所有网络
docker network create --driver overlay my_network # 创建一个overlay网络 名为my_network

你可能感兴趣的:(Docker,Distributed)