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

Vagrant 및 CoreOS 클러스터 및 네트워킹

점점 더 따뜻해지다. 시간 슬라이더 아래에서 여러 날, 저는 VirtualBox, KVM 및 친구와 같이 아마도 더 복잡한 다른 소프트웨어에 대한 훌륭하고 깔끔한 래퍼가 됨으로써 큰 ​​목표를 가진 가상화 솔루션인 Vagrant를 선보였습니다. 또한 Docker 컨테이너 지원 및 클라우드 서버 환경을 제공하여 시니어 리그에서 활약합니다.

이 모델을 확장하여 약간 다른 사용 사례인 구름이 매우 많은 경우에 대해 논의할 것입니다. 이전 연습에서 사용한 CoreOS는 클라우드 매니아에서 돈을 벌려고 시도하는 또 다른 플레이어이며 매우 깔끔한 클러스터 기능과 자동화를 제공합니다. 오늘 우리는 클러스터를 불러오는 방법을 배우고 다소 간과되고 원본 문서에서도 잘 설명되지 않는 네트워킹 부분에 대해 논의할 것입니다. 그러니 저를 따라오세요.

디스커버리 토큰 설정

지난 번과 달리 의도적으로 Powershell을 통해 Windows에서 Vagrant를 시도했을 때 다양한 방법으로 수행할 수 있는 샘플을 제공하기 위해 현재 연습은 Linux, 더 정확하게는 Xubuntu Vivid에서 진행됩니다.

공식 가이드에 따라 Vagrant용 CoreOS를 설정하는 것은 그리 어렵지 않지만 온라인 참조에서 얻을 수 있는 것처럼 그렇게 간단하지도 않습니다. 시작하는 데 분명한 조급함이 있고, 결국에는 이루어집니다.

리포지토리를 복제한 후에는 마음대로 사용할 수 있는 여러 파일이 있으며 Vagrant를 초기화하고 시작하려면 약간 편집해야 합니다. 가장 먼저 해야 할 일은 user-data.sample 파일을 수정하고 이름을 user-data로 바꾸는 것입니다. 가장 주목할 만한 것은 토큰 조각입니다.

#cloud-config

코어로스:
기타:
# 각 고유 클러스터에 대해 새 토큰을 생성합니다.
https://discovery.etcd.io/new?size=3
# ?size=X로 클러스터의 초기 크기 지정
# 경고:'vagrant destroy'할 때마다 교체하십시오.
검색:https://discovery.etcd.io/

기본적으로 CoreOS는 토큰이라고 하는 고유 식별자를 사용하여 실행 중인 인스턴스가 서로를 식별하도록 돕습니다. 동일한 토큰을 가진 모든 호스트는 동일한 스웜에 속하므로 etcd 공유 구성 및 검색 서비스를 사용하여 중앙 집중식으로 제어할 수 있습니다.

https://discovery.etcd.io/new?size=<크기>

위의 URL로 이동하고 원하는 클러스터 크기를 지정하여 직접 사용하거나 새 클러스터를 생성할 수 있습니다. 기본 구성은 세 개의 호스트입니다. 생성된 토큰을 기록하고 구성 파일에 추가합니다(예:

).

https://discovery.etcd.io/21e4099c23b52a8403640c2d48cdca6f

나중에 이것이 왜 중요한지 알게 될 것입니다.

클러스터 설정

두 번째 부분은 Vagrant가 시작될 때 실행할 CoreOS 인스턴스 수를 정의하는 것입니다. 전체적으로 심플한 구성입니다. 복제된 Git 디렉토리 내부의 config.rb.sample 파일에 변경 사항을 추가하고 이름을 config.rb로 변경해야 합니다. 독특하고 특별하기 위해 네 가지 인스턴스로 시도할 것입니다.

# Vagrant가 생성한 CoreOS 클러스터의 크기
$num_instances=X

클러스터 시작

이제 Vagrant를 실행할 수 있습니다. 온라인 리포지토리를 복제한 경우 현재 디렉터리에 기본 Vagrant 구성 파일이 이미 있으므로 vagrant init를 시도하면 실패합니다.

방랑 초기화
이 디렉토리에 `Vagrantfile`이 이미 있습니다. 전에 제거
`vagrant init`을 실행합니다.

VirtualBox 또는 다른 관련 가상화 소프트웨어가 설치되어 있지 않으면 프로그램을 시작하려고 할 때 또 다른 오류가 발생합니다. 이 작은 문제를 미리 해결했는지 확인하십시오.

방랑하다
머신을 지원하도록 요청받은 제공자 'virtualbox'
'core-01'은 이 시스템에서 사용할 수 없다고 보고합니다. 그만큼
이유는 아래와 같습니다.

Vagrant가 VirtualBox를 감지하지 못했습니다! VirtualBox가 제대로 설치되어 있는지 확인하십시오. Vagrant는 VirtualBox와 함께 제공되는 `VBoxManage` 바이너리를 사용하며 이를 PATH에서 사용할 수 있어야 합니다. VirtualBox가 설치된 경우 `VBoxManage` 바이너리를 찾아 PATH 환경 변수에 추가하십시오.

이 작업을 성공적으로 완료했다면 Vagrant가 시작되어 CoreOS 인스턴스를 하나씩 생성해야 합니다. 이 작업은 시간이 걸릴 수 있으며 더 큰 클러스터를 수용하려면 좋은 네트워크 대역폭과 충분한 메모리가 필요합니다.

방랑하다
'virtualbox' 공급자로 머신 'core-01' 가져오는 중...
'virtualbox' 공급자를 사용하여 머신 'core-02' 가져오는 중...
'virtualbox' 공급자를 사용하여 머신 'core-03'을 가져오는 중...
'virtualbox' 공급자를 사용하여 머신 'core-04' 가져오는 중...
==> core-01:'coreos-alpha' 상자를 찾을 수 없습니다. 찾아서 설치하는 중...
core-01:박스 공급자:virtualbox
core-01:박스 버전:>=308.0.1

==> core-04:기본 상자 'coreos-alpha' 가져오기 중...
==> core-04:NAT 네트워킹을 위한 일치하는 MAC 주소...
==> core-04:'coreos-alpha' 상자가 최신인지 확인하는 중...
==> core-04:VM 이름 설정:coreos-vagrant_core-04_1431799934824_55775
==> core-04:22 => 2222에 대한 포트 충돌 수정. 이제 포트 2202에서.
==> core-04:이전에 설정된 네트워크 인터페이스를 지우는 중...
==> core-04:구성에 따라 네트워크 인터페이스 준비 중...
core-04:어댑터 1:nat
core-04:어댑터 2:호스트 전용
==> core-04:포워딩 포트...
core-04:22 => 2202(어댑터 1)
==> core-04:'사전 부팅' VM 사용자 지정 실행 중...
==> core-04:VM 부팅 중...
==> core-04:머신이 부팅되기를 기다리는 중입니다. 이 작업은 몇 분 정도 걸릴 수 있습니다...
core-04:SSH 주소:127.0.0.1:2202
core-04:SSH 사용자 이름:core
core-04:SSH 인증 방법:개인 키
core-04:경고:연결 시간이 초과되었습니다. 재시도 중...
==> core-04:머신 부팅 및 준비 완료!
==> core-04:호스트 이름 설정 중...
==> core-04:네트워크 인터페이스 구성 및 활성화...
==> core-04:제공자 실행 중:파일...
==> core-04:프로비저너 실행 중:쉘...
core-04:실행 중:인라인 스크립트

시스템이 모두 생성되면 vagrant status를 실행하여 기존 시스템과 현재 상태에 필요한 모든 정보를 얻을 수 있습니다.

네트워킹

이제 정말 흥미로운 부분이 나옵니다. 4개의 가상 머신이 있습니다. 그러나 우리는 그들과 어떻게 연결합니까? 우리는 Docker를 테스트할 때 비슷한 딜레마에 빠졌지만, 우리는 방법을 찾았고 여기서도 동일한 논리가 적용됩니다.

첫째, vagrant ssh 명령을 사용하여 실행 중인 각 시스템에 연결할 수 있습니다. 이 명령은 모든 키 등을 관리합니다. 복제된 디렉터리에서 이를 실행해야 합니다. 그렇지 않으면 오류가 발생합니다:

vagrant ssh core-02 -- -A
이를 실행하려면 Vagrant 환경 또는 대상 시스템이 필요합니다.
명령. 새로운 Vagrant 환경을 만들기 위해 `vagrant init`을 실행합니다. 또는 `vagrant global-status`에서 이 명령을 실행할 대상 머신의 ID를 가져옵니다. 마지막 옵션은 Vagrantfile이 있는 디렉토리로 변경하고 다시 시도하는 것입니다.

그러나 올바른 디렉토리에서 제대로 작동해야 합니다.

ifconfig를 실행하면 모든 시스템이 동일한 IP 주소를 가지고 있고 시스템 간에 라우팅할 수 없다는 것을 알 수 있습니다. 또한 VirtualBox 인터페이스는 172.0.0.1 세그먼트에서 실행되므로 상황이 조금 더 어려워집니다. 다시 말하지만, Docker에서 했던 것과 비슷합니다.

항상 VirtualBox 내부 네트워킹 범위를 사용하고 그에 따라 방화벽 규칙과 라우팅을 조정할 수 있습니다. 그러나 이 방법은 어떤 가상 머신이 어떤 특정 IP 주소를 사용하는지 알려주지 않으며 즉석에서 쉽게 결정되지 않습니다. 즉, 아무데도 이러한 숫자를 분석할 수 없으며 올바른 정보를 얻는 보다 우아한 방법이 있습니다.

localhost를 통해 연결

시작하는 동안 Vagrant는 2200(또는 유사)으로 시작하는 다른 포트를 사용하여 localhost에서 실행되도록 각 가상 머신에 대해 SSH를 설정합니다. 따라서 클라이언트에 SSH로 연결해야 합니다. 이 옵션을 사용할 수 있습니다.

SSH 127.0.0.1 -p 2202
호스트 '[127.0.0.1]:2202([127.0.0.1]:2202)'의 신뢰성을 설정할 수 없습니다.
ED25519 키 지문은 32:a0:57:58:b3:55:fc:03:c8:89:7d:7c:cc:6f:85:9d입니다.
계속 연결하시겠습니까(예/아니오)?

어디서나 IP 주소를 통해 연결

그러나 위의 방법은 VM 간 통신에는 작동하지 않으며 다른 것이 필요합니다. 이것은 발견 조각이 정말 편리한 곳입니다. 클러스터가 실행되면 해당 URL로 다시 이동할 수 있으며 이제 추악하지만 유용한 JSON 항목으로 채워집니다.


키와 값을 확인하십시오. 각 항목에는 IP 주소(예:172.17.8.103)가 있으며 이 출력에서 ​​이를 구문 분석할 수 있습니다. 훌륭한. 이제 우리는 내부 주소를 알고 이를 사용하여 클라이언트에 직접 연결할 수 있으며 더 중요한 것은 동료와 통신할 수 있습니다.

한 가지 빠진 작은 부분은 핵심 사용자 암호를 모르기 때문에 vagrant.d 하위 디렉토리에 있는 제공된 키를 사용한다는 것입니다. 키를 추가하면 원활하게 연결할 수 있습니다. 우리는 첫 번째 가이드에서 이것을 보았습니다.

포트 포워딩

상자의 구성 부분에 실제로 손을 많이 대지는 않았지만 이 시점에서 실행 중인 인스턴스의 IP 주소를 알았으므로 정말 창의적으로 시작할 수 있습니다. 예를 들어 포트 포워딩은 서비스를 실행하는 가상 머신에 큰 가치가 있습니다.

필요한 변경 사항은 Vagrantfile 내부의 지시문으로 제공되어야 합니다. Dockerfile과 마찬가지로 여러 설정에 대해 여러 구성을 가질 수 있습니다. 예를 들어 HTTPS 포트 전달은 다음과 같습니다.

config.vm.forward_port 443, <호스트 포트>

내 Docker 기사를 따라했다면 모든 것이 매우 쉽습니다. 호스트 포트, 클라이언트 포트, 그리고 Bob은 삼촌입니다. 각 상자에 대해 여러 선언이 있습니다. 그런 다음 시스템을 완벽하게 제어해야 하는 경우 방화벽 규칙을 수동으로 구성할 수도 있습니다. 다시 말하지만 이것은 티저일 뿐이며 앞으로 더 많은 시간을 할애할 것입니다.

이제 다음 단계는 Docker를 연결하는 것입니다. 우연이 아닐 가능성이 있는 유사한 기본 범위를 사용하여 클러스터, 컨테이너, 병렬 실행 및 기타 멋진 개념을 가지고 놀 수 있습니다. 이것이 Vagrant가 플러그인과 함께 제공되는 이유이며, 이에 대해서는 별도의 기사에서 논의할 것입니다. 어쨌든 작업을 완료하면 인스턴스를 파괴하십시오.

더 읽어보기

Dedoimedo's forges의 몇 가지 추가 좋은 것들:

다음은 CoreOS 빠른 시작 가이드입니다. 약간 무거울 수 있습니다

etcd와 다소 유사한 기능을 제공하는 감독자 자습서

KVM 및 VirtualBox 병렬 구성 조정

결론

Vagrant와 CoreOS는 흥미롭고 거칠고 반항적인 아이디어처럼 보입니다. 실제 작업의 피투성이 세부 사항을 숨기는 래퍼 기술이 항상 싹트고 인기를 얻고 있는 것처럼 보이지만 비즈니스 환경에서 그들이 얼마나 많은 가치를 가지고 있는지 아직 확신하지 못합니다. 모두가 프런트엔드 및 오케스트레이션 도구를 원합니다. 유일한 문제는 시장이 너무 변덕스럽고 변덕스럽고 표준이 없으며 사람들이 Python, Ruby 및 JSON과 같은 추악한 것을 사용한다는 것입니다. 신경 쓰지 마.

우리는 공포 시크릿의 또 다른 작은 조각을 정복했으며 Vagrant와 CoreOS 모두에 어느 정도 더 친숙합니다. 다행입니다. 다음 작품은 이러한 클러스터 서비스 등을 가지고 놀기 시작할 것이기 때문입니다. 그리고 그것은 시작에 불과합니다.

기억하세요. 모든 작업을 수행해야 하므로 앞으로 몇 달 동안 Fleet, Kubernets, Mesos, Etch 및 기타 많은 멋진 프로젝트를 포함하되 이에 국한되지 않는 거의 모든 것을 탐색할 것입니다. 우리는 또한 CoreOS 및 기타 제품을 클라우드 제공업체에 연결하고, 분산 및 병렬 파일 시스템, Jenkins, Ansible과 같은 자동화 도구, 여전히 더 많은 이름 삭제 및 구토를 유발하는 버즈 등을 사용합니다. 계속 지켜봐 주세요.

건배.