k8s-ovs

==============================

最近在寻求一些工作机会,如果有kubernetes相关研发招聘的朋友,欢迎随时联系我。我的个人简历可以通过百度网盘:https://pan.baidu.com/s/1jI20TWa 下载。谢谢

k8s-ovs是一个使用openvswitchK8S提供SDN功能的项目。该项目基于openshift SDN的原理进行开发。由于openshift的SDN网络方案和openshift自身的代码耦合在一起,无法像flannelcalico等网络方案以插件的方式独立的为K8S提供服务,所以我开发了k8s-ovs,它拥有openshift优秀的SDN功能,又可以独立为K8S提供服务。

该项目中有一部分基础代码库是从openshift的pkg/sdn/plugin直接拷贝或进行了一些修改的。如果有License方面的问题请随时联系我进行修正:at28997146@163.com

如果对该项目有任何疑问,欢迎加入k8s-ovs-sdn的QQ交流群477023854进行讨论。

下面将对k8s-ovs的功能和安装进行详细介绍。如果你想了解不同功能的配置方法,可以跳转到admin.md进行阅读。

k8s-ovs的功能


k8s-ovs支持单租户模式和多租户模式。

  • 单租户模式直接使用openvswitch+vxlan将K8S的POD网络组成一个大二层,所有POD可以互通。
  • 多租户模式也使用openvswitch+vxlan来组建K8S的POD网络,但是它可以基于K8S中的NAMESPACE来分配虚拟网络从而形成一个网络独立的租户,一个NAMESPACE中的POD无法访问其他NAMESPACE中的PODS和SERVICES
  • 多租户模式下可以对一些NAMESPACE进行设置,使这些NAMESPACE中的POD可以和其他所有NAMESPACE中的PODS和SERVICES进行互访。
  • 多租户模式下可以合并某两个NAMESPACE的虚拟网络,让他们的PODS和SERVICES可以互访。
  • 多租户模式下也可以将上面合并的NAMESPACE虚拟网络进行分离。
  • 单租户和多租户模式下都支持POD的流量限制功能,这样可以保证同一台主机上的POD相对公平的分享网卡带宽,而不会出现一个POD因为流量过大占满了网卡导致其他POD无法正常工作的情况。
  • 单租户和多租户模式下都支持外联负载均衡。

安装


安装部署,需要准备至少3台服务器,其中一台作为K8S的master,另外两台作为node节点。我的测试环境为Centos7.2,docker(1.12.6)版本以及golang(1.7.1)版本。每台node节点都需要安装openvswitch-2.5.0或以上版本,并且每台node节点都需要将ovsdb-serverovs-vswitchd运行起来。

K8S集群安装

请参考K8S安装手册,推荐安装v1.6.0以后的版本,因为之前版本的kubelet在使用CNI的情况下存在IP地址泄漏问题

1,K8S集群安装过程中应该跳过网络部署这一步,网络部署将由下面的k8s-ovs部署完成。

2,安装过程中需要设置kubelet使用cni,也就是kubelet启动参数需要设置为--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin,如果kubelet是使用容器的方式启动的需要将/etc/cni/net.d/opt/cni/bin/var/run/挂在到kubelet内部。

3,安装完成后K8S的node节点将会呈现出下面的状态。NotReady是因为还没有部署网络,kubelet在/etc/cni/net.d/目录下面没有发现cni配置文件导致,这会随着后面网络的部署会得到解决。

$ kubectl get node
NAME        STATUS     AGE       VERSION
sdn-test1   NotReady   10s       v1.6.4
sdn-test2   NotReady   4m        v1.6.4
sdn-test3   NotReady   6s        v1.6.4

安装k8s-ovs

下面我们将会分两种情况进行安装,用户可以选择其中适合自己的一种。 1,使用yaml直接一键部署k8s-ovs到k8s集群中,并使其作为daemonset运行起来。 2,详细介绍k8s-ovs的每一个组件的安装步骤,以便用户对k8s-ovs的各个组件依赖关系有一个深入了解。

开始下列安装操作的前提是你已经按照上面步骤安装好了K8S集群。并且在每一台node节点上将ovsdb-serverovs-vswitchd运行起来了。

快速安装

快速安装需要你部署K8S 1.6以上版本的集群,如果是1.5或者1.4的集群请下载yaml文件做相应修改。

$ kubectl apply -f https://raw.githubusercontent.com/tangle329/k8s-ovs/master/rootfs/k8s-ovs.yaml

上面命令成功返回之后,你可以通过下列查询命令获取pod和node的运行状态来确认是否安装成功:

$ kubectl get pod --namespace=kube-system | grep k8s-ovs
k8s-ovs-etcd-h0fsc                                   1/1       Running   0          2h
k8s-ovs-node-c27jr                                   1/1       Running   0          2h
k8s-ovs-node-fxwwl                                   1/1       Running   0          2h
k8s-ovs-node-p09jd                                   1/1       Running   0          2h
$ kubectl get node
NAME        STATUS    AGE       VERSION
sdn-test1   Ready     11m       v1.6.4
sdn-test2   Ready     15m       v1.6.4
sdn-test3   Ready     11m       v1.6.4

至此,k8s-ovs部署完成,用户可以跳转到admin.md进行功能配置了。

详细安装

详细安装需要你部署K8S v1.4版本以上的集群。 下列命令需要到每台K8S的node节点运行,也可以在一台服务器上将对应文件编译好,然后使用批量部署工具将对应文件谁送到所有node节点上。 你也可以使用k8s-ovs-rpm项目中的RPM SPEC来制作本项目的RPM包,然后直接安装RPM包来完成下列命令的操作。

$ cd $GOPATH/src/
$ git clone https://github.com/tangle329/k8s-ovs.git
$ cd k8s-ovs
$ go build -o rootfs/opt/cni/bin/k8s-ovs k8s-ovs/cniclient
$ cp rootfs/opt/cni/bin/k8s-ovs /opt/cni/bin/
$ cp rootfs/opt/cni/bin/host-local /opt/cni/bin/
$ cp rootfs/opt/cni/bin/loopback /opt/cni/bin/
$ cp rootfs/etc/cni/net.d/80-k8s-ovs.conf /etc/cni/net.d/
$ go build -o rootfs/usr/sbin/k8s-ovs  k8s-ovs
$ cp rootfs/usr/sbin/k8s-ovs /usr/sbin/
$ cp rootfs/usr/sbin/k8s-sdn-ovs /usr/sbin/

其中第一个go build -o rootfs/opt/cni/bin/k8s-ovs k8s-ovs/cniclient生成的k8s-ovs是cni客户端,kubelet在创建和删除POD的时候会调用它来对POD的网络部分进行配置。第二个go build -o rootfs/usr/sbin/k8s-ovs k8s-ovs生成的k8s-ovs是我们的整个k8s-ovs的核心,前面提到的所有功能都由它来实现,它也是cni的服务端,接受并处理前面cni客户端的请求。注意请不要把/opt/cni/bin/目录设置到PATH环境变量中。

通常在kubelet使用了cni的情况下要执行了cp rootfs/etc/cni/net.d/80-k8s-ovs.conf /etc/cni/net.d/命令之后k8s的node节点才会进行ready状态,另外请确保在/etc/cni/net.d/中只有80-k8s-ovs.conf这个文件,执行完上面的命令后K8S的node节点状态为:

$ kubectl get node
NAME        STATUS    AGE       VERSION
sdn-test1   Ready     11m       v1.6.4
sdn-test2   Ready     15m       v1.6.4
sdn-test3   Ready     11m       v1.6.4

设置k8s-ovs的网络参数

设置网络参数之前,你需要搭建一个etcd服务,或者和K8S的apiserver共用一个etcd服务,所有K8S节点都需要能访问到该etcd服务。

搭建好etcd服务器之后,使用下列命令设置k8s-ovs的网络参数:

$ etcdctl set /k8s.ovs.com/ovs/network/config '{"Name":"k8ssdn", "Network":"172.11.0.0/16", "HostSubnetLength":10, "ServiceNetwork":"10.96.0.0/12", "PluginName":"k8s-ovs-multitenant"}'

其中,Network用于设置整个K8S集群POD网络的网段;HostSubnetLength用于设置每个node节点的子网长度;ServiceNetwork用于设置K8S中service的网段,这个需要和K8S apiserver的参数--service-cluster-ip-range指定的网络保持一致;PluginName用于设置租户模式,k8s-ovs-multitenant用于设置多租户模式,k8s-ovs-subnet用于设置单租户模式。

启动k8s-ovs

1,启动之前要在每个K8S node节点上设置访问K8S apiserver的环境变量,k8s-ovs就是通过该环境变量和apiserver进行通信的。 如果K8S使用的非加密方式则需要设置KUBERNETES_MASTER,你需要把下面两个变量apiserver_vipapiserver_port替换成你自己的apiserver服务的ip和port:

$ export KUBERNETES_MASTER="${apiserver_vip}:${apiserver_port}"

如果K8S使用加密方式则需要设置KUBECONFIG环境变量。我们使用的是加密方式所以设置的KUBECONFIG环境变量,其中每一台节点上面都需要有/etc/kubernetes/admin.conf这个文件,该文件是在部署加密方式服务的K8S集群时在K8S master上生成的,你需要将它依次拷贝到每一台node节点上:

$ export KUBECONFIG="/etc/kubernetes/admin.conf"

2,设置好环境变量后就可以运行k8s-ovs了。k8s-ovs有几个重要的选项--etcd-endpoints用于指定etcd服务的访问ip+port列表;如果是加密的etcd服务可以通过--etcd-cafile--etcd-certfile--etcd-keyfile来指定CA,证书,秘钥;--etcd-prefix用于指定k8s-ovs网络配置存放的目录,需要和前面网络配置小节中etcdctl set命令指定的目录一样;--hostname用于指定k8s-ovs所运行的node节点的名字,该名字需要和前面kubectl get node输出的名字一致,通常--hostname不需要指定,但有时候一些K8S集群的部署脚本会通过给kubelet传递--hostname-override选项来覆盖默认node节点名,这时就需要设置k8s-ovs的--hostname以便能够保持一致。 由于我们的环境没有覆盖node节点名,etcd也没有使用加密方式,所以运行命令如下:

$ /usr/sbin/k8s-ovs --etcd-endpoints=http://${etcd_ip}:2379 --etcd-prefix=/k8s.ovs.com/ovs/network --alsologtostderr --v=5

至此,k8s-ovs部署完成,用户可以跳转到admin.md进行功能配置了。

项目码云地址:https://gitee.com/mirrors/k8s-ovs

磁力搜索网站导航2020更新

https://www.cnblogs.com/cilisousuo/p/12099547.html

K8S-OVS使用Openvswitch为提供SDN功能支持单租户模式和多租户模式的更多相关文章

  1. 十五天精通WCF——第三天 client如何知道server提供的功能清单

     通常我们去大保健的时候,都会找姑娘问一下这里能提供什么服务,什么价格,这时候可能姑娘会跟你口述一些服务或者提供一份服务清单,这样的话大 家就可以做到童嫂无欺,这样一份活生生的例子,在wcf中同样是一 ...

  2. 中国区Windows Azure 提供的功能以及与国外的差异

    当前中国服务提供的功能 目前,中国服务中包括以下 Azure 功能. 计算 - 虚拟机(用于 IaaS 服务) 计算 - 云服务(用于 PaaS 服务) 计算 - 网站 数据服务 - 存储(用于 Bl ...

  3. springdata 动态查询 是用来查询的 仅提供查询功能

    springdata 动态查询 是用来查询的 仅提供查询功能

  4. Android 9 新功能 及 API 介绍(提供了实用的模块化的功能支持,包括 人工智能)

      Android 9(API 级别 28)为用户和开发者引入了众多新特性和新功能. 本文重点介绍面向开发者的新功能. 要了解新 API,请阅读 API 差异报告或访问 Android API 参考. ...

  5. SQLAlchemy-Utils,提供choice功能

    SQLAlchemy操作数据库建表时,无法像Django一样提供choice方法,我们开头导入SQLAlchemy-Utils来为我们提供这个功能 pip3 install sqlalchemy-ut ...

  6. [转]十五天精通WCF——第三天 client如何知道server提供的功能清单

     通常我们去大保健的时候,都会找姑娘问一下这里能提供什么服务,什么价格,这时候可能姑娘会跟你口述一些服务或者提供一份服务清单,这样的话大 家就可以做到童嫂无欺,这样一份活生生的例子,在wcf中同样是一 ...

  7. ETL工具的功能和kettle如何来提供这些功能

    不多说,直接上干货! 大家会有一个疑惑,本系列博客是Kettle,那怎么扯上ETL呢? Kettle是一款国外开源的ETL工具,纯java编写,可以在Window.Linux.Unix上运行. 说白了 ...

  8. Mybatis内置的日志工厂提供日志功能

    Mybatis内置的日志工厂提供日志功能,具体的日志实现有以下几种工具: SLF4J Apache Commons Logging Log4j 2 Log4j JDK logging 具体选择哪个日志 ...

  9. C#的常见集合接口提供的功能

    C#的常见集合接口提供的功能 这里的功能都是泛型版本的常见功能,列出来,也许后面用得上吧,没有放非泛型版本,因为觉得用得不多,也就没有整理 IEnumerable<T> ICollecti ...

随机推荐

  1. Java 动态代理实现

    1.依赖 java.lang.reflect.Proxy - 提供了静态方法去创建动态代理类的实例: Interface InvocationHandler - 一个代理实例调用处理程序实现的接口 2 ...

  2. PyCharm 上传项目到码云托管平台

    码云平台设置: >先到码云 https://gitee.com/ 注册账号 >创建项目,选择合适项目,点击加号 >填写项目的基础信息 在码云上就创建了项目 >安装 Git    ...

  3. Spring - Spring 常用注解

    概述 简单整理一些 Spring 的注解 这个算是一个 水一波 类型的整理 内容不全 分类可能有的地方不会太符合逻辑 而且时间也不太充裕 先把自己想写的写下来, 然后随缘整理吧 约定 版本 Sprin ...

  4. web学习---html,js,php,mysql一个动态网页获取流程

    使用bootstrap的cms模版系统搭建了一个信息管理系统.通过这个系统学习动态网页获取的工作流程. 抓包分析一个页面的数据请求流程如下图所示: 同样,对于需要向数据库插入数据,可以使用ajax接口 ...

  5. Azure IoT Hub 十分钟入门系列 (3)- 使用消息路由将原始设备数据记录存档

    本文主要分享一个案例: 10分钟使用消息路由将原始设备数据记录存档 B站视频讲解:https://www.bilibili.com/video/av90223893/ 本文主要有如下内容: 1.理解什 ...

  6. Mysql与PostgreSql数据库学习笔记

    mysql 从最基础的数据引擎,到进程结构,都不能支持数据版本.导致其职能阻塞“并发”,不支持最基本的事务,innodb达不到基本事务要求,任何写数据,都导致整个表锁住.充其量只能算是一个玩具,或者说 ...

  7. 疫情下的在线上课方案:QQ直播+蓝墨云班课

    目录 疫情下的在线上课方案:QQ群视频(腾讯课堂)+蓝墨云班课 使用QQ进行直播 材料 QQ直播步骤 其他问题 使用蓝墨云班课加强学习效果 教材问题 我的直播-小学生硬笔书法基础 我的直播 - C程序 ...

  8. 洛谷P1064 金明的预算方案(01背包)

    题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NNN元钱就行” ...

  9. Python(一)list tuple dict set

    这篇文章是为了复习之前学的python的数据结构: 原文链接:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a ...

  10. ajax请求ashx跨域问题解决办法

    ajax请求ashx跨域问题解决办法 https://blog.csdn.net/windowsliusheng/article/details/51583566 翻译windowsliusheng  ...