k8s与各网络插件集成(flannel calico canal kube-router romana cni-genie)
通用说明
-
如果多次 换不同网络插件实验,每次实验 前先把
/etc/cni/net.d/
目录下文件清空rm -rf /etc/cni/net.d/* 复制代码
flannel
# 创建flannel目录下载相关文件 mkdir flannel && cd flannel wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml # 修改配置 # 此处的ip配置要与kubeadm的pod-network参数配置的一致 net-conf.json: | { "Network": "192.168.0.0/16", "Backend": { "Type": "vxlan" } } # 修改镜像 image: registry.cn-shanghai.aliyuncs.com/gcr-k8s/flannel:v0.10.0-amd64 # 如果Node有多个网卡的话,参考flannel issues 39701, # https://github.com/kubernetes/kubernetes/issues/39701 # 目前需要在kube-flannel.yml中使用--iface参数指定集群主机内网网卡的名称, # 否则可能会出现dns无法解析。容器无法通信的情况,需要将kube-flannel.yml下载到本地, # flanneld启动参数加上--iface=<iface-name> containers: - name: kube-flannel image: registry.cn-shanghai.aliyuncs.com/gcr-k8s/flannel:v0.10.0-amd64 command: - /opt/bin/flanneld args: - --ip-masq - --kube-subnet-mgr - --iface=eth1 # 启动 kubectl apply -f kube-flannel.yml # 查看 kubectl get pods --namespace kube-system kubectl get svc --namespace kube-system 复制代码
calico
1.配置启动etcd集群
# 本次实验使用与k8s一个etcd集群 # 生境环境建议使用单独的一套集群 复制代码
2.配置启动calico
# 创建calico目录下载相关文件 mkdir calico && cd calico wget https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/rbac.yaml wget https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/calico.yaml # 如果启用了RBAC(默认k8s集群启用),配置RBAC kubectl apply -f rbac.yaml # 修改calico.yaml文件中名为calico-config的ConfigMap中的etcd_endpoints参数为自己的etcd集群 etcd_endpoints: "http://11.11.11.111:2379,http://11.11.11.112:2379,http://11.11.11.113:2379" # 修改镜像为国内镜像 sed -i 's@image: quay.io/calico/@image: registry.cn-shanghai.aliyuncs.com/gcr-k8s/calico-@g' calico.yaml # 启动 kubectl apply -f calico.yaml # 查看 kubectl get pods --namespace kube-system kubectl get svc --namespace kube-system 复制代码
3.参考文档
- https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/calico#installing-with-the-etcd-datastore
canal
# 创建flannel目录下载相关文件 mkdir canal && cd canal wget https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/canal/rbac.yaml wget https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/canal/canal.yaml # 修改配置 # 此处的ip配置要与kubeadm的pod-network参数配置的一致 net-conf.json: | { "Network": "192.168.0.0/16", "Backend": { "Type": "vxlan" } } # 修改calico镜像 sed -i 's@image: quay.io/calico/@image: registry.cn-shanghai.aliyuncs.com/gcr-k8s/calico-@g' canal.yaml # 修改flannel镜像 image: registry.cn-shanghai.aliyuncs.com/gcr-k8s/flannel:v0.10.0-amd64 # 如果Node有多个网卡的话,参考flannel issues 39701, # https://github.com/kubernetes/kubernetes/issues/39701 # 目前需要在kube-flannel.yml中使用--iface参数指定集群主机内网网卡的名称, # 否则可能会出现dns无法解析。容器无法通信的情况,需要将kube-flannel.yml下载到本地, # flanneld启动参数加上--iface=<iface-name> containers: - name: kube-flannel image: registry.cn-shanghai.aliyuncs.com/gcr-k8s/flannel:v0.10.0-amd64 command: [ "/opt/bin/flanneld", "--ip-masq", "--kube-subnet-mgr", "--iface=eth1" ] # 启动 kubectl apply -f rbac.yaml kubectl apply -f canal.yaml # 查看 kubectl get pods --namespace kube-system kubectl get svc --namespace kube-system 复制代码
kube-router
# 本次实验重新创建了集群,使用之前测试其他网络插件的集群环境没有成功 # 可能是由于环境干扰,实验时需要注意 # 创建kube-router目录下载相关文件 mkdir kube-router && cd kube-router wget https://raw.githubusercontent.com/cloudnativelabs/kube-router/master/daemonset/kubeadm-kuberouter.yaml wget https://raw.githubusercontent.com/cloudnativelabs/kube-router/master/daemonset/kubeadm-kuberouter-all-features.yaml # 以下两种部署方式任选其一 # 1. 只启用 pod网络通信,网络隔离策略 功能 kubectl apply -f kubeadm-kuberouter.yaml # 2. 启用 pod网络通信,网络隔离策略,服务代理 所有功能 # 删除kube-proxy和其之前配置的服务代理 kubectl apply -f kubeadm-kuberouter-all-features.yaml kubectl -n kube-system delete ds kube-proxy # 在每个节点上执行 docker run --privileged --net=host registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:v1.10.2 kube-proxy --cleanup # 查看 kubectl get pods --namespace kube-system kubectl get svc --namespace kube-system 复制代码
romana
# 创建flannel目录下载相关文件 mkdir romana && cd romana wget https://raw.githubusercontent.com/romana/romana/master/containerize/specs/romana-kubeadm.yml # 修改镜像 sed -i 's@gcr.io/@registry.cn-hangzhou.aliyuncs.com/@g' romana-kubeadm.yml sed -i 's@quay.io/romana/@registry.cn-shanghai.aliyuncs.com/gcr-k8s/romana-@g' romana-kubeadm.yml # 启动 kubectl apply -f romana-kubeadm.yml # 查看 kubectl get pods --namespace kube-system kubectl get svc --namespace kube-system 复制代码
CNI-Genie
# CNI-Genie是华为开源的网络组件,可以使k8s同时部署多个网络插件 # 在k8s集群中安装calico组件 # 在k8s集群中安装flannel组件 # 在k8s集群中安装Genie组件 mkdir CNI-Genie && cd CNI-Genie wget https://raw.githubusercontent.com/Huawei-PaaS/CNI-Genie/master/conf/1.8/genie.yaml sed -i 's@image: quay.io/cnigenie/v1.5:latest@image: registry.cn-shanghai.aliyuncs.com/gcr-k8s/cnigenie-v1.5:latest@g' genie.yaml kubectl apply -f genie.yaml # 查看 kubectl get pods --namespace kube-system kubectl get svc --namespace kube-system # 测试 cat >nginx-calico.yml<<EOF apiVersion: v1 kind: Pod metadata: name: nginx-calico labels: app: web annotations: cni: "calico" spec: containers: - name: nginx image: nginx:alpine imagePullPolicy: IfNotPresent ports: - containerPort: 80 EOF cat >nginx-flannel.yml<<EOF apiVersion: v1 kind: Pod metadata: name: nginx-flannel labels: app: web annotations: cni: "flannel" spec: containers: - name: nginx image: nginx:alpine imagePullPolicy: IfNotPresent ports: - containerPort: 80 EOF kubectl apply -f nginx-calico.yml kubectl apply -f nginx-flannel.yml # 查看 kubectl get pods -o wide # 测试网络通信 kubectl exec nginx-calico -i -t -- ping -c4 1.1.1.1 kubectl exec nginx-flannel -i -t -- ping -c4 1.1.1.1 # 由于先启动的flannel,然后k8s创建了coredns,所以使用flannel cni的能正常使用dns # 使用calico cni无法使用正常dns # 测试dns kubectl exec nginx-calico -i -t -- ping -c4 www.baidu.com kubectl exec nginx-flannel -i -t -- ping -c4 www.baidu.com
本文转自掘金- k8s与各网络插件集成(flannel calico canal kube-router romana cni-genie)

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
k8s与监控--引入traefik做后端服务的反代
前言 对于监控这块,我们基于prometheus实现,当然做了大量的优化,包括前面所讲到的配置接口化。我们整个监控的UI部分,没有采用社区流行的grafana,而是自己实现了一套。我们后端的服务按照功能拆分了几大块,例如拓扑,网 络流量,配置,元数据等等。拆分的好处就是可以解耦,各个模块功能的升级不影响其他模块。但是对于前端来说,只暴露一个入口,引入一个反代即可。 刚开始选用了nginx,后期由于要加入鉴权的功能,nginx就不能满足我们的需求了。这个时候基本上需求就变为选择一个可编程的反代。当然我在做电商的时候,我们经常采用openresty,结合nginx和lua,可以实现。而且社区基于openresty实现了kong和orange等api网关。 但是考虑我们的场景,整个项目并没有特别高的并发和性能要求,而且我们团队最熟悉的是golang和python。所以选择了traefik。我们可以在后期,可以写各种的插件来满足我们的需求。 traefik简介 Træfɪk 是一个为了让部署微服务更加便捷而诞生的现代HTTP反向代理、负载均衡工具。 它支持多种后台 (Docker, Swarm...
- 下一篇
K8S常用命令
一、Kubernetes介绍 Kubernetes是Google在2014年6月开源的一 个容器集群管理系统,使用Go语言开发,Kubernetes也叫K8S。K8S是Google内部一个叫Borg的容器集群管理系统衍生出来的,Borg已经在Google大规模生产运行十年之久。K8S主要用于自动化部署、扩展和管理容器应用,提供了资源调度、部署管理、服务发现、扩容缩容、监控等一整套功能。2015年7月,Kubernetes v1.0正式发布,截止到2017年9月29日最新稳定版本是v1.8.0 Kubernetes目标是让部署容器化应用简单高效。 官方网站:www.kubernetes.io Kubernetes主要功能: 1、数据卷 Pod中容器之间共享数据,可以使用数据卷。 2、应用程序健康检查 容器内服务可能进程堵塞无法处理请求,可以设置监控检查策略保证应用健壮性。 3、复制应用程序实例 控制器维护着Pod副本数量,保证一个Pod或一组同类的Pod数量始终可用。 4、弹性伸缩 根据设定的指标(CPU利用率)自动缩放Pod副本数。 5、服务发现 使用环境变量或D...
相关文章
文章评论
共有0条评论来说两句吧...