cni-ipam-etcd demo
链接:https://github.com/jeremyxu2010/cni-ipam-etcd
测试demo:
package main import (
"fmt"
"github.com/containernetworking/cni/pkg/types"
"github.com/jeremyxu2010/cni-ipam-etcd/backend/allocator"
"github.com/jeremyxu2010/cni-ipam-etcd/backend/etcd"
"net"
) func main() {
fmt.Println("Hello, World!")
n := allocator.Net{}
fmt.Println("%+v", n) mask := net.IPv4Mask(byte(), byte(), byte(), byte())
ip := net.ParseIP("192.168.1.0").Mask(mask)
subnet := types.IPNet{ip, mask} ipamRange := allocator.Range{
RangeStart: net.ParseIP("192.168.1.10"),
RangeEnd: net.ParseIP("192.168.1.250"),
Subnet: subnet,
Gateway: net.ParseIP("192.168.1.1"),
} etcdConfig := allocator.EtcdConfig{
EtcdURL: "http://0.0.0.0:2379",
} ipamConf := allocator.IPAMConfig{
Name: "network-id",
Type: "etcd",
Ranges: []allocator.RangeSet{[]allocator.Range{ipamRange}},
IPArgs: []net.IP{net.ParseIP("192.168.1.100"), net.ParseIP("192.168.1.200")},
EtcdConfig: &etcdConfig,
}
n.IPAM = &ipamConf fmt.Println("%+v", ipamConf.Ranges) store, err := etcd.New(ipamConf.Name, &ipamConf)
if err != nil {
return
}
defer store.Close() portId := "port-id"
allocator := allocator.NewIPAllocator(&ipamConf.Ranges[], store, ) // allocate ip
if false {
var requestedIP net.IP
ipConf, err := allocator.Get(portId, requestedIP)
if err != nil {
fmt.Errorf("failed to allocate for range: %v", err)
return
}
fmt.Println(allocator, ipConf)
} // release ip
{
err := allocator.Release(portId)
if err != nil {
fmt.Errorf("failed to relase for range: %v", err)
return
}
fmt.Println(allocator)
}
}
运行结果:
Hello, World!
%+v { <nil> {[]} <nil>}
%+v [[{192.168.1.10 192.168.1.250 {192.168.1.0 ffffff00} 192.168.1.1}]]
&{0xc0000a6b00 0xc00000e180 } {Version: Interface:<nil> Address:{IP:192.168.1.20 Mask:ffffff00} Gateway:192.168.1.1}
etcd 数据查看:
[root@wangjunqiang cni-ipam-etcd]# export ETCDCTL_API=
[root@wangjunqiang cni-ipam-etcd]# etcdctl get --prefix /
/etcd-cni/networks/network-id
[[{"rangeStart":"192.168.1.10","rangeEnd":"192.168.1.250","subnet":"192.168.1.0/24","gateway":"192.168.1.1"}]]
/etcd-cni/networks/network-id/lastReserved/
192.168.1.11
[root@wangjunqiang cni-ipam-etcd]# etcdctl get --prefix /
/etcd-cni/networks/network-id
[[{"rangeStart":"192.168.1.10","rangeEnd":"192.168.1.250","subnet":"192.168.1.0/24","gateway":"192.168.1.1"}]]
/etcd-cni/networks/network-id/lastReserved/
192.168.1.12
/etcd-cni/networks/network-id/used/192.168.1.12
port-id
[root@wangjunqiang cni-ipam-etcd]# etcdctl get --prefix /
/etcd-cni/networks/network-id
[[{"rangeStart":"192.168.1.10","rangeEnd":"192.168.1.250","subnet":"192.168.1.0/24","gateway":"192.168.1.1"}]]
/etcd-cni/networks/network-id/lastReserved/
192.168.1.12
cni-ipam-etcd demo的更多相关文章
- CNI IPAM插件分析 --- 以hostlocal为示例
skel.CmdArgs数据结构如下所示: type CmdArgs struct { ContainerID string Netns string IfName string Args strin ...
- 浅谈K8S cni和网络方案
此文已由作者黄扬授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 在早先的k8s版本中,kubelet代码里提供了networkPlugin,networkPlugin是一组接 ...
- Kubernetes 网络改进的三项实践分享
自研CNI IPAM插件 解决K8s功能问题 首先,在功能方面,Kubernetes 网络模型由于IP不固定,无法对IP资源进行精细管控,无法使用基于IP的监控和基于IP的安全策略,此外,一些IP发现 ...
- Flannel网络部署
一.Flannel网络部署 为Flannel生成证书 [root@linux-node1 ssl]# vim flanneld-csr.json { "CN": "fla ...
- linux运维、架构之路-Kubernetes离线集群部署-无坑
一.部署环境介绍 1.服务器规划 系统 IP地址 主机名 CPU 内存 CentOS 7.5 192.168.56.11 k8s-node1 2C 2G CentOS 7.5 192.168.56 ...
- Flannel部署
目录 Flannel CNI集成 配置Docker使用Flannel 1.为Flannel生成证书 [root@linux-node1 ~]# cd /usr/local/src/ssl/ [root ...
- k8s笔记0528-基于KUBERNETES构建企业容器云手动部署集群记录-5
1.为Flannel生成证书 [root@linux-node1 ~]# vim flanneld-csr.json { "CN": "flanneld", & ...
- kubeadm 使用 Calico CNI 以及外部 etcd 部署 kubernetes v1.23.1 高可用集群
文章转载自:https://mp.weixin.qq.com/s/2sWHt6SeCf7GGam0LJEkkA 一.环境准备 使用服务器 Centos 8.4 镜像,默认操作系统版本 4.18.0-3 ...
- traefik+etcd构建grpc微服务demo
1.下载安装traefik https://github.com/containous/traefik/releases 2.下载安装etcd3 https://github.com/coreos/e ...
随机推荐
- python学习之路------你想要的都在这里了
python学习之路------你想要的都在这里了 (根据自己的学习进度后期不断更新哟!!!) 一.python基础 1.python基础--python基本知识.七大数据类型等 2.python基础 ...
- Shell变量的作用域:Shell全局变量、环境变量和局部变量
Shell 变量的作用域(Scope),就是 Shell 变量的有效范围(可以使用的范围). 在不同的作用域中,同名的变量不会相互干涉,就好像 A 班有个叫小明的同学,B 班也有个叫小明的同学,虽然他 ...
- OceanBase安装和使用
链接 https://mp.weixin.qq.com/s?spm=a2c6h.12873639.0.0.41f92c9bH5FL2Y&__biz=MzU3OTc2MDQxNg==&m ...
- phpbasic
<!DOCTYPE html> <html> <body> <?php // 这是 PHP 单行注释 /* 这是 PHP 多行 注释 */ ?> < ...
- PHP 是什么?简介下
PHP 是服务器端脚本语言. 您应当具备的基础知识 在继续学习之前,您需要对以下知识有基本的了解: HTML CSS PHP 是什么? PHP(全称:PHP:Hypertext Preprocesso ...
- PHP 实例 - AJAX 实时搜索-AJAX Live Search
PHP 实例 - AJAX 实时搜索 AJAX 可为用户提供更友好.交互性更强的搜索体验. AJAX Live Search 在下面的实例中,我们将演示一个实时的搜索,在您键入数据的同时即可得到搜索结 ...
- Python time asctime()方法
描述 Python time asctime() 函数接受时间元组并返回一个可读的形式为"Tue Dec 11 18:07:14 2008"(2008年12月11日 周二18时07 ...
- Skill 脚本演示 ycAutoSnap.skl
https://www.cnblogs.com/yeungchie/ ycAutoSnap.skl 版图编辑中自动吸附 Path 的 "垂直线头",也可以批量对齐 Bus 走线,也 ...
- 10分钟了解js的宏任务和微任务
熟悉宏任务和微任务以及js(nodejs)事件循环机制,在写业务代码还是自己写库,或者看源码都是那么重要 看了部分文档,自己总结和实践了一下 js中同步任务.宏任务和微任务介绍 同步任务: 普通任务 ...
- 【01python基础】
1.python的环境搭建(Python3 下载) Python 官网:https://www.python.org/ Python文档下载地址:https://www.python.org/doc/ ...