19.6. SR-IOV 네트워크의 인터페이스 수준 네트워크 sysctl 설정 및 모든 멀티 캐스트 모드 구성
클러스터 관리자는 SR-IOV 네트워크 장치에 연결된 Pod에 대한 CNI(Container Network Interface) 메타 플러그인을 사용하여 인터페이스 수준 네트워크 sysctl 및 무차별 모드, all-multicast 모드, MTU 및 MAC 주소와 같은 여러 인터페이스 속성을 변경할 수 있습니다.
다음 문서에서 작업을 수행하기 전에 SR-IOV Network Operator를 설치 했는지 확인합니다.
19.6.1. SR-IOV가 활성화된 NIC를 사용하여 노드에 레이블 지정
SR-IOV 가능 노드에서만 SR-IOV를 활성화하려면 이 작업을 수행하는 몇 가지 방법이 있습니다.
-
NFD(Node Feature Discovery) Operator를 설치합니다. NFD는 SR-IOV가 활성화된 NIC의 존재를 감지하고
node.alpha.kubernetes-incubator.io/nfd-network-sriov.enabled = true
로 노드에 레이블을 지정합니다. 각 노드에 대해
SriovNetworkNodeState
CR을 검사합니다.interfaces
스탠자에는 작업자 노드에서 SR-IOV Network Operator가 검색한 모든 SR-IOV 장치 목록이 포함됩니다. 다음 명령을 사용하여 각 노드에feature.node.kubernetes.io/network-sriov.able: "true"
로 레이블을 지정합니다.$ oc label node <node_name> feature.node.kubernetes.io/network-sriov.capable="true"
참고원하는 이름으로 노드에 레이블을 지정할 수 있습니다.
19.6.2. sysctl 플래그 1개 설정
SR-IOV 네트워크 장치에 연결된 Pod의 인터페이스 수준 네트워크 sysctl
설정을 설정할 수 있습니다.
이 예에서는 생성된 가상 인터페이스에서 net.ipv4.conf.IFNAME.accept_redirects
가 1
로 설정됩니다.
sysctl-tuning-test
는 이 예제에서 사용되는 네임스페이스입니다.
다음 명령을 사용하여
sysctl-tuning-test
네임스페이스를 생성합니다.$ oc create namespace sysctl-tuning-test
19.6.2.1. SR-IOV 네트워크 장치를 사용하여 노드에서 하나의 sysctl 플래그 설정
SR-IOV Network Operator는 SriovNetworkNodePolicy.sriovnetwork.openshift.io
CRD(사용자 정의 리소스 정의)를 OpenShift Container Platform에 추가합니다. SriovNetworkNodePolicy
CR(사용자 정의 리소스)을 생성하여 SR-IOV 네트워크 장치를 구성할 수 있습니다.
SriovNetworkNodePolicy
오브젝트에 지정된 구성을 적용하면 SR-IOV Operator가 노드를 비우고 재부팅할 수 있습니다.
구성 변경 사항을 적용하는 데 몇 분이 걸릴 수 있습니다.
SriovNetworkNodePolicy
CR(사용자 정의 리소스)을 생성하려면 다음 절차를 따르십시오.
프로세스
SriovNetworkNodePolicy
CR(사용자 정의 리소스)을 생성합니다. 예를 들어 다음 YAML을policyoneflag-sriov-node-network.yaml
파일로 저장합니다.apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: policyoneflag 1 namespace: openshift-sriov-network-operator 2 spec: resourceName: policyoneflag 3 nodeSelector: 4 feature.node.kubernetes.io/network-sriov.capable="true" priority: 10 5 numVfs: 5 6 nicSelector: 7 pfNames: ["ens5"] 8 deviceType: "netdevice" 9 isRdma: false 10
- 1
- 사용자 정의 리소스 오브젝트의 이름입니다.
- 2
- SR-IOV Network Operator가 설치된 네임스페이스입니다.
- 3
- SR-IOV 네트워크 장치 플러그인의 리소스 이름입니다. 리소스 이름에 대한 SR-IOV 네트워크 노드 정책을 여러 개 생성할 수 있습니다.
- 4
- 노드 선택기는 구성할 노드를 지정합니다. 선택한 노드의 SR-IOV 네트워크 장치만 구성됩니다. SR-IOV CNI(Container Network Interface) 플러그인 및 장치 플러그인은 선택한 노드에만 배포됩니다.
- 5
- 선택 사항: 우선순위는
0
에서99
사이의 정수 값입니다. 작은 값은 우선순위가 높습니다. 예를 들어 우선순위10
은 우선순위99
보다 높습니다. 기본값은99
입니다. - 6
- SR-IOV 물리적 네트워크 장치에 생성할 VF(가상 기능) 수입니다. Intel NIC(Network Interface Controller)의 경우 VF 수는 장치에서 지원하는 총 VF보다 클 수 없습니다. Mellanox NIC의 경우 VF 수는
127
보다 클 수 없습니다. - 7
- NIC 선택기는 Operator가 구성할 장치를 식별합니다. 모든 매개변수에 값을 지정할 필요는 없습니다. 실수로 장치를 선택하지 않도록 네트워크 장치를 정확하게 파악하는 것이 좋습니다.
rootDevices
를 지정하면vendor
,deviceID
또는pfNames
의 값도 지정해야 합니다.pfNames
와rootDevices
를 동시에 지정하는 경우 동일한 장치를 참조하는지 확인하십시오.netFilter
의 값을 지정하는 경우 네트워크 ID가 고유하므로 다른 매개변수를 지정할 필요가 없습니다. - 8
- 선택사항: 장치에 대해 하나 이상의 물리적 기능(PF) 이름으로 구성된 배열입니다.
- 9
- 선택사항: 가상 기능의 드라이버 유형입니다. 허용되는 값은
netdevice
입니다. 베어 메탈 노드의 DPDK 모드에서 Mellanox NIC가 작동하려면isRdma
를true
로 설정합니다. - 10
- 선택 사항: 원격 직접 메모리 액세스(RDMA) 모드를 활성화할지 여부를 구성합니다. 기본값은
false
입니다.isRdma
매개변수가true
로 설정된 경우 RDMA 사용 VF를 일반 네트워크 장치로 계속 사용할 수 있습니다. 어느 모드에서나 장치를 사용할 수 있습니다.isRdma
를true
로 설정하고 추가로needVhostNet
을true
로 설정하여 Fast Datapath DPDK 애플리케이션에서 사용할 Mellanox NIC를 구성합니다.
참고vfio-pci
드라이버 유형은 지원되지 않습니다.SriovNetworkNodePolicy
오브젝트를 생성합니다.$ oc create -f policyoneflag-sriov-node-network.yaml
구성 업데이트를 적용하면
sriov-network-operator
네임스페이스의 모든 Pod가Running
상태로 변경됩니다.SR-IOV 네트워크 장치가 구성되어 있는지 확인하려면 다음 명령을 입력합니다.
<node_name>
을 방금 구성한 SR-IOV 네트워크 장치가 있는 노드 이름으로 바꿉니다.$ oc get sriovnetworknodestates -n openshift-sriov-network-operator <node_name> -o jsonpath='{.status.syncStatus}'
출력 예
Succeeded
19.6.2.2. SR-IOV 네트워크에서 sysctl 구성
SriovNetwork
리소스의 선택적 metaPlugins
매개변수에 튜닝 구성을 추가하여 SR-IOV에서 생성된 가상 인터페이스에 인터페이스별 sysctl
설정을 설정할 수 있습니다.
SR-IOV Network Operator는 추가 네트워크 정의를 관리합니다. 생성할 추가 SR-IOV 네트워크를 지정하면 SR-IOV Network Operator가 NetworkAttachmentDefinition
CR(사용자 정의 리소스)을 자동으로 생성합니다.
SR-IOV Network Operator가 관리하는 NetworkAttachmentDefinition
사용자 정의 리소스를 편집하지 마십시오. 편집하면 추가 네트워크의 네트워크 트래픽이 중단될 수 있습니다.
인터페이스 수준 네트워크 net.ipv4.conf.IFNAME.accept_redirects
sysctl
설정을 변경하려면 CNI(Container Network Interface) 튜닝 플러그인을 사용하여 추가 SR-IOV 네트워크를 생성합니다.
사전 요구 사항
- OpenShift Container Platform CLI, oc를 설치합니다.
- cluster-admin 역할의 사용자로 OpenShift Container Platform 클러스터에 로그인합니다.
프로세스
추가 SR-IOV 네트워크 연결에 대한
SriovNetwork
CR(사용자 정의 리소스)을 생성하고 다음 예제 CR과 같이metaPlugins
구성을 삽입합니다. YAML을sriov-network-interface-sysctl.yaml
파일로 저장합니다.apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetwork metadata: name: onevalidflag 1 namespace: openshift-sriov-network-operator 2 spec: resourceName: policyoneflag 3 networkNamespace: sysctl-tuning-test 4 ipam: '{ "type": "static" }' 5 capabilities: '{ "mac": true, "ips": true }' 6 metaPlugins : | 7 { "type": "tuning", "capabilities":{ "mac":true }, "sysctl":{ "net.ipv4.conf.IFNAME.accept_redirects": "1" } }
- 1
- 오브젝트의 이름입니다. SR-IOV Network Operator는 동일한 이름으로 NetworkAttachmentDefinition 오브젝트를 생성합니다.
- 2
- SR-IOV Network Operator가 설치된 네임스페이스입니다.
- 3
- 이 추가 네트워크에 대한 SR-IOV 하드웨어를 정의하는
SriovNetworkNodePolicy
오브젝트의spec.resourceName
매개변수 값입니다. - 4
SriovNetwork
오브젝트의 대상 네임스페이스입니다. 대상 네임스페이스의 포드만 추가 네트워크에 연결할 수 있습니다.- 5
- YAML 블록 스칼라로서의 IPAM CNI 플러그인의 구성 오브젝트입니다. 플러그인은 연결 정의에 대한 IP 주소 할당을 관리합니다.
- 6
- 선택 사항: 추가 네트워크에 대한 기능을 설정합니다.
"{"ips": true}"
를 지정하여 IP 주소 지원을 활성화하거나"{"mac":true}"
를 지정하여 MAC 주소 지원을 활성화할 수 있습니다. - 7
- 선택 사항: metaPlugins 매개변수는 장치에 기능을 추가하는 데 사용됩니다. 이 사용 사례에서
type
필드를튜닝
으로 설정합니다. sysctl 필드에 설정할 인터페이스 수준 네트워크sysctl
SriovNetwork
리소스를 생성합니다.$ oc create -f sriov-network-interface-sysctl.yaml
NetworkAttachmentDefinition
CR이 성공적으로 생성되었는지 확인
SR-IOV Network Operator가 다음 명령을 실행하여
NetworkAttachmentDefinition
CR을 생성했는지 확인합니다.$ oc get network-attachment-definitions -n <namespace> 1
- 1
- &
lt;namespace
>를SriovNetwork
오브젝트에 지정한networkNamespace
값으로 바꿉니다. 예를 들면sysctl-tuning-test
입니다.
출력 예
NAME AGE onevalidflag 14m
참고SR-IOV Network Operator가 CR을 생성하기 전에 지연이 발생할 수 있습니다.
추가 SR-IOV 네트워크 연결에 성공했는지 확인
튜닝 CNI가 올바르게 구성되어 추가 SR-IOV 네트워크 연결이 연결되었는지 확인하려면 다음을 수행하십시오.
Pod
CR을 생성합니다. 다음 YAML을examplepod.yaml
파일로 저장합니다.apiVersion: v1 kind: Pod metadata: name: tunepod namespace: sysctl-tuning-test annotations: k8s.v1.cni.cncf.io/networks: |- [ { "name": "onevalidflag", 1 "mac": "0a:56:0a:83:04:0c", 2 "ips": ["10.100.100.200/24"] 3 } ] spec: containers: - name: podexample image: centos command: ["/bin/bash", "-c", "sleep INF"] securityContext: runAsUser: 2000 runAsGroup: 3000 allowPrivilegeEscalation: false capabilities: drop: ["ALL"] securityContext: runAsNonRoot: true seccompProfile: type: RuntimeDefault
- 1
- SR-IOV 네트워크 연결 정의 CR의 이름입니다.
- 2
- 선택사항: SR-IOV 네트워크 연결 정의 CR에 정의된 리소스 유형에서 할당된 SR-IOV 장치의 MAC 주소입니다. 이 기능을 사용하려면 SriovNetwork 오브젝트에
{ "mac": true }
도 지정해야 합니다. - 3
- 선택사항: SR-IOV 네트워크 연결 정의 CR에 정의된 리소스 유형에서 할당된 SR-IOV 장치의 IP 주소입니다. IPv4 및 IPv6 주소가 모두 지원됩니다. 이 기능을 사용하려면
SriovNetwork
오브젝트에{ "ips": true }
도 지정해야 합니다.
Pod
CR을 생성합니다.$ oc apply -f examplepod.yaml
다음 명령을 실행하여 Pod가 생성되었는지 확인합니다.
$ oc get pod -n sysctl-tuning-test
출력 예
NAME READY STATUS RESTARTS AGE tunepod 1/1 Running 0 47s
다음 명령을 실행하여 Pod에 로그인합니다.
$ oc rsh -n sysctl-tuning-test tunepod
구성된 sysctl 플래그의 값을 확인합니다. 다음 명령을 실행하여
net.ipv4.conf.IFNAME.accept_redirects
값을 찾습니다.$ sysctl net.ipv4.conf.net1.accept_redirects
출력 예
net.ipv4.conf.net1.accept_redirects = 1
19.6.3. 본딩된 SR-IOV 인터페이스 플래그와 연결된 Pod의 sysctl 설정 구성
본딩된 SR-IOV 네트워크 장치에 연결된 Pod의 인터페이스 수준 네트워크 sysctl
설정을 설정할 수 있습니다.
이 예제에서 구성할 수 있는 특정 네트워크 인터페이스 수준 sysctl
설정은 본딩된 인터페이스에 설정됩니다.
sysctl-tuning-test
는 이 예제에서 사용되는 네임스페이스입니다.
다음 명령을 사용하여
sysctl-tuning-test
네임스페이스를 생성합니다.$ oc create namespace sysctl-tuning-test
19.6.3.1. 본딩된 SR-IOV 네트워크 장치를 사용하여 노드에서 모든 sysctl 플래그 설정
SR-IOV Network Operator는 SriovNetworkNodePolicy.sriovnetwork.openshift.io
CRD(사용자 정의 리소스 정의)를 OpenShift Container Platform에 추가합니다. SriovNetworkNodePolicy
CR(사용자 정의 리소스)을 생성하여 SR-IOV 네트워크 장치를 구성할 수 있습니다.
SriovNetworkNodePolicy 오브젝트에 지정된 구성을 적용하면 SR-IOV Operator에서 노드를 비우고 경우에 따라 노드를 재부팅할 수 있습니다.
구성 변경 사항을 적용하는 데 몇 분이 걸릴 수 있습니다.
SriovNetworkNodePolicy
CR(사용자 정의 리소스)을 생성하려면 다음 절차를 따르십시오.
프로세스
SriovNetworkNodePolicy
CR(사용자 정의 리소스)을 생성합니다. 다음 YAML을policyallflags-sriov-node-network.yaml
로 저장합니다.policyallflags
를 구성 이름으로 교체합니다.apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: policyallflags 1 namespace: openshift-sriov-network-operator 2 spec: resourceName: policyallflags 3 nodeSelector: 4 node.alpha.kubernetes-incubator.io/nfd-network-sriov.capable = `true` priority: 10 5 numVfs: 5 6 nicSelector: 7 pfNames: ["ens1f0"] 8 deviceType: "netdevice" 9 isRdma: false 10
- 1
- 사용자 정의 리소스 오브젝트의 이름입니다.
- 2
- SR-IOV Network Operator가 설치된 네임스페이스입니다.
- 3
- SR-IOV 네트워크 장치 플러그인의 리소스 이름입니다. 리소스 이름에 대한 SR-IOV 네트워크 노드 정책을 여러 개 생성할 수 있습니다.
- 4
- 노드 선택기는 구성할 노드를 지정합니다. 선택한 노드의 SR-IOV 네트워크 장치만 구성됩니다. SR-IOV CNI(Container Network Interface) 플러그인 및 장치 플러그인은 선택한 노드에만 배포됩니다.
- 5
- 선택 사항: 우선순위는
0
에서99
사이의 정수 값입니다. 작은 값은 우선순위가 높습니다. 예를 들어 우선순위10
은 우선순위99
보다 높습니다. 기본값은99
입니다. - 6
- SR-IOV 물리적 네트워크 장치에 생성할 VF(가상 기능) 수입니다. Intel NIC(Network Interface Controller)의 경우 VF 수는 장치에서 지원하는 총 VF보다 클 수 없습니다. Mellanox NIC의 경우 VF 수는
127
보다 클 수 없습니다. - 7
- NIC 선택기는 Operator가 구성할 장치를 식별합니다. 모든 매개변수에 값을 지정할 필요는 없습니다. 실수로 장치를 선택하지 않도록 네트워크 장치를 정확하게 파악하는 것이 좋습니다.
rootDevices
를 지정하면vendor
,deviceID
또는pfNames
의 값도 지정해야 합니다.pfNames
와rootDevices
를 동시에 지정하는 경우 동일한 장치를 참조하는지 확인하십시오.netFilter
의 값을 지정하는 경우 네트워크 ID가 고유하므로 다른 매개변수를 지정할 필요가 없습니다. - 8
- 선택사항: 장치에 대해 하나 이상의 물리적 기능(PF) 이름으로 구성된 배열입니다.
- 9
- 선택사항: 가상 기능의 드라이버 유형입니다. 허용되는 값은
netdevice
입니다. 베어 메탈 노드의 DPDK 모드에서 Mellanox NIC가 작동하려면isRdma
를true
로 설정합니다. - 10
- 선택 사항: 원격 직접 메모리 액세스(RDMA) 모드를 활성화할지 여부를 구성합니다. 기본값은
false
입니다.isRdma
매개변수가true
로 설정된 경우 RDMA 사용 VF를 일반 네트워크 장치로 계속 사용할 수 있습니다. 어느 모드에서나 장치를 사용할 수 있습니다.isRdma
를true
로 설정하고 추가로needVhostNet
을true
로 설정하여 Fast Datapath DPDK 애플리케이션에서 사용할 Mellanox NIC를 구성합니다.
참고vfio-pci
드라이버 유형은 지원되지 않습니다.SriovNetworkNodePolicy 오브젝트를 생성합니다.
$ oc create -f policyallflags-sriov-node-network.yaml
구성 업데이트를 적용하면 sriov-network-operator 네임스페이스의 모든 Pod가
Running
상태로 변경됩니다.SR-IOV 네트워크 장치가 구성되어 있는지 확인하려면 다음 명령을 입력합니다.
<node_name>
을 방금 구성한 SR-IOV 네트워크 장치가 있는 노드 이름으로 바꿉니다.$ oc get sriovnetworknodestates -n openshift-sriov-network-operator <node_name> -o jsonpath='{.status.syncStatus}'
출력 예
Succeeded
19.6.3.2. 결합된 SR-IOV 네트워크에서 sysctl 구성
두 SR-IOV 인터페이스에서 생성된 본딩된 인터페이스에서 인터페이스별 sysctl
설정을 설정할 수 있습니다. 본딩 네트워크 연결 정의의 선택적 Plugins
매개변수에 튜닝 구성을 추가하여 이 작업을 수행합니다.
SR-IOV Network Operator가 관리하는 NetworkAttachmentDefinition
사용자 정의 리소스를 편집하지 마십시오. 편집하면 추가 네트워크의 네트워크 트래픽이 중단될 수 있습니다.
특정 인터페이스 수준 네트워크 sysctl
설정을 변경하려면 다음 절차를 사용하여 컨테이너 네트워크 인터페이스(CNI) 튜닝 플러그인으로 SriovNetwork
CR(사용자 정의 리소스)을 생성합니다.
사전 요구 사항
- OpenShift Container Platform CLI, oc를 설치합니다.
- cluster-admin 역할의 사용자로 OpenShift Container Platform 클러스터에 로그인합니다.
프로세스
다음 예제 CR과 같이 본딩된 인터페이스에 대한
SriovNetwork
CR(사용자 정의 리소스)을 생성합니다. YAML을sriov-network-attachment.yaml
파일로 저장합니다.apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetwork metadata: name: allvalidflags 1 namespace: openshift-sriov-network-operator 2 spec: resourceName: policyallflags 3 networkNamespace: sysctl-tuning-test 4 capabilities: '{ "mac": true, "ips": true }' 5
- 1
- 오브젝트의 이름입니다. SR-IOV Network Operator는 동일한 이름으로 NetworkAttachmentDefinition 오브젝트를 생성합니다.
- 2
- SR-IOV Network Operator가 설치된 네임스페이스입니다.
- 3
- 이 추가 네트워크에 대한 SR-IOV 하드웨어를 정의하는
SriovNetworkNodePolicy
오브젝트의spec.resourceName
매개변수 값입니다. - 4
SriovNetwork
오브젝트의 대상 네임스페이스입니다. 대상 네임스페이스의 포드만 추가 네트워크에 연결할 수 있습니다.- 5
- 선택사항: 이 추가 네트워크에 구성할 수 있는 기능입니다.
"{"ips": true}"
를 지정하여 IP 주소 지원을 활성화하거나"{"mac":true}"
를 지정하여 MAC 주소 지원을 활성화할 수 있습니다.
SriovNetwork
리소스를 생성합니다.$ oc create -f sriov-network-attachment.yaml
다음 예제 CR과 같이 본딩 네트워크 연결 정의를 생성합니다. YAML을
sriov-bond-network-interface.yaml
파일로 저장합니다.apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: bond-sysctl-network namespace: sysctl-tuning-test spec: config: '{ "cniVersion":"0.4.0", "name":"bound-net", "plugins":[ { "type":"bond", 1 "mode": "active-backup", 2 "failOverMac": 1, 3 "linksInContainer": true, 4 "miimon": "100", "links": [ 5 {"name": "net1"}, {"name": "net2"} ], "ipam":{ 6 "type":"static" } }, { "type":"tuning", 7 "capabilities":{ "mac":true }, "sysctl":{ "net.ipv4.conf.IFNAME.accept_redirects": "0", "net.ipv4.conf.IFNAME.accept_source_route": "0", "net.ipv4.conf.IFNAME.disable_policy": "1", "net.ipv4.conf.IFNAME.secure_redirects": "0", "net.ipv4.conf.IFNAME.send_redirects": "0", "net.ipv6.conf.IFNAME.accept_redirects": "0", "net.ipv6.conf.IFNAME.accept_source_route": "1", "net.ipv6.neigh.IFNAME.base_reachable_time_ms": "20000", "net.ipv6.neigh.IFNAME.retrans_time_ms": "2000" } } ] }'
- 1
- 유형은
본딩
입니다. - 2
mode
속성은 본딩 모드를 지정합니다. 지원되는 본딩 모드는 다음과 같습니다.-
balance-rr
- 0 -
active-backup
- 1 balance-xor
- 2balance-rr
또는balance-xor
모드의 경우 SR-IOV 가상 기능에 대해신뢰
모드를on
으로 설정해야 합니다.
-
- 3
- active-backup 모드에서는
페일오버
속성이 필요합니다. - 4
linksInContainer=true
플래그는 Bond CNI에 컨테이너 내에서 필요한 인터페이스를 찾을 수 있음을 알립니다. 기본적으로 Bond CNI는 SRIOV 및 Multus와의 통합에 작동하지 않는 호스트에서 이러한 인터페이스를 찾습니다.- 5
links
섹션에서는 본딩을 만드는 데 사용할 인터페이스를 정의합니다. 기본적으로 Multus는 연결된 인터페이스의 이름을 "net" 및 연속 번호(한 개부터 시작하여)로 지정합니다.- 6
- YAML 블록 스칼라로서의 IPAM CNI 플러그인의 구성 오브젝트입니다. 플러그인은 연결 정의에 대한 IP 주소 할당을 관리합니다. 이 Pod 예제 IP 주소는 수동으로 구성되므로 이 경우
ipam
은 static으로 설정됩니다. - 7
- 장치에 기능을 추가합니다. 예를 들어
type
필드를튜닝
으로 설정합니다. sysctl 필드에 설정할 인터페이스 수준 네트워크sysctl
을 지정합니다. 이 예제에서는 설정할 수 있는 모든 인터페이스 수준 네트워크sysctl
설정을 설정합니다.
본딩 네트워크 연결 리소스를 생성합니다.
$ oc create -f sriov-bond-network-interface.yaml
NetworkAttachmentDefinition
CR이 성공적으로 생성되었는지 확인
SR-IOV Network Operator가 다음 명령을 실행하여
NetworkAttachmentDefinition
CR을 생성했는지 확인합니다.$ oc get network-attachment-definitions -n <namespace> 1
- 1
- &
lt;namespace
>를 네트워크 연결을 구성할 때 지정한 networkNamespace로 바꿉니다(예:sysctl-tuning-test
).
출력 예
NAME AGE bond-sysctl-network 22m allvalidflags 47m
참고SR-IOV Network Operator가 CR을 생성하기 전에 지연이 발생할 수 있습니다.
추가 SR-IOV 네트워크 리소스에 성공했는지 확인
튜닝 CNI가 올바르게 구성되어 추가 SR-IOV 네트워크 연결이 연결되었는지 확인하려면 다음을 수행하십시오.
Pod
CR을 생성합니다. 예를 들어 다음 YAML을examplepod.yaml
파일로 저장합니다.apiVersion: v1 kind: Pod metadata: name: tunepod namespace: sysctl-tuning-test annotations: k8s.v1.cni.cncf.io/networks: |- [ {"name": "allvalidflags"}, 1 {"name": "allvalidflags"}, { "name": "bond-sysctl-network", "interface": "bond0", "mac": "0a:56:0a:83:04:0c", 2 "ips": ["10.100.100.200/24"] 3 } ] spec: containers: - name: podexample image: centos command: ["/bin/bash", "-c", "sleep INF"] securityContext: runAsUser: 2000 runAsGroup: 3000 allowPrivilegeEscalation: false capabilities: drop: ["ALL"] securityContext: runAsNonRoot: true seccompProfile: type: RuntimeDefault
- 1
- SR-IOV 네트워크 연결 정의 CR의 이름입니다.
- 2
- 선택사항: SR-IOV 네트워크 연결 정의 CR에 정의된 리소스 유형에서 할당된 SR-IOV 장치의 MAC 주소입니다. 이 기능을 사용하려면 SriovNetwork 오브젝트에
{ "mac": true }
도 지정해야 합니다. - 3
- 선택사항: SR-IOV 네트워크 연결 정의 CR에 정의된 리소스 유형에서 할당된 SR-IOV 장치의 IP 주소입니다. IPv4 및 IPv6 주소가 모두 지원됩니다. 이 기능을 사용하려면
SriovNetwork
오브젝트에{ "ips": true }
도 지정해야 합니다.
YAML을 적용합니다.
$ oc apply -f examplepod.yaml
다음 명령을 실행하여 Pod가 생성되었는지 확인합니다.
$ oc get pod -n sysctl-tuning-test
출력 예
NAME READY STATUS RESTARTS AGE tunepod 1/1 Running 0 47s
다음 명령을 실행하여 Pod에 로그인합니다.
$ oc rsh -n sysctl-tuning-test tunepod
구성된
sysctl
플래그의 값을 확인합니다. 다음 명령을 실행하여net.ipv6.neigh.IFNAME.base_reachable_time_ms
값을 찾습니다.$ sysctl net.ipv6.neigh.bond0.base_reachable_time_ms
출력 예
net.ipv6.neigh.bond0.base_reachable_time_ms = 20000
19.6.4. all-multicast 모드 정보
특히 rootless 애플리케이션 컨텍스트에서 모든 멀티 캐스트 모드를 활성화하는 것이 중요합니다. 이 모드를 활성화하지 않으면 Pod의 SCC(보안 컨텍스트 제약 조건)에 NET_ADMIN
기능을 부여해야 합니다. NET_ADMIN
기능을 허용하여 Pod 권한을 부여하여 특정 요구 사항을 초과하는 변경을 수행할 수 있는 경우 보안 취약점을 잠재적으로 노출할 수 있습니다.
튜닝 CNI 플러그인은 all-multicast 모드를 포함하여 여러 인터페이스 속성 변경을 지원합니다. 이 모드를 활성화하면 SR-IOV 네트워크 장치에서 구성된 VF(가상 기능)에서 실행되는 애플리케이션에서 동일한 물리적 기능에 연결된 다른 VF의 애플리케이션에서 멀티 캐스트 트래픽을 수신하도록 허용할 수 있습니다.
19.6.4.1. SR-IOV 네트워크에서 all-multicast 모드 활성화
다음을 통해 SR-IOV 인터페이스에서 all-multicast 모드를 활성화할 수 있습니다.
-
SriovNetwork
리소스의metaPlugins
매개변수에 튜닝 구성 추가 튜닝 구성에서
allmulti
필드를true
로 설정참고신뢰가 활성화된 VF(가상 기능)를 생성해야 합니다.
SR-IOV Network Operator는 추가 네트워크 정의를 관리합니다. 생성할 추가 SR-IOV 네트워크를 지정하면 SR-IOV Network Operator가 NetworkAttachmentDefinition
CR(사용자 정의 리소스)을 자동으로 생성합니다.
SR-IOV Network Operator가 관리하는 NetworkAttachmentDefinition
사용자 정의 리소스를 편집하지 마십시오. 편집하면 추가 네트워크의 네트워크 트래픽이 중단될 수 있습니다.
이 지침에 따라 SR-IOV 네트워크에서 all-multicast 모드를 활성화합니다.
사전 요구 사항
- OpenShift Container Platform CLI(oc)가 설치되어 있습니다.
-
cluster-admin
권한이 있는 사용자로 OpenShift Container Platform 클러스터에 로그인되어 있습니다. - SR-IOV Network Operator가 설치되어 있습니다.
-
적절한
SriovNetworkNodePolicy
오브젝트를 구성했습니다.
프로세스
Mellanox ConnectX-5 장치에 대한
SriovNetworkNodePolicy
오브젝트를 정의하는 다음 설정으로 YAML 파일을 생성합니다. YAML 파일을sriovnetpolicy-mlx.yaml
로 저장합니다.apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: sriovnetpolicy-mlx namespace: openshift-sriov-network-operator spec: deviceType: netdevice nicSelector: deviceID: "1017" pfNames: - ens8f0np0#0-9 rootDevices: - 0000:d8:00.0 vendor: "15b3" nodeSelector: feature.node.kubernetes.io/network-sriov.capable: "true" numVfs: 10 priority: 99 resourceName: resourcemlx
-
선택 사항: SR-IOV 가능 클러스터 노드에 레이블이 지정되지 않은 경우
SriovNetworkNodePolicy.Spec.NodeSelector
라벨을 추가합니다. 노드 레이블 지정에 대한 자세한 내용은 "노드에서 라벨을 업데이트하는 방법 이해"를 참조하십시오. 다음 명령을 실행하여
SriovNetworkNodePolicy
오브젝트를 생성합니다.$ oc create -f sriovnetpolicy-mlx.yaml
구성 업데이트를 적용하면
sriov-network-operator
네임스페이스의 모든 Pod가Running
상태로 자동으로 이동합니다.다음 명령을 실행하여
enable-allmulti-test
네임스페이스를 생성합니다.$ oc create namespace enable-allmulti-test
추가 SR-IOV 네트워크 연결에 대한
SriovNetwork
CR(사용자 정의 리소스)을 생성하고 다음 예제 CR YAML과 같이metaPlugins
구성을 삽입하고 파일을sriov-enable-all-multicast.yaml
로 저장합니다.apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetwork metadata: name: enableallmulti 1 namespace: openshift-sriov-network-operator 2 spec: resourceName: enableallmulti 3 networkNamespace: enable-allmulti-test 4 ipam: '{ "type": "static" }' 5 capabilities: '{ "mac": true, "ips": true }' 6 trust: "on" 7 metaPlugins : | 8 { "type": "tuning", "capabilities":{ "mac":true }, "allmulti": true } }
- 1
- 오브젝트의 이름을 지정합니다. SR-IOV Network Operator는 동일한 이름으로
NetworkAttachmentDefinition
오브젝트를 생성합니다. - 2
- SR-IOV Network Operator가 설치된 네임스페이스를 지정합니다.
- 3
- 이 추가 네트워크에 대한 SR-IOV 하드웨어를 정의하는
SriovNetworkNodePolicy
오브젝트에서spec.resourceName
매개변수 값을 지정합니다. - 4
SriovNetwork
오브젝트의 대상 네임스페이스를 지정합니다. 대상 네임스페이스의 포드만 추가 네트워크에 연결할 수 있습니다.- 5
- IPAM CNI 플러그인의 구성 오브젝트를 YAML 블록 스칼라로 지정합니다. 플러그인은 연결 정의에 대한 IP 주소 할당을 관리합니다.
- 6
- 선택 사항: 추가 네트워크에 대한 기능을 설정합니다.
"{"ips": true}"
를 지정하여 IP 주소 지원을 활성화하거나"{"mac":true}"
를 지정하여 MAC 주소 지원을 활성화할 수 있습니다. - 7
- 가상 기능의 신뢰 모드를 지정합니다. 이 값을 "on"으로 설정해야 합니다.
- 8
metaPlugins
매개변수를 사용하여 장치에 더 많은 기능을 추가합니다. 이 사용 사례에서type
필드를조정
하도록 설정하고allmulti
필드를 추가하고true
로 설정합니다.
다음 명령을 실행하여
SriovNetwork
리소스를 생성합니다.$ oc create -f sriov-enable-all-multicast.yaml
NetworkAttachmentDefinition
CR 확인
SR-IOV Network Operator가 다음 명령을 실행하여
NetworkAttachmentDefinition
CR을 생성했는지 확인합니다.$ oc get network-attachment-definitions -n <namespace> 1
- 1
- &
lt;namespace
>를SriovNetwork
오브젝트에 지정한networkNamespace
값으로 바꿉니다. 이 예제에서는enable-allmulti-test
입니다.
출력 예
NAME AGE enableallmulti 14m
참고SR-IOV Network Operator가 CR을 생성하기 전에 지연이 발생할 수 있습니다.
다음 명령을 실행하여 SR-IOV 네트워크 리소스에 대한 정보를 표시합니다.
$ oc get sriovnetwork -n openshift-sriov-network-operator
추가 SR-IOV 네트워크 연결 확인
튜닝 CNI가 올바르게 구성되어 추가 SR-IOV 네트워크 연결이 연결되었는지 확인하려면 다음 단계를 따르십시오.
Pod
CR을 생성합니다. 다음 샘플 YAML을examplepod.yaml
이라는 파일에 저장합니다.apiVersion: v1 kind: Pod metadata: name: samplepod namespace: enable-allmulti-test annotations: k8s.v1.cni.cncf.io/networks: |- [ { "name": "enableallmulti", 1 "mac": "0a:56:0a:83:04:0c", 2 "ips": ["10.100.100.200/24"] 3 } ] spec: containers: - name: podexample image: centos command: ["/bin/bash", "-c", "sleep INF"] securityContext: runAsUser: 2000 runAsGroup: 3000 allowPrivilegeEscalation: false capabilities: drop: ["ALL"] securityContext: runAsNonRoot: true seccompProfile: type: RuntimeDefault
- 1
- SR-IOV 네트워크 연결 정의 CR의 이름을 지정합니다.
- 2
- 선택 사항: SR-IOV 네트워크 연결 정의 CR에 정의된 리소스 유형에서 할당된 SR-IOV 장치의 MAC 주소를 지정합니다. 이 기능을 사용하려면 SriovNetwork 오브젝트에
{"mac": true}
도 지정해야 합니다. - 3
- 선택 사항: SR-IOV 네트워크 연결 정의 CR에 정의된 리소스 유형에서 할당된 SR-IOV 장치의 IP 주소를 지정합니다. IPv4 및 IPv6 주소가 모두 지원됩니다. 이 기능을 사용하려면
SriovNetwork
오브젝트에{ "ips": true }
도 지정해야 합니다.
다음 명령을 실행하여
Pod
CR을 생성합니다.$ oc apply -f examplepod.yaml
다음 명령을 실행하여 Pod가 생성되었는지 확인합니다.
$ oc get pod -n enable-allmulti-test
출력 예
NAME READY STATUS RESTARTS AGE samplepod 1/1 Running 0 47s
다음 명령을 실행하여 Pod에 로그인합니다.
$ oc rsh -n enable-allmulti-test samplepod
다음 명령을 실행하여 Pod와 관련된 모든 인터페이스를 나열합니다.
sh-4.4# ip link
출력 예
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0@if22: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8901 qdisc noqueue state UP mode DEFAULT group default link/ether 0a:58:0a:83:00:10 brd ff:ff:ff:ff:ff:ff link-netnsid 0 1 3: net1@if24: <BROADCAST,MULTICAST,ALLMULTI,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default link/ether ee:9b:66:a4:ec:1d brd ff:ff:ff:ff:ff:ff link-netnsid 0 2