Skip to main content

🛠️ YAML 规范 | YAML Standards

为了确保部署成功并符合集群安全标准,请参考以下标准模板和最佳实践。
所有部署必须使用 project-team 命名空间,错误的命名空间将导致部署失败。

📋 目录 | Table of Contents

包含 Deployment、Service 等核心资源
ConfigMap 和 Secret 的使用规范
CPU 和内存的合理配置
Liveness 和 Readiness 探针配置

1. 基础部署配置 | Base Deployment

Deployment 模板

使用以下模板作为你的基础部署配置:
deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: your-app-name
  namespace: project-team
  labels:
    app: your-app-name
    version: v1.0.0
spec:
  replicas: 1
  selector:
    matchLabels:
      app: your-app-name
  template:
    metadata:
      labels:
        app: your-app-name
    spec:
      containers:
      - name: your-app
        image: your-image:tag
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080
          name: http
        resources:
          requests:
            cpu: "100m"
            memory: "128Mi"
          limits:
            cpu: "500m"
            memory: "512Mi"
        env:
        - name: ENV_VAR
          value: "value"
        livenessProbe:
          httpGet:
            path: /health
            port: 8080
          initialDelaySeconds: 30
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /ready
            port: 8080
          initialDelaySeconds: 5
          periodSeconds: 5

Service 配置

为你的应用创建 Service 以暴露服务:
service.yaml
apiVersion: v1
kind: Service
metadata:
  name: your-app-service
  namespace: project-team
spec:
  selector:
    app: your-app-name
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
    name: http
  type: ClusterIP
使用 ClusterIP 类型适用于内部服务访问。如需外部访问,考虑使用 NodePortLoadBalancer

2. 配置管理 | Configuration Management

ConfigMap 示例

使用 ConfigMap 管理应用配置:
configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: your-app-config
  namespace: project-team
data:
  app.properties: |
    server.port=8080
    logging.level=INFO
  database.yml: |
    host: db.example.com
    port: 5432
在 Deployment 中引用 ConfigMap:
spec:
  containers:
  - name: your-app
    volumeMounts:
    - name: config
      mountPath: /etc/config
  volumes:
  - name: config
    configMap:
      name: your-app-config

Secret 示例

敏感信息使用 Secret 管理:
secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: your-app-secret
  namespace: project-team
type: Opaque
stringData:
  username: admin
  password: your-secure-password
Secret 中的敏感信息应使用 base64 编码,或通过 kubectl create secret 命令创建,避免在 YAML 文件中明文存储。
在 Deployment 中使用 Secret:
spec:
  containers:
  - name: your-app
    env:
    - name: DB_USERNAME
      valueFrom:
        secretKeyRef:
          name: your-app-secret
          key: username
    - name: DB_PASSWORD
      valueFrom:
        secretKeyRef:
          name: your-app-secret
          key: password

3. 资源限制 | Resource Limits

资源请求和限制

resources:
  requests:
    cpu: "100m"
    memory: "128Mi"
  limits:
    cpu: "500m"
    memory: "512Mi"

资源单位说明

单位说明示例
CPU1 = 1 核心,1000m = 1 核心500m = 0.5 核心
Memory使用二进制单位512Mi = 512 Mebibytes
必须同时设置 requestslimitsrequests 用于调度决策,limits 用于资源限制。

4. 健康检查 | Health Checks

Liveness Probe

检测容器是否正在运行,失败时重启容器:
livenessProbe:
  httpGet:
    path: /health
    port: 8080
  initialDelaySeconds: 30
  periodSeconds: 10
  timeoutSeconds: 5
  failureThreshold: 3

Readiness Probe

检测容器是否准备好接收流量:
readinessProbe:
  httpGet:
    path: /ready
    port: 8080
  initialDelaySeconds: 5
  periodSeconds: 5
  timeoutSeconds: 3
  successThreshold: 1
  failureThreshold: 3

TCP 探针

对于不支持 HTTP 的服务,使用 TCP 探针:
livenessProbe:
  tcpSocket:
    port: 3306
  initialDelaySeconds: 30
  periodSeconds: 10

5. 完整示例 | Complete Example

以下是一个完整的应用部署示例:
完整示例,包含 Deployment 和 Service:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: example-app
  namespace: project-team
spec:
  replicas: 2
  selector:
    matchLabels:
      app: example-app
  template:
    metadata:
      labels:
        app: example-app
    spec:
      containers:
      - name: app
        image: example/app:latest
        ports:
        - containerPort: 8080
        resources:
          requests:
            cpu: "200m"
            memory: "256Mi"
          limits:
            cpu: "500m"
            memory: "512Mi"
注意:在实际部署时,这两个资源可以放在同一个文件中,使用 --- 分隔。

✅ 检查清单 | Checklist

部署前请确认:
  • 命名空间设置为 project-team
  • 资源限制已合理配置
  • 健康检查探针已配置
  • 镜像标签明确(避免使用 latest
  • ConfigMap 和 Secret 正确引用
  • 标签选择器匹配正确

团队协作

了解开发流程和 Git 工作流

快速开始

学习如何部署应用