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节点 |
#修改命令:
# 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
硬件资源 | 最小配置 | 推荐配置 |
---|---|---|
CPU | 1CPU | 2CPU |
内存 | 1G | 2-4G |
硬盘 | 20G | 50G |
docker版本:20.10.10
#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
添加manager 节点 –token 会失效 时效为24小时 以后添加节点时 执行 docker swarm join-token 获取最新的token 标记文本
# 在添加一个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列说明:
AVAILABILITY列说明:
#提升:将worker节点提升为manager节点,在manager节点执行如下命令:
docker node promote work-01
docker node ls
#降低:将manager节点降低为worker节点,在manager节点执行如下命令:
docker node demote work-02
docker node ls
#想要那个节点脱离集群就在那个节点下执行以下命令
docker swarm leave
#删除已经脱离集群的work-02节点
#ps:如果是多个manager节点中的其中一个节点需要先将节点降为worker节点才能删除
docker node rm work-02
#manager节点只能强制退出 manager退出后意味着整个swarm不复存在。
docker swarm leave --force
docker pull dockersamples/visualizer:latest
#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
docker start [容器id]
暂时未做
#在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
docker service update --publish-add 8090:80 nginx
#删除服务
docker service rm wf-register
# 指定集群环境
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 最低支持版本为 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 #指定网络类型
#在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
命令 | 描述 |
---|---|
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 群集 |
命令 | 描述 |
---|---|
docker node demote | 从 swarm 群集管理器中降级一个或多个节点 |
docker node inspect | 显示一个或多个节点的详细信息 |
docker node ls | 列出 swarm 群集中的节点 |
docker node promote | 将一个或多个节点推入到群集管理器中 |
docker node ps | 列出在一个或多个节点上运行的任务,默认为当前节点 |
docker node rm | 从 swarm 群集删除一个或多个节点 |
docker node update | 更新一个节点 |
命令 | 描述 |
---|---|
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之前的配置 |
命令 | 描述 |
---|---|
docker stack deploy | 部署新的堆栈或更新现有堆栈 |
docker stack ls | 列出现有堆栈 |
docker stack ps | 列出堆栈中的任务 |
docker stack rm | 删除一个或多个堆栈 |
docker stack services | 列出堆栈中的服务 |
对于非运维人员来将采用命令行的方式建立了swarm集群并应用是非常具有学习成本的,所以进行swarm集群管理添加图形化管理界面的配置
1.Portainer镜像的加载
加载三部曲:导入、标记、上传