计算的自动扩展


Red Hat OpenStack Platform 8

在 Red Hat OpenStack Platform 中配置自动扩展

OpenStack Documentation Team

摘要

自动缩放您的计算实例,以响应系统使用量。

第 1 章 为计算配置自动扩展

本指南论述了如何根据大量系统使用自动横向扩展您的计算实例。通过使用考虑 CPU 或内存使用情况等因素的预定义规则,您可以将编排(heat)配置为根据需要自动添加和删除其他实例。

1.1. 架构概述

1.1.1. 编配

自动扩展后的核心组件是 Orchestration (heat)。编排允许您使用人类可读的 YAML 模板来定义规则。这些规则可在决定添加额外的实例之前评估遥测数据。然后,一旦活动到期,编排可以自动删除任何不需要的实例。

1.1.2. Telemetry

Telemetry 可以对您的 OpenStack 环境进行性能监控,从而收集实例和物理主机的 CPU、存储和内存使用率。在评估是否执行任何预定义操作时,编配模板会检查遥测数据。

1.1.3. 主要术语

  • 堆栈 -堆栈包含运行应用程序所需的所有资源。它可以像单个实例及其资源那样简单,或者像多个实例那样复杂,其中包含包含多层应用的所有资源依赖项。
  • 模板 - YAML 脚本,以定义 Heat 要执行的一系列任务。例如,最好将单独的模板用于某些功能:

    • 堆栈模板 - 您定义 Telemetry 应该响应的阈值,并且定义自动扩展组。
    • 环境模板 - 定义环境的构建信息:要使用的类别和镜像、应如何配置虚拟网络以及如何安装哪些软件。

1.2. 示例:基于 CPU 使用情况自动扩展

在本例中,编排检查遥测数据,并且自动增加实例的数量,以响应高 CPU 使用量。创建堆栈模板和环境模板,以定义所需的规则和后续配置。本例利用了现有资源(如网络)和使用在您自己的环境中可能不同的名称。

  1. 创建环境模板,描述实例类别、网络配置和镜像类型。在 /etc/heat/templates/cirros.yaml 中输入以下值:

    heat_template_version: 2014-10-16
    description: A base Cirros 0.3.4 server
    
    resources:
      server:
        type: OS::Nova::Server
        properties:
          block_device_mapping:
            - device_name: vda
              delete_on_termination: true
              volume_id: { get_resource: volume }
          flavor: m1.nano
          key_name: admin
          networks:
            - port: { get_resource: port }
    
      port:
        type: OS::Neutron::Port
        properties:
          network: private
          security_groups:
            - all
    
      floating_ip:
        type: OS::Neutron::FloatingIP
        properties:
          floating_network: public
    
      floating_ip_assoc:
        type: OS::Neutron::FloatingIPAssociation
        properties:
          floatingip_id: { get_resource: floating_ip }
          port_id: { get_resource: port }
    
      volume:
        type: OS::Cinder::Volume
        properties:
          image: 'Cirros 0.3.4'
          size: 1
    Copy to Clipboard Toggle word wrap
  2. /root/environment.yaml 中注册 Orchestration 资源:

    resource_registry:
    
        "OS::Nova::Server::Cirros": "file:///etc/heat/templates/cirros.yaml"
    Copy to Clipboard Toggle word wrap
  3. 创建堆栈模板,描述要监视的 CPU 阈值,以及应添加多少个实例。同时也创建实例组,定义可参与此模板的最小和最大实例数量。

    /root/example.yaml 中输入以下值:

    heat_template_version: 2014-10-16
    description: Example auto scale group, policy and alarm
    resources:
      scaleup_group:
        type: OS::Heat::AutoScalingGroup
        properties:
          cooldown: 60
          desired_capacity: 1
          max_size: 3
          min_size: 1
          resource:
            type: OS::Nova::Server::Cirros
    
      scaleup_policy:
        type: OS::Heat::ScalingPolicy
        properties:
          adjustment_type: change_in_capacity
          auto_scaling_group_id: { get_resource: scaleup_group }
          cooldown: 60
          scaling_adjustment: 1
    
      scaledown_policy:
        type: OS::Heat::ScalingPolicy
        properties:
          adjustment_type: change_in_capacity
          auto_scaling_group_id: { get_resource: scaleup_group }
          cooldown: 60
          scaling_adjustment: -1
    
      cpu_alarm_high:
        type: OS::Ceilometer::Alarm
        properties:
          meter_name: cpu_util
          statistic: avg
          period: 60
          evaluation_periods: 1
          threshold: 50
          alarm_actions:
            - {get_attr: [scaleup_policy, alarm_url]}
          comparison_operator: gt
    
      cpu_alarm_low:
        type: OS::Ceilometer::Alarm
        properties:
          meter_name: cpu_util
          statistic: avg
          period: 60
          evaluation_periods: 1
          threshold: 10
          alarm_actions:
            - {get_attr: [scaledown_policy, alarm_url]}
          comparison_operator: lt
    Copy to Clipboard Toggle word wrap
  4. 更新遥测集合间隔。默认情况下,Telemetry 每 10 分钟轮询实例,以进行 CPU 数据。在本例中,将 /etc/ceilometer/pipeline.yaml 中的间隔更改为 60 秒:

    - name: cpu_source
    interval: 60
    meters:
    - "cpu"
    sinks:
    - cpu_sink
    Copy to Clipboard Toggle word wrap
    注意

    不建议在生产环境中使用 60 秒的轮询周期,因为更高的轮询间隔可能会导致 control plane 的负载增加。

  5. 重启所有 OpenStack 服务以应用更新的 Telemetry 设置:

    # openstack-service restart
    Copy to Clipboard Toggle word wrap
    注意

    此步骤将导致 OpenStack 部署简单中断。

  6. 运行编配脚本以构建环境并部署实例:

    # heat stack-create example -f /root/example.yaml -e /root/environment.yaml
    +--------------------------------------+------------+--------------------+----------------------+
    | id                                   | stack_name | stack_status       | creation_time        |
    +--------------------------------------+------------+--------------------+----------------------+
    | 6fca513c-25a1-4849-b7ab-909e37f52eca | example    | CREATE_IN_PROGRESS | 2015-08-31T16:18:02Z |
    +--------------------------------------+------------+--------------------+----------------------+
    Copy to Clipboard Toggle word wrap

    编配将创建堆栈并启动单个 cirros 实例,如 scaleup_group 定义中设置的: min_size

    # nova list
    +--------------------------------------+-------------------------------------------------------+--------+------------+-------------+--------------------------------------+
    | ID                                   | Name                                                  | Status | Task State | Power State | Networks                             |
    +--------------------------------------+-------------------------------------------------------+--------+------------+-------------+--------------------------------------+
    | 3f627c84-06aa-4782-8c12-29409964cc73 | ex-qeki-3azno6me5gvm-pqmr5zd6kuhm-server-gieck7uoyrwc | ACTIVE | -          | Running     | private=10.10.1.156, 192.168.122.234 |
    +--------------------------------------+-------------------------------------------------------+--------+------------+-------------+--------------------------------------+
    Copy to Clipboard Toggle word wrap

    编排也创建两个 cpu 警报,它们用于触发扩展或缩减事件,如 cpu_alarm_highcpu_alarm_low 定义:

    # ceilometer alarm-list
    +--------------------------------------+-------------------------------------+-------------------+----------+---------+------------+--------------------------------+------------------+
    | Alarm ID                             | Name                                | State             | Severity | Enabled | Continuous | Alarm condition                | Time constraints |
    +--------------------------------------+-------------------------------------+-------------------+----------+---------+------------+--------------------------------+------------------+
    | 04b4f845-f5b6-4c5a-8af0-59e03c22e6fa | example-cpu_alarm_high-rd5kysmlahvx | ok                | low      | True    | True       | cpu_util > 50.0 during 1 x 60s | None             |
    | ac81cd81-20b3-45f9-bea4-e51f00499602 | example-cpu_alarm_low-6t65kswutupz  | ok                | low      | True    | True       | cpu_util < 10.0 during 1 x 60s | None             |
    +--------------------------------------+-------------------------------------+-------------------+----------+---------+------------+--------------------------------+------------------+
    Copy to Clipboard Toggle word wrap

1.2.1. 测试自动扩展实例

编配根据 cpu_alarm_high 阈值自动扩展实例。CPU 使用率超过 50% 实例将扩展,如 cpu_alarm_high 定义中的设置: threshold: 50
要生成 CPU 负载,请登录实例并运行 dd 命令:

$ ssh -i admin.pem cirros@192.168.122.232
$ dd if=/dev/zero of=/dev/null &
$ dd if=/dev/zero of=/dev/null &
$ dd if=/dev/zero of=/dev/null &
Copy to Clipboard Toggle word wrap

运行 dd 命令后,您可以预期在 cirros 实例中具有 100% 的 CPU 使用率。在 60 秒后,您应该看到编排已将组自动扩展到两个实例:

# nova list
+--------------------------------------+-------------------------------------------------------+--------+------------+-------------+--------------------------------------+
| ID                                   | Name                                                  | Status | Task State | Power State | Networks                             |
+--------------------------------------+-------------------------------------------------------+--------+------------+-------------+--------------------------------------+
| 3f627c84-06aa-4782-8c12-29409964cc73 | ex-qeki-3azno6me5gvm-pqmr5zd6kuhm-server-gieck7uoyrwc | ACTIVE | -          | Running     | private=10.10.1.156, 192.168.122.234 |
| 0f69dfbe-4654-474f-9308-1b64de3f5c18 | ex-qeki-qmvor5rkptj7-krq7i66h6n7b-server-b4pk3dzjvbpi | ACTIVE | -          | Running     | private=10.10.1.157, 192.168.122.235 |
+--------------------------------------+-------------------------------------------------------+--------+------------+-------------+--------------------------------------+
Copy to Clipboard Toggle word wrap

进一步的 60 秒后,您将观察编排已再次自动扩展到三个实例。由于三个是此配置的最大值,因此它不会扩展任何更高的值(如 scaleup_group 定义中设置的一样: max_size

# nova list
+--------------------------------------+-------------------------------------------------------+--------+------------+-------------+--------------------------------------+
| ID                                   | Name                                                  | Status | Task State | Power State | Networks                             |
+--------------------------------------+-------------------------------------------------------+--------+------------+-------------+--------------------------------------+
| 3f627c84-06aa-4782-8c12-29409964cc73 | ex-qeki-3azno6me5gvm-pqmr5zd6kuhm-server-gieck7uoyrwc | ACTIVE | -          | Running     | private=10.10.1.156, 192.168.122.234 |
| 0e805e75-aa6f-4375-b057-2c173b68f172 | ex-qeki-gajdwmu2cgm2-vckf4g2gpwis-server-r3smbhtqij76 | ACTIVE | -          | Running     | private=10.10.1.158, 192.168.122.236 |
| 0f69dfbe-4654-474f-9308-1b64de3f5c18 | ex-qeki-qmvor5rkptj7-krq7i66h6n7b-server-b4pk3dzjvbpi | ACTIVE | -          | Running     | private=10.10.1.157, 192.168.122.235 |
+--------------------------------------+-------------------------------------------------------+--------+------------+-------------+--------------------------------------+
Copy to Clipboard Toggle word wrap

1.2.2. 自动缩放实例

编排根据 cpu_alarm_low 阈值自动扩展实例。在本例中,当 CPU 使用率低于 10% 后,实例将缩减。终止正在运行的 dd 进程,您将观察编排开始缩减实例。

停止 dd 进程会导致 cpu_alarm_low 事件触发。因此,编配过程开始自动扩展并删除实例:

# ceilometer alarm-list
+--------------------------------------+-------------------------------------+-------+----------+---------+------------+--------------------------------+------------------+
| Alarm ID                             | Name                                | State | Severity | Enabled | Continuous | Alarm condition                | Time constraints |
+--------------------------------------+-------------------------------------+-------+----------+---------+------------+--------------------------------+------------------+
| 04b4f845-f5b6-4c5a-8af0-59e03c22e6fa | example-cpu_alarm_high-rd5kysmlahvx | ok    | low      | True    | True       | cpu_util > 50.0 during 1 x 60s | None             |
| ac81cd81-20b3-45f9-bea4-e51f00499602 | example-cpu_alarm_low-6t65kswutupz  | alarm | low      | True    | True       | cpu_util < 10.0 during 1 x 60s | None             |
+--------------------------------------+-------------------------------------+-------+----------+---------+------------+--------------------------------+------------------+
Copy to Clipboard Toggle word wrap

几分钟后,您可以返回到单个实例,在 scaleup_group 中允许的最小实例数量:min_size: 1

1.3. 示例:自动扩展应用程序

之前描述的功能也可用于扩展应用程序;例如,一种由一次运行的多个实例提供的动态网页。在这种情况下,可以配置 neutron 来提供 负载平衡即服务, 从而在实例之间平均分配流量。

在以下示例中,编排会再次检查遥测数据,并在检测到高 CPU 使用量时增加实例数量,或者在 CPU 使用量低于集合值时减少实例数量。

  1. 创建描述 负载均衡器 环境属性的模板。在 /etc/heat/templates/lb-env.yaml 中输入以下值:

    heat_template_version: 2014-10-16
    description: A load-balancer server
    parameters:
      image:
        type: string
        description: Image used for servers
      key_name:
        type: string
        description: SSH key to connect to the servers
      flavor:
        type: string
        description: flavor used by the servers
      pool_id:
        type: string
        description: Pool to contact
      user_data:
        type: string
        description: Server user_data
      metadata:
        type: json
      network:
        type: string
        description: Network used by the server
    
    resources:
      server:
        type: OS::Nova::Server
        properties:
          flavor: {get_param: flavor}
          image: {get_param: image}
          key_name: {get_param: key_name}
          metadata: {get_param: metadata}
          user_data: {get_param: user_data}
          networks:
            - port: { get_resource: port }
    
      member:
        type: OS::Neutron::PoolMember
        properties:
          pool_id: {get_param: pool_id}
          address: {get_attr: [server, first_address]}
          protocol_port: 80
    
      port:
        type: OS::Neutron::Port
        properties:
          network: {get_param: network}
          security_groups:
            - base
    
    outputs:
      server_ip:
        description: IP Address of the load-balanced server.
        value: { get_attr: [server, first_address] }
      lb_member:
        description: LB member details.
        value: { get_attr: [member, show] }
    Copy to Clipboard Toggle word wrap
  2. 为要运行 Web 应用的实例创建另一个模板。以下模板会创建一个负载均衡器并使用现有的网络。确保根据您的环境替换参数,并将模板保存到文件中,如 /root/lb-webserver-rhel7.yaml

    heat_template_version: 2014-10-16
    description: AutoScaling RHEL 7 Web Application
    parameters:
      image:
        type: string
        description: Image used for servers
        default: RHEL 7
      key_name:
        type: string
        description: SSH key to connect to the servers
        default: admin
      flavor:
        type: string
        description: flavor used by the web servers
        default: m2.tiny
      network:
        type: string
        description: Network used by the server
        default: private
      subnet_id:
        type: string
        description: subnet on which the load balancer will be located
        default: 9daa6b7d-e647-482a-b387-dd5f855b88ef
      external_network_id:
        type: string
        description: UUID of a Neutron external network
        default: db17c885-77fa-45e8-8647-dbb132517960
    
    resources:
      webserver:
        type: OS::Heat::AutoScalingGroup
        properties:
          min_size: 1
          max_size: 3
          cooldown: 60
          desired_capacity: 1
          resource:
            type: file:///etc/heat/templates/lb-env.yaml
            properties:
              flavor: {get_param: flavor}
              image: {get_param: image}
              key_name: {get_param: key_name}
              network: {get_param: network}
              pool_id: {get_resource: pool}
              metadata: {"metering.stack": {get_param: "OS::stack_id"}}
              user_data:
                str_replace:
                  template: |
                    #!/bin/bash -v
    
                    yum -y install httpd php
                    systemctl enable httpd
                    systemctl start httpd
                    cat <<EOF > /var/www/html/hostname.php
                    <?php echo "Hello, My name is " . php_uname('n'); ?>
                    EOF
                  params:
                    hostip: 192.168.122.70
                    fqdn: sat6.example.com
                    shortname: sat6
    
      web_server_scaleup_policy:
        type: OS::Heat::ScalingPolicy
        properties:
          adjustment_type: change_in_capacity
          auto_scaling_group_id: {get_resource: webserver}
          cooldown: 60
          scaling_adjustment: 1
    
      web_server_scaledown_policy:
        type: OS::Heat::ScalingPolicy
        properties:
          adjustment_type: change_in_capacity
          auto_scaling_group_id: {get_resource: webserver}
          cooldown: 60
          scaling_adjustment: -1
    
      cpu_alarm_high:
        type: OS::Ceilometer::Alarm
        properties:
          description: Scale-up if the average CPU > 95% for 1 minute
          meter_name: cpu_util
          statistic: avg
          period: 60
          evaluation_periods: 1
          threshold: 95
          alarm_actions:
            - {get_attr: [web_server_scaleup_policy, alarm_url]}
          matching_metadata: {'metadata.user_metadata.stack': {get_param: "OS::stack_id"}}
          comparison_operator: gt
    
      cpu_alarm_low:
        type: OS::Ceilometer::Alarm
        properties:
          description: Scale-down if the average CPU < 15% for 1 minute
          meter_name: cpu_util
          statistic: avg
          period: 60
          evaluation_periods: 1
          threshold: 15
          alarm_actions:
            - {get_attr: [web_server_scaledown_policy, alarm_url]}
          matching_metadata: {'metadata.user_metadata.stack': {get_param: "OS::stack_id"}}
          comparison_operator: lt
    
      monitor:
        type: OS::Neutron::HealthMonitor
        properties:
          type: TCP
          delay: 5
          max_retries: 5
          timeout: 5
    
      pool:
        type: OS::Neutron::Pool
        properties:
          protocol: HTTP
          monitors: [{get_resource: monitor}]
          subnet_id: {get_param: subnet_id}
          lb_method: ROUND_ROBIN
          vip:
            protocol_port: 80
    
      lb:
        type: OS::Neutron::LoadBalancer
        properties:
          protocol_port: 80
          pool_id: {get_resource: pool}
    
      lb_floating:
        type: OS::Neutron::FloatingIP
        properties:
          floating_network_id: {get_param: external_network_id}
          port_id: {get_attr: [pool, vip, port_id]}
    
    outputs:
      scale_up_url:
        description: >
          This URL is the webhook to scale up the autoscaling group.  You
          can invoke the scale-up operation by doing an HTTP POST to this
          URL; no body nor extra headers are needed.
        value: {get_attr: [web_server_scaleup_policy, alarm_url]}
      scale_dn_url:
        description: >
          This URL is the webhook to scale down the autoscaling group.
          You can invoke the scale-down operation by doing an HTTP POST to
          this URL; no body nor extra headers are needed.
        value: {get_attr: [web_server_scaledown_policy, alarm_url]}
      pool_ip_address:
        value: {get_attr: [pool, vip, address]}
        description: The IP address of the load balancing pool
      website_url:
        value:
          str_replace:
            template: http://serviceip/hostname.php
            params:
              serviceip: { get_attr: [lb_floating, floating_ip_address] }
        description: >
          This URL is the "external" URL that can be used to access the
          website.
      ceilometer_query:
        value:
          str_replace:
            template: >
              ceilometer statistics -m cpu_util
              -q metadata.user_metadata.stack=stackval -p 60 -a avg
            params:
              stackval: { get_param: "OS::stack_id" }
        description: >
          This is a Ceilometer query for statistics on the cpu_util meter
          Samples about OS::Nova::Server instances in this stack.  The -q
          parameter selects Samples according to the subject's metadata.
          When a VM's metadata includes an item of the form metering.X=Y,
          the corresponding Ceilometer resource has a metadata item of the
          form user_metadata.X=Y and samples about resources so tagged can
          be queried with a Ceilometer query term of the form
          metadata.user_metadata.X=Y.  In this case the nested stacks give
          their VMs metadata that is passed as a nested stack parameter,
          and this stack passes a metadata of the form metering.stack=Y,
          where Y is this stack's ID.
    Copy to Clipboard Toggle word wrap
  3. 更新遥测集合间隔。默认情况下,Telemetry 每 10 分钟轮询实例,以进行 CPU 数据。在本例中,将 /etc/ceilometer/pipeline.yaml 中的间隔更改为 60 秒:

    - name: cpu_source
    interval: 60
    meters:
    - "cpu"
    sinks:
    - cpu_sink
    Copy to Clipboard Toggle word wrap
    注意

    不建议在生产环境中使用 60 秒的轮询周期,因为更高的轮询间隔可能会导致 control plane 的负载增加。

  4. 重启所有 OpenStack 服务以应用更新的 Telemetry 设置:

    # openstack-service restart
    Copy to Clipboard Toggle word wrap
    注意

    此步骤将导致 OpenStack 部署简单中断。

  5. 运行 编配脚本。这将构建环境,并使用模板来部署实例:

    # heat stack-create webfarm -f /root/lb-webserver-rhel7.yaml
    Copy to Clipboard Toggle word wrap

    /root/lb-webserver-rhel7.yaml 替换为实际路径和文件名。

您可以在 Dashboard 的 Orchestration → Stacks → Webfarm 下监控堆栈的创建。创建堆栈后,您会看到多个有用的信息,特别是:

  • 用于触发手动扩展或缩减事件的 URL。
  • 浮动 IP 地址,即网站的 IP 地址。
  • Telemetry 命令显示整个堆栈的 CPU 负载,您可以使用它来检查扩展是否按预期工作。

这是页面在 Dashboard 中是什么样子:

heat stack output

打开 Network → Load Balancers 来查看负载均衡器:

load balancer

单击 Members。此页面显示负载平衡池的成员;它们是网站流量可以分发到的实例。请注意,在创建了对应的实例并且安装和配置了 Apache 之前,成员将没有 Active 状态。

当 web 服务器启动时,实例将显示为负载均衡器的活动成员:

load balancer member active

现在,您可以通过 http://IP/hostname.php 访问 Web 应用。您可以看到类似如下的输出:

Hello, My name is we-zrwm-t4ezkpx34gxu-qbg5d7dqbc4j-server-mzdvigk2jugl
Copy to Clipboard Toggle word wrap

现在,您可以通过从仪表板中的堆栈概述运行 Telemetry 命令来查看堆栈的 CPU 性能数据。该命令类似如下:

# ceilometer statistics -m cpu_util -q metadata.user_metadata.stack=8f86c3d5-15cf-4a64-b9e8-70215498c046 -p 60 -a avg
Copy to Clipboard Toggle word wrap

1.3.1. 测试自动扩展应用程序

要手动触发应用程序扩展,请在 仪表板中使用来自堆栈概述的 REST 扩展 URL,或者通过在初始部署实例上运行资源密集型命令来生成负载。

  • 要使用 REST API,您需要一个能够执行 HTTP POST 请求的工具,如 REST Easy Firefox add oncurl。复制 扩展 URL,并将其粘贴到 REST Easy 表单中:

    scale up

    或者将其用作 curl 命令行中的参数:

    $ curl -X POST "scale-up URL"
    Copy to Clipboard Toggle word wrap
  • 为人为生成负载,请为实例分配一个浮动 IP,使用 SSH 登录该实例,再运行 命令,使 CPU 处于忙碌状态。例如:

    $ dd if=/dev/zero of=/dev/null &
    Copy to Clipboard Toggle word wrap
    重要

    检查 CPU 用量是否超过 95%,例如使用 top 命令。如果 CPU 使用率不够高,请多次并行运行 dd 命令,或使用其它方法保持 CPU 忙碌。

下一次 Telemetry 从堆栈收集 CPU 数据时,扩展事件将在 Orchestration → Stacks → Webfarm → Events 触发并出现。将创建一个新的 Web 服务器实例,并添加到负载平衡器中。完成此操作后,实例就会变为活动状态,您会注意到网站 URL 通过负载均衡器路由到堆栈中的两个实例。

注意

创建可能需要几分钟时间,因为实例必须初始化、安装和配置 Apache,以及部署的应用程序。这由 HAProxy 监控,确保在实例上可用该网站标记为 active。

这是在创建新实例时,负载均衡池的成员列表是什么样子:

scale up load balancer

重要

在决定是否创建额外的实例被创建时,将考虑 heat 堆栈中的实例的平均 CPU 使用量。由于第二个实例很可能具有正常的 CPU 使用量,因此它将平衡第一个实例。但是,如果第二个实例变得忙碌,并且第一个实例的平均 CPU 使用量超过 95%,则将创建另一个(third)实例。

1.3.2. 自动缩放故障应用程序

这与 第 1.2.2 节 “自动缩放实例” 类似,当堆栈的平均 CPU 使用量低于预定义的值时,会触发 scale-down 策略,在 第 1.3.1 节 “测试自动扩展应用程序” 中描述的示例中为 15%。另外,通过这种方式从堆栈中删除实例时,也会从负载平衡器中自动移除它。然后,网站流量会在实例的其余部分中自动分发。

法律通告

版权所有 © 2015 Red Hat, Inc.
本文档内容及图解由红帽根据 Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA")授权。http://creativecommons.org/licenses/by-sa/3.0/ 中提供了CC-BY-SA 的说明。根据 CC-BY-SA,如果发布本文档或提供此文档,则必须提供原始版本的 URL。
作为本文档的许可者,红帽可能会放弃强制制执行 CC-BY-SA 第4d 条款,且不声明该条款在适用条款允许的最大限度内有效。
OpenStack 配置参考中采用的部分内容。请参阅 Red Hat OpenStack Platform Licenses 中的"配置参考"文档
Red Hat、Red Hat Enterprise Linux、Shadowman 徽标、JBoss、MetaMatrix、Fedora、Infinity 徽标和 RHCE 是 Red Hat, Inc. 在美国和其他国家/地区注册的商标。
Linux® 是 Linus Torvalds 在美国和其它国家的注册商标。
Java® 是 Oracle 和/或其附属公司注册的商标。
XFS® 是 Silicon Graphics International Corp. 或其子公司在美国和/或其他国家的商标。
MySQL® 是 MySQL AB 在美国、美国和其他国家注册的商标。
Node.js® 是 Joyent 的官方商标。Red Hat Software Collections 与官方 Joyent Node.js 开源或商业项目没有正式关联或被正式认可。
OpenStack® Word Mark 和 OpenStack 标识是 OpenStack Foundation 在美国和其他国家/地区注册商标/服务标记或商标/服务标记,适用于 OpenStack Foundation 的权限。我们不附属于 OpenStack Foundation 或 OpenStack 社区。
所有其他商标均由其各自所有者所有。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat