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 '[email protected]/@registry.cn-hangzhou.aliyuncs.com/@g' romana-kubeadm.yml
sed -i '[email protected]/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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章