调试 Calico 组件
虚拟私有云 传统基础设施
您在使用 Calico 组件时遇到问题,例如Pod无法部署或网络连接时好时坏。
您在使用 Calico 组件时遇到问题,例如Pod无法部署或网络连接时好时坏。
Calico 操作符会根据集群中工作节点的数量来确定 calico-typha pod 的数量,且不考虑带有污点(tainted)的节点。 如果您的集群中未受污染的节点少于 3 个,或者集群规模很大但未受污染的节点数量很少,则可能会出现一个或多个 calico-typha Pod 卡在 Pending 状态的情况,因为该 Pod 无法找到可供运行的未受污染节点。 通常,只要至少有一个 calico-typha pod 处于运行状态,就不会出现问题。 不过,为了实现高可用性,建议至少有两个 calico-typha pod 始终在运行。 作为最佳实践,确保有足够多的未受污染节点来运行所有 calico-typha 由Calico操作员。
Calico 如果没有详细的日志记录,网络问题可能很难诊断。 Calico 组件的默认日志级别设置为“info”,该级别会提供基本运行信息,但可能无法提供足够的细节来排查复杂的网络问题。
将 Calico 组件的日志级别提高到 debug,以便收集有关该问题的更详细信息。 调试级日志会提供详细的输出信息,有助于查明网络问题的根本原因。
增加 calico-typha 组件的日志级别
完成以下步骤以增加 calico-typha 组件的日志级别。
-
运行以下命令以编辑
calico-typha部署。适用于 1.29 及更高版本:
kubectl edit deploy calico-typha -n calico-system对于 1.28 和更低版本:
kubectl edit deploy calico-typha -n kube-system -
将
TYPHA_LOGSEVERITYSCREEN环境变量从info更改为debug。containers: - env: - name: TYPHA_LOGSEVERITYSCREEN value: debug -
保存并关闭文件以应用更改,然后重新启动
calico-typha部署。
增加 calico-cni 组件的日志级别
完成以下步骤以增加 calico-cni 组件的日志级别。
-
运行以下命令以编辑
calico-configConfigMap。kubectl edit cm -n kube-system calico-config -
将
cni_network_config>plugins>log_level环境变量更改为debug。cni_network_config: |- { "name": "k8s-pod-network", "cniVersion": "0.3.1", "plugins": [ { "type": "calico", "log_level": "debug", -
保存并关闭该文件。 直到重新启动
calico-nodePod 之后,更改才会生效。 -
重启
calico-nodepod 以应用更改。kubectl rollout restart daemonset/calico-node -n kube-system示例输出
daemonset.apps/calico-node restarted
增加 calico-node 组件的日志级别
完成以下步骤以增加 calico-node 组件的日志级别。
-
运行以下命令:
适用于 1.29 及更高版本:
kubectl edit ds calico-node -n calico-system对于 1.28 和更低版本:
kubectl edit ds calico-node -n kube-system -
在
FELIX_USAGEREPORTINGENABLED“名称/值”对下 (或在任何FELIX_*环境变量 "名称/值" 对之后),添加以下条目。- name: FELIX_LOGSEVERITYSCREEN value: Debug -
保存更改。 保存更改后,
calico-nodedaemonset 中的所有 pod 都会完成应用更改的滚动更新。calico-cni还会将任何更改应用于kube-system/calico-configConfigMap中的日志记录级别。
增加 calico-kube-controllers 组件的日志级别
完成以下步骤以增加 calico-kube-controllers 组件的日志级别。
-
运行以下命令来编辑部署。
适用于 1.29 及更高版本:
kubectl edit deploy calico-kube-controllers -n calico-system对于 1.28 和更低版本:
kubectl edit deploy calico-kube-controllers -n kube-system -
在
DATASTORE_TYPE“名称/值”对下,添加以下条目。- name: LOG_LEVEL value: debug -
保存更改。
calico-kube-controllerspod 会重新启动并应用更改。
收集 Calico 日志
-
列出集群中的 Pod 和节点,并记录下出现问题的 Pod 名称、Pod IP 地址以及出现问题的工作节点。
kubectl get pods -o wide -n kube-system -
获取发生问题的工作程序节点上的
calico-nodepod 的日志。适用于 1.29 及更高版本:
kubectl logs calico-typha-aaa11111a-aaaaa -n calico-system对于 1.28 和更低版本:
kubectl logs calico-typha-aaa11111a-aaaaa -n kube-system -
获取
calico-kube-controllerspod 的日志。适用于 1.29 及更高版本:
kubectl logs calico-kube-controllers-11aaa11aa1-a1a1a -n calico-system对于 1.28 和更低版本:
kubectl logs calico-kube-controllers-11aaa11aa1-a1a1a -n kube-system -
遵循 使用 kubectl exec 进行调试 的指示信息从工作程序节点获取
/var/log/syslog,containerd.log,kubelet.log和kern.log。