前置知识: 云计算

Kubernetes核心资源

00:00
3 min Intermediate 2026/6/14

Kubernetes核心资源:Pod、Service、Deployment、StatefulSet、ConfigMap 等详解。

1. Pod

1.1 Pod 概念

Pod 是 Kubernetes 最小调度单元,包含一个或多个容器,共享网络和存储。

1.2 Pod 生命周期

阶段描述
Pending已创建,等待调度
Running已调度,容器运行中
Succeeded容器正常退出
Failed容器异常退出
Unknown状态未知

1.3 Pod 配置

apiVersion: v1
kind: Pod
metadata:
  name: web-app
spec:
  containers:
    - name: app
      image: nginx:1.25
      ports:
        - containerPort: 80
      resources:
        requests:
          cpu: 100m
          memory: 128Mi
        limits:
          cpu: 500m
          memory: 512Mi
      livenessProbe:
        httpGet:
          path: /healthz
          port: 80
        initialDelaySeconds: 15
        periodSeconds: 10
      readinessProbe:
        httpGet:
          path: /ready
          port: 80
        initialDelaySeconds: 5
        periodSeconds: 5
      env:
        - name: DB_HOST
          valueFrom:
            configMapKeyRef:
              name: app-config
              key: database_host
      volumeMounts:
        - name: data
          mountPath: /data
  volumes:
    - name: data
      persistentVolumeClaim:
        claimName: app-data

1.4 探针类型

探针用途失败动作
livenessProbe存活检查重启容器
readinessProbe就绪检查移出 Service
startupProbe启动检查杀死容器

2. Deployment

2.1 概念

管理状态应用,维护 Pod 副本数和滚动更新

2.2 配置示例

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

2.3 更新策略

策略描述
RollingUpdate滚动更新(默认)
Recreate先删后建

2.4 常用操作

# 查看滚动更新状态
kubectl rollout status deployment/web

# 查看历史版本
kubectl rollout history deployment/web

# 回滚
kubectl rollout undo deployment/web

# 回滚到指定版本
kubectl rollout undo deployment/web --to-revision=2

# 暂停/恢复更新
kubectl rollout pause deployment/web
kubectl rollout resume deployment/web

3. Service

3.1 概念

Service 为一组 Pod 提供稳定的访问入口和负载均衡

3.2 Service 类型

类型描述访问范围
ClusterIP内部 IP(默认)
NodePort节点端口映射
LoadBalancer负载均衡互联网
ExternalNameCNAME 映射DNS

3.3 配置示例

apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:
  type: ClusterIP
  selector:
    app: web
  ports:
    - port: 80
      targetPort: 8080

3.4 服务发现

# 集群内访问
web-service.default.svc.cluster.local

# 简写(同命名空间)
web-service

4. StatefulSet

4.1 概念

管理状态应用,提供稳定的网络标识和持久化存储。

4.2 与 Deployment 区别

特性DeploymentStatefulSet
Pod 名称随机后缀有序编号
网络标识不稳定稳定 DNS
存储共享独立 PVC
扩缩容随机顺序有序
更新随机顺序逆序

4.3 配置示例

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  serviceName: mysql
  replicas: 3
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
        - name: mysql
          image: mysql:8.0
          volumeMounts:
            - name: data
              mountPath: /var/lib/mysql
  volumeClaimTemplates:
    - metadata:
        name: data
      spec:
        accessModes: ['ReadWriteOnce']
        resources:
          requests:
            storage: 10Gi

5. ConfigMap 与 Secret

5.1 ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  database_host: 'mysql.default.svc.cluster.local'
  database_port: '3306'
  app.properties: |
    key1=value1
    key2=value2

5.2 Secret

apiVersion: v1
kind: Secret
metadata:
  name: db-secret
type: Opaque
data:
  username: YWRtaW4= # base64(admin)
  password: cGFzc3dvcmQ= # base64(password)

注意:Secret 默认仅 Base64 编码建议启用加密存储或使用外部密钥管理(Vault)。

6. DaemonSet 与 Job

6.1 DaemonSet

每个节点一个 Pod 副本,适用于日志采集、监控代理等。

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd
spec:
  selector:
    matchLabels:
      app: fluentd
  template:
    metadata:
      labels:
        app: fluentd
    spec:
      containers:
        - name: fluentd
          image: fluentd:latest

6.2 Job 与 CronJob

# 一次性任务
apiVersion: batch/v1
kind: Job
metadata:
  name: data-migration
spec:
  completions: 1
  backoffLimit: 3
  template:
    spec:
      containers:
        - name: migrate
          image: myapp:migrate
      restartPolicy: Never
# 定时任务
apiVersion: batch/v1
kind: CronJob
metadata:
  name: daily-backup
spec:
  schedule: '0 2 * * *'
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: backup
              image: myapp:backup
          restartPolicy: OnFailure

知识检测

学习进度

-- 已学文档
--% 知识覆盖率

学习推荐

专注模式