Kuryr kubernetes 源码简介

Kuryr Kubernetes 分为Kuryr Controller、Kuryr CNI和可选的Kuryr CNI Daemon三个组件。Controller负责监控K8s API并申请Neutron资源,CNI在每个工作节点上运行,处理网络连接;Daemon则处理CNI的watch功能。源码中,Controller通过Watcher监控资源并使用VIFHandler处理网络变更,CNI和CNI Daemon共享代码,根据参数决定运行方式,CNI通过AddHandler和DelHandler处理Pod的添加和删除,连接和断开veth与Neutron Port。
摘要由CSDN通过智能技术生成
Kuryr kubernetes 分为3类独立可执行程序,分别为Kuryr Controller,Kuryr CNI,Kuryr CNI daemon(可选,抽离CNI的watach 功能以减少多pod同时启动时候的资源浪费俄)。
Kuryr Controller 独立运行,功能是 watch k8s API 和从neutron 申请资源port等,通过k8s API修改 pod 的annotate 里网络信息。
Kuryr CNI 在每个work node 备用。当pod启动或删除调用该插件,该插件具体执行veth创建和该veth 和neutron 创建的port 连接管理。如果没有Kuryr CNI daemon,还要负责创建时watch k8s API 直到Kuryr Controller 将网络信息写入 pod 的annotate 。
Kuryr CNI daemon 在每个work node 运行。当他运行时,主要抽离出Kuryr CNI 的watch 功能和执行功能。具体执行veth创建和该veth 和neutron 创建的port 连接管理也归它管理,Kuryr CNI 只保留CNI 入口功能,如同 Kuryr CNI daemon的客户端
Kuryr CNI 和 Kuryr CNI daemon用同一个应用程序,参数不同运行方式就不同。

Kuryr Controller 入口
kuryr_kubernetes/controller/service.py

class KuryrK8sService(service.Service):
"""Kuryr-Kubernetes controller Service."""

def __init__(self):
super(KuryrK8sService, self).__init__()

objects.register_locally_defined_vifs()
pipeline = h_pipeline.ControllerPipeline(self.tg)//创建pipeline
self.watcher = watcher.Watcher(pipeline, self.tg)
# TODO(ivc): pluggable resource/handler registration
for resource in ["pods", "services", "endpoints"]: //watch k8s API 这三种资源
self.watcher.add("%s/%s" % (constants.K8S_API_BASE, resource))
pipeline.register(h_vif.VIFHandler()) //注册处理函数,watch到的变动将由这些注册过的处理函数处理
pipeline.register(h_lbaas.LBaaSSpecHandler())
pipeline.register(h_lbaas.LoadBalancerHandler())

def start(self):
LOG.info("Service '%s' starting", self.__class__.__name__)
health.ReadinessChecker()
super(KuryrK8sService, self).start()
self.watcher.start()
LOG.info("Service '%s' started", self.__class__.__name__)

关于 watch
kuryr_kubernetes/watcher.py
def start(self):
self._running = True
for path in self._resources - set(self._watching):
self._start_watch(path)
def _start_watch(self, path):
tg = self._thread_group
self._idle[path] = True
if tg:
self._watching[path] = tg.add_thread(self._watch, path)//thread_group添加观察线程
else:
self._watching[path] = None
self._watch(path)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值