How to run DPDK in k8s - Two containers in a pod

Page content

하나의 pod에 2개의 container를 두고, 각각의 container에 primary process, secondary process를 실행하려면 두 개 container에서 실행되는 DPDK process간 runime config 파일과, hugepage map 파일을 공유하는 방법은 다음과 같다.

2022-03-14-dpdk-hugepage-2c-1p-1.png

하나의 pod에 하나의 container만 두는 경우와 달리 두 개의 container가 /var/run/dpdk 위치를 공유해야 하므로, 각 container가 갖는 기본 파일 시스템이 아니라 명시적으로 pod의 volume을 이용해서 파일을 공유해야 한다.

이를 위해 pod spec에 다음과 같은 volume spec을 추가한다.

volume:
 - name: dpdk-config
   emptyDir:

emptyDir에 명시적으로 지정하지 않은 경우 tmpfs를 사용하므로, 위 volume은 tmpfs를 사용하여 생성된다.

생성된 volume은 다음과 같이 각 container에서 /var/run/dpdk 에 마운트해야 한다.

- name: container-1
  ...
  volumeMounts:
    - mountPath: /var/run/dpdk
      name: dpdk-config
- name: container-2
  ...
  volumeMounts:
    - mountPath: /var/run/dpdk
      name: dpdk-config

Simplified view

2022-03-14-dpdk-hugepage-2c-1p-2.png

Reference

https://github.com/cychong47/how-to-share-hugepage-in-k8s/tree/main/two-containers-in-a-single-pod

#til #dpdk #hugepage