2016-08-25 6 views
0

3 명의 웜 매니저와 3 개의 노드로 설치 프로그램을 만들었습니다.Docker Swarm 관리자는 노드를 연기하나요?

당신은 3 명의 석사와 3 명의 직원이있는 경우 실제로 관리자와 6 개의 노드가 인 것을 볼 수 있습니다.. 관리자가 노동자뿐 아니라 컨테이너도 실행할 수있는 아이디어입니까? 설치 프로그램에서 뭔가 빠졌는가, 아니면 지금 그대로 작동하도록 설계 되었습니까? 내가 떼 클러스터에서 실행하는 일부 서비스를 만들 때

[email protected]:~$ docker info 
Containers: 4 
Running: 3 
Paused: 0 
Stopped: 1 
Images: 3 
Server Version: 1.12.0 
Storage Driver: aufs 
Root Dir: /var/lib/docker/aufs 
Backing Filesystem: extfs 
Dirs: 23 
Dirperm1 Supported: false 
Logging Driver: json-file 
Cgroup Driver: cgroupfs 
Plugins: 
Volume: local 
Network: overlay bridge host null 
Swarm: active 
NodeID: 9uv3xhwzibx52xghpsa0sp3f7 
Is Manager: true 
ClusterID: 04r095rvj6b4i7ygbnr2quo9e 
**Managers: 3 
Nodes: 6** 
Orchestration: 
    Task History Retention Limit: 5 
Raft: 
    Snapshot interval: 10000 
    Heartbeat tick: 1 
    Election tick: 3 
Dispatcher: 
    Heartbeat period: 5 seconds 
CA configuration: 
    Expiry duration: 3 months 
Node Address: 172.100.0.23 
Runtimes: runc 
Default Runtime: runc 
Security Options: apparmor 
Kernel Version: 3.13.0-92-generic 
Operating System: Ubuntu 14.04.4 LTS 
OSType: linux 
Architecture: x86_64 
CPUs: 1 
Total Memory: 992.5 MiB 
Name: manager3 
ID: MUXB:GUNV:HIDO:APRJ:S2JU:763E:QSOL:2554:EZJL:L4OI:6TS5:RD7O 
Docker Root Dir: /var/lib/docker 
Debug Mode (client): false 
Debug Mode (server): false 
Registry: https://index.docker.io/v1/ 
WARNING: No swap limit support 
Insecure Registries: 
127.0.0.0/8 

가 :

docker service create --replicas=3 --name redis redis:latest

그들 중 일부가 실행됩니다 내가 고정 표시기 정보 명령을 실행할 때

,이 출력을 얻고있다 관리자, 일부는 노동자. 그게 나를 혼란스럽게합니다.

나는 더 많은 서비스

docker service create --replicas=6 --name redis redis:latest

가 클러스터의 모든 시스템에서 실행을 만드는 경우. 포트 충돌로 인해 더 많은 트래픽이 증가하기 시작합니다.

답변

3

웜 관리자로 실행중인 노드 (호스트)는 실행중인 서비스와 관련하여 작업자로 실행중인 노드 (호스트)와 다릅니다. 3 개의 노드가 각각 하나의 (그리고 아무 작업자도 아닌) 득시글 득점자와 득실 거리는 것은 완벽합니다.

포트 충돌의 경우 서비스를 만들 때 호스트의 공용 포트를 지정해야합니다. 예 :

docker create service --name redis --publish 8080:80 --replicas 5 redis:latest 
도커 다음 (들어오는 요청과 동일한 노드에서 반드시) 클러스터에서 레디 스 컨테이너 중 하나의 노드 중 하나를 8080 포트로 들어오는 요청을 균형을로드

@ 마크 오코너의 대답
+0

그래서 서비스를 실행하는 관리자를 제한 할 possiblity가이 없다? 한가지 더 궁금한 점이 있습니다 : 영사가 서비스 발견을위한 코드로 주석을 달고 영사 대리인이 -net = 호스트 모드로되어있는 영사가있는 마이크로 서비스를 운영한다면 오버레이 네트워크의 마이크로 서비스가 트래픽을 찾아서 라우팅 할 수있는 기회가 있습니까? = 호스트 네트워크? : $ –

+1

@ DušanŠušić 컨테이너를 실행하지 않도록 관리자를 구성 할 수 있습니다. 참조 : https://docs.docker.com/engine/swarm/admin_guide/#/run-manager-only-nodes –

+0

@ Mark O'Connor이 쓴 것처럼 관리자가 근로자로 행동하지 않도록 지정할 수 있습니다. 서비스를 작성/갱신 할 때 제한 조건을 사용하여 노드를 실행할 노드를 지정할 수도 있습니다. 참조 : https://docs.docker.com/engine/reference/commandline/service_create/#/specify-service-constraints. 다른 질문에 대해서는 다른 stackoverflow 게시를 만들어야합니다. 그렇지 않으면 다른 게시자가 찾을 수 없습니다. 질문도 분명하지 않습니다. 세부 정보, 코드 예제를 포함 시키십시오. – Alkaline

3

덕분입니다 : 기본 관리자 노드가

또한 작업자 노드 역할을합니다.

관리자를 배출하고있어 "전용"매니저를, 그래서 당신은 관리자에게이 명령을 실행할 수 있습니다 중지되는 노동자 :

docker node update --availability drain *manager_name* 
관련 문제