Computer >> 컴퓨터 >  >> 소프트웨어 >> 가상 기기

Docker swarm 모드 - 작업자 노드 추가 자습서

몇 주 전에 CentOS 7.2로 시작한 작업을 확장해 보겠습니다. 이 가이드에서는 Docker 1.12에 내장된 기본 클러스터링 및 오케스트레이션 기능을 시작하고 시작하는 방법을 배웠습니다. 그러나 관리자 노드만 있었고 다른 작업자는 없었습니다. 오늘은 이것을 확장해 보겠습니다.

비대칭 노드를 스웜에 추가하는 방법, 즉 CentOS 상자 옆에 있는 Fedora 24를 추가하는 방법을 보여드리겠습니다. 둘 다 연결된 멋진 로드 밸런싱과 기타 등등과 함께 클러스터에 참여하게 됩니다. 물론 이것은 사소하지 않을 것이고 우리는 약간의 걸림돌을 만날 것이므로 상당히 흥미로울 것입니다. 나 후에.

전제 조건

추가 노드를 swarm에 성공적으로 결합하기 전에 수행해야 할 몇 가지 작업이 있습니다. 하나는 이상적으로 모든 노드가 동일한 버전의 Docker를 실행해야 하며 네이티브 오케스트레이션을 지원하려면 최소 1.12 이상이어야 합니다. CentOS와 마찬가지로 Fedora에는 리포지토리에 최신 빌드가 없으므로 수동으로 또는 Docker 리포지토리를 사용하여 올바른 소프트웨어 버전을 수동으로 추가하고 설치한 다음 몇 가지 종속성 충돌을 수정해야 합니다. CentOS로 이 작업을 수행하는 방법을 보여 드렸으며 연습은 동일합니다.

또한 모든 노드는 서로 통신할 수 있어야 합니다. 관리자와 작업자가 서로 대화할 수 있도록 라우팅 및 방화벽 규칙이 있어야 합니다. 그렇지 않으면 노드를 Swarm에 가입시킬 수 없습니다. 문제를 해결하는 가장 쉬운 방법은 방화벽 규칙(iptables -F)을 일시적으로 플러시하는 것이지만 이렇게 하면 보안이 손상될 수 있습니다. 수행 중인 작업을 완전히 이해하고 노드 및 포트에 대한 올바른 규칙을 생성했는지 확인하십시오.

데몬의 오류 응답:노드가 결합되기 전에 시간 초과에 도달했습니다. 떼에 합류하려는 시도는 백그라운드에서 계속됩니다. "docker info" 명령을 사용하여 노드의 현재 스웜 상태를 확인하십시오.

호스트에서 동일한 Docker 이미지를 사용할 수 있어야 합니다. 이전 자습서에서는 Apache 이미지를 생성했으며 작업자 노드에서 동일한 작업을 수행하거나 생성된 이미지를 배포해야 합니다. 그렇게 하지 않으면 오류가 발생합니다. Docker를 설정하는 데 도움이 필요하면 내 소개 가이드와 네트워킹 자습서를 읽어보세요.

7vwdxioopmmfp3amlm0ulimcu \_ websky.11 my-apache2:latest
localhost.localdomain 종료 7분 전에 거부됨
"해당 이미지 없음:my-apache2:lat&"

시작하자

따라서 우리는 CentOS 상자를 가동하고 실행하며 컨테이너를 성공적으로 생성합니다. 호스트 포트를 사용하여 서비스에 연결할 수 있으며 모든 것이 조화롭게 보입니다. 현재 스웜에는 관리자만 있습니다.

직원 가입

새 노드를 추가하려면 join 명령을 사용해야 합니다. 그러나 Swarm 관리자에 대해 올바르게 인증하려면 먼저 작업자 노드에 제공해야 하는 토큰, IP 주소 및 포트를 검색해야 합니다. 그런 다음 (Fedora에서) 실행하십시오.

[root@localhost ~]# docker swarm 조인 토큰 작업자
이 스웜에 작업자를 추가하려면 다음 명령을 실행합니다.

docker swarm 조인 \
--토큰 SWMTKN-1-0xvojvlza90nrbihu6gfu3qm34ari7lwnza ... \
192.168.2.100:2377

방화벽 및 라우팅 규칙을 수정하지 않으면 시간 초과 오류가 발생합니다. 이미 떼에 합류한 경우 합류 명령을 반복하면 고유한 소음이 발생합니다.

데몬의 오류 응답:이 노드는 이미 스웜의 일부입니다. "docker swarm leave"를 사용하여 이 떼를 떠나 다른 떼에 합류하십시오.

확실하지 않은 경우 떼를 떠난 다음 다시 시도할 수 있습니다.

[root@localhost ~]# docker swarm 휴가
노드가 떼를 떠났습니다.

docker swarm 조인 --token
SWMTKN-1-0xvojvlza90nrbihu6gfu3qnza4 ... 192.168.2.100:2377
이 노드는 작업자로 Swarm에 합류했습니다.

작업자 노드에서 docker info를 사용하여 상태를 확인할 수 있습니다.

떼:활성
노드 ID:2i27v3ce9qs2aq33nofaon20k
관리자임:false
노드 주소:192.168.2.103

마찬가지로 관리자에서:

떼:활성
노드 ID:cneayene32jsb0t2inwfg5t5q
관리자임:true
클러스터 ID:8degfhtsi7xxucvi6dxvlx1n4
관리자:1
노드:3
관현악법:
작업 기록 보존 제한:5
뗏목:
스냅샷 간격:10000
하트비트 틱:1
선거 틱:3
디스패처:
하트비트 기간:5초
CA 구성:
만료 기간:3개월
노드 주소:192.168.2.100

서비스 생성 또는 확장

이제 Docker가 노드 간에 컨테이너를 배포하는지 여부와 방법을 확인해야 합니다. 내 테스트는 매우 가벼운 부하에서 다소 단순한 밸런싱 알고리즘을 보여줍니다. Docker는 실행 중인 서비스를 확장 및 업데이트를 시도한 후에도 한두 번 새 작업자에게 재배포하려고 시도하지 않았습니다. 마찬가지로 한 번은 작업자 노드에서 완전히 새로운 서비스를 만들었습니다. 어쩌면 최선의 선택이었을지도 모릅니다.

전적으로 작업자 노드에서 생성된 새 서비스입니다.

얼마 후 둘 사이에 기존 서비스용 컨테이너 재배포가 어느 정도 있었지만 시간이 좀 걸렸다. 새로운 서비스가 잘 작동했습니다. 이것은 초기 관찰일 뿐이므로 이 시점에서 더 이상 말할 수 없습니다. 지금은 탐색 및 조정을 시작하기에 좋은 출발점입니다.

잠시 후 로드 밸런싱이 시작됩니다.

결론

Docker는 깔끔하고 작은 야수이며 계속해서 더 크고 복잡하고 강력하며 더 우아하게 성장할 것입니다. 크고 육즙이 많은 기업에 먹히는 것은 시간 문제입니다. 네이티브 오케스트레이션과 관련하여 Swarm 모드는 꽤 잘 작동하지만 알고리즘과 확장성의 힘을 완전히 활용하려면 몇 개의 컨테이너 이상이 필요합니다.

내 튜토리얼은 CentOS 상자에서 실행되는 클러스터에 Fedora 노드를 추가하는 방법을 보여 주며 두 가지가 나란히 잘 작동했습니다. 로드 밸런싱과 관련하여 몇 가지 질문이 있지만 이는 향후 기사에서 살펴볼 내용입니다. 대체로 이것이 가치 있는 교훈이 되었기를 바랍니다. Swarm을 설정하려고 할 때 발생할 수 있는 몇 가지 전제 조건과 일반적인 문제를 해결하고 여러 컨테이너를 시작했으며 서비스를 확장하고 배포하는 방법에 대해서도 간략하게 다루었습니다. 그리고 이것은 시작에 불과하다는 것을 기억하십시오.

건배.