系列导读:本篇将深入讲解 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