3장. SR-IOV 이더넷 네트워크 연결 구성
클러스터에서 SR-IOV(Single Root I/O Virtualization) 장치에 대한 이더넷 네트워크 연결을 구성할 수 있습니다.
다음 문서의 작업을 수행하기 전에 SR-IOV 네트워크 운영자가 설치되어 있는지 확인하세요.
3.1. 이더넷 장치 구성 오브젝트 링크 복사링크가 클립보드에 복사되었습니다!
SriovNetwork 오브젝트를 정의하여 이더넷 네트워크 장치를 구성할 수 있습니다.
다음 YAML은 SriovNetwork 오브젝트를 설명합니다.
- 1
- 오브젝트의 이름입니다. SR-IOV Network Operator는 동일한 이름으로
NetworkAttachmentDefinition오브젝트를 생성합니다. - 2
- SR-IOV Network Operator가 설치된 네임스페이스입니다.
- 3
- 이 추가 네트워크에 대한 SR-IOV 하드웨어를 정의하는
SriovNetworkNodePolicy오브젝트의spec.resourceName매개변수 값입니다. - 4
SriovNetwork오브젝트의 대상 네임스페이스입니다. 대상 네임스페이스의 포드만 추가 네트워크에 연결할 수 있습니다.- 5
- 선택 사항: 추가 네트워크에 할당할 VLAN ID를 지정합니다. 기본값
0은 추가 네트워크에 VLAN ID 태그가 없음을 의미합니다. 지원되는 VLAN ID 값의 범위는1~4094입니다. - 6
- 선택사항: VF의 스푸핑 검사 모드입니다. 허용되는 값은 문자열
"on"및"off"입니다.중요SR-IOV Network Operator가 지정한 값을 따옴표로 묶거나 오브젝트를 거부해야 합니다.
- 7
- YAML 블록 스칼라인 IPAM CNI 플러그인에 대한 구성 오브젝트입니다. 플러그인은 연결 정의에 대한 IP 주소 할당을 관리합니다.
- 8
- 선택사항: VF(가상 기능)의 링크 상태입니다. 허용되는 값은
enable,disable및auto입니다. - 9
- 선택사항: VF의 경우 최대 전송 속도(Mbps)입니다.
- 10
- 선택사항: VF의 경우 최소 전송 속도(Mbps)입니다. 이 값은 최대 전송 속도보다 작거나 같아야 합니다.참고
인텔 NIC는
minTxRate매개변수를 지원하지 않습니다. 자세한 내용은 BZ#1772847에서 참조하십시오. - 11
- 선택사항: VF의 IEEE 802.1p 우선순위 수준입니다. 기본값은
0입니다. - 12
- 선택사항: VF의 신뢰 모드입니다. 허용되는 값은 문자열
"on"및"off"입니다.중요지정한 값을 따옴표로 묶어야 합니다. 그렇지 않으면 SR-IOV Network Operator에서 오브젝트를 거부합니다.
- 13
- 선택사항: 이 추가 네트워크에 구성할 수 있는 기능입니다.
"{"ips": true}"를 지정하여 IP 주소 지원을 활성화하거나"{"mac":true}"를 지정하여 MAC 주소 지원을 활성화할 수 있습니다.
3.1.1. 듀얼 스택 IP 주소를 동적으로 할당하기 위한 구성 생성 링크 복사링크가 클립보드에 복사되었습니다!
보조 네트워크에 듀얼 스택 IP 주소를 동적으로 할당하면 포드가 IPv4 및 IPv6 주소 모두를 통해 통신할 수 있습니다.
ipRanges 매개변수에서 다음 IP 주소 할당 유형을 구성할 수 있습니다.
- IPv4 주소
- IPv6 주소
- 다중 IP 주소 할당
프로세스
-
유형을whereabouts로 설정합니다. 다음 예와 같이
ipRanges를사용하여 IP 주소를 할당합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 보조 네트워크를 포드에 연결합니다. 자세한 내용은 "보조 네트워크에 포드 추가"를 참조하세요.
검증
다음 명령을 입력하여 Pod의 네트워크 네임스페이스 내 네트워크 인터페이스에 모든 IP 주소가 할당되었는지 확인하세요.
$ oc exec -it <pod_name> -- ip a
$ oc exec -it <pod_name> -- ip aCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음과 같습니다.
<podname>- Pod의 이름입니다.
3.1.2. 네트워크 연결을 위한 IP 주소 할당 구성 링크 복사링크가 클립보드에 복사되었습니다!
2차 네트워크의 경우 다양한 할당 방법(DHCP(동적 호스트 구성 프로토콜) 및 정적 할당 포함)을 지원하는 IP 주소 관리(IPAM) CNI 플러그인을 사용하여 IP 주소를 할당할 수 있습니다.
IP 주소의 동적 할당을 담당하는 DHCP IPAM CNI 플러그인은 두 가지 고유한 구성 요소로 작동합니다.
- CNI 플러그인: IP 주소를 요청하고 해제하기 위해 Kubernetes 네트워킹 스택과 통합하는 역할을 합니다.
- DHCP IPAM CNI 데몬: 환경 내 기존 DHCP 서버와 협력하여 IP 주소 할당 요청을 처리하는 DHCP 이벤트 리스너입니다. 이 데몬 자체는 DHCP 서버가 아닙니다.
IPAM 구성에서 dhcp 유형이 필요한 네트워크의 경우 DHCP 서버가 다음 조건을 충족하는지 확인하세요.
- DHCP 서버가 사용 가능하고 환경에서 실행 중입니다.
- DHCP 서버는 클러스터 외부에 있으며, 해당 서버가 고객을 위한 기존 네트워크 인프라의 일부를 형성할 것으로 예상합니다.
- DHCP 서버는 노드에 IP 주소를 제공하도록 적절하게 구성됩니다.
환경에서 DHCP 서버를 사용할 수 없는 경우 Whereabouts IPAM CNI 플러그인을 사용하는 것을 고려하세요. Whereabouts CNI는 외부 DHCP 서버가 필요 없이 유사한 IP 주소 관리 기능을 제공합니다.
외부 DHCP 서버가 없거나 정적 IP 주소 관리가 선호되는 경우 Whereabouts CNI 플러그인을 사용하세요. Whereabouts 플러그인에는 오래된 IP 주소 할당을 관리하는 조정자 데몬이 포함되어 있습니다.
DHCP IPAM CNI 데몬이라는 별도의 데몬을 포함하여 컨테이너의 수명 동안 DHCP 임대를 주기적으로 갱신합니다. DHCP IPAM CNI 데몬을 배포하려면 클러스터 네트워크 운영자(CNO) 구성을 변경하여 이 데몬이 보조 네트워크 설정의 일부로 배포되도록 합니다.
3.1.2.1. 고정 IP 주소 할당 구성 링크 복사링크가 클립보드에 복사되었습니다!
다음 JSON은 고정 IP 주소 할당 구성에 대해 설명합니다.
| 필드 | 유형 | 설명 |
|---|---|---|
|
|
|
IPAM 주소 유형. |
|
|
| 가상 인터페이스에 할당할 IP 주소를 지정하는 객체의 배열입니다. IPv4 및 IPv6 IP 주소가 모두 지원됩니다. |
|
|
| 포드 내부에서 구성할 경로를 지정하는 객체 배열입니다. |
|
|
| 선택 사항: DNS 구성을 지정하는 객체 배열입니다. |
주소 배열에는 다음 필드가 있는 객체가 필요합니다.
| 필드 | 유형 | 설명 |
|---|---|---|
|
|
|
지정하는 IP 주소 및 네트워크 접두사입니다. 예를 들어, |
|
|
| 송신 네트워크 트래픽을 라우팅할 기본 게이트웨이입니다. |
| 필드 | 유형 | 설명 |
|---|---|---|
|
|
|
CIDR 형식의 IP 주소 범위(예: |
|
|
| 네트워크 트래픽을 라우팅하는 게이트웨이. |
| 필드 | 유형 | 설명 |
|---|---|---|
|
|
| DNS 쿼리가 전송되는 하나 이상의 IP 주소 배열입니다. |
|
|
|
호스트 이름에 추가할 기본 도메인입니다. 예를 들어 도메인이 |
|
|
|
DNS 조회 쿼리 중에 규정되지 않은 호스트 이름(예: |
고정 IP 주소 할당 구성 예
3.1.2.2. 동적 IP 주소(DHCP) 할당 구성 링크 복사링크가 클립보드에 복사되었습니다!
포드는 생성될 때 원래의 DHCP 임대권을 얻습니다. 리스는 클러스터에서 실행되는 최소 DHCP 서버 배포를 통해 주기적으로 갱신되어야 합니다.
이더넷 네트워크 연결의 경우, SR-IOV 네트워크 운영자는 DHCP 서버 배포를 생성하지 않습니다. 클러스터 네트워크 운영자가 최소한의 DHCP 서버 배포를 생성해야 합니다.
DHCP 서버 배포를 트리거하려면 다음 예와 같이 Cluster Network Operator 구성을 편집하여 shim 네트워크 연결을 만들어야 합니다.
shim 네트워크 연결 정의 예
다음과 같습니다.
type- 클러스터에 대한 동적 IP 주소 할당을 지정합니다.
3.1.2.2.1. Whereabouts를 사용한 동적 IP 주소 할당 구성 링크 복사링크가 클립보드에 복사되었습니다!
Whereabouts CNI 플러그인은 DHCP 서버를 사용하지 않고 보조 네트워크에 IP 주소를 동적으로 할당하는 데 도움이 됩니다.
Whereabouts CNI 플러그인은 또한 중복되는 IP 주소 범위와 별도의 NetworkAttachmentDefinition CRD 내에서 동일한 CIDR 범위를 여러 번 구성하는 것을 지원합니다. 이를 통해 멀티테넌트 환경에서 더 큰 유연성과 관리 기능이 제공됩니다.
3.1.2.2.1.1. 동적 IP 주소 구성 매개변수 링크 복사링크가 클립보드에 복사되었습니다!
다음 표에서는 Whereabouts를 사용한 동적 IP 주소 할당을 위한 구성 개체를 설명합니다.
| 필드 | 유형 | 설명 |
|---|---|---|
|
|
|
IPAM 주소 유형. |
| 범위 |
| CIDR 표기법으로 나타낸 IP 주소와 범위입니다. IP 주소는 이 주소 범위 내에서 할당됩니다. |
|
|
| 선택 사항: CIDR 표기법으로 나타낸 0개 이상의 IP 주소 및 범위 목록입니다. 제외된 주소 범위 내의 IP 주소는 할당되지 않습니다. |
|
|
| 선택 사항: 동일한 IP 주소 범위를 공유하더라도 각 포드 그룹 또는 도메인이 고유한 IP 주소 세트를 갖도록 보장하는 데 도움이 됩니다. 이 필드를 설정하는 것은 네트워크를 분리하고 체계적으로 유지하는 데 중요하며, 특히 다중 테넌트 환경에서 중요합니다. |
3.1.2.2.1.2. IP 주소 범위를 제외한 Whereabouts를 사용한 동적 IP 주소 할당 구성 링크 복사링크가 클립보드에 복사되었습니다!
다음 예에서는 Whereabouts를 사용하는 NAD 파일의 동적 주소 할당 구성을 보여줍니다.
특정 IP 주소 범위를 제외하는 동적 IP 주소 할당 위치
3.1.2.2.1.3. IP 주소 범위가 겹치는 Whereabouts를 사용하는 동적 IP 주소 할당 링크 복사링크가 클립보드에 복사되었습니다!
다음 예에서는 다중 테넌트 네트워크에 대해 중복되는 IP 주소 범위를 사용하는 동적 IP 주소 할당을 보여줍니다.
NetworkAttachmentDefinition 1
다음과 같습니다.
network_name-
선택적 매개변수입니다. 설정된 경우
NetworkAttachmentDefinition 2의network_name과 일치해야 합니다.
NetworkAttachmentDefinition 2
다음과 같습니다.
network_name-
선택적 매개변수입니다. 설정된 경우
NetworkAttachmentDefinition 1의network_name과 일치해야 합니다.
3.1.2.3. SR-IOV 추가 네트워크 구성 링크 복사링크가 클립보드에 복사되었습니다!
SriovNetwork 오브젝트를 생성하여 SR-IOV 하드웨어를 사용하는 추가 네트워크를 구성할 수 있습니다. SriovNetwork 오브젝트를 생성하면 SR-IOV Operator에서 NetworkAttachmentDefinition 오브젝트를 자동으로 생성합니다.
SriovNetwork 오브젝트가 running 상태의 pod에 연결된 경우 해당 오브젝트를 수정하거나 삭제하지 마십시오.
사전 요구 사항
-
OpenShift CLI(
oc)를 설치합니다. -
cluster-admin권한이 있는 사용자로 로그인합니다.
프로세스
SriovNetwork오브젝트를 생성한 다음<name>.yaml파일에 YAML을 저장합니다. 여기서<name>은 이 추가 네트워크의 이름입니다. 오브젝트 사양은 다음 예와 유사할 수 있습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 오브젝트를 생성하려면 다음 명령을 입력합니다:
oc create -f <name>.yaml
$ oc create -f <name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 여기서
<name>은 추가 네트워크의 이름을 지정합니다.선택사항: 이전 단계에서 생성한
SriovNetwork오브젝트에 연결된NetworkAttachmentDefinition오브젝트가 존재하는지 확인하려면 다음 명령을 입력합니다.<namespace>를SriovNetwork오브젝트에 지정한 networkNamespace로 바꿉니다.oc get net-attach-def -n <namespace>
$ oc get net-attach-def -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.1.2.4. SR-IOV 네트워크를 VRF에 할당 링크 복사링크가 클립보드에 복사되었습니다!
클러스터 관리자는 CNI VRF 플러그인을 사용하여 SR-IOV 네트워크 인터페이스를 VRF 도메인에 할당할 수 있습니다.
이렇게 하려면 SriovNetwork 리소스의 선택적 metaPlugins 매개변수에 VRF 구성을 추가합니다.
VRF를 사용하는 애플리케이션은 특정 장치에 바인딩해야 합니다. 일반적인 사용은 소켓에 SO_BINDTODEVICE 옵션을 사용하는 것입니다. SO_BINDTODEVICE는 소켓을 전달된 인터페이스 이름(예: eth1)에 지정된 장치에 바인딩합니다. SO_BINDTODEVICE를 사용하려면 애플리케이션에 CAP_NET_RAW 기능이 있어야 합니다.
OpenShift Container Platform Pod에서는 ip vrf exec 명령을 통해 VRF를 사용할 수 없습니다. VRF를 사용하려면 애플리케이션을 VRF 인터페이스에 직접 바인딩합니다.
3.1.2.4.1. CNI VRF 플러그인으로 추가 SR-IOV 네트워크 연결 생성 링크 복사링크가 클립보드에 복사되었습니다!
SR-IOV Network Operator는 추가 네트워크 정의를 관리합니다. 생성할 추가 SR-IOV 네트워크를 지정하면 SR-IOV Network Operator가 NetworkAttachmentDefinition CR(사용자 정의 리소스)을 자동으로 생성합니다.
SR-IOV Network Operator가 관리하는 NetworkAttachmentDefinition 사용자 정의 리소스를 편집하지 마십시오. 편집하면 추가 네트워크의 네트워크 트래픽이 중단될 수 있습니다.
CNI 가상 라우팅 및 전달(VRF) 플러그인을 사용하여 추가 SR-IOV 네트워크 연결을 생성하려면 다음 절차를 수행하세요.
사전 요구 사항
-
OpenShift CLI(
oc)를 설치합니다. - cluster-admin 역할의 사용자로 OpenShift Container Platform 클러스터에 로그인합니다.
프로세스
추가 SR-IOV 네트워크 연결에 대한
SriovNetworkCR(사용자 정의 리소스)을 생성하고 다음 예제 CR과 같이metaPlugins구성을 삽입합니다. YAML을sriov-network-attachment.yaml파일로 저장합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음과 같습니다.
metaPlugins.type-
유형매개변수를vrf로 설정합니다. metaPlugins.vrfname-
vrfname매개변수에 VRF의 이름을 지정합니다. 인터페이스는 VRF에 할당됩니다. 포드에서 VRF에 대한 이름을 지정하지 않으면 SR-IOV 네트워크 운영자가 자동으로 VRF에 대한 이름을 생성합니다.
SriovNetwork리소스를 생성합니다.oc create -f sriov-network-attachment.yaml
$ oc create -f sriov-network-attachment.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
SR-IOV Network Operator가 다음 명령을 실행하여
NetworkAttachmentDefinitionCR을 생성했는지 확인합니다. 예상되는 출력에는 NAD CR의 이름과 생성 시간(분)이 표시됩니다.oc get network-attachment-definitions -n <namespace>
$ oc get network-attachment-definitions -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow <네임스페이스>:<네임스페이스>를네트워크 연결을 구성할 때 지정한 네임스페이스로 바꿉니다(예:additional-sriov-network-1).참고SR-IOV Network Operator가 CR을 생성하기 전에 지연이 발생할 수 있습니다.
VRF CNI가 올바르게 구성되어 추가 SR-IOV 네트워크 연결이 연결되었는지 확인하려면 다음을 수행하십시오.
- VRF CNI를 사용하는 SR-IOV 네트워크를 생성합니다.
- 포드에 네트워크를 할당합니다.
Pod 네트워크 연결이 SR-IOV 추가 네트워크에 연결되는지 확인합니다. 포드에 원격 셸 로그인을 하고 다음 명령을 실행하세요. 예상되는 출력에는 VRF 인터페이스의 이름과 라우팅 테이블에서의 고유 ID가 표시됩니다.
ip vrf show
$ ip vrf showCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 VRF 인터페이스가 보조 인터페이스의
마스터인지 확인합니다. 예제 출력은5를 보여줍니다: net1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master red state UP mode.ip link
$ ip linkCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.1.2.5. 이더넷 기반 SR-IOV 연결을 위한 런타임 구성 링크 복사링크가 클립보드에 복사되었습니다!
추가 네트워크에 pod를 연결할 때 런타임 구성을 지정하여 pod에 대한 특정 사용자 정의를 수행할 수 있습니다. 예를 들어 특정 MAC 하드웨어 주소를 요청할 수 있습니다.
Pod 사양에서 주석을 설정하여 런타임 구성을 지정합니다. 주석 키는 k8s.v1.cni.cncf.io/networks이며 런타임 구성을 설명하는 JSON 오브젝트를 허용합니다.
이더넷 기반 SR-IOV 네트워크 연결을 위한 런타임 구성 예
다음과 같습니다.
k8s.v1.cni.cncf.io/networks.name-
SR-IOV 네트워크 연결 정의 CR의 이름입니다. 예시 값은
ibl입니다. k8s.v1.cni.cncf.io/networks.mac-
선택적 매개변수입니다. SR-IOV 네트워크 연결 정의 CR에 정의된 리소스 유형에서 할당된 SR-IOV 장치의 MAC 주소입니다. 이 기능을 사용하려면
SriovNetwork오브젝트에{ "mac": true }도 지정해야 합니다. 예시 값은c2:11:22:33:44:55:66:77입니다. k8s.v1.cni.cncf.io/networks.ips-
선택적 매개변수입니다. SR-IOV 네트워크 연결 정의 CR에 정의된 리소스 유형에서 할당된 SR-IOV 장치의 IP 주소입니다. IPv4 및 IPv6 주소가 모두 지원됩니다. 이 기능을 사용하려면
SriovNetwork오브젝트에{ "ips": true }도 지정해야 합니다. 예시 값은192.168.10.1/24", "2001::1/64입니다.
3.1.2.6. 보조 네트워크에 포드 추가 링크 복사링크가 클립보드에 복사되었습니다!
보조 네트워크에 포드를 추가할 수 있습니다. Pod는 기본 네트워크를 통해 정상적인 클러스터 관련 네트워크 트래픽을 계속 전송합니다.
포드가 생성되면 보조 네트워크가 포드에 연결됩니다. 하지만 포드가 이미 존재하는 경우 보조 네트워크를 연결할 수 없습니다.
포드는 보조 네트워크와 동일한 네임스페이스에 있어야 합니다.
사전 요구 사항
-
OpenShift CLI(
oc)를 설치합니다. - 클러스터에 로그인합니다.
프로세스
Pod오브젝트에 주석을 추가합니다. 다음 주석 형식 중 하나만 사용할 수 있습니다.별도의 설정 없이 보조 네트워크를 연결하려면 다음 형식의 주석을 추가하십시오.
metadata: annotations: k8s.v1.cni.cncf.io/networks: <network>[,<network>,...]metadata: annotations: k8s.v1.cni.cncf.io/networks: <network>[,<network>,...]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음과 같습니다.
k8s.v1.cni.cncf.io/networks- Pod와 연결할 보조 네트워크의 이름을 지정합니다. 두 개 이상의 보조 네트워크를 지정하려면 각 네트워크를 쉼표로 구분하세요. 쉼표 사이에 공백을 포함하지 마십시오. 동일한 추가 네트워크를 여러 번 지정하면 Pod에 해당 네트워크에 대한 인터페이스가 여러 개 연결됩니다.
사용자 정의를 사용하여 보조 네트워크를 연결하려면 다음 형식으로 주석을 추가하세요.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음과 같습니다.
name-
NetworkAttachmentDefinition객체로 정의된 보조 네트워크의 이름을 지정합니다. 네임스페이스-
NetworkAttachmentDefinition객체가 정의된 네임스페이스를 지정합니다. default-route-
선택적 매개변수입니다.
192.168.17.1과 같은 기본 경로에 대한 재정의를 지정합니다.
다음 명령어를 입력하여 Pod를 생성하세요.
oc create -f <name>.yaml
$ oc create -f <name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow <name>을 Pod 이름으로 교체합니다.(선택 사항): 다음 명령어를 입력하여
podCR에 어노테이션이 존재하는지 확인하십시오.<name>을 Pod 이름으로 교체합니다.oc get pod <name> -o yaml
$ oc get pod <name> -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 예에서
example-pod포드는net1보조 네트워크에 연결됩니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음과 같습니다.
k8s.v1.cni.cncf.io/network-status- 객체로 구성된 JSON 배열을 지정합니다. 각 객체는 포드에 연결된 보조 네트워크의 상태를 설명합니다. 주석 값은 일반 텍스트 값으로 저장됩니다.
3.1.2.6.1. Pod에 vfio-pci SR-IOV 장치의 MTU 노출 링크 복사링크가 클립보드에 복사되었습니다!
추가 네트워크에 포드를 추가한 후 SR-IOV 네트워크에서 MTU를 사용할 수 있는지 확인할 수 있습니다.
프로세스
다음 명령을 실행하여 Pod 주석에 MTU가 포함되어 있는지 확인하세요.
oc describe pod example-pod
$ oc describe pod example-podCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 예에서는 샘플 출력을 보여줍니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 포드 내부의
/etc/podnetinfo/에서 MTU를 사용할 수 있는지 확인하세요.oc exec example-pod -n sriov-tests -- cat /etc/podnetinfo/annotations | grep mtu
$ oc exec example-pod -n sriov-tests -- cat /etc/podnetinfo/annotations | grep mtuCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 예에서는 샘플 출력을 보여줍니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.1.2.7. SR-IOV 네트워크 정책 업데이트 중 병렬 노드 드레이닝 구성 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 SR-IOV 네트워크 운영자는 정책이 변경되기 전에 노드에서 작업 부하를 제거합니다. 운영자는 재구성이 작업 부하에 영향을 미치지 않는지 확인하기 위해 한 번에 한 노드씩 이 작업을 수행합니다.
대규모 클러스터에서 노드를 순차적으로 비우는 작업은 시간이 많이 걸릴 수 있으며, 몇 시간 또는 며칠이 걸릴 수도 있습니다. 시간에 민감한 환경에서는 SriovNetworkPoolConfig 사용자 정의 리소스(CR)에서 병렬 노드 드레이닝을 활성화하여 SR-IOV 네트워크 구성을 더 빠르게 롤아웃할 수 있습니다.
병렬 드레이닝을 구성하려면 SriovNetworkPoolConfig CR을 사용하여 노드 풀을 만듭니다. 그런 다음 풀에 노드를 추가하고 운영자가 병렬로 비울 수 있는 풀의 최대 노드 수를 정의할 수 있습니다. 이 접근 방식을 사용하면 풀에 실행 중인 작업 부하를 처리할 수 있는 충분한 노드가 남아 있는지 확인하는 동시에 더 빠른 재구성을 위해 병렬 드레이닝을 활성화할 수 있습니다.
노드는 하나의 SR-IOV 네트워크 풀 구성에만 속할 수 있습니다. 노드가 풀에 속하지 않으면 해당 노드는 한 번에 하나의 노드만 비우도록 구성된 가상 기본 풀에 추가됩니다.
노드는 배수 과정 중에 다시 시작될 수 있습니다.
이 절차를 수행하려면 SR-IOV 리소스를 만든 다음 노드를 병렬로 비워야 합니다.
사전 요구 사항
-
OpenShift CLI(
oc)를 설치합니다. -
cluster-admin권한이 있는 사용자로 로그인합니다. - SR-IOV Network Operator 설치.
- 노드에는 SR-IOV를 지원하는 하드웨어가 있습니다.
프로세스
SriovNetworkPoolConfig리소스를 정의하는 YAML 파일을 만듭니다.sriov-nw-pool.yaml파일 예시Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음과 같습니다.
name-
SriovNetworkPoolConfig개체의 이름을 지정합니다. 네임스페이스- SR-IOV Network Operator가 설치된 네임스페이스입니다.
maxUnavailable- 업데이트 중에 풀에서 사용할 수 없는 노드에 대한 정수 또는 백분율 값을 지정합니다. 예를 들어, 노드가 10개이고 사용할 수 없는 최대 노드 수를 2로 설정하면 언제든지 병렬로 비울 수 있는 노드는 2개뿐이고, 작업 부하를 처리할 수 있는 노드는 8개 남습니다.
nodeSelector-
노드 선택기를 사용하여 풀을 추가할 노드를 지정합니다. 이 예제에서는
작업자역할이 있는 모든 노드를 풀에 추가합니다.
다음 명령을 실행하여
SriovNetworkPoolConfig리소스를 만듭니다.oc create -f sriov-nw-pool.yaml
$ oc create -f sriov-nw-pool.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
sriov-test네임스페이스를 만듭니다.oc create namespace sriov-test
$ oc create namespace sriov-testCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 예제 YAML 파일에서 보여준 것처럼
SriovNetworkNodePolicy리소스를 정의하는 YAML 파일을 만듭니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
SriovNetworkNodePolicy리소스를 만듭니다.oc create -f sriov-node-policy.yaml
$ oc create -f sriov-node-policy.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow SriovNetwork리소스를 정의하는 YAML 파일을 만듭니다.sriov-network.yaml파일 예시Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
SriovNetwork리소스를 만듭니다.oc create -f sriov-network.yaml
$ oc create -f sriov-network.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 생성한 노드 풀을 확인하세요.
oc get sriovNetworkpoolConfig -n openshift-sriov-network-operator
$ oc get sriovNetworkpoolConfig -n openshift-sriov-network-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 예상 출력에는 모든 노드에 대한
작업자역할이 포함된 노드 풀의 이름(예:pool-1)과 노드 풀의 수명(예:67s)이 초 단위로 표시됩니다.클러스터에서 작업 부하 감소를 트리거하기 위해
SriovNetworkNodePolicy리소스의 가상 함수 수를 업데이트합니다.oc patch SriovNetworkNodePolicy sriov-nic-1 -n openshift-sriov-network-operator --type merge -p '{"spec": {"numVfs": 4}}'$ oc patch SriovNetworkNodePolicy sriov-nic-1 -n openshift-sriov-network-operator --type merge -p '{"spec": {"numVfs": 4}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 대상 클러스터의 드레이닝 상태를 확인하세요.
oc get sriovNetworkNodeState -n openshift-sriov-network-operator
$ oc get sriovNetworkNodeState -n openshift-sriov-network-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
NAMESPACE NAME SYNC STATUS DESIRED SYNC STATE CURRENT SYNC STATE AGE openshift-sriov-network-operator worker-0 InProgress Drain_Required DrainComplete 3d10h openshift-sriov-network-operator worker-1 InProgress Drain_Required DrainComplete 3d10h
NAMESPACE NAME SYNC STATUS DESIRED SYNC STATE CURRENT SYNC STATE AGE openshift-sriov-network-operator worker-0 InProgress Drain_Required DrainComplete 3d10h openshift-sriov-network-operator worker-1 InProgress Drain_Required DrainComplete 3d10hCopy to Clipboard Copied! Toggle word wrap Toggle overflow 배수 프로세스가 완료되면
SYNC STATUS가Succeeded로 변경되고DESIRED SYNC STATE와CURRENT SYNC STATE값은IDLE로 돌아갑니다.
3.1.2.8. NUMA 인식 스케줄링을 위한 SR-IOV 네트워크 토폴로지 제외 링크 복사링크가 클립보드에 복사되었습니다!
SR-IOV 네트워크 리소스의 NUMA(Non-Uniform Memory Access) 노드를 토폴로지 관리자에게 광고하는 것을 제외하려면 SriovNetworkNodePolicy 사용자 지정 리소스에서 excludeTopology 사양을 구성할 수 있습니다. NUMA 인식 Pod 스케줄링 중에 더욱 유연한 SR-IOV 네트워크 배포를 위해 이 구성을 사용하세요.
사전 요구 사항
-
OpenShift CLI(
oc)가 설치되어 있습니다. -
CPU 관리자 정책을
static으로 구성했습니다. CPU 관리자에 대한 자세한 내용은 "추가 리소스" 섹션을 참조하십시오. -
토폴로지 관리자 정책을
single-numa-node로 구성했습니다. - SR-IOV Network Operator가 설치되어 있습니다.
프로세스
SriovNetworkNodePolicy CR을 생성합니다.
다음 YAML을
sriov-network-node-policy.yaml파일에 저장하고 YAML의 값을 사용자 환경에 맞게 바꿉니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고많은
SriovNetworkNodePolicy리소스가 동일한 SR-IOV 네트워크 리소스를 대상으로 하는 경우SriovNetworkNodePolicy리소스는excludeTopology사양과 동일한 값을 가져야 합니다. 그렇지 않으면 상충되는 정책은 거부됩니다.다음 명령을 실행하여
SriovNetworkNodePolicy리소스를 만듭니다. 성공적인 출력에는SriovNetworkNodePolicy리소스의 이름과생성상태가 나열됩니다.oc create -f sriov-network-node-policy.yaml
$ oc create -f sriov-network-node-policy.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
SriovNetworkCR을 만듭니다.다음 YAML을
sriov-network.yaml파일에 저장하고 YAML의 값을 사용자 환경과 일치하도록 바꿉니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
SriovNetwork리소스를 만듭니다. 성공적인 출력에는SriovNetwork리소스의 이름과생성상태가 나열됩니다.oc create -f sriov-network.yaml
$ oc create -f sriov-network.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
포드를 생성하고 이전 단계의 SR-IOV 네트워크 리소스를 할당합니다.
다음 YAML을
sriov-network-pod.yaml파일에 저장하고 YAML의 값을 사용자 환경에 맞게 바꿉니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 이는
SriovNetworkNodePolicy리소스를 사용하는SriovNetwork리소스의 이름입니다.
다음 명령을 실행하여 리소스를 생성합니다. 예상되는 출력에는
Pod리소스의 이름과생성상태가 표시됩니다.oc create -f sriov-network-pod.yaml
$ oc create -f sriov-network-pod.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
다음 명령을 실행하여 포드 상태를 확인합니다. 여기서
<pod_name>을포드 이름으로 바꿉니다.oc get pod <pod_name>
$ oc get pod <pod_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
NAME READY STATUS RESTARTS AGE test-deployment-sriov-76cbbf4756-k9v72 1/1 Running 0 45h
NAME READY STATUS RESTARTS AGE test-deployment-sriov-76cbbf4756-k9v72 1/1 Running 0 45hCopy to Clipboard Copied! Toggle word wrap Toggle overflow 대상 포드에서 디버그 세션을 열어 SR-IOV 네트워크 리소스가 메모리 및 CPU 리소스와 다른 노드에 배포되었는지 확인합니다.
다음 명령을 실행하여 포드로 디버그 세션을 엽니다. 여기서 <pod_name>을 대상 포드 이름으로 바꿉니다.
oc debug pod/<pod_name>
$ oc debug pod/<pod_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 디버그 쉘 내에서
/host를 root 디렉터리로 설정합니다. 디버그 Pod는 Pod 내의/host에 호스트의 root 파일 시스템을 마운트합니다. root 디렉토리를/host로 변경하면 호스트 파일 시스템에서 바이너리를 실행할 수 있습니다.chroot /host
$ chroot /hostCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 CPU 할당에 대한 정보를 확인하세요.
lscpu | grep NUMA
$ lscpu | grep NUMACopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
NUMA node(s): 2 NUMA node0 CPU(s): 0,2,4,6,8,10,12,14,16,18,... NUMA node1 CPU(s): 1,3,5,7,9,11,13,15,17,19,...
NUMA node(s): 2 NUMA node0 CPU(s): 0,2,4,6,8,10,12,14,16,18,... NUMA node1 CPU(s): 1,3,5,7,9,11,13,15,17,19,...Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat /proc/self/status | grep Cpus
$ cat /proc/self/status | grep CpusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Cpus_allowed: ffff Cpus_allowed_list: 1,3,5,7
Cpus_allowed: ffff Cpus_allowed_list: 1,3,5,7Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예상 출력은
NUMA노드(예:NUMA node1)에 할당된 CPU(1, 3, 5, 7)를 보여줍니다. SR-IOV 네트워크 리소스는NUMA node0과 같은 다른NUMA노드의 NIC를 사용할 수 있습니다.ffff16진수 값은 프로세스를 실행하는 CPU 코어를 나타냅니다.cat /sys/class/net/net1/device/numa_node
$ cat /sys/class/net/net1/device/numa_nodeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 예상 출력은
NUMA노드의 숫자(예:0)를 표시합니다.참고excludeTopology사양을True로 설정하면 필요한 리소스가 동일한 NUMA 노드에 존재할 수 있습니다.