Puppet Bolt로 HashiCorp Consul 에이전트 배포



HashiCorp Consul은 서비스 검색, 상태 확인, 로드 밸런싱, 서비스 그래프, 상호 TLS ID 적용 및 구성 키-값 저장소를 제공하여 이러한 새로운 복잡성을 해결하는 오픈 소스 도구입니다.

서비스 검색은 이 블로그 게시물에서 중점적으로 다룰 Consul 기능입니다. 서비스 검색은 수년간 실행되는 기존 서버보다 워크로드가 더 일시적인 환경에서 특히 중요합니다. 서비스 검색은 DNS를 사용하여 이름을 확인하는 방식과 매우 유사하지만 기능이 더 풍부합니다.
  • 워크로드가 에이전트를 통해 자신과 해당 서비스를 등록합니다
  • .
  • Consul은 서비스의 상태를 확인하는 데 사용할 상태 확인을 활성화합니다
  • .

    Consul은 서버와 클라이언트로 구성된 분산 시스템입니다. 이 블로그 게시물은 서버 또는 서버 그룹이 이미 배포되었으며 이제 클라이언트를 배포해야 한다고 가정합니다.

    HashiCorp Consul 아키텍처

    이 블로그 게시물에서는 Puppet Bolt를 사용하여 NGINX 웹 서버와 함께 Consul 에이전트를 배포하고 Consul에서 서비스로 등록하는 방법을 살펴보겠습니다.

    Bolt 프로젝트 초기화



    Ensure that the latest version of Puppet Bolt is installed before getting started.



    Puppet Bolt는 Bolt 작업을 실행하기 위한 시작 지점으로 프로젝트 디렉토리를 활용합니다. Puppet Bolt 프로젝트 이름 consuldeploy에 대한 디렉토리를 생성합니다.

    mkdir consuldeploy
    


    작업 디렉토리를 consuldeploy 디렉토리로 변경

    cd consuldeploy
    


    Bolt 프로젝트를 호스팅하기 위한 디렉토리가 있으므로 이제 프로젝트를 초기화해야 합니다.

    bolt project init --modules kyleanderson-consul, puppet-nginx
    


    Bolt YAML 계획 생성



    Bolt에서 plan을 활용하기 위해서는 plan이라는 디렉토리를 생성해야 합니다.

    mkdir plans
    


    이제 계획 디렉토리가 생성되었으므로 계획의 일부로 달성하고자 하는 것을 계획할 것입니다. 다음 작업을 수행합니다.
  • NGINX 배포
  • unzip을 설치하여 영사 에이전트 zip 파일의 압축을 풉니다
  • .
  • Consul 에이전트 설치
  • Consul에 웹 서비스 등록

  • 우리는 우리가 하고 싶은 것에 대한 계획을 가지고 있으며 이제 Bolt 계획을 만들 준비가 되었습니다.

    계획 디렉터리에 다음 콘텐츠가 있는 consul_agent.yaml이라는 파일을 만듭니다. 계획에는 다양한 구성을 지정하는 데 사용되는 네 가지 매개변수가 포함됩니다.

    --------
    parameters:
      targets:
        type: TargetSpec
      consul_datacenter:
        type: String
        description: "The consul datacenter to join"
        default: puppet-bolt
      consul_agent_version:
        type: String
        description: "The consul agent version to install"
        default: 1.9.0
      consul_servers:
        type: Array[String]
        description: "An array of consul servers to connect to"
    
    steps:
      - name: installnginx
        targets: $targets
        resources:
          - class: nginx
      - name: deployconsul
        targets: $targets
        resources:
          - package: unzip
            parameters:
              ensure: latest
          - class: consul
            parameters:
              version: $consul_agent_version
              config_hash:
                data_dir: '/opt/consul'
                datacenter: $consul_datacenter
                retry_join: $consul_servers
              services:
                web:
                  checks:
                    - http: http://localhost
                      interval: 10s
                      timeout: 5s
                  port: 80
                  tags:
                    - web
                    - nginx
    


    이제 계획을 만들었으므로 다음 명령을 실행하여 Bolt에서 인식하는지 확인할 수 있습니다.

    bolt plan show
    


    계획이 제대로 등록되면 출력에 consuldeploy::consul_agent_ 항목이 포함되어야 합니다.

    aggregate::count
    aggregate::nodes
    aggregate::targets
    canary
    consuldeply::consul_agent
    facts
    facts::external
    facts::info
    puppet_agent::run
    puppetdb_fact
    reboot  
    secure_env_vars
    terraform::apply
    terraform::destroy
    


    계획이 등록되었으므로 이제 Bolt plan run consuldeploy::consul_agent 명령을 실행하여 계획을 실행할 준비가 되었습니다. 우리는 consul 서버 배열뿐만 아니라 consul 에이전트를 설치하려는 노드인 대상을 지정했습니다. 이 예에서는 IP 주소를 사용했지만 확인 가능한 호스트 이름도 사용할 수 있습니다.

    bolt plan run consuldeploy::consul_agent --target 10.0.0.123 consul_servers='["10.0.0.193"]'
    


    계획이 성공적으로 실행된 경우 아래 표시된 것과 유사한 출력이 생성되어야 합니다.

    Starting: plan consuldeploy::consul_agent
    Starting: install puppet and gather facts on 10.0.0.123
    Finished: install puppet and gather facts with 0 failures in 24.97 sec
    Starting: apply catalog on 10.0.0.123
    Finished: apply catalog with 0 failures in 20.06 sec
    Starting: install puppet and gather facts on 10.0.0.123
    Finished: install puppet and gather facts with 0 failures in 3.37 sec
    Starting: apply catalog on 10.0.0.123
    Finished: apply catalog with 0 failures in 22.18 sec
    Finished: plan consuldeploy::consul_agent in 1 min, 12 sec
    Plan completed successfully with no result
    


    계획이 성공적으로 완료되면 이제 영사 서버 대시보드에서 웹 서비스를 볼 수 있습니다.



    이 블로그 게시물에서는 Puppet Bolt를 사용하여 기본 영사 에이전트 구성을 보여 주었지만 이 게시물에서 사용된 Puppet Forge의 consul module은 구성할 수 있는 추가 설정 및 구성 옵션을 강조 표시합니다.

    좋은 웹페이지 즐겨찾기