Nova 메타데이터

1 개요[ | ]

Metadata
메타데이터

https://docs.openstack.org/nova/2024.1/user/metadata.html


Nova는 시작하는 인스턴스에 설정 정보를 제공하기 위해 메타데이터라는 메커니즘을 사용합니다. 이러한 메커니즘은 인스턴스가 사용할 루트 패스워드와 같은 정보를 지정하기 위해 cloud-init과 같은 헬퍼를 통해 널리 사용됩니다.

이 메타데이터는 설정 드라이브 또는 메타데이터 서비스를 통해 제공되며, 사용자는 사용자 데이터 기능을 사용하여 이를 약간 커스터마이즈할 수 있습니다. 이 가이드는 이러한 기능에 대한 개요와 함께 사용가능한 메타데이터 유형에 대한 요약을 제공합니다.

2 메타데이터 유형[ | ]

인스턴스에 메타데이터를 지정해야 하는 세 가지 별도의 사용자 그룹이 있습니다.

2.1 사용자 제공 데이터[ | ]

인스턴스를 부팅한 사용자는 여러 가지 방법으로 인스턴스에 메타데이터를 전달할 수 있습니다. 인증 키페어의 경우, nova API의 키페어 기능을 사용하여 키를 업로드하고 nova 부팅 API 요청 시 해당 키를 지정할 수 있습니다. 구조화되지 않은 데이터의 경우, 사용자 데이터(user data) 기능을 통해 소량의 불투명한 데이터를 전달할 수 있습니다. 이러한 비구조화 데이터의 예로는 인스턴스가 사용할 puppet 역할이나 부팅 후 설정 정보를 가져올 서버의 HTTP 주소가 있습니다.

2.2 Nova 제공 데이터[ | ]

Nova 자체는 메타데이터 시스템의 내부 구현을 통해 인스턴스에 정보를 전달해야 합니다. 이러한 정보에는 인스턴스에 요청된 호스트 이름과 인스턴스가 있는 가용 영역이 포함됩니다. 이는 기본적으로 발생하며 사용자나 배포자가 별도의 설정을 할 필요는 없습니다.

Nova는 OpenStack 메타데이터 API와 EC2 호환 API를 모두 제공합니다. OpenStack 메타데이터EC2 호환 API는 모두 날짜별로 버전이 지정됩니다. 이에 대해서는 나중에 설명합니다.

2.3 배포자 제공 데이터[ | ]

OpenStack의 배포자는 인스턴스에 데이터를 전달해야 할 수도 있습니다. 또한 이러한 데이터는 인스턴스를 시작하는 사용자가 모를 수도 있습니다. 예를 들어, 부팅 후 인스턴스를 Active Directory에 등록하는 데 사용할 암호화 토큰이 있을 수 있습니다. 인스턴스를 시작하는 사용자는 이 토큰을 생성할 수 있는 Active Directory에 접근할 수 없어야 하지만, nova 배포는 사용자를 대신하여 이 토큰을 생성할 권한을 가질 수 있습니다. 이는 클라우드 운영자가 설정해야 하는 벤더데이터(vendordata) 기능을 사용하여 가능합니다.

3 메타데이터 서비스[ | ]

Note

이 섹션에서는 메타데이터 서비스에 대한 최종 사용자 정보를 제공합니다. 메타데이터 서비스의 배포 정보는 관리자 가이드를 참조하십시오.

메타데이터 서비스는 인스턴스가 인스턴스별 데이터를 REST API를 통해 검색할 수 있는 방법을 제공합니다. 인스턴스는 이 서비스를 169.254.169.254 또는 fe80::a9fe:a9fe에서 액세스할 수 있습니다. 사용자, Nova, 벤더 제공 여부에 관계없이 모든 유형의 메타데이터를 이 서비스를 통해 액세스할 수 있습니다.

버전 22.0.0 변경사항: Victoria 릴리스부터 메타데이터 서비스는 fe80::a9fe:a9fe의 링크 로컬 주소를 통해 IPv6에서도 액세스할 수 있습니다.

Note

모든 IPv6 링크 로컬 주소와 마찬가지로 메타데이터 IPv6 주소는 영역 식별자(일반적으로 리눅스 게스트에서는 인터페이스 이름을 퍼센트 기호 뒤에 연결한 것)가 없으면 완전하지 않습니다. 또한 URL에서는 퍼센트 기호 자체를 URL 인코딩해야 합니다. 예를 들어, 게스트의 기본 네트워크 인터페이스가 ens2인 경우 http://[fe80::a9fe:a9fe%25ens2]:80/...http://169.254.169.254/...로 대체하십시오.

3.1 메타데이터 서비스 사용[ | ]

OpenStack 메타데이터 API의 지원되는 버전 목록을 검색하려면, http://169.254.169.254/openstack에 GET 요청을 보내세요. 이 요청은 디렉토리 목록을 반환합니다:

$ curl http://169.254.169.254/openstack
2012-08-10
2013-04-04
2013-10-17
2015-10-15
2016-06-30
2016-10-06
2017-02-22
2018-08-27
latest

디렉토리의 내용 및 구조에 대한 정보는 OpenStack 형식 메타데이터를 참조하세요.

EC2 호환 메타데이터 API의 지원되는 버전 목록을 검색하려면, http://169.254.169.254에 GET 요청을 보내세요. 이 요청은 다시 디렉토리 목록을 반환합니다:

$ curl http://169.254.169.254
1.0
2007-01-19
2007-03-01
2007-08-29
2007-10-10
2007-12-15
2008-02-01
2008-09-01
2009-04-04
latest

디렉토리의 내용 및 구조에 대한 정보는 EC2 호환 메타데이터를 참조하세요.

4 설정 드라이브[ | ]

Note

이 섹션은 최종 사용자에게 설정 드라이브에 대한 정보를 제공합니다. 설정 드라이브 기능에 대한 배포 정보는 관리자 가이드를 참조하십시오.

설정 드라이브는 인스턴스가 부팅될 때 인스턴스에 연결되는 특별한 드라이브입니다. 인스턴스는 이 드라이브를 마운트하여 파일을 읽고 메타데이터 서비스에서 일반적으로 사용할 수 있는 정보를 얻을 수 있습니다.

설정 드라이브의 사용 사례 중 하나는 DHCP를 사용하여 인스턴스에 IP 주소를 할당하지 않을 때 네트워킹 설정을 전달하는 것입니다. 예를 들어, 설정 드라이브를 통해 인스턴스의 IP 주소 설정을 전달할 수 있으며, 인스턴스는 이를 마운트하여 네트워크 세팅을 설정하기 전에 접근할 수 있습니다.

4.1 설정 드라이브 사용[ | ]

인스턴스에 설정 드라이브를 활성화하려면 openstack server create 명령어에 --config-drive true 매개변수를 전달하십시오.

다음 예제는 설정 드라이브를 활성화하고 사용자 데이터 파일과 두 개의 키/값 메타데이터 쌍을 전달하며, 이는 모두 설정 드라이브에서 접근할 수 있습니다:

$ openstack server create --config-drive true --image my-image-name \
    --flavor 1 --key-name mykey --user-data ./my-user-data.txt \
    --property role=webservers --property essential=false MYINSTANCE

Note

Compute 서비스는 설정 드라이브를 항상 생성하도록 구성할 수 있습니다. 자세한 내용은 관리자 가이드를 참조하십시오.

게스트 운영체제가 레이블로 디스크에 접근하는 것을 지원하는 경우, 설정 드라이브를 /dev/disk/by-label/configurationDriveVolumeLabel 디바이스로 마운트할 수 있습니다. 다음 예제에서는 설정 드라이브가 config-2 볼륨 레이블을 가지고 있습니다:

# mkdir -p /mnt/config
# mount /dev/disk/by-label/config-2 /mnt/config

게스트 운영체제가 udev를 사용하지 않는 경우, /dev/disk/by-label 디렉토리는 존재하지 않습니다. 이 경우 blkid 명령어를 사용하여 설정 드라이브에 해당하는 블록 디바이스를 식별할 수 있습니다. 예시:

# blkid -t LABEL="config-2" -odevice
/dev/vdb

식별된 후, 디바이스를 마운트할 수 있습니다:

# mkdir -p /mnt/config
# mount /dev/vdb /mnt/config

마운트된 후에는 설정 드라이브의 내용을 확인할 수 있습니다:

$ cd /mnt/config
$ find . -maxdepth 2
.
./ec2
./ec2/2009-04-04
./ec2/latest
./openstack
./openstack/2012-08-10
./openstack/2013-04-04
./openstack/2013-10-17
./openstack/2015-10-15
./openstack/2016-06-30
./openstack/2016-10-06
./openstack/2017-02-22
./openstack/latest

설정 드라이브에 나타나는 파일은 openstack server create 명령어에 전달한 인수에 따라 다릅니다. 이 디렉토리의 형식은 메타데이터 서비스가 제공하는 형식과 동일하지만, EC2 호환 메타데이터는 루트(/) 디렉토리 대신 ec2 디렉토리에 위치하게 됩니다. 디렉토리 내 파일과 하위디렉토리 형식에 대한 정보는 OpenStack 형식 메타데이터EC2 호환 메타데이터 섹션을 참조하십시오.

4.2 이미지에 세팅[ | ]

$ openstack image set IMG-UUID --property img_config_drive=mandatory

img_config_drive 이미지 메타데이터 속성은 설정 드라이브를 강제로 활성화하는 데 사용할 수 있습니다. img_config_drive를 설정하면 이미지가 설정 드라이브를 필요로 하는지 여부를 지정합니다.

5 Nova 메타데이터[ | ]

앞서 언급한 바와 같이, Nova는 두 가지 형식으로 메타데이터를 제공합니다: OpenStack 형식과 EC2 호환 형식.

5.1 OpenStack 형식 메타데이터[ | ]

버전 12.0.0에서 변경됨: Liberty 릴리스에서 네트워크 메타데이터에 대한 지원이 추가되었습니다.

OpenStack API에서 제공되는 메타데이터는 JSON 형식으로 배포됩니다. 각 버전에 대해 두 개의 파일 meta_data.jsonnetwork_data.json이 제공됩니다. meta_data.json 파일에는 nova-specific 정보가 포함되어 있으며, network_data.json 파일에는 neutron에서 조회된 정보가 포함되어 있습니다. 예시:

$ curl http://169.254.169.254/openstack/2018-08-27/meta_data.json
{
   "random_seed": "yu5ZnkqF2CqnDZVAfZgarG...",
   "availability_zone": "nova",
   "keys": [
       {
         "data": "ssh-rsa AAAAB3NzaC1y...== Generated by Nova\n",
         "type": "ssh",
         "name": "mykey"
       }
   ],
   "hostname": "test.novalocal",
   "launch_index": 0,
   "meta": {
      "priority": "low",
      "role": "webserver"
   },
   "devices": [
       {
         "type": "nic",
         "bus": "pci",
         "address": "0000:00:02.0",
         "mac": "00:11:22:33:44:55",
         "tags": ["trusted"]
       },
       {
         "type": "disk",
         "bus": "ide",
         "address": "0:0",
         "serial": "disk-vol-2352423",
         "path": "/dev/sda",
         "tags": ["baz"]
       }
   ],
   "project_id": "f7ac731cc11f40efbc03a9f9e1d1d21f",
   "public_keys": {
       "mykey": "ssh-rsa AAAAB3NzaC1y...== Generated by Nova\n"
   },
   "name": "test"
}
$ curl http://169.254.169.254/openstack/2018-08-27/network_data.json
{
    "links": [
        {
            "ethernet_mac_address": "fa:16:3e:9c:bf:3d",
            "id": "tapcd9f6d46-4a",
            "mtu": null,
            "type": "bridge",
            "vif_id": "cd9f6d46-4a3a-43ab-a466-994af9db96fc"
        }
    ],
    "networks": [
        {
            "id": "network0",
            "link": "tapcd9f6d46-4a",
            "network_id": "99e88329-f20d-4741-9593-25bf07847b16",
            "type": "ipv4_dhcp"
        }
    ],
    "services": [
        {
            "address": "8.8.8.8",
            "type": "dns"
        }
    ]
}

network_data.json JSON 스키마 다운로드.

5.2 EC2 호환 메타데이터[ | ]

EC2 호환 API는 Amazon EC2 메타데이터 서비스의 2009-04-04 버전과 호환됩니다. 이는 EC2용으로 설계된 가상 머신 이미지가 OpenStack에서 제대로 작동한다는 것을 의미합니다.

EC2 API는 각 메타데이터 요소에 대해 별도의 URL을 노출합니다. 이러한 요소의 목록을 가져오려면 http://169.254.169.254/2009-04-04/meta-data/에 GET 쿼리를 수행하면 됩니다. 예시:

$ curl http://169.254.169.254/2009-04-04/meta-data/
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
hostname
instance-action
instance-id
instance-type
kernel-id
local-hostname
local-ipv4
placement/
public-hostname
public-ipv4
public-keys/
ramdisk-id
reservation-id
security-groups
$ curl http://169.254.169.254/2009-04-04/meta-data/block-device-mapping/
ami
$ curl http://169.254.169.254/2009-04-04/meta-data/placement/
availability-zone
$ curl http://169.254.169.254/2009-04-04/meta-data/public-keys/
0=mykey

인스턴스는 새 인스턴스를 요청할 때 사용자에 의해 지정된 키페어 이름으로 식별되는 공개 SSH 키를 http://169.254.169.254/2009-04-04/meta-data/public-keys/0/openssh-key에 GET 요청을 수행하여 가져올 수 있습니다:

$ curl http://169.254.169.254/2009-04-04/meta-data/public-keys/0/openssh-key
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDYVEprvtYJXVOBN0XNKVVRNCRX6BlnNbI+USLGais1sUWPwtSg7z9K9vhbYAPUZcq8c/s5S9dg5vTHbsiyPCIDOKyeHba4MUJq8Oh5b2i71/3BISpyxTBH/uZDHdslW2a+SrPDCeuMMoss9NFhBdKtDkdG9zyi0ibmCP6yMdEX8Q== Generated by Nova

6 사용자 데이터[ | ]

사용자 데이터는 인스턴스를 시작할 때 사용자가 지정할 수 있는 데이터 블롭입니다. 인스턴스는 이 데이터를 메타데이터 서비스 또는 설정 드라이브를 통해 액세스할 수 있습니다. 일반적으로 인스턴스가 부팅 시 실행하는 쉘 스크립트를 전달하는 데 사용됩니다.

예를 들어, 사용자 데이터를 사용하는 한 가지 애플리케이션은 Ubuntu에서 제공하는 오픈 소스 패키지인 cloud-init 시스템입니다. 이는 다양한 리눅스 배포판에서 사용할 수 있으며 클라우드 인스턴스의 초기화를 처리합니다.

사용자 데이터를 로컬 파일에 저장하고 인스턴스 생성 시 --user-data <user-data-file> 파라미터를 통해 전달할 수 있습니다.

$ openstack server create --image ubuntu-cloudimage --flavor 1 \
    --user-data mydata.file VM_INSTANCE

Note

제공된 사용자 데이터는 base64로 인코딩되지 않아야 하며, 유효한 입력을 REST API에 전달하기 위해 자동으로 인코딩됩니다. 인코딩 후 제한 크기는 65535 바이트입니다.

부팅 후, 메타데이터 서비스 또는 설정 드라이브를 통해 이 데이터를 인스턴스에서 액세스할 수 있습니다. 메타데이터 서비스를 통해 액세스하려면 OpenStack API의 경우 http://169.254.169.254/openstack/{version}/user_data 또는 EC2 호환 API의 경우 http://169.254.169.254/{version}/user-data에 GET 요청을 보냅니다. 예시:

$ curl http://169.254.169.254/openstack/2018-08-27/user_data
#!/bin/bash
echo 'Extra user data here'

7 벤더데이터[ | ]

Note

이 섹션에서는 최종 사용자가 벤더데이터 기능에 대해 알아야 할 정보를 제공합니다. 이 기능에 대한 배포 정보는 관리자 가이드를 참조하십시오.

버전 14.0.0에서 변경됨: Newton 릴리스에서 동적 벤더 데이터에 대한 지원이 추가되었습니다.

설정된 경우, 인스턴스는 메타데이터 서비스 또는 설정 드라이브에서 벤더별 데이터를 가져올 수 있습니다. 메타데이터 서비스를 통해 액세스하려면 배포에 따라 http://169.254.169.254/openstack/{version}/vendor_data.json 또는 http://169.254.169.254/openstack/{version}/vendor_data2.json에 GET 요청을 하면 됩니다. 예시:

$ curl http://169.254.169.254/openstack/2018-08-27/vendor_data2.json
{
    "testing": {
        "value1": 1,
        "value2": 2,
        "value3": "three"
    }
}

Note

이 파일의 존재 여부와 내용은 배포마다 다를 수 있습니다.

8 일반 지침[ | ]

메타데이터 API 또는 설정 드라이브에서 EC2 메타데이터의 존재에 의존하지 마십시오. 이러한 내용은 향후 릴리스에서 제거될 수 있기 때문입니다. 예를 들어, ec2 디렉토리 내의 파일에 의존하지 마십시오.

메타데이터 서비스 또는 설정 드라이브 데이터를 액세스하는 이미지를 생성할 때 openstack 디렉토리 아래에 여러 디렉토리가 있는 경우, 항상 소비자가 지원하는 날짜별로 가장 최신의 API 버전을 선택하십시오. 예를 들어, 게스트 이미지가 2012-03-05, 2012-08-05, 2013-04-13 버전을 지원하는 경우, 먼저 2013-04-13을 시도하고 2013-04-13이 없으면 이전 버전으로 대체하십시오.

9 같이 보기[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}