DockerSwarm集群搭建-实战

文章目录

  • 一、环境
    • 1.Swarm环境规划
    • 2.永久修改主机名
    • 3.硬件要求
  • 二、初始化docker-swarm 管理节点
  • 三、节点 添加、删除、权限提升、降低
    • 1.添加节点
    • 2.节点权限提升降低
    • 3. 脱离集群
    • 4. 删除已经脱离集群的节点
  • 四.安装图形界面
    • 1. 拉取visualizer 镜像
    • 2 创建容器并运行(manager节点运行)
    • 3.测试访问:
    • 5.重启这个容器
    • 6. 启动docker时自动启动
  • 五、创建服务
    • 1.三台主机都准备好镜像
    • 2.部署nacos(通过任意集群内节点的ip+port都可访问)
    • 3.添加过更新一个对外暴露接口
    • 4. 删除服务
    • 5.docker service create一键部署nacos
  • 六、stack命令
    • 1 创建docker-compose.yml 文件 内容如下:
    • 2 运行nginx
  • 七、常用命令如下:
    • 1.swarm命令
    • 2.node命令
    • 3.service 命令
    • 4.stack命令
  • 八.docker可视化Portainer

一、环境

1.Swarm环境规划

IP 主机名 节点 说明
192.168.0.2 wsm_m_swarm_m01 manager swarm-manager节点
192.168.0.3 wsm_s_swarm_w02 work01 swarm-work01节点
192.168.0.203 mes_s_swarm_w03 work02 swarm-work02节点

2.永久修改主机名

#修改命令:
# 192.168.0.2 机器上修改
hostnamectl set-hostname wsm_m_swarm_m01 

# 192.168.0.3 机器上修改
hostnamectl set-hostname wsm_s_swarm_w02  

# 192.168.0.203 机器上修改
hostnamectl set-hostname mes_s_swarm_w03

#查看本机主机名
hostname 

3.硬件要求

硬件资源 最小配置 推荐配置
CPU 1CPU 2CPU
内存 1G 2-4G
硬盘 20G 50G

docker版本:20.10.10

二、初始化docker-swarm 管理节点

#advertise-addr 来指定其他节点连接m0时的地址
#来指定其他节点连接m0时的地址 来指定其他节点连接m0时的地址
#来指定其他节点连接m0时的地址
#1.初始化
[root@localhost html]# docker swarm init --advertise-addr 192.168.0.2:2377 --listen-addr 192.168.0.2:2377
Swarm initialized: current node (yxzrtxfrm8vr0ra19q5w3wryq) is now a manager.

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

    docker swarm join --token SWMTKN-1-4vdybtqysdjis34mqoqj5inpzsq1yiqk43tk9v97noaksy68cm-332vwqtw6dfv958mfkrqn6gxl 192.168.0.2:2377

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

#2.查看节点信息
[root@localhost html]# docker node ls
ID                            HOSTNAME          STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
yxzrtxfrm8vr0ra19q5w3wryq *   wsm_m_swarm_m01   Ready     Active         Leader           20.10.18

#3.查看网络信息 docker-swarm 初始化时会创建一个类型为overlay的网络
[root@localhost html]# docker network ls
NETWORK ID     NAME              DRIVER    SCOPE
4568ab0107fc   bridge            bridge    local
152f72cad438   docker_gwbridge   bridge    local
0c1a27d4bea4   host              host      local
v6fai582rn5p   ingress           overlay   swarm
a01f5844a45f   none              null      local
489c5c1aa319   wfnet             bridge    local

#4.查看docker信息
[root@localhost html]# docker info
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Docker Buildx (Docker Inc., v0.9.1-docker)
  scan: Docker Scan (Docker Inc., v0.17.0)

Server:
 Containers: 1
  Running: 1
  Paused: 0
  Stopped: 0
 Images: 1
 Server Version: 20.10.18
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: active
  NodeID: yxzrtxfrm8vr0ra19q5w3wryq
  Is Manager: true
  ClusterID: 5uggixhuwr53s9bh80nz3a9i5
  Managers: 1
  Nodes: 1
  Default Address Pool: 10.0.0.0/8  
  SubnetSize: 24
  Data Path Port: 4789
  Orchestration:
   Task History Retention Limit: 5
  Raft:
   Snapshot Interval: 10000
   Number of Old Snapshots to Retain: 0
   Heartbeat Tick: 1
   Election Tick: 10
  Dispatcher:
   Heartbeat Period: 5 seconds
  CA Configuration:
   Expiry Duration: 3 months
   Force Rotate: 0
  Autolock Managers: false
  Root Rotation In Progress: false
  Node Address: 192.168.0.2
  Manager Addresses:
   192.168.0.2:2377
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6
 runc version: v1.1.4-0-g5fd4c4d
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 3.10.0-1160.el7.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 40
 Total Memory: 30.73GiB
 Name: wsm_m_swarm_m01
 ID: M3GK:IAKZ:H2Y5:22NL:V4RX:BRYH:Q5K5:M7AE:I242:SPDG:UUF7:T7VR
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

WARNING: bridge-nf-call-ip6tables is disabled


查看docker info集群状态
DockerSwarm集群搭建-实战_第1张图片

三、节点 添加、删除、权限提升、降低

1.添加节点

添加manager 节点 –token 会失效 时效为24小时 以后添加节点时 执行 docker swarm join-token 获取最新的token 标记文本
DockerSwarm集群搭建-实战_第2张图片

# 在添加一个work节点:
docker swarm join --token 
# 添加一个管理节点:
docker swarm join-token manager

#1.分别在work节点3与203机器上执行
[root@localhost upload]#  docker swarm join --token SWMTKN-1-4vdybtqysdjis34mqoqj5inpzsq1yiqk43tk9v97noaksy68cm-332vwqtw6dfv958mfkrqn6gxl 192.168.0.2:2377
Error response from daemon: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial tcp 192.168.0.2:2377: connect: no route to host"

#报错原因,manager没有开放端口
#在manager节点永久开放端口
[root@localhost upload]#  firewall-cmd --add-port=2377/tcp --permanent
[root@localhost upload]#  firewall-cmd --reload

#2.在work节点重新执行
[root@localhost upload]#  docker swarm join --token SWMTKN-1-4vdybtqysdjis34mqoqj5inpzsq1yiqk43tk9v97noaksy68cm-332vwqtw6dfv958mfkrqn6gxl 192.168.0.2:2377
This node joined a swarm as a worker.

#3.在manager执行,查看docker集群
[root@localhost html]#  docker node ls
ID                            HOSTNAME          STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
wmlgsladcg5h6ylg9pog48vva     mes_s_swarm_w03    Ready     Active                          20.10.18
yxzrtxfrm8vr0ra19q5w3wryq *   wsm_m_swarm_m01   Ready     Active         Leader           20.10.18
uu1ndu4enfm6gxh8jeefswluu     wsm_s_swarm_w02   Ready     Active                          20.10.18

  • MANAGER STATUS列说明:

    • Leader 意味着该节点是使得群的所有群管理和编排决策的主要管理器节点。
    • Reachable 意味着节点是管理者节点正在参与Raft共识。如果领导节点不可用,则该节点有资格被选为新领导者。
    • Unavailable 意味着节点是不能与其他管理器通信的管理器。如果管理器节点不可用,您应该将新的管理器节点加入群集,或者将工作器节点升级为管理器。
  • AVAILABILITY列说明:

    • Active 意味着调度程序可以将任务分配给节点。
    • Pause 意味着调度程序不会将新任务分配给节点,但现有任务仍在运行。
    • Drain 意味着调度程序不会向节点分配新任务。调度程序关闭所有现有任务并在可用节点上调度它们。

2.节点权限提升降低

#提升:将worker节点提升为manager节点,在manager节点执行如下命令:
docker node promote work-01
docker node ls

#降低:将manager节点降低为worker节点,在manager节点执行如下命令:
docker node demote work-02
docker node ls

3. 脱离集群

#想要那个节点脱离集群就在那个节点下执行以下命令
docker swarm leave

4. 删除已经脱离集群的节点

#删除已经脱离集群的work-02节点 
#ps:如果是多个manager节点中的其中一个节点需要先将节点降为worker节点才能删除
docker node rm work-02
#manager节点只能强制退出 manager退出后意味着整个swarm不复存在。
docker swarm leave --force

四.安装图形界面

1. 拉取visualizer 镜像

docker pull dockersamples/visualizer:latest

2 创建容器并运行(manager节点运行)

#1.启动方式1
docker run -itd --name visualizer -p 8099:8080 -e HOST=192.168.0.2 -e PORT=8080 -v /var/run/docker.sock:/var/run/docker.sock dockersamples/visualizer:latest

#2.启动方式2
#或者使用以下命令  可以通过集群中所有ip+port进行访问
docker service create \
--name=viz \
--publish=8080:8080/tcp \
--constraint=node.role==manager \
--mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
dockersamples/visualizer

3.测试访问:

http://192.168.0.2:8099
DockerSwarm集群搭建-实战_第3张图片

5.重启这个容器

docker start [容器id]

6. 启动docker时自动启动

暂时未做

五、创建服务

1.三台主机都准备好镜像

2.部署nacos(通过任意集群内节点的ip+port都可访问)

#在manager节点中创建overlay网络:
docker network create -d overlay wfnet

#删除docker网络
docker network rm NETWORK_ID

#查看docker 某网路
docker network inspect NETWORK_ID/name

#创建5个nginx:alpines容器的集群:
docker service create --name wf-register --network wfnet -p 8848:8848 --replicas 2 wf-register # (镜像名)

#在manager节点使用docker service ls 命令查看服务情况,worker节点无法查看:
docker service ls

#在manager或者worker节点都可以执行docker ps命令查看本虚拟机容器情况:
docker ps

#manager节点只用于管理集群,不希望部署服务。
docker node update --availability drain manager-01

#使用docker service scale wf-register=3命令将服务缩减/扩容为2个容器:
docker service scale wf-register=2

3.添加过更新一个对外暴露接口

docker service update --publish-add 8090:80 nginx

4. 删除服务

#删除服务
docker service rm wf-register

5.docker service create一键部署nacos


# 指定集群环境
docker service create \
--name wf-register \
--network wfnet \
-p 8848:8848 \
-p 9848:9848 \
-p 9555:9555 \
-p 9849:9849 \
--host=wf-mysql:192.168.0.2 \
-e MODE=cluster \
-e NACOS_SERVERS="192.168.0.2:8848 192.168.0.3:8848 192.168.0.203:8848" \
-e JVM_XMX=2g \
-e JVM_XMN=2g \
-e JVM_MS=128m \
-e JVM_MMS=320m \
--replicas 3 192.168.0.2:5000/wf-register

六、stack命令

1 创建docker-compose.yml 文件 内容如下:

#stack 最低支持版本为 3
version: "3"
  services:
    nginx-web: # 服务名称
      image: nginx:1.19.3-alpine  # 镜像名称
      container_name: nginx # 容器名称
      networks: 
        - nginx-net #指定网络
      restart: always #重启策略
      ports:
        - 81:80 #挂载端口
      deploy:
        replicas: 5  #生成实例数量
networks:
  nginx-net: #需要创建的网络名称
    driver: overlay #指定网络类型

2 运行nginx

#在manager节点中创建docker-compose.yml文件。执行如下命令:
docker stack deploy nginx-stack --compose-file=docker-compose.yml 或者是
docker stack deploy nginx-stack -c docker-compose.yml
#查看stack服务运行情况。执行如下命令:
docker stack services nginx-stack
#查看5个容器运行在哪个节点中。执行如下命令:
docker service ls #查看到NAME中的服务名为:nginx-stack_nginx-web
docker service ps nginx-stack_nginx-web

七、常用命令如下:

1.swarm命令

命令 描述
docker swarm init 初始化一个 swarm 群集
docker swarm join 加入群集作为节点或管理器
docker swarm join-token 管理用于加入群集的令牌
docker swarm leave 离开 swarm 群集
docker swarm unlock 解锁 swarm 群集
docker swarm unlock-key 管理解锁钥匙
docker swarm update 更新 swarm 群集

2.node命令

命令 描述
docker node demote 从 swarm 群集管理器中降级一个或多个节点
docker node inspect 显示一个或多个节点的详细信息
docker node ls 列出 swarm 群集中的节点
docker node promote 将一个或多个节点推入到群集管理器中
docker node ps 列出在一个或多个节点上运行的任务,默认为当前节点
docker node rm 从 swarm 群集删除一个或多个节点
docker node update 更新一个节点

3.service 命令

命令 描述
docker service create 创建服务
docker service inspect 显示一个或多个服务的详细信息
docker service logs 获取服务的日志
docker service ls 列出服务
docker service rm 删除一个或多个服务
docker service scale 设置服务的实例数量
docker service update 更新服务
docker service rollback 恢复服务至update之前的配置

4.stack命令

命令 描述
docker stack deploy 部署新的堆栈或更新现有堆栈
docker stack ls 列出现有堆栈
docker stack ps 列出堆栈中的任务
docker stack rm 删除一个或多个堆栈
docker stack services 列出堆栈中的服务

八.docker可视化Portainer

对于非运维人员来将采用命令行的方式建立了swarm集群并应用是非常具有学习成本的,所以进行swarm集群管理添加图形化管理界面的配置

1.Portainer镜像的加载
加载三部曲:导入、标记、上传

你可能感兴趣的:(docker,linux,docker,容器,运维)