Kubernetes 常见 Calico 问题 | 详细教程

本文档记录了在Kubernetes集群中遇到的Calico节点状态异常问题,具体表现为calico-node容器的readiness probe失败,原因是BGP未与特定IP建立连接。解决方案是通过修改calico.yaml配置文件,添加IP_AUTODETECTION_METHOD环境变量,手动指定IP检测方法,然后重新应用配置。问题的根源在于Calico自动检测IP地址时使用了错误的方法。

永久地址:Kubernetes 常见 Calico 问题 | 详细教程(保存网址不迷路 🙃)

 

问题描述

该笔记将记录:在 Kubernetes Cluster 中,与 Calico 有关的常用设置,以及相关问题处理。

解决方案

calico/node is not ready: BIRD is not ready: BGP not established with 172.21.0.1

Calico readiness and liveliness probe fails · Issue #2042 · projectcalico/calico
Configuring calico/node

问题描述

在集群中的 calico-node 处于 Ready 0/1 状态,并且 Events 显示 calico/node is not ready: BIRD is not ready: BGP not established with 172.21.0.1 消息:

<think>好的,我现在需要帮助用户找到Kubeadm初始化Kubernetes集群的详细步骤教程。首先,用户提到的“Kubesdm”可能是拼写错误,正确的应该是“kubeadm”,这是Kubernetes官方提供的集群初始化工具。我需要确认这一点,并在回答中适当纠正,避免用户混淆。 接下来,我需要回忆kubeadm的基本使用流程。通常,初始化Kubernetes集群的步骤包括安装前置依赖、初始化控制平面节点、加入工作节点、配置网络插件等。用户可能需要详细的每一步操作命令和说明,所以需要分步骤列出,确保清晰。 然后,我要检查是否有遗漏的关键点,比如系统配置要求、容器运行时(如Docker或containerd)的安装、必要的端口开放等。用户可能是在搭建环境时遇到问题,所以需要详细的前置条件说明,避免用户因为缺少依赖而失败。 考虑到用户可能对Kubernetes不熟悉,命令中的参数需要解释清楚。例如,初始化命令中的`--pod-network-cidr`是用于指定Pod网络的CIDR,不同的网络插件可能需要不同的CIDR,比如Calico和Flannel的区别。这部分需要说明,并提供常见网络插件的安装示例。 另外,用户可能遇到初始化失败的情况,需要提供一些常见问题的解决方法,比如如何重置集群、检查日志等。例如,使用`kubeadm reset`来清理环境,查看`journalctl -xeu kubelet`日志来排查问题。这些信息对用户解决问题会有帮助。 同时,要确保所有命令和步骤都是最新的,符合当前Kubernetes的稳定版本。可能需要参考官方文档的步骤,确认命令的正确性,避免提供过时的信息。例如,现在默认使用的容器运行时可能已经改为containerd,而不是Docker,需要指出这一点,并给出相应的安装链接。 用户的需求中还提到要生成相关问题,我需要考虑用户在初始化过程中可能遇到的后续问题,比如如何添加节点、如何升级集群、如何备份配置等。这些问题需要与初始化步骤紧密相关,帮助用户进一步操作。 最后,需要检查回答是否符合格式要求,使用正确的中文表达,行内公式用$符号,独立公式用$$,但在这个问题中可能涉及公式较少,更多是代码块和命令。确保代码块使用正确的语法高亮,例如shell和yaml的代码块标识。 总结一下,回答的结构应该是:纠正可能的拼写错误,分步骤详细说明初始化流程,包括前置条件、初始化命令、网络插件安装、加入节点,以及故障排查方法。最后生成相关问题,帮助用户深入理解后续操作。</think>Kubeadm 是 Kubernetes 官方提供的集群初始化工具,以下是详细的初始化步骤: ### 一、前置条件 1. **所有节点**需满足: - 至少 2GB RAM 和 2 CPU 核心 - 禁用交换分区:`sudo swapoff -a && sed -i '/ swap / s/^/#/' /etc/fstab` - 开放必要端口(如 6443、2379-2380、10250-10255) - 安装容器运行时(推荐 containerd 或 Docker)[^1] ```bash # 以 containerd 为例 apt-get install -y containerd ``` ### 二、初始化控制平面节点 1. 安装 kubeadm/kubelet/kubectl: ```bash sudo apt-get update && sudo apt-get install -y apt-transport-https curl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list sudo apt-get update && sudo apt-get install -y kubelet kubeadm kubectl ``` 2. 执行初始化命令: ```bash sudo kubeadm init \ --pod-network-cidr=10.244.0.0/16 \ --apiserver-advertise-address=<控制节点IP> ``` 成功后会显示加入工作节点的命令,格式为:`kubeadm join <...>` 3. 配置 kubectl: ```bash mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config ``` ### 三、安装网络插件(以 Flannel 为例) ```bash kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml ``` ### 四、加入工作节点 在工作节点执行初始化时输出的 `kubeadm join` 命令: ```bash sudo kubeadm join <控制平面IP>:6443 --token <token> --discovery-token-ca-cert-hash <hash> ``` ### 五、验证集群状态 ```bash kubectl get nodes -o wide # 应显示所有节点为 Ready 状态 kubectl get pods -A # 检查核心组件运行状态 ``` ### 故障排查 - 重置集群:`sudo kubeadm reset` - 查看日志:`journalctl -xeu kubelet` - 检查容器运行时状态:`sudo systemctl status containerd` [^1]: Kubernetes 官方推荐使用 cri-tools 验证容器运行时兼容性:https://kubernetes.io/docs/setup/production-environment/container-runtimes
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值