Kubernetes 基础概念解析
什么是 Kubernetes?
Kubernetes(简称 K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。它由 Google 设计并贡献给云原生计算基金会(CNCF)。
核心架构
Kubernetes 集群由两部分组成:
- 控制平面(Control Plane):负责维护集群状态
- 工作节点(Worker Nodes):运行容器化应用
关键概念
1. Pod
Pod 是 Kubernetes 中最小的部署单元,包含一个或多个容器。同一 Pod 中的容器共享网络和存储资源。
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:1.0
ports:
- containerPort: 80
2. Deployment
Deployment 用于声明式地管理 Pod 的副本数量和版本更新。
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deployment
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:1.0
ports:
- containerPort: 80
3. Service
Service 定义了一组 Pod 的访问策略,提供负载均衡和服务发现功能。
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
selector:
app: myapp
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
4. ConfigMap 和 Secret
用于存储配置信息和敏感数据,实现配置与代码分离。
# ConfigMap 示例
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
DATABASE_URL: "postgres://localhost:5432/mydb"
LOG_LEVEL: "info"
5. Namespace
Namespace 用于在同一个物理集群中隔离资源,适合多团队或多环境场景。
常用命令
| 命令 | 说明 |
|---|---|
kubectl get pods |
查看 Pod 列表 |
kubectl apply -f deploy.yaml |
应用配置文件 |
kubectl logs <pod-name> |
查看 Pod 日志 |
kubectl exec -it <pod-name> -- bash |
进入 Pod |
kubectl scale deployment <name> --replicas=5 |
扩缩容 |
最佳实践
- 资源限制:为每个容器设置 CPU 和内存限制
- 健康检查:配置 liveness 和 readiness 探针
- 标签管理:使用标签组织和管理资源
- 滚动更新:使用 Deployment 实现零停机部署
- 配置分离:使用 ConfigMap 管理环境配置
总结
Kubernetes 是云原生时代的基础设施,掌握其核心概念对于现代 DevOps 工程师至关重要。建议从本地 Minikube 或 Kind 开始实践,逐步深入理解。