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