English | 简体中文
Cello 是一款基于火山引擎VPC网络实现的kubernetes CNI插件。通过使用Cello插件可以在云上VPC网络环境下 实现kubernetes集群内部网络的互通,并且在安全组放通的情况下,原生支持kubernetes集群访问同VPC下的其他资源。 Cello使用辅助ENI来打通Pod网络,支持共享ENI模式和ENI多IP模式,在两种模式下,支持以下基本通信场景:
- Pod和Pod通信
- Pod和节点通信
Cello 通过集成Cilium来替代kube-proxy实现kubernetes Service以获得更好的性能和更丰富的特性,支持以下类型的service:
- ClusterIP
- NodePort
- LoadBalancer
共享ENI模式下,Cello将辅助ENI下的多个辅助私有IP(数量取决于实例规格)分配给多个Pod,从而获得更高的部署密度。由于每个Pod分配到了一个VPC内的地址,所有Pod和节点在VPC内具有基本相同的“地位”。在VPC网络基础上,支持Pod和所在节点通过本地快路径进行通信。
独占模式下,Cello将辅助ENI直接分配给Pod, 将辅助ENI拉入到Pod的NetNs中并使用辅助ENI的主IP进行通信。从VPC视角,所有Pod和Node具有完全相同的“地位”。受限于ECS可挂载辅助ENI的数量,这种模式下Pod部署密度较低。在VPC网络基础上,支持Pod和所在节点通过本地veth-pair
进行通信。
Cello 以 daemonset 的形式部署在每个节点上,每个 Cello 实例都会独立申请辅助 ENI。申请 ENI 时会从用户配置的subnets中选择一个,并使用用户配置的全部安全组。 eni_exclusive
模式直接使用eni,节点上可调度的pod数量等于eni_quota-1
。在eni_shared
模式下,节点上可调度的pod数量等于(eni_quota-1)*ip_quota_per_eni
。 Cello 创建的 ENI 会携带一些标签来标识创建者,如果 Cello 存活,Cello 会根据标签定期检查和回收自己泄露的 ENI。在集群中部署 opeartor 来回收删除节点时 detached 的 ENI 可以进一步避免ENI的泄漏。删除集群后,用户仍需要检查是否有 ENI 泄漏。
无论是哪种模式,Cello 都会通过 [device plugin] 报告可用网络资源的数量,以便调度器将 pod 调度到有资源的节点上。用户可以通过向 pod 的第一个容器添加以下 [requests and limits] 字段来使用此机制。
# eni_shared mode:
resources:
limits:
vke.volcengine.com/eni-ip: "1"
requests:
vke.volcengine.com/eni-ip: "1"
# eni_exclusive mode:
resources:
limits:
vke.volcengine.com/eni: "1"
requests:
vke.volcengine.com/eni: "1"
protobuf [required]
go 1.20+ [required]
docker [option]
# make完后所有部署需要的程序和配置文件位于./output 目录
git clone [todo]
cd cello
go mod download
make bin
git clone [todo]
cd cello
go mod download
make image # 默认使用docker,可通过ARG `ENGINE` 指定使用podman进行编译
- 准备火山引擎 ECS实例 (需要 ECS 实例内核版本 4.19+,经过测试的OS为veLinux 1.0 with 5.10 kernel)
- 安装Kubernetes,推荐使用 kubeadm
- 确保传递给Cello的
credentialAccessKeyId
或ramRole
附加了所需的 IAM策略 - 参考 config.md 准备配置
- 使用helm安装(需要helm 3.0)
helm install cello chart
git clone [todo]
cd cello
go mod download
make test
确保集群正确安装了Cello, 并且 kubectl
可连接到集群
git clone [todo]
cd cello
./tests/test.sh
详情见 CONTRIBUTING.md。
欢迎通过 Github issues
和 pull requests
进行交流, 也可以通过邮件或扫描下方飞书二维码与我们取得联系。
Cello 使用 Apache 2.0 证书, 详情见 LICENSE。