呼叫鯨魚一號,呼叫鯨魚一號,聽到請回答,over
圖片來源:Docker (@Docker) / Twitter
到目前為止的安裝每個 node 都會顯示 NotReady
kubectl get nodes
output...
NAME STATUS ROLES AGE VERSION
whale1 NotReady control-plane 3d16h v1.25.1
whale2 NotReady <none> 3d10h v1.25.1
whale3 NotReady <none> 3d1h v1.25.1
如果詳細看 node
kubectl describe node whale1
在 Conditions
Ready
會顯示原因,需要安裝 network plugin
container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
因為網路架構太多樣,Kubernetes 使用了 CNI (Container Network Interface) 讓使用者自己挑選適合的 Plugin
Kubernetes 對 Plugin 提出兩項要求:
底下列出兩個常見的 CNI plugin
Flannel 算是入門的 CNI plugin
對於 Kubernetes 的要求,Flannel 透過 layer 3 實現
圖片來源:Kubernetes Journey — Up and running out of the cloud — flannel | by Marcos Vallim | ITNEXT
Calico 較為彈性,提供更多網路策略功能,能與 Kubernetes Network Policy 整合使用
對於 Kubernetes 的要求,Flannel 透過 layer 3 實現
圖片來源:Flannel vs Calico : A battle of L2 vs L3 based networking | by shashank Jain | Medium
兩種都裝過... 就簡單的列出安裝方式~
先回頭看看之前 kubeadm init
的參數 pod-network-cidr
kubectl cluster-info dump | grep -m 1 cluster-cidr
output... 我的設定為
192.168.0.0/16
"--cluster-cidr=192.168.0.0/16",
如果設定的跟你選用的 plugin 預設的不同的話需要自行更改
wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
Flannel 預設的 pod-network-cidr
為 10.244.0.0/16
,如果不同須改 kube-flannel.yml
找到 ConfigMap(kube-flannel-cfg) > data > net-conf.json
kind: ConfigMap
apiVersion: v1
metadata:
name: kube-flannel-cfg
...
data:
...
net-conf.json: |
{
"Network": "192.168.0.0/16",
"Backend": {
"Type": "vxlan"
}
}
改完後部署
kubectl apply -f kube-flannel.yml
wget https://raw.githubusercontent.com/projectcalico/calico/v3.24.1/manifests/calico.yaml
pod-network-cidr
為 192.168.0.0/16
,如果不同也無需做更改,Calico 會自動偵測~
kubectl apply -f calico.yaml
使用 watch 等待安裝完成,會顯示 Pod RUNNING
,Calico 會裝比較久~
watch kubectl get pods -n calico-system
要解除安裝要清除的相關設定:
kubectl delete -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
sudo ip link del cni0
sudo ip link del flannel.1
sudo rm /etc/cni/net.d/10-flannel.conflist
我的 Calico 是使用 iptables 紀錄,對於不太懂指令的我要清乾淨還真的有點難...
kubectl delete -f https://raw.githubusercontent.com/projectcalico/calico/v3.24.1/manifests/calico.yaml
sudo rm /etc/cni/net.d/10-calico.conflist /etc/cni/net.d/calico-kubeconfig
sudo reboot
檢查 iptables
sudo iptables -S | grep -oP '(?<!^:)cali-[^ ]+' | wc -l
若未清除 iptables 繼續...
kubectl label nodes --all projectcalico.org/ds-ready-
等 Calico Pod 都暫停
使用官方提供的移除腳本
curl https://raw.githubusercontent.com/projectcalico/calico/master/calico/hack/remove-calico-policy/remove-calico-policy.sh -o remove-calico-policy.sh
kubectl create configmap remove-calico-policy-config -n=kube-system --from-file=./remove-calico-policy.sh
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/master/calico/hack/remove-calico-policy/iptables-remover-ds.yaml
kubectl delete -f https://raw.githubusercontent.com/projectcalico/calico/master/calico/hack/remove-calico-policy/iptables-remover-ds.yaml
kubectl delete configmap remove-calico-policy-config -n=kube-system
calico/calico/hack/remove-calico-policy at master · projectcalico/calico
若還不行...
sudo iptables-save | grep -i cali | sudo iptables -F
sudo iptables-save | grep -i cali | sudo iptables -X
sudo reboot
關於網路的部分還是新手,只有在 cisco/juniper 模擬器裡配過,連 BGP 的概念也是前幾個月才學到
如果有錯誤的地方歡迎指正~