资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

dockerSwarm集群配置-创新互联

前言:
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 Swarm集群配置

创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都做网站、网站设计、余姚网络推广、重庆小程序开发公司、余姚网络营销、余姚企业策划、余姚品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们大的嘉奖;创新互联为所有大学生创业者提供余姚建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com
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

docker Swarm集群配置

配置node节点加入Swarm节点

docker Swarm集群配置
docker 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 VERSION
zdtrj1duj7rz2m0a0w4bh4kww *   k8s-master01        Ready               Active              Leader              19.03.4
nnc6df9g6gzwpstjspdvrvl5u        k8s-node02          Ready               Active                                  19.03.3-rc1
vkxwfe025vp3m3dxyphkfc0u6     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

docker Swarm集群配置

搭建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               PORTS
le5fusj4rses        helloworld          replicated          1/1                 alpine:latest       
[root@k8s-master01 ~]# docker service inspect --pretty helloworld

ID:     le5fusj4rsesv6d4ywxwrvwno
Name:       helloworld
Service Mode:   Replicated
 Replicas:  1
Placement:
UpdateConfig:
 Parallelism:   1
 On failure:    pause
 Monitoring Period: 5s
 Max failure ratio: 0
 Update order:      stop-first
RollbackConfig:
 Parallelism:   1
 On failure:    pause
 Monitoring Period: 5s
 Max failure ratio: 0
 Rollback order:    stop-first
ContainerSpec:
 Image:     alpine:latest@sha256:c19173c5ada610a5989151111163d28a67368362762534d8a8121ce95cf2bd5a
 Args:      ping docker.com 
 Init:      false
Resources:
Endpoint Mode:  vip
此时服务运行在集群的这台机器,我们扩展下,使他运行到work两台上
   [root@k8s-master01 ~]# docker service scale helloworld=3  #扩缩容器 只需要修改 helloword=#数字即可

docker Swarm集群配置

.
         然后你可以到各个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

docker Swarm集群配置

创建一个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: 100M
networks:
  hanye1:
    ipam:
     driver: default
     config:
       - subnet: 172.3.1.1/24

docker stack deploy -c docker-swarm.yaml  up

docker Swarm集群配置

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文名称:dockerSwarm集群配置-创新互联
浏览地址:http://www.cdkjz.cn/article/deggdh.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220