首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Kubernetes管理的容器上运行DPDK L2FWD应用程序时出错

在Kubernetes管理的容器上运行DPDK L2FWD应用程序时出错
EN

Stack Overflow用户
提问于 2019-03-13 23:34:57
回答 2查看 763关注 0票数 0

我试图在Kubernetes管理的容器上运行DPDK L2FWD应用程序。

为了达到这个目的,我做了以下步骤-

  • 我已经创建了单节点K8s设置,其中主机和客户端都在主机上运行。作为网络插件,我使用了Calico网络.
  • 为了创建自定义的DPDK码头映像,我使用了下面的Dockerfile

来自ubuntu:16.04运行apt-get更新 运行apt-获取安装-y网络工具 运行apt-获取安装-y python 运行apt-获取安装-y kmod运行apt-获取安装-y iproute2 运行apt-获取安装-y net-tools ADD ./dpdk/ /home/sdn/dpdk/ WORKDIR /home/sdn/dpdk/

  • 要在POD中运行DPDK应用程序,主机目录下面的目录通过特权访问被挂载到POD:

/mnt/巨大 /usr /lib /etc

下面是用于创建过氧化物酶的k8s部署

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: v1
kind: Pod
metadata:
  name: dpdk-pod126
spec:
  containers:
  - name: dpdk126
    image: dpdk-test126
    imagePullPolicy: IfNotPresent
    command: ["/bin/sh"]
    args: ["-c", "while true; do echo hello; sleep 10;done"]
    resources:
      requests:
        memory: "2Gi"
        cpu: "100m"
    volumeMounts:
      - name: hostvol1
        mountPath: /mnt/huge
      - name: hostvol2
        mountPath: /usr
      - name: hostvol3
        mountPath: /lib
      - name: hostvol4
        mountPath: /etc
    securityContext:
      privileged: true
  volumes:
  - name: hostvol1
    hostPath:
      path: /mnt/huge
  - name: hostvol2
    hostPath:
      path: /usr
  - name: hostvol3
    hostPath:
      path: /home/sdn/kubernetes-test/libtest
  - name: hostvol4
    hostPath:
      path: /etc
  • 下面的配置已经在主机中完成-
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1. Huge page mounting. 
2. Interface binding in user space.

  • 在成功创建POD之后,当尝试在POD内部运行DPDK L2FWD应用程序时,我将得到以下错误-

root@dpdk 126:/home/sdn/dpdk#./ -q /l2fwd/-q 0x0f -p 0x03 -q 1 EAL:检测到16个lcore EAL:检测到1个NUMA节点 EAL:多进程套接字/var/run/dpdk/rte/mp_socket EAL:没有免费的hugepages报告-1048576kB EAL: 1007个尺寸为2097152的大页保留了,但没有为这个尺寸找到安装的大文件。 致命:无法获得漏电信息。 EAL:无法获取大漏电信息。 EAL:错误退出与代码:1 原因: EAL参数无效

EN

回答 2

Stack Overflow用户

发布于 2019-03-21 03:35:41

根据的说法,您可能在您的最大漏电卷中丢失了medium: HugePages

而且,大页可能会有一点细微之处。你能提供以下方面的产出:

cat /proc/meminfo | grep -i huge

并检查/mnt/huge中是否有任何文件

此外,也许也会有所帮助。你能不能以mount -t hugetlbfs nodev /mnt/huge的方式来检查这些抱抱页是否被挂载?

票数 0
EN

Stack Overflow用户

发布于 2022-11-14 08:29:59

首先,你必须确认,你的系统中有足够多的拥抱。使用kubectl命令检查它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl describe nodes

在那里你可以看到这样的东西:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Capacity:
  cpu:                12
  ephemeral-storage:  129719908Ki
  hugepages-1Gi:      0
  hugepages-2Mi:      8Gi
  memory:             65863024Ki
  pods:               110

如果您的hugepages-2Mi是空的,那么您的k8s就不会看到已安装的拥抱页

在将抱抱器安装到主机上后,您可以准备好您的吊舱,以便与拥抱一起工作。如您所示,您不需要安装hugepages文件夹。您可以这样简单地添加emptyDir卷:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  volumes:
  - name: hugepage-2mi
    emptyDir:
      medium: HugePages-2Mi

HugePages-2Mi是一个特定的资源名称,它对应于2Mb大小的抱页。如果您想使用1Gb大小的巨型页,那么还有另一个资源- hugepages-1Gi

定义了卷之后,您可以在volumeMounts中使用它,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    volumeMounts:
    - mountPath: /hugepages-2Mi
      name: hugepage-2mi

还有一个额外的步骤。您必须为hugepages的使用定义资源限制:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    resources:
      limits:
        hugepages-2Mi: 128Mi
        memory: 128Mi
      requests:
        memory: 128Mi

在所有这些步骤之后,您可以在容器中使用run页运行您的容器。

正如@AdamTL所提到的,您可以找到其他信息这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55157142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文