calico网络安装和删除

前言

1)本文以一个最简集群做示例,包括两个部分:

  • 创建calico网络
  • 删除calico网络

2)文中calico.yml文件详解,作为知识扩展,见我的另一篇文章 《calico.yml详解》

3)k8s的部署,见以下两篇文档

4)如果要使用flannel网络,参见 《flannel网络的安装和删除》

1. 集群状态

未安装网络前器群状态如下

  • 节点状态

节点状态都是NotReady

[root@calico-master yum.repos.d]# kubectl get node
NAME            STATUS     ROLES                  AGE    VERSION
calico-master   NotReady   control-plane,master   5m6s   v1.21.2
calico-node     NotReady   <none>                 15s    v1.21.2
  • 系统pod状态

可见coredns的状态是pending

[root@calico-master yum.repos.d]# kubectl get pod -n kube-system
NAME                                    READY   STATUS    RESTARTS   AGE
coredns-59d64cd4d4-54mn6                0/1     Pending   0          4m
coredns-59d64cd4d4-l2z7n                0/1     Pending   0          4m
etcd-calico-master                      1/1     Running   0          4m10s
kube-apiserver-calico-master            1/1     Running   0          4m9s
kube-controller-manager-calico-master   1/1     Running   0          4m10s
kube-proxy-ff6fv                        1/1     Running   0          4m
kube-scheduler-calico-master            1/1     Running   0          4m10s
  • 网络状态

此时只有物理网卡和docker0

[root@calico-master yum.repos.d]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:bf:e7:64 brd ff:ff:ff:ff:ff:ff
    inet 10.10.239.45/24 brd 10.10.239.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:febf:e764/64 scope link
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:fb:8e:62:b1 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

2. 镜像准备

  • 提前下载如下镜像
    docker.io/calico/cni:v3.19.1
    docker.io/calico/node:v3.19.1
    docker.io/calico/pod2daemon-flexvol:v3.19.1
    docker.io/calico/kube-controllers:v3.19.1

  • 上传镜像仓库,分别为
    harbocto.xxx.com.cn/public/cni:v3.19.1
    harbocto.xxx.com.cn/public/node:v3.19.1
    harbocto.xxx.com.cn/public/pod2daemon-flexvol:v3.19.1
    harbocto.xxx.com.cn/public/kube-controllers:v3.19.1

3. 配置文件

  • 下载配置文件
#wget https://docs.projectcalico.org/manifests/calico.yaml

有的文档说用k8s的etcd,必须要下载calico-etcd.yaml 如何如何,实测并不需要。

  • 关闭IPIP模式

calico网络,默认是ipip模式。会在每台node主机创建一个tunl0网口,这个隧道链接所有的node容器网络,官网推荐不同的ip网段适合。
我们这里关闭IPIP模式。
详见 《k8s网络基础》中 “4.4 IP Pool 的两种模式”

在DaemonSet部分 calico-node的pod的变量中,修改CALICO_IPV4POOL_IPIP值为off

            - name: CALICO_IPV4POOL_IPIP
              #value: "Always"
              value: "off"
  • 修改pod的网段

修改CALICO_IPV4POOL_CIDR为k8s集群的pod网段
同样也在DaemonSet 中, calico-node的pod的变量里,修改如下:

            - name: CALICO_IPV4POOL_CIDR
              value: "10.244.0.0/16"
  • 修改 ypha_service_name(非必要)

修改ConfigMap部分 typha_service_name: "calico-typha",结果如下:

kind: ConfigMap
apiVersion: v1
metadata:
  name: calico-config
  namespace: kube-system
data:
  # Typha is disabled.
  typha_service_name: "calico-typha"

Typha组件可以帮助Calico扩展到大量的节点,详见 《calico.yml详解》 中"2. ConfigMap"

4 创建calico网络

  • 创建
# kubectl create -f calico.yaml
  • 查看pod

如下可见,calico-nodecalico-kube-controllers都启动起来了,coredns 也变为Running

[root@calico-master file]# kubectl get pod -n kube-system
NAME                                       READY   STATUS    RESTARTS   AGE
calico-kube-controllers-78d6f96c7b-vrsrh   1/1     Running   0          21m
calico-node-p248q                          1/1     Running   0          21m
calico-node-zjbxl                          1/1     Running   0          21m
coredns-59d64cd4d4-mnjj2                   1/1     Running   0          32m
coredns-59d64cd4d4-szbkv                   1/1     Running   0          32m
etcd-calico-master                         1/1     Running   0          47h
kube-apiserver-calico-master               1/1     Running   0          47h
kube-controller-manager-calico-master      1/1     Running   0          47h
kube-proxy-ff6fv                           1/1     Running   0          47h
kube-proxy-wd8d7                           1/1     Running   0          47h
kube-scheduler-calico-master               1/1     Running   0          47h
  • 查看node

可见,node都变为Ready。

[root@calico-master file]# kubectl get node
NAME            STATUS   ROLES                  AGE   VERSION
calico-master   Ready    control-plane,master   47h   v1.21.2
calico-node     Ready    <none>                 47h   v1.21.2
  • 查看路由
[root@calico-master ~]# ip route
default via 10.10.239.1 dev eth0
10.10.239.0/24 dev eth0 proto kernel scope link src 10.10.239.45
10.244.85.64/26 via 10.10.239.44 dev eth0 proto bird
169.254.0.0/16 dev eth0 scope link metric 1002
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1

如上可见,多了一条路由10.244.85.64/26 via 10.10.239.44 dev eth0 proto bird

5. calico网络的删除

5.1 删除对象

【master上执行】

# kubectl  delete -f calico.yaml

5.2 删除 Tunl0(如果ipip模式)

  • 检查所有节点上的网络,看看是否存在Tunl0

我们前文的安装方法关闭了ipip模式,所以没有Tunl0

# ip a
  • 删除Tunl0
# modprobe -r ipip

5.3 移除Calico配置文件

查看 /etc/cni/net.d/ 目录下是否存在相关文件,如:10-calico.conflistcalico-kubeconfigcalico-tls等,需要删除。

5.4 重启kubelet

每个节点重启kubelet

5.5 删除coredns的pod

master上删除coredns的pod,重启的coredns的pod重新变成Pending状态。
如果不重启kubelet ,coredns的pod重新变成Pending状态。


posted on 2021-08-10 22:14  运维开发玄德公  阅读(586)  评论(0编辑  收藏  举报  来源

导航