Kubernetes 호스트 클라이언트 애플리케이션

여러 Pod의 클라이언트 연결

Redis 서버에 연결하는 여러 Pod가 있는 경우 Pod의 새 연결이 시차를 두고 만들어졌는지 확인합니다. 여러 Pod가 시차 없이 짧은 시간 안에 시작되면 만들어지는 클라이언트 연결 수가 급증합니다. 연결 수가 많으면 Redis 서버의 로드가 높아지고 시간이 초과될 수 있습니다.

동시에 여러 Pod를 종료하는 시나리오를 방지합니다. 시차 종료에 실패하면 CPU 압력으로 이어지는 연결 수가 급격히 감소할 수 있습니다.

충분한 Pod 리소스

클라이언트 응용 프로그램을 실행하는 Pod에 충분한 CPU 및 메모리 리소스가 제공되었는지 확인합니다. 클라이언트 응용 프로그램이 리소스 한도에 가깝게 실행되는 경우 시간 초과가 발생할 수 있습니다.

충분한 노드 리소스

클라이언트 애플리케이션을 실행하는 Pod는 동일한 노드에서 실행되는 다른 Pod의 영향을 받고 Redis 연결 또는 IO 작업을 제한할 수 있습니다. 따라서 항상 클라이언트 응용 프로그램 Pod가 실행되는 노드에 충분한 메모리, CPU 및 네트워크 대역폭이 있는지 확인합니다. 이러한 리소스가 부족하면 연결 문제가 발생할 수 있습니다.

Linux 호스팅 클라이언트 응용 프로그램 및 TCP 설정

Azure Cache for Redis 클라이언트 응용 프로그램이 Linux 기반 컨테이너에서 실행되는 경우 일부 TCP 설정을 업데이트하는 것이 좋습니다. 이러한 설정은 Linux 호스팅 클라이언트 응용 프로그램에 대한 TCP 설정에 자세히 설명되어 있습니다.

Istio/Envoy와의 잠재적 연결 충돌

현재 Azure Cache for Redis는 클러스터된 캐시에 포트 15xxx를 사용하여 클러스터 노드를 클라이언트 애플리케이션에 노출합니다. 여기에 설명된 것처럼 동일한 포트는 Envoy라는 Istio.io 사이드카 프록시에서 사용되며 특히 포트 15001 및 15006에서 연결을 만드는 데 방해가 될 수 있습니다.

Azure Cache for Redis 클러스터와 함께 Istio를 사용하는 경우 istio 주석을 사용하여 잠재적인 충돌 포트를 제외하는 것이 좋습니다.

annotations:
  traffic.sidecar.istio.io/excludeOutboundPorts: "15000,15001,15004,15006,15008,15009,15020"

연결 간섭을 방지하려면 다음을 수행하는 것이 좋습니다.

  • 대신 클러스터되지 않은 캐시 또는 엔터프라이즈 계층 캐시를 사용하는 것이 좋습니다.
  • Azure Cache for Redis 클라이언트 코드를 실행하는 Pod에서 Istio 사이드카를 구성하지 마세요