- 第七章 Kubernetes 固定 Pod IP 地址方法
- 一、自定义 IP 地址池
- 1、下载 calico 管理工具 calicoctl
- 2、设置 IP 固定方式
- 3、创建 IP 地址池
- 二、以 redis-cluster 为例,来固定 Pod IP 地址的案例
- 1、多个 Pod 固定 IP 地址池
- 修改配置文件
- 查看运行结果
- 2、单个 pod 固定IP
- 总结
一、自定义 IP 地址池
我部署的 Kubernetes 集群采用的网络组件是 calico ,这个需要下载 calico 管理工具 calicoctl 来创建自定义的地址池。
1、下载 calico 管理工具 calicoctlcurl -O -L https://github.com/projectcalico/calicoctl/releases/download/v3.18.4/calicoctl chmod +x calicoctl cp calicoctl /usr/local/bin/2、设置 IP 固定方式
修改配置文件 vim /etc/cni/net.d/10-calico.conflist,将 ipam 类型修改为 calico-ipam
### 查看现有地址池 [root@k8s-master-01 ~]# calicoctl get ippool NAME CIDR SELECTOR default-ipv4-ippool 10.100.0.0/16 all() ### 设置地址池配置文件 ### 创建第一个地址池 [root@k8s-master-01 ~]# cat ippool1.yaml apiVersion: projectcalico.org/v3 kind: IPPool metadata: name: new-pool1 spec: blockSize: 31 cidr: 10.10.10.0/30 #这里设置的地址池可用 IP 的个数是四个,从 0--3 ipipMode: Always natOutgoing: true ### 创建命令 calicoctl create -f ippool1.yaml ### 创建第二个地址池 [root@k8s-master-01 ~]# cat ippool2.yaml apiVersion: projectcalico.org/v3 kind: IPPool metadata: name: new-pool2 spec: blockSize: 31 cidr: 10.10.10.4/31 #这里设置的地址池的可以 IP 是两个,分别是 4--5 ipipMode: Always natOutgoing: true ### 创建命令 calicoctl create -f ippool2.yaml ### 查看现有地址池 [root@k8s-master-01 ~]# calicoctl get ippool NAME CIDR SELECTOR default-ipv4-ippool 10.100.0.0/16 all() new-pool1 10.10.10.0/30 all() new-pool2 10.10.10.4/31 all()二、以 redis-cluster 为例,来固定 Pod IP 地址的案例
1、多个 Pod 固定 IP 地址池实现的方案主要使用到 calico 组件的两个 Kubernetes 的注解:
1、cni.projectcalico.org/ipAddrs:单个pod固定IP
2、cni.projectcalico.org/ipv4pools:多pod固定IP池
以上我创建的两个地址池就是为了 redis-cluster 准备的,我设置 redis-cluster 三主三从,以上的两个地址池可用的 IP 地址一共是 6 个,所以说尽管出现意外情况导致 Pod 重启,IP 地址发生变化,也是在集群中这个 6 个 IP 地址间变化,不会导致集群失败的情况。
修改配置文件 查看运行结果可以看出,创建的 6 个 pod 的 IP 地址为0–5
[root@k8s-master-01 redis_6.2.4]# kubectl get pods -n judicial -o wide|grep redis redis-cluster-0 1/1 Running 0 37h 10.10.10.5 k8s-work-032、单个 pod 固定IPredis-cluster-1 1/1 Running 0 37h 10.10.10.3 k8s-work-05 redis-cluster-2 1/1 Running 0 37h 10.10.10.2 k8s-work-02 redis-cluster-3 1/1 Running 0 37h 10.10.10.1 k8s-work-04 redis-cluster-4 1/1 Running 0 37h 10.10.10.0 k8s-work-01 redis-cluster-5 1/1 Running 0 37h 10.10.10.4 k8s-work-03
单个 Pod 固定 IP 的方式很简单,只需要写入地址池中没有被使用的 IP 地址就可以。
以上就是 Pod 固定 IP 的方法,在使用过程中可能会遇到 IP 没有释放等问题导致 pod 启动失败,导致这种原因可能是 pod 被删除后,使用的 IP 地址未被释放,所以需要使用以下命令对地址池的 IP 进行释放,才能够被 pod 重新使用。
### 释放已分配的 IP calicoctl ipam release --ip 10.10.10.100



