개발자 배치;클라우드 네이티브 스택 섹션 2

최초 출시: 2020년 2월 19일https://darnahsan.medium.com/dev-to-deploy-cloud-native-stack-part-2-f152d159cbd
이것은 조기 후기 개발의 후속 배치이다.클라우드 본체 창고 제1부분.이 글은 Hetzner에서Terraform을 사용하여 클라우드에 서버를 설정하고 Packer를 사용하여 미리 설정된 스냅샷을 만들어서 설정과 함께 준비하는 방법을 소개할 것입니다.
만약 Hetzner 계정이 없다면, 그 위에 계정을 등록하고, 그 위에 항목을 설정하십시오.나는 나의 UltronEx 프로젝트를 가지고 있다.공용 액세스가 작성되면 프로젝트에 SSH를 추가합니다.그런 다음 액세스 섹션의 with에서 API TOKEN으로 이동하여 TOKEN을 생성하여 읽어들일 수 없으며 새 태그를 생성하여 손실되지 않도록 해야 합니다.
Hetzner 계정에서 토큰을 받은 후 HCLOUD 토큰의 환경 변수에 저장합니다.

포장공


현재 Packer guide for Hetzner에 따라 기본 스냅샷을 만들 준비가 되어 있으며, 다른 종류의 스냅샷을 만들어서 서버를 시작할 수 있습니다.다음은 스냅샷을 만들 수 있는 패키지 프로그램 코드입니다.우리는 모든 부분을 훑어볼 것이다.
    {
        "variables": {
          "hcloud_token": "{{env `HCLOUD_TOKEN`}}"
        },
        "builders": [
          {
            "token": "{{ user `hcloud_token` }}",
            "server_name": "base-packer",
            "snapshot_name": "debian-base-snapshot-{{timestamp}}",
            "snapshot_labels": { "name": "debian-base-snapshot-{{timestamp}}" },
            "type": "hcloud",
            "image": "debian-10",
            "location": "nbg1",
            "server_type": "cx11",
            "ssh_username": "root"
          }
        ],
        "provisioners": [
          {   
            "type": "shell",
            "inline": [
                "sleep 30",
                "apt-get update",
                "apt-get -y upgrade",
                "apt-get update && apt-get install -y wget curl gcc make python python-dev python-setuptools python-pip libffi-dev libssl-dev libyaml-dev"
            ]   
          },  
          {   
            "type": "ansible",
            "extra_arguments": ["--vault-password-file=~/.helsing_ansible_vault_pass"],
            "playbook_file": "../../../../ansible/base.yml"
          }   
       ]
패키지 스크립트는 세 가지 부분이 있는데 그것이 바로 변수, 구축기, 공급기이다.변수 섹션은 이전에 생성한 API 태그를 저장할 변수를 정의합니다.
    "variables": {
          "hcloud_token": "{{env `HCLOUD_TOKEN`}}"
        }
구축기 부분에서 사용할 기본 운영체제와 이 이미지가 사용할 서버 실례를 정의합니다.운영 체제와 서버 유형에 따라 목록Hetzner docs을 확인할 수 있습니다.여기서 CX11 서버 유형을 사용하여 Debian 10 base 스냅샷을 구축하고 있습니다.
    "builders": [
          {
            "token": "{{ user `hcloud_token` }}",
            "server_name": "base-packer",
            "snapshot_name": "debian-base-snapshot-{{timestamp}}",
            "snapshot_labels": { "name": "debian-base-snapshot-{{timestamp}}" },
            "type": "hcloud",
            "image": "debian-10",
            "location": "nbg1",
            "server_type": "cx11",
            "ssh_username": "root"
          }
        ]
마지막 단계는 provisioners입니다. 이것은 여러 종류의 provisioner 형식을 받아들일 수 있음을 의미합니다.가장 흔히 볼 수 있는 셸은 다른 provisioner를 사용하여 필요한 소프트웨어와 설정을 설치하기 전에 기본 명령을 실행하는 데 사용됩니다.여러 provisioner를 사용할 필요가 없습니다. 셸 provisioner를 사용해서 모든 명령을 실행할 수 있습니다.
    "provisioners": [
          {   
            "type": "shell",
            "inline": [
                "sleep 30",
                "apt-get update",
                "apt-get -y upgrade",
                "apt-get update && apt-get install -y wget curl gcc make python python-dev python-setuptools python-pip libffi-dev libssl-dev libyaml-dev"
            ]   
          },  
          {   
            "type": "ansible",
            "extra_arguments": ["--vault-password-file=~/.helsing_ansible_vault_pass"],
            "playbook_file": "../../../../ansible/base.yml"
          }   
       ]
Packer라는 파일에 Packer 스크립트가 있으면json 사용 가능
packer validate packjer.json
그리고 사용
packer build packer.json
현재 기본 스냅샷이 있습니다. 사용자 정의 스냅샷을 만들어서 변하지 않는 서버를 시작할 수 있습니다.UltronEx에 대해 나는 포장공이 하나 있다.json 파일 자체
    {
        "variables": {
          "hcloud_token": "{{env `HCLOUD_TOKEN`}}"
        },
        "builders": [
          {
            "token": "{{ user `hcloud_token` }}",
            "server_name": "ultronex-packer",
            "snapshot_name": "debian-ultronex-snapshot-{{timestamp}}",
            "type": "hcloud",
            "image_filter": {
              "with_selector": [
                "name==debian-base-snapshot-1581565454"
              ],
              "most_recent": true
            },
            "snapshot_labels": { "name": "debian-ultronex-snapshot-{{timestamp}}" },
            "location": "nbg1",
            "server_type": "cx11",
            "ssh_username": "root"
          }
        ],
        "provisioners": [
          {   
            "type": "shell",
            "inline": [
                "sleep 30",
                "apt-get update",
                "apt-get -y upgrade",
                "apt-get update && apt-get install -y wget curl gcc make python python-dev python-setuptools python-pip libffi-dev libssl-dev libyaml-dev"
            ]   
          },  
          {   
            "type": "ansible",
            "extra_arguments": ["--vault-password-file=~/.helsing_ansible_vault_pass"],
            "playbook_file": "../../../../ansible/ultronex.yml"
          }   
       ]
      }
만약 두 스크립트가 거의 같고 하나만 다르다는 것을 알았다면, 이번에는 그림을 사용하지 않고, 그림 필터를 사용해서 내가 만든 기본 스냅샷을 선택하겠습니다
    "image_filter": {
              "with_selector": [
                "name==debian-base-snapshot-1581565454"
              ],
              "most_recent": true
            }
이름 레이블은 이제 프로젝트의 스냅샷 아래에 있는 Hetzner 콘솔에서 볼 수 있는 스냅샷 이름과 일치해야 합니다.
이후 검증 및 구축 절차에 따라 변할 수 없는 스냅샷을 생성하고 Terraform과 함께 사용하여 서버를 시작합니다.

지형.


Terraform for Hetzner 매우 간단합니다.Hetzner는 서버를 설치하는 데 너무 복잡한 요구가 없고 아주 적은 코드만으로도 완성할 수 있다.다음은 코드입니다.
    variable "HCLOUD_TOKEN" {}

    provider "hcloud" {
      token = var.HCLOUD_TOKEN
    }

    data "hcloud_image" "ultronex_image" {
      with_selector = "name=debian-ultronex-snapshot-1581566034"
    }

    data "hcloud_ssh_keys" "all_keys" {
    }

    resource "hcloud_server" "ultronex_server" {
      name  = "ultronex-hetzner"
      image = data.hcloud_image.ultronex_image.id
      server_type  = "cx11"
      labels = { "name" = "ultronex-hetzner" }
      location = "nbg1"
      ssh_keys  = data.hcloud_ssh_keys.all_keys.ssh_keys.*.name
    }
변수, 공급자, 데이터, 자원을 이해해야 하는 중요한 부분들이 있다.
변수는 API 토큰이 코드에서 사용될 위치를 나타냅니다.provider는 사용자가 제공할 서비스 제공자를 지시할 수 있는 매우 명백한 도구입니다.데이터는 사용된 내용의 값을 정의하는 곳이기 때문에 그것들은 자리 차지 문자와 더욱 비슷하다.마지막으로 가장 중요한 것은 자원입니다. 이것은 당신이 만들 서버를 정의하는 곳입니다.
데이터 부분에서 이 서버를 구축하는 데 사용할 스냅샷의 이름을 정의합니다. 이것은 라이브러리의 기본 스냅샷이나 특정한 스냅샷일 수 있습니다
    data "hcloud_image" "ultronex_image" {
      with_selector = "name=debian-ultronex-snapshot-1581566034"
    }
자원 블록에서 주의해야 할 몇 가지 사항은 스냅샷을 구축하는 데 사용할 서버 형식과 위치가 같은지 확인하는 것입니다.헤츠나에는 데이터센터 3개, 독일 2개, 핀란드 1개가 있다.
    resource "hcloud_server" "ultronex_server" {
      name  = "ultronex-hetzner"
      image = data.hcloud_image.ultronex_image.id
      server_type  = "cx11"
      labels = { "name" = "ultronex-hetzner" }
      location = "nbg1"
      ssh_keys  = data.hcloud_ssh_keys.all_keys.ssh_keys.*.name
    }
이것은 매우 중요한 노선이다
ssh_keys  = data.hcloud_ssh_keys.all_keys.ssh_keys.*.name
이렇게 하면 로컬 호스트나 선택한 호스트에서 서버에 액세스할 수 있습니다.이것은 프로젝트에서 프로젝트access 부분에 추가된 키를 복사합니다.
일단 그것을 가지게 되면 디렉터리에서 다음 명령을 실행하면 클라우드에 서버가 있어야 한다
terraform init

terraform plan -out plan.out

terraform apply plan.out
나는 이 문장이 너에게 도움이 되기를 바란다.나는 Packer와Terraform을 어떻게 설치하는지 깊이 연구하지 못했다. 왜냐하면 그들은 본문의 중점을 넘어섰고 주변에 대량의 자원이 있으며 좋은 문서 기록을 가진 도구이기 때문이다.

좋은 웹페이지 즐겨찾기