| 名称 | 版本 |
|---|---|
| kubernetes | 1.22.5 |
| etcd | 3.5.2 |
| docker | 19.03.8 |
| flannel | 0.14.0 |
| cni | 0.8.6 |
CNI:容器网络接口(Container NetWork Interface)。CNI最初是由CoreOS为rkt容器引擎创建的,目前绝大部分的容器平台都采用CNI标准,已经成为事实标准。(Docker并没有采用CNI标准,而是CNM标准,即Container NetWork Model)
前提条件:通过二进制的方式,部署一个Kubernetes集群,集群部署完成(节点都加入集群,但都是NotReady状态),具体部署方式可参考之前的部署文章。
二、安装CNI在kubelet官方配置文档中,关于cni的配置一共有三项:
- --cni-bin-dir string Default: /opt/cni/bin
- --cni-cache-dir string Default: /var/lib/cni/cache
- --cni-conf-dir string Default: /etc/cni/net.d
从上面的配置可以看出,我们需要把CNI及其配置文件放知道特定的目录下,或者自己指定不同的目录,并配置到kubelet的启动参数中。本文采用默认配置,则不需要修改kubelet的启动参数配置。
# 1、下载cni wget https://github.com//containernetworking/plugins/releases/download/v0.8.6/cni-plugins-linux-amd64-v0.8.6.tgz # 2、解压缩到指定目录(kubernetes默认的cni安装路径是/opt/cni/bin,所以需要将cni解压缩到此目录) mkdir /opt/cni/bin -p tar xf cni-plugins-linux-amd64-v0.8.6.tgz -C /opt/cni/bin/ # 3、将此目录复制到其余节点 for i in node01 node02;do scp -r /opt/cni/ $i:/opt/;done # 4、配置cni cat > /etc/cni/net.d/10-flannel.conflist <三、安装flannel # 1、下载flannel wget https://github.com/flannel-io/flannel/releases/download/v0.14.0/flannel-v0.14.0-linux-amd64.tar.gz # 2、解压缩并把二进制flanneld放到指定位置 tar zvxf flannel-v0.17.0-linux-amd64.tar.gz mv flanneld /usr/local/bin/ # 3、把二进制flanneld复制到其余节点 for i in node01 node02;do scp /usr/local/bin/flanneld $i:/usr/local/bin/;done # 4、配置flannel mkdir /etc/kube-flannel/ cat > /etc/kube-flannel/net-conf.json <四、配置flannel的kube-config 通过kube-config使得flannel可以访问kubernetes集群
# 1、为flannel创建service account并初始化集群角色 cat <五、通过systemd管理flannel并启动.secrets[0].name} | xargs kubectl get secret -n kube-system -o jsonpath={.data.token} | base64 -d) kubectl config set-context kubernetes --kubeconfig=flannel.conf --user=flannel --cluster=kubernetes kubectl config use-context kubernetes --kubeconfig=flannel.conf # 3、将该证书复制到其余节点 for i in node01 node02;do scp -r /opt/flannel/ $i:/opt/;done # 1、生成systemd管理flannel的文件 cat > /usr/lib/systemd/system/flanneld.service <此时查看节点状态,发现节点已经是Ready状态,证明flannel安装成功。通过此次安装,可以了解到这种设计的思想,即通过服务接口加grpc访问的方式,实现不同网络插件和kubernetes的解耦,达到了网络插件的可插拔目标。这种思想kubernetes同样使用在了cri(容器运行时接口),后续会再了解cri的相关实现。
参考文章连接:https://soulchild.cn/2509.html



