stefanprodan 2479134e78 Implement swagger support
- add swagger definitions for all API routes
- self-host the swagger UI on `/swagger/`
- serve swagger spec on `/swagger.json`
2019-08-07 14:17:35 +03:00
2019-08-06 22:13:19 +03:00
2019-08-06 22:15:19 +03:00
2019-08-06 15:05:15 +03:00
2019-08-06 22:53:20 +03:00
2019-08-06 22:15:19 +03:00
2019-08-07 14:17:35 +03:00
2019-08-06 15:06:27 +03:00
2019-08-06 12:14:09 +03:00
2019-08-06 15:32:37 +03:00
2019-08-07 14:17:35 +03:00
2019-08-07 14:17:35 +03:00
2018-01-05 16:20:00 +02:00
2019-08-07 14:17:35 +03:00
2019-08-06 21:53:16 +03:00

podinfo

CircleCI Docker Pulls

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

Specifications:

  • 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)
  • 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

Web UI:

podinfo-ui

Guides

Install

Helm:

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

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

helm test frontend --cleanup

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

Kustomize:

kubectl apply -k github.com/stefanprodan/podinfo//kustomize
Description
Languages
Go 76.4%
CUE 11.8%
HTML 3.8%
Makefile 3.5%
Shell 2.4%
Other 2.1%