mcpField
K
k8s-deployment

k8s-deployment

github.com/brojonat云与 DevOps146 次安装2 周前更新
代码仓库

关于 k8s-deployment

这项 Kubernetes 部署技能介绍服务的 Docker 多阶段构建、kustomize 覆盖配置和 Makefile 自动化,并包含 Go 与 Python 容器模式。它还说明前端使用 Vercel 时,仅将后端部署到 Kubernetes。

主要功能

  1. 01Docker 多阶段构建模式
  2. 02面向不同环境的 kustomize 覆盖配置
  3. 03Makefile 驱动的部署自动化
  4. 04使用 Git 哈希标记镜像
  5. 05Go 与 Python Docker 示例

适用场景

  1. 01准备 Go 服务容器
  2. 02准备 Python 服务容器
  3. 03将后端服务部署到 Kubernetes
  4. 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