1: K3s对接Kube-OVN
Kube-OVN 是一个符合 CNI 规范的网络组件,其运行需要依赖 Kubernetes 环境及对应的内核网络模块。 以下是通过测试的操作系统和软件版本,环境配置和所需要开放的端口信息。
软件版本
- Kubernetes >= 1.23。
- Docker >= 1.12.6, Containerd >= 1.3.4。
- 操作系统: CentOS 7/8, Ubuntu 16.04/18.04/20.04。
- 其他 Linux 发行版,需要检查一下内核模块是否存在
geneve
,openvswitch
,ip_tables
和iptable_nat
,Kube-OVN 正常工作依赖上述模块。
本次验证采用1.23.17版本的K3S和1.10.10版本的ovn
INSTALL_K3S_SKIP_DOWNLOAD=true INSTALL_K3S_EXEC='server --docker --flannel-backend=none --disable-network-policy --write-kubeconfig-mode 644 --write-kubeconfig ~/.kube/config' /root/k3s-v1.23.17/install.sh
此时检查 pod 会发现都处于 Pending 状态,这是因为还没安装 CNI。
检查node状态提示:container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized。
接下来开始部署kube-ovn
查看脚本中的配置:
REGISTRY="kubeovn" # 镜像仓库地址
VERSION="v1.10.6" # 镜像版本/Tag
POD_CIDR="10.16.0.0/16" # 默认子网 CIDR 不要和 SVC/NODE/JOIN CIDR 重叠
SVC_CIDR="10.96.0.0/12" # 需要和 apiserver 的 service-cluster-ip-range 保持一致
JOIN_CIDR="100.64.0.0/16" # Pod 和主机通信网络 CIDR,不要和 SVC/NODE/POD CIDR 重叠
LABEL="node-role.kubernetes.io/master" # 部署 OVN DB 节点的标签
IFACE="" # 容器网络所使用的的宿主机网卡名,如果为空则使用 Kubernetes 中的 Node IP 所在网卡
TUNNEL_TYPE="geneve" # 隧道封装协议,可选 geneve, vxlan 或 stt,stt 需要单独编译 ovs 内核模块
k3s 的默认 POD 和 SVC CIDR 分别是:10.42.0.0/16
和 10.43.0.0/16
,可以在安装时通过参数 --cluster-cidr
和 --service-cidr
分别进行设置。上面,安装 k3s 时使用了的默认配置,因此需要修改install.sh中的配置
。
POD_CIDR="10.42.0.0/16"
POD_GATEWAY="10.42.0.1"
SVC_CIDR="10.43.0.0/16"
修改之后,运行脚本安装:
bash install.sh
确认所有 pod 启动并运行:
kubectl get po -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system ovs-ovn-trqk5 1/1 Running 0 2m37s
kube-system kube-ovn-monitor-5f8f5dbfc-plfrq 1/1 Running 0 108s
kube-system kube-ovn-controller-67bbd54575-2n87d 1/1 Running 0 108s
kube-system ovn-central-644fbb8467-xtrjc 1/1 Running 0 2m37s
kube-system kube-ovn-cni-glcfw 1/1 Running 0 108s
kube-system kube-ovn-pinger-2k72d 1/1 Running 0 71s
kube-system local-path-provisioner-6c79684f77-jh2zh 1/1 Running 0 71s
kube-system coredns-d76bd69b-w28rg 1/1 Running 0 37s
kube-system metrics-server-7cd5fcb6b7-8jgdm 1/1 Running 0 36s
检查 kube-system
下的 DaemonSet 类型应用,运行在各个 node 上负责 ovs/ovn、CNI 和网络检查 ping。
[root@host-172-28-12-10 ~]# kubectl get ds -A
NAMESPACE NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
kube-system ovs-ovn 1 1 1 1 1 kubernetes.io/os=linux 80m
kube-system kube-ovn-cni 1 1 1 1 1 kubernetes.io/os=linux 80m
kube-system kube-ovn-pinger 1 1 1 1 1 kubernetes.io/os=linux 80m
至此 kube-ovn 就安装完成了,可以开始体验下 kube-ovn 的功能。
2:OpenStack Neutron对接OVN
参考:
Installation — networking-ovn 3.0.0.0b3.dev22 documentation