ITPub博客

首页 > 云计算 > > 为什么运行的容器都集中运行在manager node上

为什么运行的容器都集中运行在manager node上

作者:bluepeach 时间:2019-09-16 16:30:27 0 删除 编辑

 应用需求:在docker swarm环境下,希望某app所在的容器能在多个node上运行,则docker service create时镜像文件从registry中获取。

 

考虑到要使用docker swarm 支持群集问题,docker软件安装不低于12版本,因此选择了Ubuntu 16系统。测试中若image是从已经有的网上registry中获取,一般没有什么大的问题,若是自己制作的镜像,没有把它放入registry中,而是直接在create service是指定的本地镜像,则会发现其容器集中运行在manager node上,worker node上则没有运行, 刚开始还没有留意这个问题,以为搭建好了swarm,容器在docker stack deploy或docker service create时会自动发布在多个node上,实际情况则是事与愿违。

相关参考:

docker swarm

集群的搭建:

https://blog.csdn.net/letter_a/article/details/81975820

使用docker创建集成服务—lnmp:

https://www.cnblogs.com/s-b-b/p/8624491.html

Ubuntu 搭建docker registry 私有仓库:

https://www.cnblogs.com/xiao987334176/p/9946915.html

简单地记录一下流水帐:

1

。Docker的安装:

deb https://apt.dockerproject.org/repo ubuntu-xenial main

apt-get install -y docker-engine=17.05.0~ce-0~ubuntu-xenial --fix-missing

vi /etc/apt/sources.list

列出下关的内处配置文件:

/etc/default/docker

/etc/docker/daemon.json

/etc/systemd/system/multi-user.target.wants/docker.service

 

shell中通过命令行提取文件中某一行某一列的字段

命令如下:

sed -n Np /file/path | cut -d " " -fM

docker ps|grep 8500 |cut -d " " -f1.

 

2。docker swarm集群的搭建(略)

3

。制作镜像,docker-compose.yml(略)

4

。容器运行测试:

 

在执行docker service create --replicas 2 --name my_eproc esproc /bin/bash时遇到image could not be accessed on a registry to record its digest.

运行的容器都在manager node节点上,而没有分配到其它worker node上。

 

开始以为是生成的镜像问题,后来用《使用docker创建集成服务--lnmp》中的例子在本地测试一下,是没有问题,将它改为本地的镜像后,结果出现的现象与当前的一样,感觉问题出在镜像registry来源上,测试的image只是本地存在的,但它并没有入库。本来想取巧用阿里云docker来验证一下想法,谁知道以前正常的docker pull不行了, 只好在本地建立私有regitry来测试。

5.Ubuntu 搭建docker registry 私有仓库

docker pull registry

 

docker push 192.168.91.131:5000/alpine

输出:

The push refers to a repository [192.168.91.131:5000/alpine]

Get https://192.168.0.77:5000/v1/_ping: http: server gave HTTP response to HTTPS client

这个需要在/etc/docker/daemon.json 中修改,其中若想基非manager node机上操作,也需要加上它 /etc/docker/daemon.json

{

   "registry-mirrors": [

      "https://kv3q33c.mirror.aliyuncs.com"

   ],

   "insecure-registries": [

      "192.168.0.77:5000"

    ]

}

 

systemctl restart docker 检测上传的镜像库文件.

curlhttp://192.168.0.77:5000/v2/_catalog

 

6.Docker stack deploy测试

将esproc改为private registry,并上传

docker tag esproc 192.168.0.77:5000/unc/esproc

docker push 192.168.0.77:5000/unc/esproc

 

docker stack deploy -c docker-compose.yml my

# more docker-compose.yml

version: "3"

services:

  proc:

    image: 192.168.0.77:5000/unc/esproc

    volumes:

      - /home/docker/share:/share:ro

      - /opt/app/u01:/u01

    deploy:

      replicas: 4

      resources:

        limits:

          cpus: "0.5"

          memory: 250M

      restart_policy:

        condition: on-failure

    tty: true

    ports:

      - "80:80"

    networks:

      - overlay

 

networks:

  overlay:

 

检测执行情况

# docker service ps my_proc

ID                  NAME                IMAGE                                 NODE                DESIRED STATE       CURRENT STATE               ERROR               PORTS

cbvp3xos2bqa        my_proc.1           192.168.0.77:5000/unc/esproc:latest   worker              Running             Running about an hour ago                      

18h3znc97mv2        my_proc.2           192.168.0.77:5000/unc/esproc:latest   master              Running             Running about an hour ago                      

doaqlydtoen2        my_proc.3           192.168.0.77:5000/unc/esproc:latest   worker              Running             Running about an hour ago                      

ejbqw4nuv728        my_proc.4           192.168.0.77:5000/unc/esproc:latest   master              Running             Running about an hour ago 

初次要慢一些,docker自动把要运行的镜像发布到关联的node节点机上,不需要自己手动再布署,然后再运行起来,看来还比较自动化。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2558/viewspace-3131326/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    103
  • 访问量
    22747