5.4.2. 第一次引导过程中挂载多个巨页文件夹


您可以配置 Compute 服务(nova),作为第一次引导过程的一部分处理多个页面大小。第一次引导过程会在首次启动节点时将 heat 模板配置添加到所有节点。后续包含这些模板(如更新 overcloud 堆栈)不会运行这些脚本。

流程

  1. stack 用户的身份登录 undercloud。
  2. Source stackrc 文件:

    [stack@director ~]$ source ~/stackrc
  3. 打开 Compute 环境文件。
  4. 设置 KernelArgs 参数,以创建不同大小的巨页:

    parameter_defaults:
      ComputeParameters:
        ...
        KernelArgs: "default_hugepagesz=1GB hugepagesz=1G hugepages=32 hugepagesz=2M hugepages=4096"
  5. 使用其他环境文件将计算环境文件添加到堆栈中,并部署 overcloud:

    (undercloud)$ openstack overcloud deploy --templates \
     -e [your environment files] \
     -e /home/stack/templates/<compute_environment_file>.yaml
  6. 创建一个第一个 ansible playbook 文件 hugepages.yaml,该文件运行一个脚本来为巨页文件夹创建挂载单元文件:

    - name: Overcloud Node Huge Pages
      hosts: allovercloud
      any_errors_fatal: true
      gather_facts: false
    
      pre_tasks:
        - name: Assert custom_hugepage_pagesizes
          ansible.builtin.assert:
            that:
              - custom_hugepage_pagesizes is defined
              - custom_hugepage_pagesizes | type_debug == "list"
              - custom_hugepage_pagesizes | length > 0
    
        - name: Wait for provisioned nodes to boot
          wait_for_connection:
            timeout: 600
            delay: 10
    
      tasks:
        - name: Mask the default dev-hugepages.mount systemd unit
          become: true
          ansible.builtin.systemd_service:
            name: dev-hugepages.mount
            masked: true
    
        - name: Create hugepages folder in /dev
          become: true
          ansible.builtin.file:
            path: "/dev//hugepages{{ item }}"
            state: directory
            owner: root
            group: hugetlbfs
            mode: '0755'
          loop: "{{ custom_hugepage_pagesizes }}"
    
        - name: Create Huge Page systemd mount unit file
          become: true
          ansible.builtin.copy:
            dest: "/etc/systemd/system/dev-hugepages{{ item }}.mount"
            content: |
              [Unit]
              Description={{ item }} Huge Pages File System
              Documentation=https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt
              Documentation=https://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
              DefaultDependencies=no
              Before=sysinit.target
              ConditionPathExists=/sys/kernel/mm/hugepages
              ConditionCapability=CAP_SYS_ADMIN
              ConditionVirtualization=!private-users
    
              [Mount]
              What=hugetlbfs
              Where=/dev/hugepages{{ item }}
              Type=hugetlbfs
              Options=pagesize={{ item }}
    
              [Install]
              WantedBy = sysinit.target
            owner: root
            group: root
            mode: '0644'
          loop: "{{ custom_hugepage_pagesizes }}"
    
        - name: Enable Huge Page systemd mounts
          become: true
          ansible.builtin.systemd_service:
            name: "dev-hugepages{{ item }}.mount"
            enabled: true
            daemon_reload: true
          loop: "{{ custom_hugepage_pagesizes }}"

    ansible playbook 执行以下任务:

    1. 屏蔽默认的 dev-hugepages.mount 挂载单元文件,以便使用页大小创建新挂载。
    2. 确保创建了文件夹。
    3. 为每个 pagesize 创建 systemd 单元文件。
    4. custom_hugepage_pagesizes 变量中定义的 pagesize 启用每个挂载单元文件。
  7. 可选: /dev 文件夹自动绑定到 nova_computenova_libvirt 容器。如果您已将不同的目的地用于巨页挂载,您可以将挂载传递给 nova_computenova_libvirt 容器:

    parameter_defaults:
      NovaComputeOptVolumes:
        - /opt/dev:/opt/dev
      NovaLibvirtOptVolumes:
        - /opt/dev:/opt/dev
  8. 在 baremetal 部署定义文件 overcloud-baremetal-deploy.yaml 中注册 ansible playbook:

    - name: ComputeA
      ...
      ansible_playbooks:
        - playbook: /home/stack/playbooks/hugepages.yaml
          extra_vars:
            custom_hugepage_pagesizes:
              - '2M'
              - '1G'
    - name: ComputeB
      ...
      ansible_playbooks:
        - playbook: /home/stack/playbooks/hugepages.yaml
          extra_vars:
            custom_hugepage_pagesizes:
              - '2M'
              - '1G'
  9. 置备节点:

    $ (undercloud)$ openstack overcloud node provision \
     [--templates <templates_directory> \]
     --stack <stack> \
     --network-config \
     --output <deployment_file> \
     /home/stack/templates/<node_definition_file>
    • 可选:包含-- templates 选项以使用您自己的模板,而不是位于 /usr/share/openstack-tripleo-heat-templates 中的默认模板。将 <templates_directory> 替换为包含模板的目录的路径。
    • & lt;stack> 替换为置备裸机节点的堆栈名称。如果未指定,则默认为 overcloud
    • <deployment_file > 替换为要生成的 heat 环境文件的名称,以包含在部署命令中。
    • <node_definition_file > 替换为节点定义文件的名称。
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

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

让开源更具包容性

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

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部