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

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

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 搭建集群

  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 registry.aliyuncs.com/google_containers/coredns:v1.8.0 not found: manifest unknown: manifest unknown
     但是测试后发现有:registry.aliyuncs.com/google_containers/coredns:1.8.0 ,因此推测阿里云没有tag v1.8.0 版本,自己拉取1.8.0后打tag v1.8.0, 再执行init 命令后顺利执行成功了。 
    
  3. master部署cni网络

    wget https://docs.projectcalico.org/manifests/calico.yaml
    # 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
    
  4. 加入node节点
    master节点apply cni网络后,等几分钟,以确保相关服务的pod都正常拉起来了,然后再加入work节点。

    # kubeadm join --token 7qm7bu.16iurmxsyp10h5e8 192.168.2.131:6443 --discovery-token-ca-cert-hash sha256:dcb4c0d4d1204134f4e99e164f210e6f96494c63314306d1da0f49458654206f
    

    在这里插入图片描述

  5. 安装 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
    $ 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信息:
    在这里插入图片描述

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 xxx
  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 说明

1 calico 官方文档 about-calico
2 kubernetes-sigs/metrics-server
3 Kubernetes 进阶实战
4 github.com/kubernetes/dashboard

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昕光xg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值