Skip to the content.

Metadata được sử dụng trong Openstack Nova

Nova có thể cấu hình các thông tin cho máy ảo mà nó chạy thông qua một cơ chế gọi là metadata. Cơ chế này được sử dụng rộng rãi thông quan các trình hỗ trợ như cloud-init để cấu hình một số thông tin như mật khẩu user root cho máy ảo.

Metadata được cung cấp thông qua config drive hoặc metadata service hoặc có thể là user data được tùy chình bởi người dùng.

Các loại Metadata.

Có 3 nhóm người dùng riêng biệt cần có khả năng chỉ định các metadata cho máy ảo.

Dữ liệu người dùng cung cấp.

Người dùng mà khởi động máy ảo có thể truyền các metadata vào máy ảo theo nhiều cách. Metadata này có thể là keypair của user, nova sẽ truyền và cấu hình máy ảo trong quá trình boot.

Dữ liệu được nova cung cấp.

Nova chính nó cũng cần truyền thông tin đến máy ảo thông qua hệ thống metadata triển khai nội bộ của nó. Dữ liệu này có thể là hostname được đặt cho máy ảo, availability zone mà máy ảo sẽ được đặt trong đó.

Nova cung cấp cả Openstack Metadata APIEC2-compatible API

Dữ liệu từ người triển khai.

Người triển khai của Openstack cũng có thể cần truyền dữ liệu vào máy ảo.

Metadata service

Dịch vụ Metadata cung cấp cách thức đề máy ảo có thể truy xuất các dữ liệu máy ảo cụ thể thông qua một REST API. Máy ảo sẽ truy cập dịch vụ này tại địa chỉ 169.254.169.254, tất cả các loại metadata, dữ liệu cung cấp bởi user, nova và deployer, đều có thể truy xuất từ địa chỉ này.

Sử dụng metadata service.

Từ máy ảo, để truy xuất danh sách các phiên bản được hỗ trợ của Openstack metadata API, thực hiện một GET request đến http://169.254.169.254/openstack, nó sẽ trả về một danh sách các thư mục của các phiên bản và chứa metadata.

$ 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

Để truy xuất danh sách các phiên bản được hỗ trợ của EC2-compatible metadata API, lại một lần nữa trả về các thư mục cho các phiên bản khác nhau.

Config drive

Config drive là drive đặc biệt được gán vào máy ảo khi boot. Máy ảo có thể mount drive và đọc file từ nó để có thể lấy thông tin có sẵn thông qua dịch vụ metadata.

Nova metadata

Nova cung cấp hai định dạng metadata: OpenStack format và EC2-compatible format.

Metadata định dạng Openstack

Ví dụ:

curl -s http://169.254.169.254/openstack/2018-08-27/meta_data.json | python -mjson.tool
{
    "availability_zone": "nova",
    "devices": [],
    "hostname": "cr7.novalocal",
    "keys": [
        {
            "data": "ssh-rsa AAAAB3NzaC1yc2EAAAVfTg8I4yofCw7QPmDL0BH9SACWb6e782BJ1ujmH5IPApS3bfTg8I4yofg8I4yofujZbPhATMiEapMukoUDX5HDYSnlUfJaq8szxBNO+IkB28Oj7LeLoirS/gi+KK8MiequlEsm/IQQFyl6fTg8I4yofjuf+KA9irBuy3IjJ2XFzBlxYvMHWtYBdRaFqG7jXbOTkLpmT49N54XRz+ftAfdFuHMx76WSNRFahPxtLGqK4mwJkw2l5D7Ht+6hKlUneH0BBHiM2vsnDXnU8QawE9Szm6+UnjV7VviuakZRw2VRaOdw7KayD lamth@Precision",
            "name": "lamth-precision",
            "type": "ssh"
        }
    ],
    "launch_index": 0,
    "name": "cr7",
    "project_id": "270488fd0772481d9fdd824a9c7c6490",
    "public_keys": {
        "lamth-precision": "ssh-rsa AAAAB3NzaC1yc2EAAAADAvQCw7QPmDL0BH9SACWb6e782BJ1ujmH5IPApS3bQFyl6hWbckqMftGXTtYxOIILGGaGwaFq8zSWQ+3dncuJBPNp7keT86fTg8I4yofujZbPhATMiEapMukoUDX5HDYSnlUfJaq8szxBNO+IkB2QFyl6hWbckqMftGXTtYxOiequlEsm/IQQFyl6hWbckqMftGXTtYxOjuf+KA9irBuy3IjJ2XFzBlxYvMHWtYBdRaFqG7jXbOTkLpmT49N54XRz+ftAfdFuHMx76WSNRFahPxtLGqK4mwJkw2l5D7Ht+6hKlUnQFyl6hWbck2XFzBlxYvMYxOsnDXnU8QawE9Szm6+UnjV7VviuakZRw2VRaOdw7KayD lamth@Precision"
    },
    "random_seed": "+mZugcAA2iEqxERrsYgMrgDdcKlbd3Q00ObEQiicYeD6lCTT6W0K4/uqJZ92Odsfsdf8k8lk9OGD9j8ejjcgv7kl0qqwwlslkasdjf8cJTNYUdlkKJUYJBFLjsneuAlU97KgUHtPBJ6t9qBwbxPcJ6OuSCyD9yDz4Tcg8PIZuz7Cg5rv40Db3VBB/wrC2qjzHr8A8N2XqroRBTB+gqs6v1x6gI0/fKd89n4+NlMrMO9LOOHUC84i5A6DevuXHFJ+JbUtb6gEh0g5gM702JSz+9k6nArr2C8hvKm/CoM9fcA7lEsslglFSCT40Q3CIE0GwI9C2lKGOX4I86UxTV5xcd0YWqhwDv1Cog8iWRoLefVDvz5ZLkFaWXNhRdaP/Hk6G6Ioofik21M/oJucVSEIIBjsjBiRcjBiXfoT5MoJecHBaXqvj51SGUxjCsed0cHDoW1U4lla/NRiytTwmOzGyWEgIfcqdgfiqPuxPejp6Rw9Lx1M0u/iAxvgQAxnsdJ+xKOqdd51BTtYsDygr6koYz4IVvgcvsIGnHtvpMIttZARhoU+961eosY8KTa9Vp7DiUN906TwXujjHSSMja6Xe2uTfh4o/nrU=",
    "uuid": "997c7bde-adf2-4340-a04d-bd9aba56ee18"
}

curl -s http://169.254.169.254/openstack/2018-08-27/network_data.json | python -mjson.tool
{
    "links": [
        {
            "ethernet_mac_address": "fa:16:3e:93:41:fa",
            "id": "tapca986f41-6b",
            "mtu": 1500,
            "type": "ovs",
            "vif_id": "ca986f41-6b72-429b-a87b-55b34ce64576"
        }
    ],
    "networks": [
        {
            "id": "network0",
            "link": "tapca986f41-6b",
            "network_id": "37a35264-8d48-416f-a0a9-1a7b4624e34d",
            "type": "ipv4_dhcp"
        }
    ],
    "services": [
        {
            "address": "8.8.8.8",
            "type": "dns"
        }
    ]
}

EC2-compatible metadata

API tương thích EC2 tương thích với phiên bản 2009-04-04 của dịch vụ metadata Amazon EC2 Điều này có nghĩa là hình ảnh máy ảo được thiết kế cho EC2 sẽ hoạt động chính xác với OpenStack.

EC2 API exposes các URL riêng cho mỗi thành phần của metadata. Để liệt kê danh sách các metadata, thực hiện request đến http://169.254.169.254/2009-04-04/meta-data/ Ví dụ:

[root@cr7 ~]# 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
local-hostname
local-ipv4
placement/
public-hostname
public-ipv4
public-keys/
reservation-id
[root@cr7 ~]# curl http://169.254.169.254/2009-04-04/meta-data/public-keys/0/openssh-key  ;echo 
ssh-rsa AAAAB3NzaC1yc2EAAAA7jXbOTkLpmT49N54XHMx76WSNRFahPxtLGqK4mwJkw2l5D7Ht+6hKlUneH0BBHiM2vsnDXnU8QawE9Szm6+UnjRz+ftAfdFuHMHMx76WSNRFahP+xtLGqK4mwJkw2l5D7Ht+6hKlUneH0BBHiM2vsnDXnU8QawE9Szm6+Unjx76WSNRFahPxtLGqK4mwJkw2l5D7Ht+6hKlUneH0BBHiM2vsnDXnU8QawE9Szm6+UnjV7Vvme3mJF9nF3klkosJ78DuayD lamth@Precision
[root@cr7 ~]# curl http://169.254.169.254/2009-04-04/meta-data/hostname ; echo 
cr7.novalocal

User data.

User data là một đốm dữ liệu nhỏ mà người dụng chỉ định khi tạo môt máy ảo. Máy ảo có thể truy cập dữ liệu này thông qua metadata service hoặc config drive. Thường thì user sẽ truyền một shell script để máy ảo chạy trong quá trình boot.

http://169.254.169.254/openstack/{version}/user_data http://169.254.169.254/{version}/user-data

ví dụ”:

[root@cr7 ~]# curl http://169.254.169.254/2009-04-04/user-data  ; echo 
#cloud-config
user: root
password: 123
chpasswd: {expire: False}
ssh_pwauth: True

Tài liệu tham khảo: