云原生与容器--Kubernetes 生产环境部署实战

系列导读:本篇将深入讲解 Kubernetes 生产环境的部署与最佳实践。


文章目录

    • [一、Kubernetes 架构](#一、Kubernetes 架构)
      • [1.1 整体架构](#1.1 整体架构)
      • [1.2 核心组件](#1.2 核心组件)
    • 二、集群部署
      • [2.1 部署方式对比](#2.1 部署方式对比)
      • [2.2 kubeadm 部署](#2.2 kubeadm 部署)
      • [2.3 集群规划](#2.3 集群规划)
    • 三、核心概念
      • [3.1 资源对象](#3.1 资源对象)
      • [3.2 Pod 生命周期](#3.2 Pod 生命周期)
    • 四、部署应用
      • [4.1 Deployment](#4.1 Deployment)
      • [4.2 Service](#4.2 Service)
      • [4.3 Ingress](#4.3 Ingress)
    • 五、生产最佳实践
      • [5.1 资源限制](#5.1 资源限制)
      • [5.2 健康检查](#5.2 健康检查)
      • [5.3 配置管理](#5.3 配置管理)
      • [5.4 持久化存储](#5.4 持久化存储)
    • 总结

一、Kubernetes 架构

1.1 整体架构

复制代码
┌─────────────────────────────────────────────────────────────┐
│                  Kubernetes 集群架构                         │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌─────────────────────────────────────────────────────┐    │
│  │                   Master 节点                       │    │
│  │  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐    │    │
│  │  │API Server│ │Scheduler│ │Controller│ │ etcd   │   │    │
│  │  └─────────┘ └─────────┘ └─────────┘ └─────────┘   │     │
│  └─────────────────────────────────────────────────────┘    │
│                           │                                 │
│         ┌─────────────────┼─────────────────┐               │
│         ▼                 ▼                 ▼               │
│  ┌─────────────┐   ┌─────────────┐   ┌─────────────┐        │
│  │ Worker 节点 │   │ Worker 节点  │   │ Worker 节点  │       │
│  │ ┌─────────┐ │   │ ┌─────────┐ │   │ ┌─────────┐ │        │
│  │ │ Kubelet │ │   │ │ Kubelet │ │   │ │ Kubelet │ │        │
│  │ │Kube-proxy│ │   │ │Kube-proxy│ │   │ │Kube-proxy│ │     │
│  │ │ Runtime │ │   │ │ Runtime │ │   │ │ Runtime │ │        │
│  │ └─────────┘ │   │ └─────────┘ │   │ └─────────┘ │        │
│  └─────────────┘   └─────────────┘   └─────────────┘        │
│                                                             │
└─────────────────────────────────────────────────────────────┘

1.2 核心组件

组件 说明
API Server 集群入口,RESTful API
Scheduler 调度器,分配 Pod
Controller Manager 控制器,维护集群状态
etcd 分布式存储,保存集群数据
Kubelet 节点代理,管理容器
Kube-proxy 网络代理,Service 实现

二、集群部署

2.1 部署方式对比

方式 说明 适用场景
kubeadm 官方工具 生产环境
kops AWS 专用 云环境
k3s 轻量级 边缘计算
minikube 单机 开发测试

2.2 kubeadm 部署

bash 复制代码
# 1. 安装 Docker
curl -fsSL https://get.docker.com | bash

# 2. 安装 kubeadm
apt-get update && apt-get install -y apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl

# 3. 初始化 Master
kubeadm init --pod-network-cidr=10.244.0.0/16

# 4. 配置 kubectl
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

# 5. 安装网络插件
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

# 6. Worker 节点加入
kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash <hash>

2.3 集群规划

复制代码
生产环境推荐配置:

Master 节点(3个):
- CPU: 4核+
- 内存: 8GB+
- 磁盘: 100GB SSD

Worker 节点(N个):
- CPU: 8核+
- 内存: 16GB+
- 磁盘: 200GB SSD

三、核心概念

3.1 资源对象

对象 说明
Pod 最小部署单元
Deployment 无状态应用管理
Service 服务发现与负载均衡
ConfigMap 配置管理
Secret 敏感信息管理
PersistentVolume 持久化存储

3.2 Pod 生命周期

复制代码
Pending → Running → Succeeded/Failed
              │
              └──► CrashLoopBackOff(异常重启)

四、部署应用

4.1 Deployment

yaml 复制代码
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: order-service
  labels:
    app: order
spec:
  replicas: 3
  selector:
    matchLabels:
      app: order
  template:
    metadata:
      labels:
        app: order
    spec:
      containers:
      - name: order
        image: registry.example.com/order:v1.0
        ports:
        - containerPort: 8080
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 500m
            memory: 512Mi
        livenessProbe:
          httpGet:
            path: /health
            port: 8080
          initialDelaySeconds: 30
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /ready
            port: 8080
          initialDelaySeconds: 5
          periodSeconds: 5

4.2 Service

yaml 复制代码
# service.yaml
apiVersion: v1
kind: Service
metadata:
  name: order-service
spec:
  selector:
    app: order
  ports:
  - port: 80
    targetPort: 8080
  type: ClusterIP

4.3 Ingress

yaml 复制代码
# ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: order-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: order.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: order-service
            port:
              number: 80

五、生产最佳实践

5.1 资源限制

yaml 复制代码
resources:
  requests:
    cpu: 100m      # 最小保证
    memory: 128Mi
  limits:
    cpu: 500m      # 最大限制
    memory: 512Mi

5.2 健康检查

yaml 复制代码
livenessProbe:   # 存活检查
  httpGet:
    path: /health
    port: 8080

readinessProbe:  # 就绪检查
  httpGet:
    path: /ready
    port: 8080

5.3 配置管理

yaml 复制代码
# ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  database.url: "jdbc:mysql://mysql:3306/mydb"

# 使用
env:
  - name: DATABASE_URL
    valueFrom:
      configMapKeyRef:
        name: app-config
        key: database.url

5.4 持久化存储

yaml 复制代码
# PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: standard

总结

Kubernetes 架构 :Master、Worker 节点

集群部署 :kubeadm、集群规划

核心概念 :Pod、Deployment、Service

部署应用 :YAML 配置

生产实践:资源限制、健康检查

下篇预告Docker 容器化最佳实践


作者 :刘~浪地球
系列 :云原生与容器(一)
更新时间:2026-04-14

相关推荐
gwjcloud1 天前
Docker详解
java·docker·容器
文静小土豆1 天前
Java 应用上 K8s 全指南:从部署到治理的生产级实践
java·开发语言·kubernetes
努力搬砖的咸鱼1 天前
Label 与 Selector:Kubernetes 资源选择的核心机制
微服务·云原生·容器·架构·kubernetes
Warren981 天前
Windows本地部署n8n完整教程(基于Docker,新手友好)
运维·windows·python·测试工具·docker·容器·可用性测试
倦王1 天前
在docker下部署Xinference
运维·docker·容器
阿火~1 天前
docker完整镜像迁移【亲测有效】
linux·运维·服务器·docker·容器
两点王爷1 天前
在离线的Ubuntu机器中安装docker
运维·docker·容器
Devin~Y1 天前
大厂Java面试实战:Spring Boot/WebFlux、Redis+Kafka、K8s可观测性与Spring AI RAG/Agent三轮连环问
java·spring boot·redis·kafka·kubernetes·resilience4j·spring webflux
Harvy_没救了1 天前
Docker Desktop 部署新项目详细步骤
运维·docker·容器
PH = 71 天前
解决Docker Hub无法访问的问题二
运维·docker·容器