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   运维开发玄德公  阅读(638)  评论(0编辑  收藏  举报  

相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

导航

统计

点击右上角即可分享
微信分享提示