天天看点

k8s笔记8--快速部署k8s集群 v1.19.4--calico网络

k8s笔记8--快速部署k8s集群 v1.19.4--calico网络

  • ​​1 介绍​​
  • ​​2 搭建集群​​
  • ​​4 注意事项​​
  • ​​3 说明​​

1 介绍

k8s 部署的时候可以选择多种cni插件,每种插件都有其对应的特殊,最经典的的莫过于 Flannel 和 Calico。

Flannel 是一个为 Kubernetes 提供叠加网络的网络插件,它基于 Linux TUN/TAP,使用 UDP 封装 IP 报文来创建叠加网络,并借助 etcd 维护网络的分配情况 。其后端支持VxLAN、host-gw和UDP,默认为VxLAN(在三层构建了一个大二层网络)。

如下为flannel VxLAN后端结构示意图:

k8s笔记8--快速部署k8s集群 v1.19.4--calico网络

Calico 是一个基于 BGP 的 三层网络插件,并且也支持网络策略来实现网络的访问控制;它在每台机器上运行一个 vRouter,利用 Linux 内核来转发网络数据包 , 并借助 iptables 实现防火墙等功能 。

Calico 本身是一个三层的虚拟网络方案,它将每个节点都当做一个路由器(router),将每个节点的容器都当做是"节点路由器"的一个终端并为其分配一个IP地址,各个节点路由器通过BGP学习生成路由规则,从而将不同节点上的容器连接起来。

如下为calico的系统结构示意图:

k8s笔记8--快速部署k8s集群 v1.19.4--calico网络

笔者在 ​​k8s笔记6–使用kubeadm快速部署k8s集群 v1.19.4​​ 中部署了基于Flannel的集群,但是Flannel暂时不支持网络策略,因此此处部署一个基于Calico的集群。其节点配置和上文相同,部署方法和上文几乎一致,此处只添加了一些重要步骤。

2 搭建集群

  1. 配置基础环境 和 软件

    参考笔者博文进行设置即可,唯一区别就是需要load calico相关的镜像,其它基本完全一样。

    ​​k8s笔记6–使用kubeadm快速部署k8s集群 v1.19.4->2.1 安装基础软件​​

  2. 初始化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 。

笔者在安装 1.21 版本的k8s时候发现报错,无法正常拉取coredns,

# docker pull registry.aliyuncs.com/google_containers/coredns:v1.8.0
 Error response from daemon: manifest for      
  1. master部署cni网络
wget https://docs.projectcalico.org/manifests/calico.yaml
# kubectl apply -f calico.yaml      
  1. 加入node节点

    master节点apply cni网络后,等几分钟,以确保相关服务的pod都正常拉起来了,然后再加入work节点。

# kubeadm join --token 7qm7bu.16iurmxsyp10h5e8 192.168.2.131:6443 --discovery-token-ca-cert-hash sha256:dcb4c0d4d1204134f4e99e164f210e6f96494c63314306d1da0f49458654206f      
  1. 安装 metrics-server
# wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
需要在 container metrics-server 的args 中添加: --kubelet-insecure-tls,否则会启动报错
# kubectl apply -f components.yaml      

查看node metrics信息:

k8s笔记8--快速部署k8s集群 v1.19.4--calico网络

Lens 查看当前pod信息:

4 注意事项

  1. 默认情况下k8s config 对apiserver-advertise-address 开放访问权限,因此如果需要用额外的外网访问该服务,那么需要配置 apiserver-cert-extra-sans选项,例如
# kubeadm init --apiserver-advertise-address=10.0.8.4 --apiserver-cert-extra-sans=106.xxx.xxx.12,10.0.8.4 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.224.0.0/16

生成config 文件后更改 server: https://106.xxx.xxx.12:6443 , 那么可以通过该master的外网访问集群。
如不设置,那么直接通过外网的6443访问,会报错 Unable to connect to the server: x509: certificate is valid for      
  1. docker 的 cgroupdriver 需要和kubelet 启动的cgroupdriver匹配,否则无法正常启动。
正常情况下可以配置docker的daemon.json, 按需配置和kubelet一样的cgroupdriver
vim /etc/docker/daemon.json 
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}      

3 说明