关于 k8s-deployment
这项 Kubernetes 部署技能介绍服务的 Docker 多阶段构建、kustomize 覆盖配置和 Makefile 自动化,并包含 Go 与 Python 容器模式。它还说明前端使用 Vercel 时,仅将后端部署到 Kubernetes。
主要功能
- 01Docker 多阶段构建模式
- 02面向不同环境的 kustomize 覆盖配置
- 03Makefile 驱动的部署自动化
- 04使用 Git 哈希标记镜像
- 05Go 与 Python Docker 示例
适用场景
- 01准备 Go 服务容器
- 02准备 Python 服务容器
- 03将后端服务部署到 Kubernetes
- 04将前端部署与 Vercel 分离
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ brojonat/ llmsrules --skill k8s-deployment安装后在 Claude Code 中输入/k8s-deployment确认已加载。
详细介绍
Kubernetes 部署
使用 Docker 多阶段构建、kustomize 覆盖层和 Makefile 驱动的自动化来部署服务。
目录结构
.
├── Dockerfile
├── Makefile
├── server/
│ └── k8s/
│ └── prod/
│ ├── server.yaml
│ ├── ingress.yaml
│ └── kustomization.yaml
└── worker/
└── k8s/
└── prod/
├── worker.yaml
└── kustomization.yaml
Makefile
SHELL := /bin/bash
define setup_env
$(eval ENV_FILE := $(1))
$(eval include $(1))
$(eval export)
endef
build-push-cli: ## Build and push Docker image with git hash tag
$(call setup_env, .env.server.prod)
$(eval GIT_HASH := $(shell git rev-parse --short HEAD))
$(eval DYNAMIC_TAG := your-registry/your-app:$(GIT_HASH))
docker build -f Dockerfile -t $(DYNAMIC_TAG) .
docker push $(DYNAMIC_TAG)
deploy-server: ## Deploy server to Kubernetes (prod)
$(call setup_env, .env.server.prod)
@$(MAKE) build-push-cli
$(eval GIT_HASH := $(shell git rev-parse --short HEAD))
kustomize build --load-restrictor=LoadRestrictionsNone server/k8s/prod | \
sed -e "s;{{DOCKER_REPO}};your-registry/your-app;g" \
-e "s;{{GIT_COMMIT_SHA}};$(GIT_HASH);g" | \
kubectl apply -f -
deploy-worker: ## Deploy worker to Kubernetes (prod)
$(call setup_env, .env.worker.prod)
@$(MAKE) build-push-cli
$(eval GIT_HASH := $(shell git rev-parse --short HEAD))
kustomize build --load-restrictor=LoadRestrictionsNone worker/k8s/prod | \
sed -e "s;{{DOCKER_REPO}};your-registry/your-app;g" \
-e "s;{{GIT_COMMIT_SHA}};$(GIT_HASH);g" | \
kubectl apply -f -
Dockerfile(Go)
# ---- Builder Stage ----
FROM golang:1.24-alpine AS builder
RUN apk update && apk add --no-cache git build-base ca-certificates
RUN update-ca-certificates
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY cmd/ ./cmd/
COPY server/ ./server/
COPY worker/ ./worker/
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-w -s" -o /bin/app cmd/app/*.go
# ---- Final Stage ----
FROM alpine:latest
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
WORKDIR /app
COPY --from=builder /bin/app /app
EXPOSE 8080
CMD ["/app", "run", "http-server"]
Dockerfile(Python)
FROM python:3.13-slim AS base
RUN pip install uv
WORKDIR /app
COPY pyproject.toml uv.lock ./
RUN uv sync --frozen --no-dev
COPY src/ ./src/
COPY server/ ./server/
EXPOSE 8000
CMD ["uv", "run", "uvicorn", "server.main:app", "--host", "0.0.0.0", "--port", "8000"]
关键模式
- Git 哈希标签:使用
git rev-parse --short HEAD为镜像打标签,以便追踪 - kustomize 覆盖层:使用
kustomize build配合 sed 替换来部署特定环境 - 多阶段构建:将构建器和运行时阶段分开,以生成最小化镜像
- 层缓存:先复制依赖文件,再复制源代码
- Vercel 上的前端:通过 Vercel 部署前端;只有后端部署到 k8s
评论
支持 Markdown