Skip to content
Go microservice template for Kubernetes
Go HTML Makefile Smarty Shell Dockerfile
Branch: master
Clone or download
stefanprodan Merge pull request #35 from eladb/patch-1
remove duplicate "ingress" entries in readme
Latest commit 8b37756 Sep 14, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci Add build step to e2e tests Aug 6, 2019
charts remove duplicate "ingress" entries in readme Sep 11, 2019
cmd Add gRPC service name flag to check command Sep 5, 2019
e2e Update Kubernetes Kind to v0.5.1 Sep 5, 2019
kustomize Release v3.0.0 Sep 5, 2019
pkg Release v3.0.0 Sep 5, 2019
ui Release 2.1.0 Aug 7, 2019
.gitignore Cleanup make Aug 6, 2019
.goreleaser.yml Publish podinfo CLI to GitHub releases Aug 6, 2019
Dockerfile Push container on release Aug 6, 2019
LICENSE Initial commit Jan 5, 2018
Makefile Run gPRC health server if grpc-port flag is set Sep 4, 2019 Release v3.0.0 Sep 5, 2019
cloudbuild.yaml Remove docs and build dirs Aug 6, 2019
go.mod Add gRPC health server Sep 4, 2019


CircleCI Docker Pulls

Podinfo is a tiny web application made with Go that showcases best practices of running microservices in Kubernetes.


  • Health checks (readiness and liveness)
  • Graceful shutdown on interrupt signals
  • File watcher for secrets and configmaps
  • Instrumented with Prometheus
  • Tracing with Istio and Jaeger
  • Structured logging with zap
  • 12-factor app with viper
  • Fault injection (random errors and latency)
  • Swagger docs
  • Helm and Kustomize installers
  • End-to-End testing with Kubernetes Kind and Helm

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 /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


  • / health checking

Web UI:


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




helm repo add sp

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

helm test frontend --cleanup

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


kubectl apply -k


docker run -dp 9898:9898 stefanprodan/podinfo
You can’t perform that action at this time.