in src/ApplicationInsights.Kubernetes/K8sEnvironmentFactory.cs [114:150]
private async Task<K8sPod> SpinWaitUntilGetPod(DateTime timeoutAt, K8sQueryClient client)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
K8sPod myPod = null;
do
{
// When my pod become available and it's status become ready, we recognize the container is ready.
try
{
myPod = await client.GetMyPodAsync().ConfigureAwait(false);
}
#pragma warning disable CA1031 // Do not catch general exception types
catch (Exception ex)
{
_logger.LogWarning($"Query exception while trying to get pod info: {ex.Message}");
_logger.LogDebug(ex.ToString());
myPod = null;
}
#pragma warning restore CA1031 // Do not catch general exception types
if (myPod != null)
{
stopwatch.Stop();
_logger.LogDebug(Invariant($"K8s info avaialbe in: {stopwatch.ElapsedMilliseconds} ms."));
return myPod;
}
// The time to get the container ready dependes on how much time will a container to be initialized.
// When there is readiness probe, the pod info will not be available until the initial delay of it is elapsed.
// When there is no readiness probe, the minimum seems about 1000ms.
// Try invoke a probe on readiness every 500ms until the container is ready
// Or it will timeout per the timeout settings.
await Task.Delay(500).ConfigureAwait(false);
} while (DateTime.Now < timeoutAt);
return null;
}