Latest Kubernetes Resources
Introduction
The Go Microservice
goapp/
├── main.go
├── go.mod
└── Dockerfilepackage main
import (
"encoding/json"
"fmt"
"log/slog"
"net/http"
"os"
"time"
)
type HealthResponse struct {
Status string `json:"status"`
Timestamp string `json:"timestamp"`
Version string `json:"version"`
}
type ItemResponse struct {
ID int `json:"id"`
Name string `json:"name"`
Price int `json:"price"`
}
func main() {
logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
port := os.Getenv("PORT")
if port == "" {
port = "8080"
}
mux := http.NewServeMux()
mux.HandleFunc("GET /healthz", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(HealthResponse{
Status: "ok",
Timestamp: time.Now().UTC().Format(time.RFC3339),
Version: os.Getenv("APP_VERSION"),
})
})
mux.HandleFunc("GET /items", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode([]ItemResponse{
{ID: 1, Name: "Widget A", Price: 100},
{ID: 2, Name: "Widget B", Price: 200},
})
})
mux.HandleFunc("POST /items", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusCreated)
json.NewEncoder(w).Encode(ItemResponse{ID: 3, Name: "Widget C", Price: 300})
})
addr := fmt.Sprintf(":%s", port)
logger.Info("starting server", "addr", addr, "version", os.Getenv("APP_VERSION"))
if err := http.ListenAndServe(addr, mux); err != nil {
logger.Error("server error", "err", err)
os.Exit(1)
}
}Workload Resources
Deployment
StatefulSet
DaemonSet
Job and CronJob
Autoscaling Resources
HorizontalPodAutoscaler (v2)
VerticalPodAutoscaler (VPA)
Reliability and Policy Resources
PodDisruptionBudget
PriorityClass
Resource Management
ResourceQuota
LimitRange
Network Security
NetworkPolicy
Configuration and ServiceAccount
Applying Everything
Resource API Version Reference
Resource
API Group
Stable Since
What I Learned
Next
Last updated