`
mars914
  • 浏览: 432501 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

什么是openstack的 metadata

阅读更多

metadata字面上是元数据,是一个不容易理解的概念。在除了openstack的其他场合也经常会碰到。openstack里的metadata,是提供一个机制给用户,可以设定每一个instance 的参数。

 

具体可以参见openstack的相关api和以下的蓝图:

https://blueprints.launchpad.net/nova/+spec/openstack-api-metadata

 

比如你想给instance设置某个属性,比如主机名。metadata的一个重要应用,是设置每个instance的ssh公钥。公钥的设置有两种方式:

1、创建instance时注入文件镜像

2、启动instance后,通过metadata获取,然后用脚本写入

 

第二种方式更加灵活,可以给非root用户注入公钥。以下是获取ssh key的代码片段:

# Fetch public key using HTTP
ATTEMPTS=10
while [ ! -f /root/.ssh/authorized_keys ]; do
    curl -f http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key > /tmp/aws-key 2>/dev/null
    if [ \$? -eq 0 ]; then
        cat /tmp/aws-key >> /root/.ssh/authorized_keys
        chmod 0600 /root/.ssh/authorized_keys
        restorecon /root/.ssh/authorized_keys
        rm -f /tmp/aws-key
        echo "Successfully retrieved AWS public key from instance metadata"
    else
        FAILED=\$((\$FAILED + 1))
        if [ \$FAILED -ge \$ATTEMPTS ]; then
            echo "Failed to retrieve AWS public key after \$FAILED attempts, quitting"
            break
        fi
        echo "Could not retrieve AWS public key (attempt #\$FAILED/\$ATTEMPTS), retrying in 5 seconds..."
        sleep 5
    fi
done

 

可以看到,获取metadata的api接口是:

http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key

 

可是,这个IP地址,在我们 openstack 是不存在的。为什么可以获取到metadata呢?

这是由于Amazon的原因,最早metadata是亚马逊提出来的,参见:

http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html

 

后来很多人给亚马逊定制了一些操作系统的镜像,比如 ubuntu, fedora, centos 等等,而且将里面获取 metadta 的api地址也写死了。所以opentack为了兼容,保留了这个地址 169.254.169.254。然后通过iptables nat映射到真实的api上:

iptables -A nova-network-PREROUTING -d 169.254.169.254/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.0.4:8775

 

使用metadata会带来便利,但是经常碰到的一个问题是,metadata获取不成功,导致instance启动很慢,并且获取失败会导致ssh key等功能设置失效,刚才获取ssh的代码片段中,就是尝试10次。需要注意的是:

 

1、在 network 上,正确设置相关参数,在 /etc/nova/nova.conf 里配置:

      metadata_host=10.0.0.4

      这里的 10.0.0.4 是api所在的内网地址

2、network上,要能够连接这个api地址 10.0.0.4

 

3、由于 api 判断instance是通过fix ip 来判断的,所以instance的fix ip地址段,一定要能够正确连接 api 所在 ip, 

     并且没有经过 nat 地址转换。否则不能正确获取instance 的metadata

 

openstack 的 metadata获取,我修正了一个bug:

https://review.openstack.org/#/c/5961/

https://code.launchpad.net/bugs/968453

 

但是,在某些场合,管理地址分开的情况下,还有bug, 需要继续改进:

https://bugs.launchpad.net/nova/+bug/982356

 

分享到:
评论

相关推荐

    《OpenStack云平台实战》课程测试试卷参考答案-1(20210628214350).pdf

    12. **服务组件的API**:OpenStack每个核心组件通常都有相应的API服务,如Nova-api提供计算服务API、Nova-api-metadata提供元数据服务、Nova-Scheduler负责调度等。 13. **云平台的硬件和软件依赖**:OpenStack云...

    centos7部署OpenStack云平台

    - `nova-api-metadata`: 提供实例的元数据服务,通常在多主机模式下与nova-network一起使用。 - `nova-compute`: 创建和销毁虚拟机实例,通过Hypervisor API与虚拟化技术如XenAPI、libvirt(KVM/QEMU)或VMware API...

    OpenStack高可用指南.pdf

    对于OpenStack中的网络服务组件,如Neutron的L3、DHCP和Metadata代理程序,也要进行高可用配置,并且需要组织和管理相关网络资源。 ### 6. HAProxy节点服务器 HAProxy是一个高性能的负载均衡器,用于分配客户端...

    openstack_所有命令

    - `cinder metadata-*`:设置或删除卷的元数据,包括显示、更新全部元数据等。 - `cinder migrate`:迁移卷到新的主机,支持数据迁移和不中断服务的迁移。 - `cinder qos-*`:QoS(服务质量)相关命令,用于关联...

    OpenStack网络管理

    ### OpenStack网络管理知识点详解 #### 一、Linux网络虚拟化基础 在深入探讨OpenStack的网络管理之前,我们先来了解一下Linux网络虚拟化的基础知识。Linux网络虚拟化是指在单个物理服务器上创建多个独立的虚拟网络...

    《OpenStack云平台实战》课程测试试卷参考答案-1.pdf

    - Nova-api-metadata:提供虚拟机实例元数据访问。 - Nova-compute:负责虚拟机的启动、调度和运行。 - Nova-placement-api:用于管理资源放置,如虚拟机分配到物理主机。 - Nova-conductor:负责管理和协调Nova...

    openstack quantum网络介绍.pdf

    - **neutron-metadata-agent**: 元数据代理,为虚拟机实例提供元数据服务。 - **neutron-plugin**: 网络插件,实现了具体的网络逻辑,例如Open vSwitch、Linux Bridge等。 ##### 2. 创建虚拟机实例的流程 - **...

    openstack部署文档

    Mysql 是一个数据库管理系统,在 OpenStack 中用于存储 metadata。这里安装 Mysql 服务,并配置 Mysql 服务。 Rabbitmq 服务安装: Rabbitmq 是一个消息队列服务,在 OpenStack 中用于实现消息队列。这里安装 ...

    Openstack API

    ### OpenStack API 知识点详解 #### 一、OpenStack API 概述 OpenStack 是一个开源的云计算管理平台项目,它提供了一系列用于构建和管理云环境的服务。OpenStack API 是实现这些服务之间交互的核心组件之一。通过 ...

    167-获取 metadata 过程详解1

    那么,为什么instance c1能够成功获取metadata呢? 这背后的机制是OpenStack自动在instance的路由表中添加了一条特殊路由,使得对169.254.169.254的任何请求都会被转发到特定的IP,例如这里提到的17.17.17.1。这个...

    openstack命令手册.docx

    + 维护编辑 metadata_agent 配置:metadata_agent config-set --flag <flag> 块存储常用命令 块存储是 OpenStack 的一种核心服务,负责块存储的管理。下面是块存储常用命令: * 查询类: + 查看块存储服务及...

    openstack与ceph整合安装指导文档.docx

    然后按照Ceph的安装指南,依次在所有存储节点上部署Ceph守护进程,包括OSD(Object Storage Daemon)、Mon(Monitor)和MDS(Metadata Server)。 - **IP规划**:确保每个节点有明确的管理IP、存储IP和对外服务IP...

    openstack kilo版安装部署(ubuntu14.04LTS)

    sudo apt-get install -y neutron-server neutron-plugin-ml2 neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent ``` 配置Neutron的网络拓扑、物理网络桥接、DHCP代理等。 ### 配置计算节点 ...

    openstack_配额管理.docx

    - `metadata-items`: 每个实例允许的元数据项数量。 - `ram`: 每个租户允许的实例RAM(以MB为单位)。 - `security-group-rules`: 每个安全组允许的规则数量。 - `security-groups`: 每个租户允许的安全组数量。...

    openstack实战

    这些组件是实现网络功能的关键部分,例如,***.***.***.***地址通常用于启动时的metadata服务,为实例提供附加的配置信息。部署时还需考虑磁盘性能、UserData的配置和错误处理等问题。 在OpenStack的实战操作过程中...

    165-Metadata Service 架构详解1

    Metadata Service 是 OpenStack 中的关键组件,它为实例(instance)提供了获取元数据(metadata)的能力。这些元数据通常包括配置信息、用户数据等,对于实例的初始化和自定义配置至关重要。下面我们将深入探讨 ...

    169-instance 怎么获得自己的 Metadata1

    总的来说,OpenStack 中 instance 获取 metadata 的过程是一个涉及多个组件协作的过程,包括 nova-api-metadata、neutron-metadata-agent 和 neutron-ns-metadata-proxy,以及 l3-agent 或 dhcp-agent。理解这一过程...

    166-获取 metadata 的完整例子1

    在OpenStack环境中,实例(instance)获取metadata是一个关键的过程,它涉及到网络配置和服务协同工作,以便实例能够获取必要的配置信息,如元数据(metadata)。在本案例中,我们将深入探讨这个过程,特别是在一个...

    Mirantis-OpenStack-7.0-File-Format-Reference

    ### Mirantis OpenStack 7.0 文件格式参考 #### 概述 Mirantis OpenStack 7.0 文件格式参考文档提供了详细的配置文件说明,这些文件是用于部署和管理基于OpenStack环境的关键组成部分。该文档主要面向熟悉网络和云...

    openstack api 大全

    ### OpenStack API 大全解析 #### 一、概述 OpenStack API大全是关于OpenStack最新版本API的全面文档,该文档提供了详细的API接口描述、使用方法及注意事项,旨在帮助开发者更好地利用OpenStack构建和管理云环境。...

Global site tag (gtag.js) - Google Analytics