내 작업자 노드에 NetworkUnavailable 오류가 표시되는 이유는 무엇입니까?

Calico 노드의 상태 문제 및 네트워킹 문제를 해결합니다.

가상 프라이빗 클라우드 클래식 인프라 Satellite

마스터 또는 작업자 노드를 업데이트할 때 작업자 노드는 Node network unavailable 상태가 됩니다.

작업자 노드는 calico-node 팟 (Pod) 이 종료될 때마다 NetworkUnavailable 또는 Node network unavailable 상태가 될 수 있습니다. 이는 Calico 패치 업데이트 중에 발생할 수 있지만 애플리케이션 가용성에는 영향을 미치지 않습니다.

Calico 가 업데이트되면 node.kubernetes.io/network-unavailable:NoSchedule 오염이 작업자 노드에 추가되고 Node network unavailable 조건이 True 가 됩니다. 이러한 두 조건 모두 Calico 가 다시 시작되면 지워지므로 일반적으로 몇 초만 소요됩니다.

이 과정에서 다음 예와 유사한 오류 메시지가 표시될 수 있습니다.

[Kubernetes] Node network unavailable is Triggered on kubernetes.node.name = 10.184.XXX.XXX
[Kubernetes] Node network unavailable is Triggered on kubernetes.node.name = 10.184.XXX.XXX
[Kubernetes] Node network unavailable is Triggered on kubernetes.node.name = 10.184.XXX.XXX

때때로 다시 시작하는 데 시간이 더 오래 걸릴 수 있습니다. 거의 모든 경우에 다시 시작은 작업자 노드 네트워크 문제를 방지할 수 있을 정도로 빠르게 수행됩니다. 그러나 Calico 다시 시작이 지연되어 네트워크 인터럽트가 발생할 수 있는 상황이 있습니다. 이러한 경우 노드 네트워크 사용 불가능 감염 및 조건은 Calico 및 노드가 수정될 때까지 새 앱이 새 노드에 배치되지 않도록 디자인됩니다. Calico 업데이트는 노드 문제가 있는 경우 전체 애플리케이션 영향을 최소화하기 위해 매우 제어된 방식으로 롤아웃됩니다.

다음을 사용하여 Node network unavailable 상태를 모니터링합니다 IBM Cloud Monitoring

IBM Cloud Monitoring과 같은 애플리케이션을 모니터하는 서비스를 사용하여 작업자 노드가 Node network unavailable 상태가 되는 경우에 대한 경보를 구성하고 이 상황이 발생할 때마다 계수할 수 있습니다. 또한 임계값을 구성하고 루틴 Calico 패치 중에 작업자 노드가 Node network unavailable 상태에 있을 때 허용되도록 경보를 튜닝할 수 있습니다.

IBM Cloud Monitoring 경보를 설정할 때 다음 시나리오를 고려하십시오.

  • Node network unavailable 경보는 calico-node 팟 (Pod) 이 Running 상태를 달성하는 데 실패하고 해당 컨테이너 다시 시작 수가 계속해서 증가할 때 문제가 될 수 있습니다.
  • 작업자 노드는 오랜 시간 동안 Node network unavailable 상태로 유지됩니다.

작업자 업데이트 또는 대체 후에 calico-node 팟 (Pod) 이 여전히 Red Hat OpenShift VPC 클러스터에서 시작되지 않는 경우가 있습니다. calico_node 팟 (Pod) 이 Red Hat OpenShift VPC 클러스터에서 시작할 수 없는 상태가 될 수 있습니다. 이는 IKS 또는 클래식 클러스터에서 문제가 되지 않습니다. 이는 sysdig-admission-controller-webhook 가 설치되어 있고 작업자 업데이트 또는 대체를 수행하려고 할 때 발생할 수 있습니다. 이는 다음과 같은 이유로 발생

  1. VPN 클라이언트 팟 (Pod) 이 시작될 때 새 작업자로 이동됩니다.
  2. 새 작업자의 calico-node 가 시작되지만 apiserver 호출을 작성하고 2초후에 제한시간이 초과되므로 고정됩니다.
  3. 그런 다음 apiserver 호출은 VPN 클라이언트 팟 (Pod) 이 새 노드에서 시작하려고 시도했기 때문에 실패하는 웹훅을 호출하려고 시도합니다. calico-node 가 아직 시작되지 않았기 때문에 VPN 노드가 이를 성공적으로 수행할 수 없습니다.

요약하면, calico-node 팟 (Pod) 시작은 작동하는 웹훅에 따라 다르고, 웹훅은 VPN 클라이언트 팟 (Pod) 에 따라 다르며, VPN 클라이언트 팟 (Pod) 은 calico-node 시작에 따라 다릅니다. 시스템이 순환 종속성에 고정되어 있습니다. 성공적으로 배치된 calico-node 팟 (Pod) 에서 로그를 수집할 수 있는 경우 다음과 같은 오류가 표시될 수 있습니다.

2022-09-08 07:13:19.719 [WARNING][9] startup/utils.go 228: Failed to set NetworkUnavailable; will retry error=Patch "https://172.21.0.1:443/api/v1/nodes/10.242.64.17/status?timeout=2s": net/http: request canceled (Client.Timeout exceeded while awaiting headers)

calico-node 에 대한 임시 해결책

다음 방법 중 하나를 사용하여 문제를 해결하고 calico-node 팟 (Pod) 을 다시 실행할 수 있습니다.

  1. 시스템에서 sysdig-admission-controller-webhook 를 제거하십시오.
  2. sysdig-admission-controller-webhook 를 수정하고 제한시간을 2초미만으로 변경하십시오.
  3. sysdig-admission-controller-webhook 를 수정하여 적절한 네임스페이스로 범위를 지정하고 calico-system 와 같은 시스템에 중요한 네임스페이스를 사용하지 마십시오.
  4. 새 노드를 연결하지만 드레인하지는 마십시오. VPN팟 (Pod) 을 삭제하고 다른 작업자에서 시작될 때까지 기다리십시오. 노드의 연결을 해제하십시오.

이전 임시 해결책을 수행한 후 calico-node 팟 (Pod) 을 시작할 수 있습니다.