修改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访问也能正常访问。