首页
登录 | 注册

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


       应用需求:在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 deploydocker 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.

 

2docker 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 检测上传的镜像库文件.
curl http://192.168.0.77:5000/v2/_catalog
 
6Docker 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节点机上,不需要自己手动再布署,然后再运行起来,看来还比较自动化。


相关文章

  • 如何在一个Docker容器里安装Discourse
    如何在一个Docker容器里安装Discourse [日期:2015-06-06] 来源:Linux中国  作者:Linux [字体:大 中 小] 大家好,今天我们将会学习如何利用Docker平台安装Discourse.Discourse是 ...
  • 一个高人的理解:.net是个平台,是个想java似的一种体系,在他上面开发出来的程序是运行clr上的而不是真正的运行在系统上的,因此如果今后微软开发了unix的.net平台,你的程序可以不需要重新编译而运行在unix操作系统上.而我们用vb ...
  • 对比剖析Swarm Kubernetes Marathon编排引擎
    Docker Native Orchestration 基本结构 可用性 你只需要在其中的一个docker节点运行使用 docker swarm init命令创建一个集群,在您要添加任何其他节点,通过docker swarm join命令加 ...
  • Docker学习之安装篇
    一.CentOS6.5下安装: OS:CentOS6.5 x86_64 RedHat/CentOS环境下安装Docker,官方文档要求Linux kernel版本至少3.8以上,而且Docker只能运行在64位的系统中. 1.首先升级lin ...
  • 3大模型,搞定Kubernetes网络
    Kubernetes为Pods的网络通信设定了一些条件和要求: 2.节点是运行Kubernetes集群的机器. 这些可以是虚拟机或物理机,也可以是能够运行Kubernetes的任何其他机器. 这些节点还能够与所有Pod通信,而无需NAT. ...

2020 unjeep.com webmaster#unjeep.com
12 q. 0.013 s.
京ICP备10005923号