ip地址 k8s 显示pod_如何修改pod ip地址段
說明
本周在部署服務時,遇到了一個錯誤。因為不方便截圖,這邊只說明一下錯誤提示。我這里的網絡為cannal,具體錯誤為:
error?in?getting?result?from?AddNetworkList:?failed?to?allocate?for?range?0:?no?IP?addresses?available?in?range?set:?192.168.1.33-192.168.1.62
分析
從字面意思是說,在這個ip地址段已經沒有可用的ip了,說明已經分配完了。
而k8s的網絡有pod 網絡、service網絡以及宿主機網絡,這個提示很明顯是pod網絡。既然是沒有可用ip可分配了,1.33~1.62也就只有30個ip地址,那就去看看pod cidr的規劃,以及這個服務調度到的node上所分配的pod地址段和已經在node上運行的pod。
controllermanager中的cidr相關配置:
--cluster-cidr=192.168.1.0/24--node-cidr-mask-size=27--allocate-node-cidrs=true
問題node已分配網絡:
kubectl get node nodexxxx -o yaml >>nodexxxx.yamlcat nodexxxx.yamlspec:podCIDR:192.168.1.32/27
問題node上已經運行的pod數量:
[root@kube-master]$ kubectl get po -A -o wide --kubeconfig=/etc/kubernetes/kubelet.kubeconfig |grep node_ip |wc -l30
由上圖我們來算一下:
192.168.1.0/24?node掩碼為27?那么每個node上只能分配到30個可用pod?ip,則最多能有30個pod運行,而問題node上剛好已經跑了30個pod,當再有pod調度過來,那就有問題了(其實按理說都不應該再被調度過來的,這一點需要看看k8s的調度策略)。而且算下來,就支持8個node,每個node上30個pod,似乎是有點少。
由以上做一個總結:出現問題的根本原因是pod cidr規劃的不夠完美,需要做一些修改。
解決辦法
由上面可知,決定擴大cidr。這里計劃是將192.168.1.0/24改為192.168.1.0/20,node掩碼由27改為24。另外,由于集群中已經運行了一些pod,所以需要先修改集群的cidr,然后新增幾個節點,把已經運行的服務強制調度到新的節點上,然后刪除舊的節點,然后再重新加入。因為node分配到的pod cidr是一開始就分配好了,即使修改了集群cidr,還是對已經存在的node不起作用,另外我這里只有一個master,所以master不會重建。
具體過程
修改組件中關于cidr的設置并重啟,kubelet也重啟下。
修改calico ip pool。
1.保存現有ip pool信息kubectl get ippool k8s-ippool -o yaml > k8s-ippool.yaml2.修改k8s-ippool.yaml中cidr為新的cidr3.刪除現有ip poolkubectl delete ippool k8s-ippool4.創建新的ip poolkubectl create -f k8s-ippool.yaml
更新節點網絡
原因:容器網絡擴大了,假如我們不剔除舊的node,而直接添加新的node,則新舊? node之間的容器網絡是不通的,所以需要更新一下舊node的iptables規則,以及重啟flannel。
# 每個node都要操作
1.查看當前iptables規則
iptables-save?|?grep?-v?KUBE-?|?grep?-v?cali-?|?grep?-v?LOADBALANCER-?|?grep?-v?CNI-?|?grep?192.1682.重啟flnanel
3.查看要執行的命令
iptables-save -t nat| grep -v KUBE- | grep -v cali- | grep -v LOADBALANCER- | grep -v CNI- | grep 192.168.1.0/24 | sed 's/-A/-D/' | xargs -L 1 echo iptables -t natiptables-save -t filter| grep -v KUBE- | grep -v cali- | grep -v LOADBALANCER- | grep -v CNI- | grep 192.168.1.0/24 | sed 's/-A/-D/' | xargs -L 1 echo iptables -t filter
4.修改iptables規則
iptables-save -t nat| grep -v KUBE- | grep -v cali- | grep -v LOADBALANCER- | grep -v CNI- | grep 192.168.1.0/24 | sed 's/-A/-D/' | xargs -L 1 iptables -t natiptables-save -t filter| grep -v KUBE- | grep -v cali- | grep -v LOADBALANCER- | grep -v CNI- | grep 192.168.1.0/24 | sed 's/-A/-D/' | xargs -L 1 iptables -t filter
5.確認iptabes規則正確
iptables-save?|?grep?-v?KUBE-?|?grep?-v?cali-?|?grep?-v?LOADBALANCER-?|?grep?-v?CNI-?|?grep?192.1684. 維護舊的節點
1.增加節點,并確認網絡
2.驅逐舊的節點上的服務
3.刪除舊的節點
4.重新加入舊的節點,并確認網絡
總結
以上是生活随笔為你收集整理的ip地址 k8s 显示pod_如何修改pod ip地址段的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编译原理 实例
- 下一篇: H5 活动利用Canvas把用户信息和二