Kubernetes 部署文件 (k8s/deployment.yaml)
apiVersion: apps/v1 # Kubernetes API 版本
kind: Deployment # 资源类型(部署控制器)
metadata:
name: {{APP_NAME}} # 部署名称(动态变量替换)
spec:
replicas: 3 # 维持 3 个 Pod 副本
selector: # 选择器定义
matchLabels: # 通过标签匹配 Pod
app: {{APP_NAME}} # 匹配标签键值对
template: # Pod 模板定义
metadata:
labels: # Pod 标签(必须与 selector 匹配)
app: {{APP_NAME}}
spec: # Pod 规格
containers:
- name: main # 容器名称
image: "{{IMAGE_NAME}}:{{IMAGE_TAG}}" # 镜像地址+标签
ports:
- containerPort: 8080 # 容器监听端口
resources: # 资源配额配置
requests: # 最小资源需求(调度依据)
cpu: "100m" # 0.1 核 CPU(1000m=1核)
memory: "128Mi" # 128 MB 内存
limits: # 最大资源限制(硬性上限)
cpu: "500m" # 0.5 核 CPU
memory: "512Mi" # 512 MB 内存
imagePullSecrets: # 私有仓库认证
- name: registry-cred # 必须预先创建 Secret 名称(找到第二点)
---
apiVersion: v1 # 核心 API 版本
kind: Service # 服务资源类型
metadata:
name: {{APP_NAME}} # 服务名称(与 Deployment 同名)
spec:
type: LoadBalancer # 服务类型(云厂商会创建负载均衡器)
ports:
- port: 80 # 服务对外暴露端口
targetPort: 8080 # 转发到容器的端口
selector: # 选择要代理的 Pod
app: {{APP_NAME}} # 必须匹配 Deployment 中的 Pod 标签
# 关键参数详解
# 1. replicas
# 作用:控制同时运行的 Pod 实例数量
# 建议:生产环境建议至少 2 个副本确保高可用
# 2. selector.matchLabels
# 重要性:连接 Deployment 和 Pod 的纽带
# 注意:必须与 template.metadata.labels 完全一致
# 3. resources
# requests:调度依据,K8s 根据此值选择合适节点
# limits:硬性限制,超过会触发 OOMKilled 或 CPU Throttling
# 单位换算:1 CPU = 1000m,1 MiB = 1024 KiB
# 4. imagePullSecrets
# 适用场景:私有镜像仓库认证
# 创建方法:kubectl create secret docker-registry
# 5. Service 类型
# ClusterIP(默认):集群内部访问
# NodePort:通过节点端口暴露
# LoadBalancer:云厂商提供外部负载均衡器
# 6. 端口映射
# port: 80:外部访问端口
# targetPort: 8080:对应容器的实际端口
# 关系:外部流量 → 80 端口 → 8080 容器端口
二. 镜像仓库凭证配置
在 RKE2 集群创建拉取凭证:
kubectl create secret docker-registry registry-cred \
--docker-server=${DOCKER_REGISTRY} \
--docker-username=deploy-user \
--docker-password=your-password