5.4.2. 第一次引导过程中挂载多个巨页文件夹
您可以配置 Compute 服务(nova),作为第一次引导过程的一部分处理多个页面大小。第一次引导过程会在首次启动节点时将 heat 模板配置添加到所有节点。后续包含这些模板(如更新 overcloud 堆栈)不会运行这些脚本。
流程
-
以
stack用户的身份登录 undercloud。 Source
stackrc文件:[stack@director ~]$ source ~/stackrc- 打开 Compute 环境文件。
设置
KernelArgs参数,以创建不同大小的巨页:parameter_defaults: ComputeParameters: ... KernelArgs: "default_hugepagesz=1GB hugepagesz=1G hugepages=32 hugepagesz=2M hugepages=4096"使用其他环境文件将计算环境文件添加到堆栈中,并部署 overcloud:
(undercloud)$ openstack overcloud deploy --templates \ -e [your environment files] \ -e /home/stack/templates/<compute_environment_file>.yaml创建一个第一个 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 执行以下任务:
-
屏蔽默认的
dev-hugepages.mount挂载单元文件,以便使用页大小创建新挂载。 - 确保创建了文件夹。
- 为每个 pagesize 创建 systemd 单元文件。
-
为
custom_hugepage_pagesizes变量中定义的 pagesize 启用每个挂载单元文件。
-
屏蔽默认的
可选:
/dev文件夹自动绑定到nova_compute和nova_libvirt容器。如果您已将不同的目的地用于巨页挂载,您可以将挂载传递给nova_compute和nova_libvirt容器:parameter_defaults: NovaComputeOptVolumes: - /opt/dev:/opt/dev NovaLibvirtOptVolumes: - /opt/dev:/opt/dev在 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'置备节点:
$ (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>替换为包含模板的目录的路径。 -
将
<stack> 替换为置备裸机节点的堆栈名称。如果未指定,则默认为overcloud。 -
将
<deployment_file> 替换为要生成的 heat 环境文件的名称,以包含在部署命令中。 -
将
<node_definition_file> 替换为节点定义文件的名称。
-
可选:包含--