Show / Hide Table of Contents

Kubernetes Probes

Kubernetes probe is another opt-in feature of AMI. The application may implement IApplicationStatusProvider interface and register implementation in AMI host.

using DotNext.Diagnostics;
using DotNext.Maintenance.CommandLine;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

public sealed class Probes : IApplicationStatusProvider
{
    Task<bool> ReadinessProbeAsync(CancellationToken token) => Task.FromResult(true);

    Task<bool> LivenessProbeAsync(CancellationToken token) => Task.FromResult(true);

    Task<bool> StartupProbeAsync(CancellationToken token) => Task.FromResult(true);
}

await new HostBuilder()
    .ConfigureServices(services =>
    {
        services
            .UseApplicationMaintenanceInterface("/path/to/unix/domain/socket")
            .UseApplicationStatusProvider<Probes>();
    })
    .Build()
    .RunAsync();

After that, the probe can be described in YAML very simply:

apiVersion: v1
kind: Pod
metadata:
  name: goproxy
  labels:
    app: goproxy
spec:
  containers:
  - name: goproxy
    image: k8s.gcr.io/goproxy:0.1
    ports:
    - containerPort: 8080
    readinessProbe:
      exec:
        command: sh /tmp/readiness_probe.sh
      initialDelaySeconds: 5
      periodSeconds: 5
# readiness_probe.sh file
PROBE=`echo probe readiness 00:00:05 | nc -U /tmp/app.sock`
if [ $? -eq 0 ] && [ $PROBE = "ok" ]
then
exit 0
else
exit 1
fi

The format of probe command has the following format:

probe <readiness|liveness|startup> <timeout>

Timeout must be presented in ISO-8601 format for time durations.

  • Edit this page
☀
☾
In this article
Back to top
Supported by the .NET Foundation
☀
☾