Go microservice template for Kubernetes
Alternatives To Podinfo
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
Traefik43,2951810 hours ago160September 16, 2022622mitGo
The Cloud Native Application Proxy
7 hours ago237apache-2.0Lua
🦍 The Cloud-Native API Gateway
7 hours ago639April 25, 2021624apache-2.0Go
Connect, secure, control, and observe services.
Nacos26,5851185616 hours ago53August 08, 2022225apache-2.0Java
an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.
Dapr21,302388 hours ago411August 11, 2022379apache-2.0Go
Dapr is a portable, event-driven, runtime for building distributed applications across cloud and edge.
Generator Jhipster20,6204,6661867 hours ago267September 02, 2022289apache-2.0TypeScript
JHipster is a development platform to quickly generate, develop, & deploy modern web applications & microservice architectures.
Jina18,496211 hours ago2,019July 06, 202223apache-2.0Python
🔮 Build multimodal AI services via cloud native technologies
Microservices Demo14,238
8 hours ago43August 04, 202237apache-2.0Python
Sample cloud-first application with 10 microservices showcasing Kubernetes, Istio, and gRPC.
Awesome Kubernetes13,893
20 days ago9otherShell
A curated list for awesome kubernetes sources :ship::tada:
Jib12,818108 hours ago21August 30, 2022172apache-2.0Java
🏗 Build container images for your Java applications.
Alternatives To Podinfo
Select To Compare

Alternative Project Comparisons


e2e test cve-scan Go Report Card Docker Pulls

Podinfo is a tiny web application made with Go that showcases best practices of running microservices in Kubernetes. Podinfo is used by CNCF projects like Flux and Flagger for end-to-end testing and workshops.


  • Health checks (readiness and liveness)
  • Graceful shutdown on interrupt signals
  • File watcher for secrets and configmaps
  • Instrumented with Prometheus and Open Telemetry
  • Structured logging with zap
  • 12-factor app with viper
  • Fault injection (random errors and latency)
  • Swagger docs
  • CUE, Helm and Kustomize installers
  • End-to-End testing with Kubernetes Kind and Helm
  • Multi-arch container image with Docker buildx and Github Actions
  • Container image signing with Sigstore cosign
  • SBOMs and SLSA Provenance embedded in the container image
  • CVE scanning with Trivy

Web API:

  • GET / prints runtime information
  • GET /version prints podinfo version and git commit hash
  • GET /metrics return HTTP requests duration and Go runtime metrics
  • GET /healthz used by Kubernetes liveness probe
  • GET /readyz used by Kubernetes readiness probe
  • POST /readyz/enable signals the Kubernetes LB that this instance is ready to receive traffic
  • POST /readyz/disable signals the Kubernetes LB to stop sending requests to this instance
  • GET /status/{code} returns the status code
  • GET /panic crashes the process with exit code 255
  • POST /echo forwards the call to the backend service and echos the posted content
  • GET /env returns the environment variables as a JSON array
  • GET /headers returns a JSON with the request HTTP headers
  • GET /delay/{seconds} waits for the specified period
  • POST /token issues a JWT token valid for one minute JWT=$(curl -sd 'anon' podinfo:9898/token | jq -r .token)
  • GET /token/validate validates the JWT token curl -H "Authorization: Bearer $JWT" podinfo:9898/token/validate
  • GET /configs returns a JSON with configmaps and/or secrets mounted in the config volume
  • POST/PUT /cache/{key} saves the posted content to Redis
  • GET /cache/{key} returns the content from Redis if the key exists
  • DELETE /cache/{key} deletes the key from Redis if exists
  • POST /store writes the posted content to disk at /data/hash and returns the SHA1 hash of the content
  • GET /store/{hash} returns the content of the file /data/hash if exists
  • GET /ws/echo echos content via websockets podcli ws ws://localhost:9898/ws/echo
  • GET /chunked/{seconds} uses transfer-encoding type chunked to give a partial response and then waits for the specified period
  • GET /swagger.json returns the API Swagger docs, used for Linkerd service profiling and Gloo routes discovery


  • /grpc.health.v1.Health/Check health checking

Web UI:


To access the Swagger UI open <podinfo-host>/swagger/index.html in a browser.



To install Podinfo on Kubernetes the minimum required version is Kubernetes v1.23.


Install from github.io:

helm repo add podinfo https://stefanprodan.github.io/podinfo

helm upgrade --install --wait frontend \
--namespace test \
--set replicaCount=2 \
--set backend=http://backend-podinfo:9898/echo \

helm test frontend --namespace test

helm upgrade --install --wait backend \
--namespace test \
--set redis.enabled=true \

Install from ghcr.io:

helm upgrade --install --wait podinfo --namespace default \


kubectl apply -k github.com/stefanprodan/podinfo//kustomize


docker run -dp 9898:9898 stefanprodan/podinfo

Continuous Delivery

In order to install podinfo on a Kubernetes cluster and keep it up to date with the latest release in an automated manner, you can use Flux.

Install the Flux CLI on MacOS and Linux using Homebrew:

brew install fluxcd/tap/flux

Install the Flux controllers needed for Helm operations:

flux install \
--namespace=flux-system \
--network-policy=false \

Add podinfo's Helm repository to your cluster and configure Flux to check for new chart releases every ten minutes:

flux create source helm podinfo \
--namespace=default \
--url=https://stefanprodan.github.io/podinfo \

Create a podinfo-values.yaml file locally:

cat > podinfo-values.yaml <<EOL
replicaCount: 2
    memory: 256Mi
    cpu: 100m
    memory: 64Mi

Create a Helm release for deploying podinfo in the default namespace:

flux create helmrelease podinfo \
--namespace=default \
--source=HelmRepository/podinfo \
--release-name=podinfo \
--chart=podinfo \
--chart-version=">5.0.0" \

Based on the above definition, Flux will upgrade the release automatically when a new version of podinfo is released. If the upgrade fails, Flux can rollback to the previous working version.

You can check what version is currently deployed with:

flux get helmreleases -n default

To delete podinfo's Helm repository and release from your cluster run:

flux -n default delete source helm podinfo
flux -n default delete helmrelease podinfo

If you wish to manage the lifecycle of your applications in a GitOps manner, check out this workflow example for multi-env deployments with Flux, Kustomize and Helm.

Popular Kubernetes Projects
Popular Microservices Projects
Popular Virtualization Categories
Related Searches

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.