K8S建立ipv6集群
前言
本文讲述使用kubernetes建立纯ipv6的集群,以及ipv6网络插件该如何设置。
实验环境
我所使用的平台是VMware,在其中创建了CentOS7的虚拟机,在上面进行实验部署。在创建虚拟机的时候需要支持ipv6网络,我所设置的网络模式为NAT模式,然后在虚拟网络编辑器里选择NAT设置,如下图所示:
然后选择启用IPv6,如下图所示:
之后启动虚拟机,使用ifconfig命令可以看到ipv6地址
然后在每台虚拟机上开启ipv6转发
sysctl -w net.ipv6.conf.all.forwarding=1
部署集群
首先在充当master节点的主机上建立一个kubeadm-config.yaml的kubeadm配置文件,其中的ipv6地址需要改成你自己主机的ipv6地址
apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: "fd15:4ba5:5a2b:1008:4822:2bad:440e:88d7"
bindPort: 6443
nodeRegistration:
kubeletExtraArgs:
node-ip: fd15:4ba5:5a2b:1008:4822:2bad:440e:88d7
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.23.5
networking:
podSubnet: 2001:db8:42:0::/56
serviceSubnet: 2001:db8:42:1::/112
etcd:
local:
extralArgs:
listen-metrics-urls: http://[::]:2381
然后执行如下命令
kubeadm init --config=kubeadm-config.yaml
如上所示成功建立,然后按照提示输入以下命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
然后在node节点的主机上建立kubeadm-config.yaml文件用于加入集群,与master节点类似,下面的node-ip需要改成自己主机的ipv6地址,apiServerEndpoint中的ip地址改成master节点的ip地址,当然你集群的令牌和 CA 证书也同样需要进行替换
apiVersion: kubeadm.k8s.io/v1beta3
kind: JoinConfiguration
discovery:
bootstrapToken:
apiServerEndpoint: "[fd15:4ba5:5a2b:1008:4822:2bad:440e:88d7]:6443"
token: "2m4fao.4uk9pxx229kmwgw7"
caCertHashes:
- "sha256:c7c2ac85d0926fae96579a8253776b82e757c3cfe7dc21b4f5d7ea70623b53b7"
nodeRegistration:
kubeletExtraArgs:
node-ip: fd15:4ba5:5a2b:1008:d943:cd23:f1b9:65c2
网络插件
接下来我们回到master节点,进行安装网络插件
"assign_ipv4": "true",
"assign_ipv6": "true"
,我所使用的是Calico,由于我们需要部署的是ipv6的网络,我们需要对其中的配置进行修改,所以我们不能直接使用网络上的直接apply,需要下载到本地进行修改,使用如下命令下载到本地:
curl https://docs.projectcalico.org/manifests/calico.yaml -O
下载完成后输入如下命令打开文件进行修改:
gedit calico.yaml
首先我们在ipam中加入如下内容:
"assign_ipv4": "true",
"assign_ipv6": "true"
接下来把文件往下拖,在很后面接近底部的地方,有个Disable on Kubernetes的注释,把其中的FELIX_IPV6SUPPORT的value改为true,然后加入以下内容:
- name: IP6
value: "autodetect"
- name: CALICO_IPV6POOL_CIDR
value: 2001:db8:42:0::/56
保存后,在终端中输入如下命令:
kubectl apply -f calico.yaml
验证
我们输入以下命令,发现全部处于running状态
kubectl get pods --all-namespaces
输入如下命令,发现节点都处于ready状态,表示成功
kubectl get nodes
然后我们输入以下命令查看master节点和node节点的ip地址以及pod地址范围
kubectl get nodes master -o go-template --template='{{range .spec.podCIDRs}}{{printf "%s\n" .}}{{end}}'
kubectl get nodes node1 -o go-template --template='{{range .spec.podCIDRs}}{{printf "%s\n" .}}{{end}}'
kubectl get nodes master -o go-template --template='{{range .status.addresses}}{{printf "%s: %s \n" .type .address}}{{end}}'
kubectl get nodes node1 -o go-template --template='{{range .status.addresses}}{{printf "%s: %s \n" .type .address}}{{end}}'
如下图所示,均符合预期结果,表示我们建立ipv6集群成功
总结
我对本次实验的研究可以说是进行了很久很久,中间遇到过无数次错误,网上相关方面的资料又少之又少,不过最后还是成功的建立出来了,也让我对于k8s的各种知识有了更深层次的了解,在接下来的学习中,我会再接再厉继续前行。