上云无忧 > 文档中心 > 百度智能云容器引擎服务 CCE 实践:使用 CNI 配置容器内网络参数
容器引擎服务CCE
百度智能云容器引擎服务 CCE 实践:使用 CNI 配置容器内网络参数

文档简介:
部分容器化应用需要对容器网络命名空间的 sysctl 参数进行优化,尽管可以使用带有特权的 initContainer 实现初始化配置,但更推荐的方式是利用 CNI 原生支持。 CCE CNI 提供了 sysctl 插件,基于 CNI Chain 能够进行灵活的配置。 本文描述了如何使用和配置 CCE CNI,从而实现集群粒度和应用粒度的容器 sysctl 配置。
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠



背景

部分容器化应用需要对容器网络命名空间的 sysctl 参数进行优化,尽管可以使用带有特权的 initContainer 实现初始化配置,但更推荐的方式是利用 CNI 原生支持。

CCE CNI 提供了 sysctl 插件,基于 CNI Chain 能够进行灵活的配置。

本文描述了如何使用和配置 CCE CNI,从而实现集群粒度和应用粒度的容器 sysctl 配置。

使用说明

1 确认容器网络模式

执行 kubectl get cm -n kube-system cce-cni-node-agent -o yaml,查看 cniMode 字段。

  • vpc-route- 开头表示基于 VPC 实例路由的网络方案
  • vpc-secondary-ip-, 开头表示基于弹性网卡的网络方案

2 修改 CNI 配置文件模板

根据步骤 1 中获取的网络模式,执行 kubectl edit cm -n kube-system cce-cni-config-template, 修改对应模式的 CNI 配置文模板。

手动编辑 plugins 列表, 在最后加上 sysctl 的配置文件,等待 1 分钟后所有节点的 CNI 配置将会更新。

修改完的样例如下:

cce-cni-secondary-ip-veth: | {
        "name":"{{ .NetworkName }}",
        "cniVersion":"0.3.1",
        "plugins":[
            {
                "type":"ptp",
                "enableARPProxy":true,
                "vethPrefix":"veth",
                "mtu": {{ .VethMTU }},
                "ipam":{
                    "type":"eni-ipam",
                    "endpoint":"{{ .IPAMEndPoint }}",
                    "instanceType":"{{ .InstanceType }}",
                    "deleteENIScopeLinkRoute":true
                }
            },
            {
              "type":"sysctl",
              "kubeconfig":"/etc/cni/net.d/cce-cni.d/cce-cni.kubeconfig"
            }
        ]
    }

3 集群粒度的配置(可选)

在步骤 2 中的配置里,可以继续添加 sysctl 字段,指明需要配置的参数。

如下的配置生效后,集群内所有新建的容器都会将 /proc/sys/net/core/somaxconn 设置为 500。

{ "type":"sysctl", "kubeconfig":"/etc/cni/net.d/cce-cni.d/cce-cni.kubeconfig", "sysctl":{ "net.core.somaxconn"
:"8192" } }

4 应用粒度的配置(可选)

在完成步骤 2 后,用户可以通过指定 Pod 的 annotations,传递 sysctl 参数的配置。

采用如下的 yaml 的创建的 nginx 容器,将会设置 /proc/sys/net/core/somaxconn 为 8192 以及 /proc/sys/net/ipv4/tcp_tw_reuse 为 1。


kind: Deployment apiVersion: apps/v1 metadata: name: nginx-example spec: replicas: 
1 selector: matchLabels: app: nginx-example template: metadata: labels: app: nginx-
example annotations: net.sysctl.cce.io/net.core.somaxconn: "8192" net.sysctl.cce.io/net.ipv4.tcp_tw_reuse:
 "1" spec: containers: - name: nginx-example image: nginx:alpine imagePullPolicy: IfNotPresent


注意事项

  • 确保 CNI 配置是一个合法的 JSON 格式文件
  • 不同版本内核中 netns 可配置的 sysctl 参数不同,请小心配置否则容器可能无法启动

参考文档

  • Documentation for /proc/sys/net/*
  • /proc/sys/net/ipv4/* Variables
  • Kernel doc for networking



相似文档
  • 容器运行时(Container Runtime)是 Kubernetes 重要的组件之一,负责管理镜像和容器的生命周期。本文通过对比两种运行时的使用场景、调用链,并通过对比 docker 和 containerd 两种容器引擎常用命令,帮助您根据需求场景选择合适的容器运行时。
  • 通过 kubectl 连接 Kubernetes 集群: 如果需要从本地个人计算机连接到百度智能云的 Kubernetes 集群,需要使用 Kubernetes 命令行客户端 kubectl,kubectl 的安装步骤如下所示 操作步骤: kubectl 的安装可以参见 kubernetes 官方安装和设置 kubectl文档。 注意: 本操作指南给出的操作步骤都是基于 linux 操作环境的。
  • 业务应用过程中,可能会遇到高并发的场景,通过负载均衡 BLB 的流量均衡和分发功能,可以为应用提供多台 WebServer 并发服务的能力,从而达到业务水平扩展的效果。
  • 创建集群之后,下载 windows 版本的 kubectl 工具,例如64位的工具如下: 下载之后,将其解压到任意目录,例如放在 D 盘下。 在 目录C:\users\下进入用户的文件夹,例如用户名为 foo,则文件夹应该为C:\users\foo,同时进入此目录,创建文件夹.kube。
  • 集群在什么条件下会扩容或缩容? 扩容:由于资源不足,pod 调度失败,即有 pod 一直处于 Pending 状态。 缩容:node 的资源利用率较低时,且此 node 上存在的 pod 都能被重新调度到其他 node 上运行。 自动扩缩容的扫描频率是多少? 30秒。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部