k8s中将flannel网络切换calico网络

注意事项:

1、kubelet 配置必须增加 --network-plugin=cni 选项
2、kubec-proxy 组件不能采用 --masquerade-all 启动,因为会与 Calico policy 冲突,并且需要加上–proxy-mode=ipvs(ipvs模式),–masquerade-all=true(表示ipvs proxier将伪装访问服务群集IP的所有流量,)

1、停止flanneld服务

yaml形式安装的flanneld切换calico

1、利用之前部署的flanneld文件删除掉flanneld网络

kubectl delete -f kube-flanneld.yaml

2、删除路由
我们删除网卡会自动删除这两个网卡的路由

ip link delete cnio
ip link delete flannel.1

删掉其他路由

ip route delete 10.244.0.0/24 via 192.168.25.61 dev eth0 
ip route delete 10.244.1.0/24 via 192.168.25.61 dev eth0 
ip route 172.17.92.0/24 dev docker0 proto kernel scope link src 172.17.92.1

3、清除网络规则

iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

二进制安装的flanneld切换calico

1、关闭flanneld服务

systemctl stop flanneld.service
systemctl disable flanneld.service

2、执行上面的删除路由和网络规则的动作

3、修改docker.service文件

vi /usr/lib/systemd/system/docker.service
##删掉该行与flanneld相关的配置
    EnvironmentFile=/run/flannel/subnet.env

重载并且重启

systemctl daemon-reload
systemctl restart docker
systemctl status docker

此时k8s集群中已无网络规则

2、部署calico

参考与官网:https://docs.projectcalico.org/getting-started/kubernetes/self-managed-onprem/onpremises
镜像由于在国外很难下载,这里提前在别处准备好并且打包过来在节点上用,
cdsn的calico离线镜像下载地址:https://download.csdn.net/download/qq_25611295/15633642
下载部署文件:

curl https://docs.projectcalico.org/v3.9/manifests/calico-etcd.yaml -o calico.yaml

镜像打包命令:

docker image save docker.io/calico/kube-controllers:v3.9.6 |gzip -9 >calico_kube-controllers.tar.gz
docker image save docker.io/calico/cni:v3.9.6|gzip -9 >calico_cni.tar.gz
docker image save docker.io/calico/pod2daemon-flexvol:v3.9.6|gzip -9 >pod2daemon-flexvol.tar.gz
docker image save docker.io/calico/node:v3.9.6|gzip -9 >calico_node.tar.gz

具体步骤如下:
配置连接etcd地址,如果使用https,还需要配置证书。(ConfigMap,Secret)
根据实际网络规划修改Pod CIDR(CALICO_IPV4POOL_CIDR)
选择工作模式(CALICO_IPV4POOL_IPIP),支持BGP,IPIP

vi calico.yaml,找到下面行并修改
1、calico.yaml中添加etd的ssl
etcd-key: (cat /opt/etcd/ssl/server-key.pem |base64 -w 0)
etcd-cert: (cat /opt/etcd/ssl/server.pem |base64 -w 0)
etcd-ca: (cat /opt/etcd/ssl/ca.pem |base64 -w 0)
将对应的都添进去,将注释去掉:

# etcd-key: null     将对应ssl下的证书转换成base64编码放进来,并去掉注释
# etcd-cert: null
# etcd-ca: null

2、calico.yaml中指定secert的配置落地的位置,直接去掉注释就可以

  # You must also populate the Secret below with these files.
  etcd_ca: "/calico-secrets/etcd-ca"
  etcd_cert: "/calico-secrets/etcd-cert"
  etcd_key: "/calico-secrets/etcd-key"

3、calico.yaml中修改pod网段

name: CALICO_IPV4POOL_CIDR
           value: "172.17.0.0/16"

4、calico.yaml中增加网卡匹配规则,防止calico默认找到错误的网卡,并更改calico的工作模式。

- name: IP_AUTODETECTION_METHOD
  value: "interface=ens.*"
# Auto-detect the BGP IP address.
- name: IP
  value: "autodetect"
# Enable IPIP
- name: CALICO_IPV4POOL_IPIP
  value: "Never"

interface=ens.*表示匹配ens开头的网卡,这里我们用“Never”禁用掉IPIP模式则会用BGP模式,
5、calico.yaml中指定etcd的地址字符串

etcd_endpoints: "https://192.168.25.135:2379,https://192.168.25.136:2379,https://192.168.25.137:2379"

6、修改k8s组件相关的服务配置
kube-controller-manager:
CALICO_IPV4POOL_CIDR需要跟kube-controller-manager里面的配置一致,如果里面没有配置,需要添加。

--allocate-node-cidrs=true \
--cluster-cidr=172.17.0.0/16 \

–allocate-node-cidrs表示是否应在云提供商上分配和设置Pod的CIDR
–cluster-cidr表示群集中Pod的CIDR范围。 要求–allocate-node-cidrs为true

kube-apiserver

--allow-privileged=true

因为calico-node需要以特权模式运行在各Node上
kubelet

--network-plugin=cni

使用CNI网络插件

7、部署calico

kubectl apply -f calico.yaml

查看pod状态

[root@master yaml_file]# kubectl get pod  -n kube-system
NAME                                       READY   STATUS    RESTARTS   AGE
calico-kube-controllers-6569d6fff8-77vw7   1/1     Running   0          12m
calico-node-58n68                          1/1     Running   0          12m
calico-node-r7plw                          1/1     Running   0          6m27s
calico-node-rttdk                          1/1     Running   0          12m

此时路由表里面还不会有更新,需要把所有的pod全部重建才会生成新的路由规则,使用calico网络,
所以更换网络是大事件,需要在夜深人静的时候操作。
如果发现日志中出现:
E0306 15:38:19.830911 1 reflector.go:125] pkg/mod/k8s.io/client-go@v12.0.0+incompatible/tools/cache/reflector.go:98: Failed to list *v1.ServiceAccount: serviceaccounts is forbidden: User “system:serviceaccount:kube-system:calico-kube-controllers” cannot list resource “serviceaccounts” in API group “” at the cluster scope
我们直接授权就行。

kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:calico-kube-controllers

3、Calico 管理工具

下载工具:https://github.com/projectcalico/calicoctl/releases

wget -o /usr/bin/calicoctl https://github.com/projectcalico/calicoctl/releases/download/v3.9.6/calicoctl
chmod +x /usr/bin/calicoctl

创建配置文件

mkdir /etc/calico
[root@master calico]# cat /etc/calico/calicoctl.cfg
apiVersion: projectcalico.org/v3
kind: CalicoAPIConfig
metadata:
spec:
  datastoreType: "etcdv3"
  etcdEndpoints: "https://192.168.25.135:2379,https://192.168.25.136:2379,https://192.168.25.137:2379"
  etcdKeyFile: "/opt/etcd/ssl/server-key.pem"
  etcdCertFile: "/opt/etcd/ssl/server.pem"
  etcdCACertFile: "/opt/etcd/ssl/ca.pem"

常用命令
run命令可用于在该服务器上运行一个calico实例;
status命令可检查整个calico网络的状态;
diags用于手机calico节点的诊断信息;
checksystem命令用于检查改服务器是否可以运行一个calico实例。
查询calico状态

calicoctl node status
[root@master yaml_file]# calicoctl node status
Calico process is running.

IPv4 BGP status
+----------------+-------------------+-------+----------+-------------+
|  PEER ADDRESS  |     PEER TYPE     | STATE |  SINCE   |    INFO     |
+----------------+-------------------+-------+----------+-------------+
| 192.168.25.135 | node-to-node mesh | up    | 06:38:41 | Established |
| 192.168.25.136 | node-to-node mesh | up    | 06:38:42 | Established |
| 192.168.25.137 | node-to-node mesh | up    | 06:38:44 | Established 

如果查询不到状态则尝试启动calico节点

 calicoctl node run

如果是针对某个节点启动

 calicoctl node run --ip=192.168.25.135

其他的一些命令:
查看节点:calicoctl get node
查看ip池:calicoctl get ippool -o wide
切换网络过程中总会出现各种奇葩的问题,网上很难找到解决方案,一般都是重启,删除node节点重新加入node节点,删除网络规则,重新安装calico 就解决了,所以非必要,还是不要切换网络,以免造成故障。

calico常见排障地址:
https://docs.projectcalico.org/maintenance/troubleshoot/troubleshooting#configure-networkmanager

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
安装Flannel网络插件是在Kubernetes集群中实现容器间网络通信的一种方式。下面是安装Flannel网络插件的步骤: 1. 在每个节点上安装etcd客户端,并确保etcd客户端能够连接到etcd服务器。可以使用以下命令安装etcd客户端: ``` $ sudo apt-get update $ sudo apt-get install -y etcd-client ``` 2. 在每个节点上安装flannel组件。可以使用以下命令安装flannel组件: ``` $ sudo apt-get update $ sudo apt-get install -y flannel ``` 3. 配置flannel。在每个节点上创建flannel配置文件`/etc/kubernetes/cni/net.d/10-flannel.conf`,并将以下内容写入该文件: ``` { "name": "podnet", "type": "flannel", "delegate": { "isDefaultGateway": true } } ``` 4. 启动flannel服务。可以使用以下命令启动flannel服务: ``` $ sudo systemctl enable flanneld $ sudo systemctl start flanneld ``` 5. 验证flannel是否正常工作。可以使用以下命令验证flannel是否正常工作: ``` $ sudo systemctl status flanneld ``` 如果flannel正常工作,输出应该类似于以下内容: ``` ● flanneld.service - Flanneld overlay address etcd agent Loaded: loaded (/lib/systemd/system/flanneld.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2021-06-01 11:59:50 UTC; 1min 47s ago Main PID: 4737 (flanneld) Tasks: 7 (limit: 4915) CGroup: /system.slice/flanneld.service └─4737 /usr/bin/flanneld --etcd-endpoints=https://192.168.0.1:2379,https://192.168.0.2:2379,https://192.168.0.3:2379 --etcd-cafile=/etc/kubernetes/ssl/ca.pem --etcd-certfile=/etc/kubernetes/ssl/flanneld.pem --etcd-keyfile=/etc/kubernetes/ssl/flanneld-key.pem ``` 6. 配置Kubernetes节点网络。在Kubernetes集群中,需要配置网络插件以实现容器间的通信。可以使用以下命令配置Kubernetes节点网络: ``` $ sudo kubeadm init --pod-network-cidr=10.244.0.0/16 ``` 在这个命令中,`--pod-network-cidr`参数指定了Kubernetes节点网络的CIDR地址段。这个地址段必须与flannel配置中的地址段相同。 7. 部署网络插件。可以使用以下命令部署flannel网络插件: ``` $ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml ``` 8. 验证网络插件是否正常工作。可以使用以下命令验证网络插件是否正常工作: ``` $ kubectl get pods --all-namespaces ``` 如果网络插件正常工作,应该会看到类似以下内容的输出: ``` NAMESPACE NAME READY STATUS RESTARTS AGE kube-system coredns-558bd4d5db-f4b9p 1/1 Running 0 3m kube-system coredns-558bd4d5db-n4jz5 1/1 Running 0 3m kube-system etcd-master 1/1 Running 0 2m kube-system kube-apiserver-master 1/1 Running 0 2m kube-system kube-controller-manager-ma 1/1 Running 0 2m kube-system kube-flannel-ds-amd64-4qjz4 1/1 Running 0 2m kube-system kube-proxy-xbflx 1/1 Running 0 3m kube-system kube-scheduler-master 1/1 Running 0 2m ``` 这些步骤应该可以帮助你安装并配置flannel网络插件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值