9.2. NFV 워크로드에 RT-KVM 활성화
Red Hat Enterprise Linux 8.2 Real Time KVM(RT-KVM)을 쉽게 설치하고 구성할 수 있도록 Red Hat OpenStack Platform은 다음과 같은 기능을 제공합니다.
- 실시간 Red Hat Enterprise Linux를 프로비저닝하는 실시간 컴퓨팅 노드 역할.
- 추가 RT-KVM 커널 모듈.
- 컴퓨팅 노드의 자동 구성입니다.
9.2.1. RT-KVM 컴퓨팅 노드 계획
RT-KVM 컴퓨팅 노드에 Red Hat 인증 서버를 사용해야 합니다. 자세한 내용은 다음을 참조하십시오. Red Hat Enterprise Linux for Real Time 7 인증 서버.
RT-KVM용 rhel-8-server-nfv-rpms 리포지토리를 활성화하고 시스템이 최신 상태인지 확인하는 방법에 대한 자세한 내용은 다음을 참조하십시오. 언더클라우드 등록 및 업데이트.
이 리포지토리에 액세스하려면 별도의 Red Hat OpenStack Platform for Real Time SKU 서브스크립션이 필요합니다.
실시간 이미지 빌드
언더클라우드에 libguestfs-tools 패키지를 설치하여 virt-customize 툴을 가져옵니다.
(undercloud) [stack@undercloud-0 ~]$ sudo dnf install libguestfs-tools
중요언더클라우드에
libguestfs-tools패키지를 설치하는 경우iscsid.socket을 비활성화하여 언더클라우드의tripleo_iscsid서비스와 포트 충돌을 방지합니다.$ sudo systemctl disable --now iscsid.socket
이미지를 추출합니다.
(undercloud) [stack@undercloud-0 ~]$ tar -xf /usr/share/rhosp-director-images/overcloud-full.tar (undercloud) [stack@undercloud-0 ~]$ tar -xf /usr/share/rhosp-director-images/ironic-python-agent.tar
기본 이미지를 복사합니다.
(undercloud) [stack@undercloud-0 ~]$ cp overcloud-full.qcow2 overcloud-realtime-compute.qcow2
이미지를 등록하여 사용자 지정과 관련된 Red Hat 리포지토리를 활성화합니다.
[username]및[password]를 다음 예에서 유효한 자격 증명으로 바꿉니다.virt-customize -a overcloud-realtime-compute.qcow2 --run-command \ 'subscription-manager register --username=[username] --password=[password]' \ subscription-manager release --set 8.2
참고보안을 위해 명령 프롬프트에서 사용되는 경우 기록 파일에서 자격 증명을 제거할 수 있습니다.
history -d 명령 다음에 행 번호를 사용하여 기록에서개별 행을 삭제할 수 있습니다.계정 서브스크립션에서 풀 ID 목록을 찾아 해당 풀 ID를 이미지에 연결합니다.
sudo subscription-manager list --all --available | less ... virt-customize -a overcloud-realtime-compute.qcow2 --run-command \ 'subscription-manager attach --pool [pool-ID]'
NFV를 사용하여 Red Hat OpenStack Platform에 필요한 리포지토리를 추가합니다.
virt-customize -a overcloud-realtime-compute.qcow2 --run-command \ 'sudo subscription-manager repos --enable=rhel-8-for-x86_64-baseos-eus-rpms \ --enable=rhel-8-for-x86_64-appstream-eus-rpms \ --enable=rhel-8-for-x86_64-highavailability-eus-rpms \ --enable=ansible-2.9-for-rhel-8-x86_64-rpms \ --enable=openstack-16.1-for-rhel-8-x86_64-rpms \ --enable=rhel-8-for-x86_64-nfv-rpms \ --enable=advanced-virt-for-rhel-8-x86_64-rpms \ --enable=fast-datapath-for-rhel-8-x86_64-rpms'
스크립트를 생성하여 이미지에 실시간 기능을 구성합니다.
(undercloud) [stack@undercloud-0 ~]$ cat <<'EOF' > rt.sh #!/bin/bash set -eux dnf -v -y --setopt=protected_packages= erase kernel.$(uname -m) dnf -v -y install kernel-rt kernel-rt-kvm tuned-profiles-nfv-host grubby --set-default /boot/vmlinuz*rt* EOF
스크립트를 실행하여 실시간 이미지를 구성합니다.
(undercloud) [stack@undercloud-0 ~]$ virt-customize -a overcloud-realtime-compute.qcow2 -v --run rt.sh 2>&1 | tee virt-customize.log
참고rt.sh스크립트 출력에 다음 줄,"grubby fatal error: cannot find a suitable template"이라는 줄이 표시되면 이 오류를 무시할 수 있습니다.이전
명령에서 가져온 virt-customize.log파일을 검사하여rt.sh스크립트를 사용하여 패키지가 올바르게 설치되었는지 확인합니다.(undercloud) [stack@undercloud-0 ~]$ cat virt-customize.log | grep Verifying Verifying : kernel-3.10.0-957.el7.x86_64 1/1 Verifying : 10:qemu-kvm-tools-rhev-2.12.0-18.el7_6.1.x86_64 1/8 Verifying : tuned-profiles-realtime-2.10.0-6.el7_6.3.noarch 2/8 Verifying : linux-firmware-20180911-69.git85c5d90.el7.noarch 3/8 Verifying : tuned-profiles-nfv-host-2.10.0-6.el7_6.3.noarch 4/8 Verifying : kernel-rt-kvm-3.10.0-957.10.1.rt56.921.el7.x86_64 5/8 Verifying : tuna-0.13-6.el7.noarch 6/8 Verifying : kernel-rt-3.10.0-957.10.1.rt56.921.el7.x86_64 7/8 Verifying : rt-setup-2.0-6.el7.x86_64 8/8
SELinux 레이블을 다시 지정합니다.
(undercloud) [stack@undercloud-0 ~]$ virt-customize -a overcloud-realtime-compute.qcow2 --selinux-relabel
vmlinuz 및 initrd를 추출합니다.
(undercloud) [stack@undercloud-0 ~]$ mkdir image (undercloud) [stack@undercloud-0 ~]$ guestmount -a overcloud-realtime-compute.qcow2 -i --ro image (undercloud) [stack@undercloud-0 ~]$ cp image/boot/vmlinuz-3.10.0-862.rt56.804.el7.x86_64 ./overcloud-realtime-compute.vmlinuz (undercloud) [stack@undercloud-0 ~]$ cp image/boot/initramfs-3.10.0-862.rt56.804.el7.x86_64.img ./overcloud-realtime-compute.initrd (undercloud) [stack@undercloud-0 ~]$ guestunmount image
참고vmlinuz및initramfs파일 이름의 소프트웨어 버전은 커널 버전에 따라 다릅니다.이미지를 업로드합니다.
(undercloud) [stack@undercloud-0 ~]$ openstack overcloud image upload --update-existing --os-image-name overcloud-realtime-compute.qcow2
이제 선택한 컴퓨팅 노드에서 ComputeOvsDpdkRT 구성 가능 역할과 함께 사용할 수 있는 실시간 이미지가 있습니다.
RT-KVM 컴퓨팅 노드에서 BIOS 설정 수정
RT-KVM 컴퓨팅 노드의 대기 시간을 줄이려면 컴퓨팅 노드 BIOS 설정에서 다음 매개변수의 모든 옵션을 비활성화합니다.
- 전원 관리
- 하이퍼-스레딩
- CPU 절전 상태
- 논리 프로세서
이러한 설정에 대한 설명 및 비활성화에 미치는 영향은 BIOS 매개 변수 설정을 참조하십시오. BIOS 설정을 변경하는 방법에 대한 자세한 내용은 하드웨어 제조업체 설명서를 참조하십시오.
9.2.2. RT-KVM을 사용하여 OVS-DPDK 구성
OVS-DPDK에 대해 OpenStack 네트워크를 최적화하려면 network-environment.yaml 파일에 설정한 OVS- DPDK 매개변수에 가장 적합한 값을 결정해야 합니다. 자세한 내용은 8.1절. “워크플로우를 사용하여 DPDK 매개변수 비활성화” 의 내용을 참조하십시오.
9.2.2.1. ComputeOvsDpdk 구성 가능 역할 생성
ComputeOvsDpdkRT 역할을 사용하여 실시간 컴퓨팅 이미지의 Compute 노드를 지정합니다.
ComputeOvsDpdkRT 역할에 대한 roles_data.yaml 을 생성합니다.
# (undercloud) [stack@undercloud-0 ~]$ openstack overcloud roles generate -o roles_data.yaml Controller ComputeOvsDpdkRT
9.2.2.2. OVS-DPDK 매개변수 구성
배포를 최적화하기 위해 network- environment.yaml 파일에서 OVS- DPDK 매개 변수에 가장 적합한 값을 확인합니다. 자세한 내용은 8.1절. “워크플로우를 사용하여 DPDK 매개변수 비활성화”의 내용을 참조하십시오.
resource_registry에서 사용하는 OVS-DPDK 역할에 대한 NIC 구성을 추가합니다.resource_registry: # Specify the relative/absolute path to the config files you want to use for override the default. OS::TripleO::ComputeOvsDpdkRT::Net::SoftwareConfig: nic-configs/compute-ovs-dpdk.yaml OS::TripleO::Controller::Net::SoftwareConfig: nic-configs/controller.yaml
parameter_defaults에서 OVS-DPDK 및 RT-KVM 매개변수를 설정합니다.# DPDK compute node. ComputeOvsDpdkRTParameters: KernelArgs: "default_hugepagesz=1GB hugepagesz=1G hugepages=32 iommu=pt intel_iommu=on isolcpus=1-7,17-23,9-15,25-31" TunedProfileName: "realtime-virtual-host" IsolCpusList: "1,2,3,4,5,6,7,9,10,17,18,19,20,21,22,23,11,12,13,14,15,25,26,27,28,29,30,31" NovaComputeCpuDedicatedSet: ['2,3,4,5,6,7,18,19,20,21,22,23,10,11,12,13,14,15,26,27,28,29,30,31'] NovaReservedHostMemory: 4096 OvsDpdkSocketMemory: "1024,1024" OvsDpdkMemoryChannels: "4" OvsPmdCoreList: "1,17,9,25" VhostuserSocketGroup: "hugetlbfs" ComputeOvsDpdkRTImage: "overcloud-realtime-compute"
9.2.2.3. 오버클라우드 배포
ML2-OVS의 오버클라우드를 배포합니다.
(undercloud) [stack@undercloud-0 ~]$ openstack overcloud deploy \ --templates \ -r /home/stack/ospd-16-vlan-dpdk-ctlplane-bonding-rt/roles_data.yaml \ -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml \ -e /usr/share/openstack-tripleo-heat-templates/environments/services/neutron-ovs.yaml \ -e /usr/share/openstack-tripleo-heat-templates/environments/services/neutron-ovs-dpdk.yaml \ -e /home/stack/ospd-16-vxlan-dpdk-data-bonding-rt-hybrid/containers-prepare-parameter.yaml \ -e /home/stack/ospd-16-vxlan-dpdk-data-bonding-rt-hybrid/network-environment.yaml
9.2.3. RT-KVM 인스턴스 시작
실시간 활성화된 컴퓨팅 노드에서 RT-KVM 인스턴스를 시작하려면 다음 단계를 수행합니다.
오버클라우드에 RT-KVM 플레이버를 생성합니다.
# openstack flavor create r1.small 99 4096 20 4 # openstack flavor set --property hw:cpu_policy=dedicated 99 # openstack flavor set --property hw:cpu_realtime=yes 99 # openstack flavor set --property hw:mem_page_size=1GB 99 # openstack flavor set --property hw:cpu_realtime_mask="^0-1" 99 # openstack flavor set --property hw:cpu_emulator_threads=isolate 99
RT-KVM 인스턴스를 시작합니다.
# openstack server create --image <rhel> --flavor r1.small --nic net-id=<dpdk-net> test-rt
인스턴스에서 할당된 에뮬레이터 스레드를 사용하는지 확인하려면 다음 명령을 실행합니다.
# virsh dumpxml <instance-id> | grep vcpu -A1 <vcpu placement='static'>4</vcpu> <cputune> <vcpupin vcpu='0' cpuset='1'/> <vcpupin vcpu='1' cpuset='3'/> <vcpupin vcpu='2' cpuset='5'/> <vcpupin vcpu='3' cpuset='7'/> <emulatorpin cpuset='0-1'/> <vcpusched vcpus='2-3' scheduler='fifo' priority='1'/> </cputune>