docker Swarm集群配置
发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,前言:Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而
千家信息网最后更新 2024年11月23日docker Swarm集群配置
前言:
Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。从 Docker 1.12.0 版本开始,Docker Swarm 已经包含在 Docker 引擎中(docker swarm),并且已经内置了服务发现工具,我们就不需要像之前一样,再配置 Etcd 或者 Consul 来进行服务发现配置了。Docker Swarm集群中有三个角色:manager(管理者);worker(实际工作者)以及service(服务)。在上面的三个角色中,其本质上与我们公司的组织架构类似,有领导(manager),有搬砖的(worker),而领导下发给搬砖者的任务,就是Docker Swarm中的service(服务)。需要注意的是,在一个Docker Swarm群集中,每台docker服务器的角色可以都是manager,但是,不可以都是worker,也就是说,不可以群龙无首,并且,参与群集的所有主机名,千万不可以冲突。
Docker Swarm规划
Docker安装
[root@k8s-master01 ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo [root@k8s-master01 ~]# mv docker-ce.repo /etc/yum.repos.d/ [root@k8s-master01 ~]# yum install -y docker-ce [root@k8s-master01 ~]# systemctl daemon-reload [root@k8s-master01 ~]# systemctl start docker
设置互通和开放iptables访问(三台都执行)
[root@k8s-master01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub k8s-master01: [root@k8s-master01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub k8s-node03: [root@k8s-master01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub k8s-node02: [root@k8s-master01 ~]# iptables -A INPUT -p tcp -s 192.168.1.29 -j ACCEPT [root@k8s-master01 ~]# iptables -A INPUT -p tcp -s 192.168.1.101 -j ACCEPT
设置集群
设置k8s-master01为manage节点[root@k8s-master01 ~]# docker swarm init --advertise-addr 192.168.1.23
配置node节点加入Swarm节点
升级节点为manager
[root@k8s-node02 ~]# docker node promote k8s-node02 #将k8s-node02从worker升级为manager
若docker02或者docker03要脱离这个群集 (k8s-node03节点为例子)
[root@k8s-node03 .ssh]# docker swarm leave #在k8s-node03上执行此命令Node left the swarm.[root@k8s-master01 ~]# docker node rm k8s-node03 #然后manager节点移除k8s-node03[root@k8s-master01 ~]# docker swarm leave -f #若是最后一个manager上进行删除群集,则需要加"-f"选项#最后一个删除后,这个群集也就不存在了
Docker Swarm常用命令
[root@k8s-master01 ~]# docker node ls ####查看节点数量ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSIONzdtrj1duj7rz2m0a0w4bh4kww * k8s-master01 Ready Active Leader 19.03.4nnc6df9g6gzwpstjspdvrvl5u k8s-node02 Ready Active 19.03.3-rc1vkxwfe025vp3m3dxyphkfc0u6 k8s-node03 Ready Active 19.03.4[root@k8s-master01 ~]# docker service ls #查看service服务[root@k8s-master01 ~]# docker swarm join-token worker #如果后期需要加入worker端,可以执行此命令查看令牌(也就是加入时需要执行的命令)[root@k8s-master01 ~]# docker swarm join-token manager #同上,若要加入manager端,则可以执行这条命令查看令牌。[root@k8s-master01 ~]# docker service scale nginx=3 #容器的动态扩容及缩容[root@k8s-master01 ~]# docker service ps nginx #查看创建的容器运行在哪些节点[root@k8s-master01 ~]# docker service ls #查看创建的服务[root@k8s-master01 ~]# docker service rm helloworld #删除服务 [root@k8s-master01 ~]#docker service inspect helloworld #查看服务信息#将docker03脱离这个群集[root@k8s-master01 ~]# docker swarm leave #k8s-node02脱离这个群集[root@k8s-master01 ~]# docker node rm k8s-node02 #然后在manager角色的服务器上移除k8s-node02[root@k8s-master01 ~]#docker node promote k8s-node02 #将k8s-node02从worker升级为manager。#升级后docker02状态会为Reachable[root@k8s-master01 ~]# docker node demote k8s-node02 #将k8s-node02从manager角色降级为worker[root@k8s-master01 ~]# docker node update --availability drain k8s-node02 #设置主机k8s-node02以后不运行容器,但已经运行的容器并不会停止
搭建Docker Swarm的WEB界面
[root@k8s-master01 ~]# docker run -d -p 8000:8080 -e HOST=172.168.1.3 -e PORT=8080 -v /var/run/docker.sock:/var/run/docker.sock --name visualizer dockersamples/visualizer
搭建service服务
[root@k8s-master01 ~]# docker service create --replicas 1 --name helloworld alpine ping docker.com[root@k8s-master01 ~]# docker service ls #查看服务ID NAME MODE REPLICAS IMAGE PORTSle5fusj4rses helloworld replicated 1/1 alpine:latest [root@k8s-master01 ~]# docker service inspect --pretty helloworldID: le5fusj4rsesv6d4ywxwrvwnoName: helloworldService Mode: Replicated Replicas: 1Placement:UpdateConfig: Parallelism: 1 On failure: pause Monitoring Period: 5s Max failure ratio: 0 Update order: stop-firstRollbackConfig: Parallelism: 1 On failure: pause Monitoring Period: 5s Max failure ratio: 0 Rollback order: stop-firstContainerSpec: Image: alpine:latest@sha256:c19173c5ada610a5989151111163d28a67368362762534d8a8121ce95cf2bd5a Args: ping docker.com Init: falseResources:Endpoint Mode: vip此时服务运行在集群的这台机器,我们扩展下,使他运行到work两台上 [root@k8s-master01 ~]# docker service scale helloworld=3 #扩缩容器 只需要修改 helloword=#数字即可
. 然后你可以到各个worker查看 docker ps -a查看
设置特定worker不运行容器
在上述的配置中,若运行指定数量的容器,那么将是群集中的所有docker主机进行轮询的方式运行,直到运行够指定的容器数量,那么,如果不想让k8s-master01这个manager角色运行容器呢?可以进行以下配置: [root@k8s-master01 ~]# docker node update --availability drain k8s-master01 #k8s-master01#设置主机k8s-master01以后不运行容器,但已经运行的容器并不会停止# "--availability"选项后面共有三个选项可配置,如下:# "active":工作;"pause":暂时不工作;"drain":永久性的不工作
在扩容查看
[root@k8s-master01 ~]# docker service scale helloworld=6
创建一个nginx服务
[root@k8s-master01 ~]# docker service create --replicas 2 --name nginx15 -p 80 192.168.1.23:5000/nginx:1.15 [root@k8s-master01 ~]# docker service ls ID NAME MODE REPLICAS IMAGE PORTS le5fusj4rses helloworld replicated 6/6 alpine:latest tw7s5ps953lm nginx15 replicated 2/2 192.168.1.23:5000/nginx:1.15 *:30001->80/tcp 发现k8s-master是不运行任务的
Docker swarm集群节点路由网络
swarm可以轻松的发布服务和端口,所有节点都参与入口的路由网络,路由网络能够使得集群中每个节点都能够接受已经发布端口上的任何服务。即使在节点上没有运行任何服务,也可以在集群中运行任何服务。路由网络将所有传入请求路由到可用节点上,也就是存活的容器上。
[root@k8s-master01 ~]# docker service create --replicas 2 --name nginx --publish 8081:80 192.168.1.23:5000/nginx:1.15
[root@k8s-master01 ~]# curl http://192.168.1.29:8081
[root@k8s-master01 ~]# curl http://192.168.1.101:8081
docker swarm编排
version: "3.3"services: redis: image: redis:latest container_name: redis1 hostname: redis1 networks: hanye1: ipv4_address: 172.3.1.2 dns: - "114.114.114.114" ports: - "6379:6379" deploy: restart_policy: condition: on-failure replicas: 2 mode: replicated resources: limits: cpus: "0.2" memory: 100M reservations: cpus: "0.2" memory: 100Mnetworks: hanye1: ipam: driver: default config: - subnet: 172.3.1.1/24docker stack deploy -c docker-swarm.yaml up
服务
容器
运行
节点
集群
配置
主机
角色
命令
路由
服务器
网络
升级
工作
三个
也就是
数量
令牌
任务
多个
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络技术字母大小写
东芝笔记本网络安全
网络安全警察好不好
qq服务器挂机
国家实行网络安全的什么制度
网络安全国家有哪些
知网数据库购买
数据库集成开发技术研究
昆明参考软件开发零售价格
南航金城教务网数据库
人工智能用什么数据库
网络安全法以什么为基础
国内云服务器有哪些推荐
拉萨市软件开发公司
知网是数据库嘛
光刻机系统软件开发
蓝盒子服务器操作指引
单机游戏数据库设计
公司网络安全方面稿件
怀柔区品牌软件开发价格信息
软件开发所需控件
权力阳光 数据库
sqlite数据库驱动
管理独立服务器后的结果
网络安全服务商渠道经理
创建本地数据库
java互联网软件开发
网络安全湖北省赛
it民工 软件开发
怎样制作表格数据库