1 说明
k8s 部署的时候可以选择多种cni插件,每种插件都有其对应的特殊,最经典的的莫过于 Flannel 和 Calico。
Flannel 是一个为 Kubernetes 提供叠加网络的网络插件,它基于 Linux TUN/TAP,使用 UDP 封装 IP 报文来创建叠加网络,并借助 etcd 维护网络的分配情况 。其后端支持VxLAN、host-gw和UDP,默认为VxLAN(在三层构建了一个大二层网络)。
如下为flannel VxLAN后端结构示意图:
Calico 是一个基于 BGP 的 三层网络插件,并且也支持网络策略来实现网络的访问控制;它在每台机器上运行一个 vRouter,利用 Linux 内核来转发网络数据包 , 并借助 iptables 实现防火墙等功能 。
Calico 本身是一个三层的虚拟网络方案,它将每个节点都当做一个路由器(router),将每个节点的容器都当做是"节点路由器"的一个终端并为其分配一个IP地址,各个节点路由器通过BGP学习生成路由规则,从而将不同节点上的容器连接起来。
如下为calico的系统结构示意图:
笔者在 k8s笔记6–使用kubeadm快速部署k8s集群 v1.19.4 中部署了基于Flannel的集群,但是Flannel暂时不支持网络策略,因此此处部署一个基于Calico的集群。其节点配置和上文相同,部署方法和上文几乎一致,此处只添加了一些重要步骤。
2 搭建集群
-
配置基础环境 和 软件
参考笔者博文进行设置即可,唯一区别就是需要load calico相关的镜像,其它基本完全一样。
k8s笔记6–使用kubeadm快速部署k8s集群 v1.19.4->2.1 安装基础软件 -
初始化master
# kubeadm init --apiserver-advertise-address=192.168.2.131 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.224.0.0/16 # mkdir -p $HOME/.kube # sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config # sudo chown $(id -u):$(id -g) $HOME/.kube/config
注:Calico 网络默认pod网络网段为192.168.0.0/16 ,会自动分配service网段,因此不需要像Flannel一样设置service网段。笔者虚拟机网段为192.168.2.x,为了更方便测试网络信息,此处将网段设置为 --pod-network-cidr=10.224.0.0/16 。
-
master部署cni网络
# kubectl apply -f calico.yaml configmap/calico-config created customresourcedefinition.apiextensions.k8s.io/bgpconfigurations.crd.projectcalico.org created customresourcedefinition.apiextensions.k8s.io/bgppeers.crd.projectcalico.org created customresourcedefinition.apiextensions.k8s.io/blockaffinities.crd.projectcalico.org created customresourcedefinition.apiextensions.k8s.io/clusterinformations.crd.projectcalico.org created customresourcedefinition.apiextensions.k8s.io/felixconfigurations.crd.projectcalico.org created customresourcedefinition.apiextensions.k8s.io/globalnetworkpolicies.crd.projectcalico.org created customresourcedefinition.apiextensions.k8s.io/globalnetworksets.crd.projectcalico.org created customresourcedefinition.apiextensions.k8s.io/hostendpoints.crd.projectcalico.org created customresourcedefinition.apiextensions.k8s.io/ipamblocks.crd.projectcalico.org created customresourcedefinition.apiextensions.k8s.io/ipamconfigs.crd.projectcalico.org created customresourcedefinition.apiextensions.k8s.io/ipamhandles.crd.projectcalico.org created customresourcedefinition.apiextensions.k8s.io/ippools.crd.projectcalico.org created customresourcedefinition.apiextensions.k8s.io/kubecontrollersconfigurations.crd.projectcalico.org created customresourcedefinition.apiextensions.k8s.io/networkpolicies.crd.projectcalico.org created customresourcedefinition.apiextensions.k8s.io/networksets.crd.projectcalico.org created clusterrole.rbac.authorization.k8s.io/calico-kube-controllers created clusterrolebinding.rbac.authorization.k8s.io/calico-kube-controllers created clusterrole.rbac.authorization.k8s.io/calico-node created clusterrolebinding.rbac.authorization.k8s.io/calico-node created daemonset.apps/calico-node created serviceaccount/calico-node created deployment.apps/calico-kube-controllers created serviceaccount/calico-kube-controllers created poddisruptionbudget.policy/calico-kube-controllers created
-
加入node节点
master节点apply cni网络后,等几分钟,以确保相关服务的pod都正常拉起来了,然后再加入work节点。# kubeadm join --token 7qm7bu.16iurmxsyp10h5e8 192.168.2.131:6443 --discovery-token-ca-cert-hash sha256:dcb4c0d4d1204134f4e99e164f210e6f96494c63314306d1da0f49458654206f
-
安装 metrics-server
# kubectl apply -f components.yaml $ kubectl apply -f components.yaml serviceaccount/metrics-server created clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created clusterrole.rbac.authorization.k8s.io/system:metrics-server created rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created service/metrics-server created deployment.apps/metrics-server created apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
查看node metrics信息:
Lens 查看当前pod信息:
3 说明
1 calico 官方文档 about-calico
2 kubernetes-sigs/metrics-server
3 Kubernetes 进阶实战