修改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.yaml
cat nodexxxx.yaml
spec:
  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 -l
30 

 由上圖我們來算一下:

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不會重建

具體過程

  1. 修改組件中關於cidr的設置並重啟,kubelet也重啟下。

  2. 修改calico ip pool。

 1.保存現有ip pool信息
   kubectl get ippool k8s-ippool -o yaml > k8s-ippool.yaml
  2.修改k8s-ippool.yaml中cidr為新的cidr
  3.刪除現有ip pool
   kubectl delete ippool k8s-ippool
  4.創建新的ip pool
   kubectl create -f k8s-ippool.yaml
  1. 更新節點網絡

     原因:容器網絡擴大了,假如我們不剔除舊的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.168

 2.重啟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 nat
iptables-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 nat
iptables-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.168

 4. 維護舊的節點

    1.增加節點,並確認網絡

    2.驅逐舊的節點上的服務

    3.刪除舊的節點

    4.重新加入舊的節點,並確認網絡

 https://zhuanlan.zhihu.com/p/87791837


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM