Pod 与 Deployment

Pod

Pod 是 Kubernetes 中最小、最简单的部署单元。

Pod 示例

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
    - name: nginx
      image: nginx:alpine
      ports:
        - containerPort: 80
      resources:
        requests:
          memory: "64Mi"
          cpu: "250m"
        limits:
          memory: "128Mi"
          cpu: "500m"
      livenessProbe:
        httpGet:
          path: /
          port: 80
        initialDelaySeconds: 3
        periodSeconds: 5

Deployment

Deployment 提供了声明式更新能力,是管理 Pod 的首选方式。

Deployment 定义

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
  labels:
    app: web
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
        - name: nginx
          image: nginx:1.25
          ports:
            - containerPort: 80
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1

伸缩

# 手动伸缩
kubectl scale deployment web-app --replicas=5

# 自动伸缩(HPA)
kubectl autoscale deployment web-app --min=2 --max=10 --cpu-percent=80

更新策略

# 滚动更新
kubectl set image deployment/web-app nginx=nginx:1.26

# 查看更新状态
kubectl rollout status deployment/web-app

# 回滚
kubectl rollout undo deployment/web-app
kubectl rollout history deployment/web-app

ConfigMap 和 Secret

ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  app.properties: |
    database.url=jdbc:mysql://db:3306/app
    app.name=MyApp

Secret

apiVersion: v1
kind: Secret
metadata:
  name: app-secret
type: Opaque
data:
  db-password: MTIzNDU2

健康检查

# 存活检查
livenessProbe:
  httpGet:
    path: /healthz
    port: 8080
  initialDelaySeconds: 5
  periodSeconds: 10

# 就绪检查
readinessProbe:
  tcpSocket:
    port: 8080
  initialDelaySeconds: 3
  periodSeconds: 5