问题:
在我安装了nerdctl后,发现calico-node没有ready。报错信息如下:
解决:
使用nerdctl会在本机上添加一个nerdctl0的网卡。
而calico的配置文件中,IP_AUTODETECTION_METHOD(IP识别策略)为默认的 first-found,这会导致一个网络异常的ip作为nodeIP被注册。
方法1:
修改calico-node的ds。
kubectl edit ds calico-node -n calico-system
- name: IP_AUTODETECTION_METHOD
value: "interface=eth0" # eth 根据实际网卡开头配置
该方法命令虽然可以执行,但是我这里ds么没有生效。k8s 1.22,通过operator生成的calico,不是calico.yaml,如果是calico.yaml,直接修改文件中的参数即可。
更新
如果想修改的话,需要添加annotations:
unsupported.operator.tigera.io/ignore: "true"
查看官方文档:https://github.com/tigera/operator
添加annotations,再次修改ds成功。
方法2:
安装calicoctl,注意calico版本与calicoctl版本要相同。
cd /usr/local/bin
wget https://github.com/projectcalico/calicoctl/releases/download/v3.21.2/calicoctl-linux-amd64
mv calicoctl-linux-amd64 calicoctl
chmod +x calicoctl
编辑配置文件/etc/calico/calicoctl.cfg。
mkdir /etc/calico
cat > /etc/calico/calicoctl.cfg << EOF
apiVersion: projectcalico.org/v3
kind: CalicoAPIConfig
metadata:
spec:
datastoreType: "kubernetes"
kubeconfig: "/root/.kube/config"
EOF
calico常用命令
# 获取节点
calicoctl get node --allow-version-mismatch
# 获取节点网络状态
calicoctl node status
状态“up”为正常,状态为“start”为还在启动状态,未就绪。
使用calicoctl对calico进行更改
查看问题节点的yaml文件
calicoctl get node master -o yaml
这里使用了nerdctl0网卡的地址。10.4.0.1/24。
修改IP
calicoctl get node master -o yaml --allow-version-mismatch > calico_master.yaml
spec:
addresses:
- address: 192.168.0.6/24
type: CalicoNodeIP
- address: 192.168.0.6
type: InternalIP
bgp:
ipv4Address: 192.168.0.6/24
ipv4VXLANTunnelAddr: 10.100.219.64
重启calico-node
calicoctl apply -f calico_master.yaml --allow-version-mismatch
这里会报错无法执行,kubectl apply也不行。
参考官网的文档,修改calico-custom-resources.yaml文件
apply后calico-apiserver会crashloopback,calico-node也没有恢复正常。回滚文件,重新apply。
参考这篇文章:
https://serverfault.com/questions/1078703/how-to-fix-failed-to-apply-node-resource-update-conflict-node-while
使用这个命令:
kubectl set env ds/calico-node -n calico-system IP_AUTODETECTION_METHOD=interface=eth0
kubectl get pod -n calico-system
可以看到calico-node的节点都正常启动的。
方法3:
直接使用calicoctl命令进行修改,这种方法最为方便,推荐使用。
calicoctl patch node master --patch='{"spec":{"bgp": {"ipv4Address": "192.168.0.6/24"}}}' --allow-version-mismatch
calicoctl patch node master --patch='{"spec":{"addresses": {"address": "192.168.0.6/24"}}}' --allow-version-mismatch
We’re a group of volunteers and opening a new scheme in our community.
Your web site provided us with valuable info to work on. You’ve done a formidable job and our entire community will be thankful to you.
I couldn’t refrain from commenting. Very well written!
Hi there, yes this paragraph is in fact pleasant and I
have learned lot of things from it regarding blogging.
thanks.