CNI flannel插件
// plugins/meta/flannel/flannel.go
func cmdAdd(args *skel.CmdArgs) error
- 调用n, err := loadFlannelNetConf(args.StdinData)读取网络配置
- 调用fenv, err := loadFlannelSubnetEnv(n.SubnetFile)读取flannel的配置结果
- 确定n.Delegate["name"],n.Delegate["type"],n.Delegate["ipMasq"],n.Delegate["mtu"],n.Delegate["ipam"]等字段
- 调用return delegateAdd(args.ContainerID, n.DataDir, n.Delegate)
NetConf的结构如下所示:
type NetConf struct {
types.NetConf
SubnetFile string
DataDir string
Delegate map[string]interface{}
}
// plugins/meta/flannel/flannel.go
func loadFlannelNetConf(bytes []byte) (*NetConf, error)
- 创建n := &NetConf{}其中设置SubnetFile为默认的defaultSubnetFile = /run/flannel/subent.env,defaultDataDir = /var/lib/cni/flannel
- 再调用json.Unmarshal(bytes, n)将配置解析至n中
// plugins/meta/flannel/flannel.go
func loadFlannelSubnetEnv(fn string) (*subnetEnv, error)
- 调用f, err := os.Open(fn)打开subnet file
- 创建变量 se := &subnetEnv{},遍历subnet file从中提取FLANNEL_NETWORK, FLANNEL_SUBNET, FLANNEL_MTU, FLANNEL_IPMASQ填充至se中
- 调用se.missing(),如果se中有任何一个字段为空则报错
// plugins/meta/flannel/flannel.go
func delegateAdd(cid, dataDir string, netconf map[string]interface{})
- 调用netconfBytes, err := json.Marshal(netconf)
- 再调用saveScratchNetConf(cid, dataDir, netconfBytes) ---> 创建目录dataDir,并且将netconf写入,当删除网络时,会从该目录读取配置
- 接着调用result, err := invoke.DelegateAdd(netconf["type"].(string), netconfBytes),调用相应的插件,例如bridge
- 最后调用return result.Print()
CNI flannel插件的更多相关文章
- 3.kubernetes的CNI网络插件-Flannel
目录 1.1.K8S的CNI网络插件-Flannel 1.1.1.集群规划 1.1.2.下载软件.解压.软链接 1.1.3.最终目录结构 1.1.4.拷贝证书 1.1.5.创建配置 1.1.6.创建启 ...
- 第十章 Kubernetes的CNI网络插件--flannel
1.简介 1.1前言 Kubernetes设计了网络模型,但却将它的实现讲给了网络插件,CNI网络插件最重要的功能就是实现Pod资源能够跨主机通信 常见的CNI网络插件如下: Flannel: Cac ...
- minikube配置CRI-O作为runtime并指定flannel插件
使用crio作为runtime后,容器的启动将不依赖docker相关的组件,容器进程更加简洁.如下使用crio作为runtime启动一个nginx的进程信息如下:根进程(1)->conmon-& ...
- Kubernetes CNI网络插件
CNI 容器网络接口,就是在网络解决方案由网络插件提供,这些插件配置容器网络则通过CNI定义的接口来完成,也就是CNI定义的是容器运行环境与网络插件之间的接口规范.这个接口只关心容器的网络连接,在创建 ...
- CNI bridge 插件实现代码分析
对于每个CNI 插件在执行函数cmdAdd之前的操作是完全一样的,即从环境变量和标准输入内读取配置.这在http://www.cnblogs.com/YaoDD/p/6410725.html这篇博文里 ...
- 安装cni网络插件-非必须
安装cni网络插件 安装cni # 安装 cni # 百度云链接:https://pan.baidu.com/s/1-PputObLs5jouXLnuBCI6Q 密码:tzqm cd /server/ ...
- suse 12 二进制部署 Kubernetets 1.19.7 - 第03章 - 部署flannel插件
文章目录 1.3.部署flannel网络 1.3.0.下载flannel二进制文件 1.3.1.创建flannel证书和私钥 1.3.2.生成flannel证书和私钥 1.3.3.将pod网段写入et ...
- CNI IPAM插件分析 --- 以hostlocal为示例
skel.CmdArgs数据结构如下所示: type CmdArgs struct { ContainerID string Netns string IfName string Args strin ...
- CNI portmap插件实现源码分析
DNAT创建的iptables规则如下:(重写目的IP和端口) PREROUTING, OUTPUT: --dst-type local -j CNI-HOSTPORT_DNAT // PREROU ...
随机推荐
- Linux SWAP 深度解读
概述 本文讨论的swap基于Linux4.4内核代码.Linux内存管理是一套非常复杂的系统,而swap只是其中一个很小的处理逻辑. 希望本文能让读者了解Linux对swap的使用大概是什么样子.阅读 ...
- 反射学习1、反射机制的介绍和基本的API的使用
关于动态语言: 一般而言,开发者社群说到动态语言,大致认同的一个定义是:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”.从这个观点看,Perl,Python,Ruby是动态语言,C+ ...
- CefSharp 集成谷歌浏览器详解---(一)环境搭建(没测试过,不知道好不好用)
https://blog.csdn.net/zpyxman/article/details/78538808
- 迅搜sdk试用
1. sdk支持PHP 2. 针对mysql的某个库的某个表??进行索引,简单的说就是一个project,需要对应一个配置文件: 3. 分索引服务与搜索服务两个,另带中文分词功能:索引数据会有演示,但 ...
- VirtualBox错误ID: PAEmode解决
今天在导入virtualbox的虚拟机ubuntu系统时,报错,无法打开虚拟机 报错内容如下: 错误 ID: PAEmode 严重: 致命错误 The guest is trying to switc ...
- python from import 自定义模块
from douban250.items import Douban250Item python import 自定义模块 (1)主程序与模块程序在同一目录下: 如下面程序结构: `-- src ...
- Tensorflow之改变tensor形状
https://www.tensorflow.org/versions/r0.12/api_docs/python/array_ops.html#reshape 例子: # tensor 't' is ...
- 嵌入式驱动开发之spi---spi串口通信调试
一. 概念 SPI是 Serial Peripheral Interface(串型外部接口)的缩写.SPI接口有4根PIN脚,分别是: * SPICLK : 用于传输数据的同 ...
- 开发人员需知的Web缓存知识(转)
什么是Web缓存,为什么要使用它? 缓存的类型: 浏览器缓存: 代理服务器缓存: 网关缓存: Web缓存无害吗?为什么要鼓励缓存? Web缓存如何工作 如何控制缓存和不缓存: HTML Meta标签 ...
- Torch-RNN运行过程中的坑 [1](读取Lua非空table,size为0)
0.踩坑背景 执行Torch-RNN的时候,在LanguageModel.lua中的encode_string函数中,对start_text的各个character进行id映射编码,实现功能类似“北京 ...