stefanprodan/podinfo
Fork: 1732 Star: 5438 (更新于 2024-12-05 23:56:25)
license: Apache-2.0
Language: Go .
Go microservice template for Kubernetes
最后发布版本: 6.7.0 ( 2024-06-24 02:32:53)
podinfo
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.
Specifications:
- 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
- Timoni, 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 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
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 websocketspodcli ws ws://localhost:9898/ws/echo
-
GET /chunked/{seconds}
usestransfer-encoding
typechunked
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 API:
-
/grpc.health.v1.Health/Check
health checking -
/grpc.EchoService/Echo
echos the received content -
/grpc.VersionService/Version
returns podinfo version and Git commit hash -
/grpc.DelayService/Delay
returns a successful response after the given seconds in the body of gRPC request -
/grpc.EnvService/Env
returns environment variables as a JSON array -
/grpc.HeaderService/Header
returns the headers present in the gRPC request. Any custom header can also be given as a part of request and that can be returned using this API -
/grpc.InfoService/Info
returns the runtime information -
/grpc.PanicService/Panic
crashes the process with gRPC status code as '1 CANCELLED' -
/grpc.StatusService/Status
returns the gRPC Status code given in the request body -
/grpc.TokenService/TokenGenerate
issues a JWT token valid for one minute -
/grpc.TokenService/TokenValidate
validates the JWT token
Web UI:
To access the Swagger UI open <podinfo-host>/swagger/index.html
in a browser.
Guides
- Getting started with Timoni
- Getting started with Flux
- Progressive Deliver with Flagger and Linkerd
- Automated canary deployments with Kubernetes Gateway API
Install
To install Podinfo on Kubernetes the minimum required version is Kubernetes v1.23.
Timoni
Install with Timoni:
timoni -n default apply podinfo oci://ghcr.io/stefanprodan/modules/podinfo
Helm
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 \
podinfo/podinfo
helm test frontend --namespace test
helm upgrade --install --wait backend \
--namespace test \
--set redis.enabled=true \
podinfo/podinfo
Install from ghcr.io:
helm upgrade --install --wait podinfo --namespace default \
oci://ghcr.io/stefanprodan/charts/podinfo
Kustomize
kubectl apply -k github.com/stefanprodan/podinfo//kustomize
Docker
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 \
--components=source-controller,helm-controller
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 \
--interval=10m
Create a podinfo-values.yaml
file locally:
cat > podinfo-values.yaml <<EOL
replicaCount: 2
resources:
limits:
memory: 256Mi
requests:
cpu: 100m
memory: 64Mi
EOL
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" \
--values=podinfo-values.yaml
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.
最近版本更新:(数据更新于 2024-09-24 21:22:39)
2024-06-24 02:32:53 6.7.0
2024-05-23 16:39:01 6.6.3
2024-04-10 19:09:27 6.6.2
2024-03-27 22:04:09 6.6.1
2024-02-26 20:06:12 6.6.0
2023-12-17 22:48:51 6.5.4
2023-10-30 20:49:58 6.5.3
2023-10-12 17:26:03 6.5.2
2023-10-03 02:13:04 6.5.1
2023-09-23 17:45:08 6.5.0
主题(topics):
cuelang, e2e-testing, gitops, golang, helm, kubernetes, kustomize, microservice
stefanprodan/podinfo同语言 Go最近更新仓库
2024-12-22 07:52:58 navidrome/navidrome
2024-12-21 20:15:12 SagerNet/sing-box
2024-12-21 03:25:54 SpecterOps/BloodHound
2024-12-19 23:11:24 shadow1ng/fscan
2024-12-19 21:50:56 minio/minio
2024-12-19 10:04:39 istio/istio