Vagrant, Docker, Chef 및 OpenStack(또는 유사한 제품) 간의 관계는 무엇입니까?

Vagrant, Docker, Chef 및 OpenStack(또는 유사한 제품) 간의 관계는 무엇입니까?

저는 웹 개발자이지만 몇 가지 관리 업무에도 관심이 있습니다. 따라서 순수 관리에서 개발 운영으로의 새로운 전환이 나에게 도움이 되었습니다.

어쨌든 관계에 몇 가지 문제를 추가하는 데 몇 가지 문제가 있습니다. 어쩌면 없을 수도 있으므로 명확히하기 위해 도움을 요청하고 싶었습니다.

기본적으로 제가 관련시키고 싶은 것은 (제가 이해한 바에 따르면) 네 가지 유형의 소프트웨어입니다. 정확한 제품은 중요하지 않습니다. 유사한 소프트웨어를 대안으로 배치할 수 있습니다.

  • Vagrant: 제가 이해한 바는 VM의 생성 및 관리를 자동화하는 것입니다. 즉, VM을 설정하고 시작하고 중지하는 것입니다. 이는 로컬 VM이나 원격(예: 클라우드 플랫폼)을 사용하여 수행할 수 있습니다.
  • Docker: 공유 웹 호스팅 환경 등에서 독립적으로 프로세스를 실행하는 데 사용할 수 있는 몇 가지 Linux 커널 개념을 기반으로 하는 "경량 VM"입니다.
  • Chef: 예를 들어 VM 내부에서 운영 체제를 설정하고 구성하는 도구입니다.
  • OpenStack: 자체 프라이빗 클라우드를 구축할 수 있는 도구이므로 AWS와 비슷합니다.

질문 #1: 내 설명이 옳습니까, 아니면 이러한 소비의 일부(또는 전부)에 대해 틀렸습니까?

질문 #2: 이 모든 도구를 어떻게 혼합할 수 있습니까? 그게 말이 됩니까?

내 상상 속에서 그리고 내가 이해하는 관점에서 보면, 당신은 갈 수 있고

  • OpenStack을 사용하여 자신만의 클라우드를 구축하고,
  • Vagrant를 사용하여 클라우드에서 실행되는 VM을 관리하고,
  • Chef를 사용하여 이러한 VM을 설정하세요.
  • 마지막으로 Docker를 사용하여 VM 내부에서 프로세스를 실행합니다.

이 올바른지? 그렇다면 이 모든 것을 사용하기 시작하는 방법에 대한 조언을 주실 수 있습니까? (동시에 상당히 많은 내용이 있으며 어디서부터 시작해야 할지 아직 모르겠습니다.)

답변1

각각의 웹 페이지를 사용하여 이 모든 프로젝트가 무엇인지 알아봅시다. 하지만 귀하가 나열한 순서를 변경하겠습니다.

  • 요리사: Chef는 인프라를 코드로 변환하는 자동화 플랫폼입니다.

    이것은구성 관리 소프트웨어. 대부분은 동일한 패러다임을 사용합니다.상태구성 파일, 설치된 소프트웨어, 사용자, 그룹 및 기타 여러 리소스 유형과 관련하여 머신을 원합니다. 대부분은 특정 시스템에 변경 사항을 푸시하는 기능도 제공합니다.관현악법.

  • 방랑자: 가볍고 재현 가능하며 이식 가능한 개발 환경을 만들고 구성합니다.

    그것은 제공합니다재생할 수 있는생성하는 방법완전히 가상화된 머신Oracle의 VirtualBox 또는 VMWare 기술을 사용하여공급자. Vagrant는 구성 관리 소프트웨어와 협력하여 운영 체제 설치 프로그램이 완료되는 설치 프로세스를 계속할 수 있습니다. 이것은 다음과 같이 알려져 있습니다.프로비저닝.

  • 도커: 모든 애플리케이션을 경량 컨테이너로 포장, 배송 및 실행하는 오픈 소스 프로젝트

    이 소프트웨어의 기능은 운영 체제 설치를 정의하는 수단을 제공하는 Vagrant의 기능과 다소 겹치지만 이 목적에 사용되는 기술은 크게 다릅니다. 도커는Linux 컨테이너이는 가상 머신 자체는 아니지만 격리된 파일 시스템에서 실행되는 격리된 프로세스입니다. Docker는 다음을 사용할 수도 있습니다.구성 관리 시스템컨테이너를 프로비저닝합니다.

  • 오픈스택: 프라이빗 및 퍼블릭 클라우드 구축을 위한 오픈 소스 소프트웨어입니다.

    OpenStack이 사실인 반면단일 머신에 배포 가능, 이러한 배포는 순전히 개념 증명을 위한 것이며 리소스 제약으로 인해 그다지 기능적이지 않을 수 있습니다.

    OpenStack 설치의 기본 대상은 베어 메탈 다중 노드 환경입니다.다른 구성 요소더 나은 결과를 얻기 위해 전용 하드웨어에서 사용할 수 있습니다.

    OpenStack의 주요 기능은 완전 가상화(VirtualBox, VMWare)부터 반가상화(KVM/Qemu), 컨테이너(LXC)에 이르기까지 다양한 가상화 기술을 지원하는 것입니다.사용자 모드 Linux(UML).

나는 이러한 제품을 특정 아키텍처의 구성 요소로 제시하려고 노력했습니다. 내 관점에서는 먼저 필요한 환경(Chef, Puppet, Ansible 등)과 관련하여 요구 사항을 정의한 다음 이를 통제된 방식(Vagrant, Docker)으로 배포할 수 있는 것이 합리적입니다. , ...) 필요한 경우 마지막으로 전역 크기로 확장합니다.

필요한 모든 기능의 양은 프로젝트 범위에서 정의되어야 합니다.

또한 대부분의 모든 기술적 설명을 지나치게 단순화했습니다. 자세한 내용은 참조된 링크를 이용하시기 바랍니다.

답변2

개발자 경력을 갖고 있으면 실제로 'devops'가 되는 것이 더 까다로워질 것이라고 생각합니다. 귀하의 질문은 거의 3년 전이므로 귀하가 어떻게 여정을 찾고 있는지 듣는 것이 흥미로울 것입니다. 위에서 언급한 응용 프로그램에 대해 시스템 관리자에게 알려주세요. 이를 통해 사람(관리자 또는 개발자)이 귀하가 요청한 내용을 정확히 고려하기 시작하는 이유를 설명하는 데 도움이 되는 비기술적인 관점(예: DevOps)을 제공할 수 있기를 바랍니다. 관점에서 x, y, z 사이의 관계는 무엇입니까? 이러한 도구는 해당 부분의 합보다 더 큽니까?

나는 실제로 시스템 관리자가 여기서 우위를 점하고 있다고 생각합니다. 귀하의 질문에서 언급한 대부분의 응용 프로그램은 관리자 '문제'를 해결하고 그렇게 함으로써 보다 추상적인 데이터 센터 환경을 제공하며 이는 결국 개발자와 새로운 ' devops의 전략(전략/팀 읽기, devops는 사람이 아닙니다). 그럼 당신이 언급한 앱과 어떤 관계가 있나요? 이것이 어떻게 IT 서비스에 대한 전체적인 접근 방식을 제공합니까?

OpenStack: 자신만의 프라이빗 클라우드를 구축할 수 있는 도구이므로 AWS와 비슷합니다.

그것이 바로 그것이다. 그러나 그것은 무엇을 하는가? - 가장 적절하게 명명된 운영 체제는 DOS였습니다. BIOS를 추상화하여 디스크를 운영했으며, OpenStack은 데이터 센터를 운영하고 인프라를 추상화했습니다(IaaS - 데이터 센터 운영 체제의 전문 용어입니다). 이제 귀하의 데이터 센터에는 API, 명령 구문 및 GUI가 있으며 OpenStack은 하이퍼바이저, 스위치, 라우터, 방화벽, 저장 영역 네트워크, 로드 밸런서, 도커 호스트 등을 구동할 수 있습니다. Openstack은 귀하의 하드웨어 제조 '플러그인'을 사용합니다.또는특정 기능은 소프트웨어 정의에 따라 소프트웨어에만 존재할 수 있습니다.무엇또는 네트워크 기능 가상화. 이 OpenStack과 기타 모든 클라우드는 오케스트레이션 엔진에 던진 스크립트를 읽거나 규칙(확장, 축소 등)에 따라 트리거되는 스크립트를 읽어 자체 인프라를 오케스트레이션할 수 있습니다. 따라서 openstack은 추상화의 거대한 계층입니다. 예를 들어 어떤 스위치가 있는지 상관하지 않고 네트워크를 제공하십시오.이것명령을 내리거나 복잡한 로드 밸런싱, HA, 공개 사용 가능, 자동 확장, 도메인 이름 등록, 스토리지 연결을 구축하세요.그런 것 같은-이 스크립트를 인터넷에서 찾았습니다.

Docker: 공유 웹 호스팅 환경 등에서 독립적으로 프로세스를 실행하는 데 사용할 수 있는 몇 가지 Linux 커널 개념을 기반으로 하는 "경량 VM"입니다.

Docker는 또 다른 추상화 계층이며 클라우드가 파괴적인 기술인 것처럼 소프트웨어 종속성, 업그레이드, 데이터 격리 및 완전한 이식성과 같은 많은 운영 '문제'를 해결하기 때문에 업계를 변화시키고 있습니다. Java는 개발자가 생각할 필요가 없는 소스 코드 이식성 때문에 인기를 얻었습니다. 실행 중인 JVM은 Java를 지원하는 한 코드가 커피 머신에서 실행되어야 함을 의미했습니다. Docker는 비슷한 문제를 해결합니다. 내 앱을 실행하려면 Docker 호스트가 필요합니다.~ 아니다, 이 버전의 Python, 이 커널, 이 Linux 배포판 등이 필요하며 앱에는 물론 이러한 종속성이 있지만 기본 호스트는 신경 쓰지 않으며 관리자는 격리된 컨테이너 내에서 수행하는 작업에 신경 쓰지 않습니다( 어느 정도). Docker는 전체 운영 체제와 서비스를 바이너리처럼 처리하여 개발 및 운영 패러다임을 모두 바꾸고 있습니다.저장소에서 가져올 수 있습니다, 버전 지정, 수정, 매개변수 등을 사용하여 실행합니다.

Chef: 예를 들어 VM 내부에서 운영 체제를 설정하고 구성하는 도구입니다.

예, 처음 두 가지만큼 파괴적이지는 않지만 Chef, Puppet, Ansible, Salt, 시스템 센터 운영 관리자 및 이 분야의 수많은 기타 애플리케이션은 개발자와 관리자가 배포, 업그레이드 및 기타 작업을 모델링할 수 있는 방법을 제공합니다(구성 변경), 이러한 노력을 다음과 같이 보는 표준 기관이없는 것 같습니다.클라우드용이 있어요. 그러나 우리는 인프라만큼 결정적인 것을 다루지 않기 때문에 이를 배우는 것이 더 고통스럽고 하나에서 다른 것으로 이전할 수 있는 것이 많지 않습니다.

Vagrant: 제가 이해한 바는 VM의 생성 및 관리를 자동화하는 것입니다. 즉, VM을 설정하고 시작하고 중지하는 것입니다. 이는 로컬 VM이나 원격(예: 클라우드 플랫폼)을 사용하여 수행할 수 있습니다.

이것은 당신이 언급한 앱 목록에서 이상한 것입니다. Vagrant는 개발자를 위한 도구이자 관리자를 위한 장난감입니다. vagrant를 사용하면 개발 환경을 빠르게 구축할 수 있습니다. 예를 들어 Android 앱을 개발하고 싶습니다. 방랑자, 곧 Docker에 의해 추월될 것이라고 생각합니다.

이 모든 것을 어떻게 시작해야 하는지 조언을 주실 수 있나요? (동시에 꽤 많은 내용이 있고 어디서부터 시작해야 할지 아직 모르겠습니다.)

이것이 바로 관리자가 우위에 있다고 생각하는 이유입니다. 우리는 대부분의 작업을 수동으로 수행해야 했고 무엇이 잘못될 수 있는지 알아야 했습니다. 꼭두각시 매니페스트, 클라우드 컴퓨팅 및 도커 오케스트레이션이 우리에게 더 쉬워질 것이며 개발자는 많은 접선을 취하게 될 것입니다. 잠재적인 DevOps에 대한 조언은 먼저 관리자가 되라는 것입니다.

답변3

Vagrant 인스턴스 내부에서 Chef 서버를 사용하는 OpenStack 배포 프로젝트를 방금 완료했습니다.https://github.com/bluechiptek/bluechipstack/blob/master/README.md

이 방법의 주요 문제점은 노드를 관리하려고 할 때마다 Vagrant 인스턴스가 동일한 IP를 얻는 것입니다. 정적 주소 지정을 수행하면 잘 작동합니다. VPN을 통해 수행하는 것은 이상적이지 않습니다.

답변4

저는 Vagrant와 Docker의 조합만을 사용하고 있습니다.

저는 Vagrant를 사용하여 머신을 프로비저닝합니다.추가 클라우드 제공업체하지만 저는 내장된 VirtualBox를 사용하고 있습니다. 저는 이 접근 방식을 사용하고 있기 때문에 외부 네트워킹과 스토리지는 거의 수동으로 이루어집니다.방랑자플러그인을 사용하면 AWS에 필요한 부분을 프로비저닝하도록 지시할 수 있습니다.

내가 사용하는 프로비저닝 스크립트는 docker swarm join토큰과 함께 CSR 서명에 사용되는 CA 인증서와 키가 포함된 보안 위치를 가리킵니다. 또한 docker-engine을 설치하고 Swarm에 참여하도록 구성합니다(없으면 초기화).

문제가 해결되면 docker stack deploy로컬 컴퓨터나 빌드 상자에서 필요한 모든 것이 포함된 스택을 배포하기만 하면 됩니다.

내 경우에는 방금 떨어졌어요리사프로비저닝 스크립트로 사용되는 yum간단한 설치 후 스크립트를 사용하는 것이 좋습니다 .apt-get

나는 또한방랑자파괴하기 전에 추가 스크립팅을 추가하는 플러그인입니다(제 경우에는 떼를 떠나기 위해).

Vagrant를 사용한 중앙 집중화의 좋은 점은 섹션을 추가하거나 변경하기만 하면 개발을 위해 다른 시스템이나 단일 컴퓨터에 환경을 복제할 수 있다는 것입니다 provider. VirtualBox를 관리하기 위해 단일 컴퓨터에 OpenStack을 설정하지 않았습니다.

관련 정보