k8s與各網路外掛整合
通用說明
-
如果多次換不同網路外掛實驗,每次實驗前先把
/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,# 目前需要在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 如果啟用了RBAC(預設k8s叢集啟用),配置RBACkubectl apply -f rbac.yaml# 修改calico.yaml檔案中名為calico-config的ConfigMap中的etcd_endpoints引數為自己的etcd叢集etcd_endpoints: ""# 修改映象為國內映象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-systemkubectl get svc --namespace kube-system
3.參考文件
canal
# 建立flannel目錄下載相關檔案mkdir canal && cd canal wget 修改配置# 此處的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,# 目前需要在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-systemkubectl get svc --namespace kube-system
kube-router
# 本次實驗重新建立了叢集,使用之前測試其他網路外掛的叢集環境沒有成功# 可能是由於環境干擾,實驗時需要注意# 建立kube-router目錄下載相關檔案mkdir kube-router && cd kube-router wget wget 以下兩種部署方式任選其一# 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 修改映象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-systemkubectl get svc --namespace kube-system
CNI-Genie
# CNI-Genie是華為開源的網路元件,可以使k8s同時部署多個網路外掛# 在k8s叢集中安裝calico元件# 在k8s叢集中安裝flannel元件# 在k8s叢集中安裝Genie元件mkdir CNI-Genie && cd CNI-Genie wget 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# 測試dnskubectl exec nginx-calico -i -t -- ping -c4 kubectl exec nginx-flannel -i -t -- ping -c4
總結
kube-router效能損失最小,時延最小,其他網路外掛效能差距不大。除了flannel沒有網路隔離策略,其他均支援網路隔離策略。CNI-Genie是一個可以讓k8s使用多個cni網路外掛的元件,暫時不支援隔離策略。
理論結果: kube-router > calico > canal = flannel = romana
作者:CountingStars_
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2370/viewspace-2820098/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- k8s網路外掛K8S
- K8S Calico網路外掛K8S
- Kubernetes CNI網路外掛
- .net持續整合sonarqube篇之 sonarqube與jenkins整合(外掛模式)Jenkins模式
- Mybatis外掛擴充套件以及與Spring整合原理MyBatis套件Spring
- iOS--React Native網路請求外掛iOSReact Native
- docker筆記31-網路外掛flannelDocker筆記
- 社會化分享外掛整合分享
- k8s~envoy上新增wasm外掛K8SASM
- k8s CSI 外掛註冊原理K8S
- K8S儲存外掛-FlexVolume && CSIK8SFlex
- HttpCanary使用指南——各種神奇的外掛HTTPPCA
- apisix~lua外掛開發與外掛註冊API
- 用Fundebug外掛記錄網路請求異常
- vue-quill-editor富文字外掛 · 解析網路.txtVueUI
- kubernetes實踐之四:Flannel網路外掛安裝
- Flannel和Calico網路外掛工作流程對比
- 硬核反外掛 Cocos 引擎一鍵整合網易易盾安全防護
- iOS持續整合(三)——fastlane 自定義外掛iOSAST
- Java整合系列:高效構建自定義外掛Java
- Visual Studio 整合了.NET 升級助手外掛
- openstack neutron網路外掛學習(三)【Open vSwitch實現】
- Babel外掛原理與配置Babel
- verilog vscode 與AI 外掛VSCodeAI
- k8s網路模型與叢集通訊K8S模型
- 手寫一個Redis和Spring整合的外掛RedisSpring
- 將.Net AI外掛整合到自己的程式中AI
- 《Android原生整合虹軟SDK開發uniapp外掛》AndroidAPP
- Vue外掛打包與釋出Vue
- Notepad++ 使用技巧與外掛
- 前端常用外掛與軟體前端
- 【神器】vscode常用外掛與配置VSCode
- 使用 webpack 的各種外掛提升你的開發效率Web
- 修改公司網站 外掛,如何在公司網站後臺安裝和管理外掛網站
- Grails整合Quartz外掛實現定時任務(Job)AIquartz
- Rainbond通過外掛整合SkyWalking,實現APM即插即用AI
- Rainbond透過外掛整合SkyWalking,實現APM即插即用AI
- 在K8S中,常用的CNI網路外掛有哪些?並說一下它們的工作原理和區別。K8S