MorningSunKing / spiderpool

kubernetes ipam

Home Page:https://spidernet-io.github.io/spiderpool/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Spiderpool

Go Report Card CodeFactor Quality Gate Status codecov Auto Release Version Auto Nightly CI CII Best Practices badge badge badge badge badge

Status

Currently, the Spiderpool is under beta stage, not ready for production environment yet.

Introduction

The Spiderpool is an IP Address Management (IPAM) CNI plugin that assigns IP addresses for kubernetes clusters.

Currently, it is under developing stage, not ready for production environment yet.

Any Container Network Interface (CNI) plugin supporting third-party IPAM plugins can use the Spiderpool, such as MacVLAN CNI, VLAN CNI, IPVLAN CNI etc. The Spiderpool also supports Multus CNI case to assign IP for multiple interfaces. More CNIs will be tested for integration with Spiderpool.

Why Spiderpool

Most overlay CNIs, like Cilium and Calico, have a good implementation of IPAM, so the Spiderpool is not intentionally designed for these cases, but maybe integrated with them.

The Spiderpool is intentionally designed to use with underlay network, where administrators can accurately manage each IP.

Currently, in the community, the IPAM plugins such as whereabout, kube-ipam, static, dhcp, and host-local, few of them could help solve complex underlay-network issues, so we decide to develop the Spiderpool.

BTW, there are also some CNI plugins that could work on the underlay mode, such as kube-ovn and coil. But the Spiderpool provides lots of different features, you could see Features for details.

Features

The Spiderpool provides a large number of different features as follows.

  • Based on CRD storage, all operation could be done with kubernetes API-server.

  • Support for assigning IP addresses with three options: IPv4-only, IPv6-only, and dual-stack.

  • Support for working on the clusters with three options: IPv4-only, IPv6-only, and dual-stack.

  • Support for creating multiple ippools. Different namespaces and applications could monopolize or share an ippool.

  • An application could specify multiple backup ippool resources, in case that IP addresses in an ippool are out of use. Therefore, you neither need to scale up the IP resources in a fixed ippool, nor need to modify the application yaml to change a ippool.

  • Support for assigning fixed IP for applications. No need to hard code the IP list in a pod yaml, which is not easy to modify. With Spiderpool, you only need to set the selector field of ippool and scale up or down the ippool.

  • Support for assigning IP addresses in sequence for statefulset pods.

  • Different pods in a single controller could get IP addresses from different subnets for an application deployed in different subnets or zones.

  • Administrator could safely edit ippool resources, the Spiderpool will help validate the modification and prevent from data race.

  • Collect resources in real time, especially for solving IP leakage or slow collection, which may make new pod fail to assign IP addresses.

  • Support ranges of CNI plugin and support third-party IPAM plugins. Especially, the Spiderpool could help much for CNI like spiderflat, macvlan CNI, vlan CNI, ipvlan CNI, sriov CNI, ovs CNI.

  • Especially support for Multus CNI case to assign IP for multiple interfaces.

  • Have a good performance for assigning and collecting IP.

  • Support to reserve IP globally and in an ippool range even if the IP addresses are not assigned and included in an ippool.

  • Included metrics for look into IP usage and issues.

  • Support for both ARM64 and ARM64.

Components

Refer to architecture for components.

Installation

Refer to installation.

Quick Start

Refer to demo.

Development

Development guide is a reference point for development helper commands.

License

Spiderpool is licensed under the Apache License, Version 2.0. See LICENSE for the full license text.

About

kubernetes ipam

https://spidernet-io.github.io/spiderpool/

License:Apache License 2.0


Languages

Language:Go 79.4%Language:Shell 10.9%Language:Makefile 7.6%Language:Dockerfile 1.4%Language:Smarty 0.8%