一、Kubernetes 体系架构 #
1.1 核心架构概述 #
Kubernetes 采用主从架构,主要由控制平面(Control Plane) 和工作节点(Worker Nodes) 组成。
┌─────────────────────────────────────────────────────────────┐
│ 控制平面 (Control Plane) │
│ ┌─────────────┐ ┌──────────┐ ┌─────────────┐ ┌────────┐ │
│ │ API Server │ │ etcd │ │ Scheduler │ │Controller││
│ │ │ │ │ │ │ │ Manager ││
│ └─────────────┘ └──────────┘ └─────────────┘ └────────┘ │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 工作节点 (Worker Nodes) │
│ ┌─────────────┐ ┌──────────┐ ┌─────────────┐ │
│ │ kubelet │ │ kube-proxy│ │ 容器运行时 │ │
│ │ │ │ │ │ (Docker等) │ │
│ └─────────────┘ └──────────┘ └─────────────┘ │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ Pod (容器组) │ │
│ │ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ 容器1 │ │ 容器2 │ │ │
│ │ │ (应用) │ │ (边车等) │ │ │
│ │ └──────────────┘ └──────────────┘ │ │
│ └───────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
1.2 控制平面组件 #
- API Server: 所有操作的入口点,处理REST请求
- etcd: 分布式键值存储,保存集群状态
- Scheduler: 将Pod调度到合适的节点
- Controller Manager: 运行控制器,确保集群处于期望状态
1.3 工作节点组件 #
- kubelet: 节点代理,与API Server通信
- kube-proxy: 网络代理,处理服务发现和负载均衡
- 容器运行时: 运行容器的软件(Docker, containerd等)
二、核心概念 #
2.1 Pod #
最小的部署单元,包含一个或多个容器,共享存储和网络
2.2 Deployment #
管理Pod副本的声明式方式,支持滚动更新和回滚
2.3 Service #
定义一组Pod的访问策略,提供稳定的网络端点
2.4 Namespace #
虚拟集群,用于资源隔离和组织
三、基本使用方法 #
3.1 安装和设置 #
# 安装 kubectl (Kubernetes 命令行工具)
# macOS
brew install kubectl
# Ubuntu
sudo apt-get update && sudo apt-get install -y kubectl
# 查看集群信息
kubectl cluster-info
# 查看节点状态
kubectl get nodes
3.2 部署第一个应用 #
# 创建一个 Deployment
kubectl create deployment nginx-deployment --image=nginx:1.19
# 查看 Deployment
kubectl get deployments
# 查看 Pod
kubectl get pods
# 创建 Service 暴露应用
kubectl expose deployment nginx-deployment --port=80 --type=NodePort
# 查看 Service
kubectl get services
3.3 使用 YAML 配置文件 #
创建 nginx-deployment.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.19
ports:
- containerPort: 80
应用配置文件:
kubectl apply -f nginx-deployment.yaml
kubectl get pods
3.4 常用命令 #
# 查看资源
kubectl get pods
kubectl get services
kubectl get deployments
# 查看详细信息
kubectl describe pod <pod-name>
kubectl describe service <service-name>
# 查看日志
kubectl logs <pod-name>
# 进入容器
kubectl exec -it <pod-name> -- /bin/bash
# 扩展 Deployment
kubectl scale deployment nginx-deployment --replicas=5
# 更新镜像
kubectl set image deployment/nginx-deployment nginx=nginx:1.20
# 回滚更新
kubectl rollout undo deployment/nginx-deployment
# 删除资源
kubectl delete deployment nginx-deployment
kubectl delete service nginx-service
四、实际应用示例 #
4.1 多容器 Pod 示例 #
创建 multi-container-pod.yaml
:
apiVersion: v1
kind: Pod
metadata:
name: multi-container-pod
spec:
containers:
- name: nginx
image: nginx:1.19
ports:
- containerPort: 80
- name: busybox
image: busybox
command: ['sh', '-c', 'while true; do echo "Hello Kubernetes!"; sleep 5; done']
4.2 完整应用部署示例 #
创建 web-app.yaml
:
# Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
replicas: 3
selector:
matchLabels:
app: web-app
template:
metadata:
labels:
app: web-app
spec:
containers:
- name: web-app
image: nginx:1.19
ports:
- containerPort: 80
env:
- name: ENVIRONMENT
value: "production"
---
# Service
apiVersion: v1
kind: Service
metadata:
name: web-app-service
spec:
selector:
app: web-app
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
五、进阶概念 #
5.1 ConfigMap 和 Secret #
# ConfigMap 示例
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
database_url: "mysql://localhost:3306"
log_level: "INFO"
5.2 持久化存储 #
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
六、学习资源 #
- 官方文档: https://kubernetes.io/docs/
- 交互式教程: https://kubernetes.io/docs/tutorials/
- Play with Kubernetes: 在线实践环境
- Minikube: 本地单节点Kubernetes集群
七、总结 #
Kubernetes 提供了强大的容器编排能力,主要特点包括:
- 自动部署和扩展: 轻松管理容器化应用
- 服务发现和负载均衡: 自动分配网络流量
- 自我修复: 自动替换失败容器
- 密钥和配置管理: 安全地管理敏感信息
- 存储编排: 自动挂载存储系统
通过掌握这些基础概念和命令,您已经具备了使用 Kubernetes 的基本能力。建议从单节点环境(如 Minikube)开始实践,逐步深入了解更高级的功能。
参考 #
kubernetes in Action