45
GitHub - stefanprodan/podinfo: Go microservice template for Kubernetes
source link: https://github.com/stefanprodan/podinfo
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
README.md
podinfo
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
- Linkerd service profile
- 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
- Kustomize testing with GitHub Actions and Open Policy Agent
Web API:
GET /
prints runtime informationGET /version
prints podinfo version and git commit hashGET /metrics
return HTTP requests duration and Go runtime metricsGET /healthz
used by Kubernetes liveness probeGET /readyz
used by Kubernetes readiness probePOST /readyz/enable
signals the Kubernetes LB that this instance is ready to receive trafficPOST /readyz/disable
signals the Kubernetes LB to stop sending requests to this instanceGET /status/{code}
returns the status codeGET /panic
crashes the process with exit code 255POST /echo
forwards the call to the backend service and echos the posted contentGET /env
returns the environment variables as a JSON arrayGET /headers
returns a JSON with the request HTTP headersGET /delay/{seconds}
waits for the specified periodPOST /token
issues a JWT token valid for one minuteJWT=$(curl -sd 'anon' podinfo:9898/token | jq -r .token)
GET /token/validate
validates the JWT tokencurl -H "Authorization: Bearer $JWT" podinfo:9898/token/validate
GET /configs
returns a JSON with configmaps and/or secrets mounted in theconfig
volumePOST /store
writes the posted content to disk at /data/hash and returns the SHA1 hash of the contentGET /store/{hash}
returns the content of the file /data/hash if existsGET /ws/echo
echos content via websocketspodcli ws ws://localhost:9898/ws/echo
GET /chunked/{seconds}
usestransfer-encoding
typechunked
to give a partial response and then waits for the specified periodGET /swagger.json
returns the API Swagger docs, used for Linkerd service profiling and Gloo routes discovery
gRPC API:
/grpc.health.v1.Health/Check
health checking
Web UI:
To access the Swagger UI open <podinfo-host>/swagger/index.html
in a browser.
Guides
- Automated canary deployments with Flagger and Istio
- Kubernetes autoscaling with Istio metrics
- Managing Helm releases the GitOps way
- Expose Kubernetes services over HTTPS with Ngrok
Install
Helm:
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 \ podinfo/podinfo helm test frontend --cleanup helm upgrade --install --wait backend \ --namespace test \ --set hpa.enabled=true \ podinfo/podinfo
Kustomize:
kubectl apply -k github.com/stefanprodan/podinfo//kustomize
Docker:
docker run -dp 9898:9898 stefanprodan/podinfo
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK