mirror of
https://github.com/stefanprodan/podinfo.git
synced 2026-03-05 11:30:19 +00:00
52 lines
2.5 KiB
Markdown
52 lines
2.5 KiB
Markdown
# k8s-podinfo
|
|
|
|
Podinfo is a tiny web application made with Go
|
|
that showcases best practices of running microservices in Kubernetes.
|
|
|
|
Specifications:
|
|
|
|
* Release automation (Make/TravisCI/CircleCI/Quay.io/Google Cloud Container Builder/Skaffold/Weave Flux)
|
|
* Multi-platform Docker image (amd64/arm/arm64/ppc64le/s390x)
|
|
* 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 chart
|
|
|
|
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 /write` writes the posted content to disk at /data/hash and returns the SHA1 hash of the content
|
|
* `GET /read/{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`
|
|
|
|
### Guides
|
|
|
|
* [Deploy and upgrade with Helm](docs/1-deploy.md)
|
|
* [Horizontal Pod Auto-scaling](docs/2-autoscaling.md)
|
|
* [Monitoring and alerting with Prometheus](docs/3-monitoring.md)
|
|
* [StatefulSets with local persistent volumes](docs/4-statefulsets.md)
|
|
* [Expose Kubernetes services over HTTPS with Ngrok](docs/6-ngrok.md)
|
|
* [A/B Testing with Ambassador API Gateway](docs/5-canary.md)
|
|
* [Canary Deployments with Istio](docs/7-istio.md)
|
|
* [GitHub Actions CI demo](docs/8-gh-actions.md)
|