修改k8s pod网段

实验环境

[root@vms71 ~]# kubectl get nodes
NAME            STATUS   ROLES                  AGE     VERSION
vms71.rhce.cc   Ready    control-plane,master   4d12h   v1.23.2
vms72.rhce.cc   Ready    <none>                 4d12h   v1.23.2
[root@vms71 ~]# 

实验目的

在初始化集群时,指定pod网段为10.244.0.0/16。

[root@vms71 ~]# kubectl get cm kubeadm-config -n kube-system -o yaml | grep -i podsub
      podSubnet: 10.244.0.0/16
[root@vms71 ~]#

本实验目的是在不重置集群的情况下变更pod所在网段。

实验准备

先创建一个pod1,对应的yaml文件如下。

[root@vms71 ~]# cat pod1.yaml 
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: pod1
  name: pod1
spec:
  terminationGracePeriodSeconds: 0
  volumes:
  - name: v1
    hostPath:
      path: /xx
  containers:
  - image: nginx
    imagePullPolicy: IfNotPresent
    name: c1
    volumeMounts:
    - name: v1
      mountPath: /usr/share/nginx/html/
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}
[root@vms71 ~]#

创建出来此pod

[root@vms71 ~]# kubectl apply -f pod1.yaml 
pod/pod1 created
[root@vms71 ~]#

查看pod的IP,可以看到为10.244.5.210 。

[root@vms71 ~]# kubectl get pods -o wide 
NAME  READY   STATUS  RESTARTS    AGE   IP             NODE  
pod1   1/1     Running   0          11m   10.244.5.210   vms72.rhce.cc  [root@vms71 ~]#

修改pod1里nginx主页的内容为111,然后访问pod1的IP测试。

[root@vms71 ~]# kubectl exec pod1 -- sh -c "echo 111 > /usr/share/nginx/html/index.html"
[root@vms71 ~]# 10.244.5.210
111
[root@vms71 ~]#

为pod1创建一个名字为svc1的service。

[root@vms71 ~]# kubectl get svc svc1
NAME   TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
svc1   ClusterIP   10.107.99.13   <none>        80/TCP    4s
[root@vms71 ~]#

通过访问svc1的IP也能访问到pod1。

[root@vms71 ~]# curl 10.107.99.13
111
[root@vms71 ~]#

这个svc1的对应关联到pod的IP是10.244.5.210,即pod1的IP。

[root@vms71 ~]# kubectl get ep svc1
NAME   ENDPOINTS         AGE
svc1   10.244.5.210:80   8m59s
[root@vms71 ~]#

修改k8s配置

修改k8s里pod所使用的subnet,涉及到pod网段的位置包括
calico
controller-manager
kube-proxy
所有节点

修改calico的配置

[root@vms71 ~]# kubectl edit ippool default-ipv4-ippool 
ippool.crd.projectcalico.org/default-ipv4-ippool edited
[root@vms71 ~]#

把里面的
cidr: 10.244.0.0/16
换成
cidr: 10.245.0.0/16

修改controller-manager的配置

[root@vms71 ~]# vim /etc/kubernetes/manifests/kube-controller-manager.yaml

找到
--cluster-cidr=10.244.0.0/16
替换成
--cluster-cidr=10.245.0.0/16

修改kube-proxy的配置

[root@vms71 ~]# kubectl edit cm kube-proxy -n kube-system

configmap/kube-proxy edited
[root@vms71 ~]#

这里修改的是,把
clusterCIDR: 10.244.0.0/16
替换成
clusterCIDR: 10.245.0.0/16

修改节点配置

把每个节点里所用网段改成10.245.0.0/16。

[root@vms71 ~]# kubectl get nodes vms72.rhce.cc  -o yaml > vms72.yaml
[root@vms71 ~]# kubectl get nodes vms71.rhce.cc  -o yaml > vms71.yaml
[root@vms71 ~]# sed -i 's/10.244/10.245/' vms71.yaml
[root@vms71 ~]# sed -i 's/10.244/10.245/' vms72.yaml
[root@vms71 ~]# kubectl delete  nodes vms72.rhce.cc 
node "vms72.rhce.cc" deleted
[root@vms71 ~]# kubectl delete  nodes vms71.rhce.cc 
node "vms71.rhce.cc" deleted
[root@vms71 ~]#
[root@vms71 ~]# kubectl apply -f vms71.yaml 
node/vms71.rhce.cc created
[root@vms71 ~]# kubectl apply -f vms72.yaml 
node/vms72.rhce.cc created
[root@vms71 ~]#

重启服务

重启vms71上的kubelet

[root@vms71 ~]# systemctl restart kubelet
[root@vms71 ~]#

重启pod

[root@vms71 ~]# kubectl get pod pod1 -o yaml > /tmp/pod1.yaml ; kubectl delete  pod pod1 ; kubectl apply -f /tmp/pod1.yaml
pod "pod1" deleted
pod/pod1 created
[root@vms71 ~]#

开始检测

查看pod状态

[root@vms71 ~]# kubectl get pods
NAME   READY   STATUS      RESTARTS   AGE
pod1   0/1     Completed   0          13m
[root@vms71 ~]# 
[root@vms71 ~]# kubectl get pods
NAME   READY   STATUS    RESTARTS      AGE
pod1   1/1     Running   1 (62s ago)   13m
[root@vms71 ~]# 
[root@vms71 ~]# 
[root@vms71 ~]# kubectl get pods -o wide
NAME   READY   STATUS    RESTARTS      AGE   IP             NODE            
pod1   1/1     Running   1 (64s ago)   13m   10.245.5.195   vms72.rhce.cc       
[root@vms71 ~]# 

这里可以看到pod的IP已经是10.245网段的了。
查看svc所关联的pod。

[root@vms71 ~]# 
[root@vms71 ~]# kubectl get ep svc1
NAME   ENDPOINTS         AGE
svc1   10.245.5.195:80   12m
[root@vms71 ~]# 

这里svc关联的pod的地址也变成了10.245网段了。

[root@vms71 ~]# curl 10.245.5.195
111
[root@vms71 ~]#

使用pod的新地址可以正常访问。

[root@vms71 ~]#kubectl get svc svc1
NAME   TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
svc1   ClusterIP   10.107.99.13   <none>        80/TCP    12m
[root@vms71 ~]# curl 10.107.99.13
111
[root@vms71 ~]# 

通过svc访问也能正常访问。

相关新闻

发表回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

                                                                                                                                    RHCE9学习指南连载,点击阅读