
概述 #
Kubernetes (K8s) 是开源的容器编排系统,用于自动化容器化应用的部署、扩展和管理。
核心概念 #
集群架构 #
Control Plane (控制平面)
├── API Server
├── etcd
├── Scheduler
└── Controller Manager
Worker Nodes (工作节点)
└── Pods (运行应用)核心对象 #
| 对象 | 说明 |
|---|---|
| Pod | 最小的部署单元 |
| Service | 服务发现和负载均衡 |
| Deployment | 无状态应用管理 |
| StatefulSet | 有状态应用管理 |
| DaemonSet | 守护进程 |
| ConfigMap | 配置数据 |
| Secret | 敏感数据 |
快速开始 #
安装 Minikube (本地测试) #
# 安装 minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# 启动集群
minikube start
# 检查状态
kubectl get nodes部署第一个应用 #
# 创建部署
kubectl create deployment nginx --image=nginx:latest
# 暴露服务
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看服务
kubectl get services
# 访问应用
minikube service nginx --url核心资源 #
Pod #
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:1.21
ports:
- containerPort: 80
resources:
limits:
memory: "128Mi"
cpu: "500m"Deployment #
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.21
ports:
- containerPort: 80Service #
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIP常用命令 #
查看资源 #
# 查看节点
kubectl get nodes
# 查看 Pod
kubectl get pods
kubectl get pods -o wide
# 查看服务
kubectl get services
# 查看部署
kubectl get deployments日志和调试 #
# 查看 Pod 日志
kubectl logs <pod-name>
# 实时查看日志
kubectl logs -f <pod-name>
# 进入容器
kubectl exec -it <pod-name> -- /bin/sh
# 查看事件
kubectl get events
kubectl describe node <node-name>更新和回滚 #
# 更新镜像
kubectl set image deployment/nginx nginx=nginx:1.22
# 查看更新状态
kubectl rollout status deployment/nginx
# 回滚
kubectl rollout undo deployment/nginx
# 查看历史
kubectl rollout history deployment/nginx扩缩容 #
# 手动扩缩容
kubectl scale deployment nginx --replicas=5
# 自动扩缩容
kubectl autoscale deployment nginx --min=2 --max=10 --cpu-percent=80实战示例 #
部署 Node.js 应用 #
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: node-app
spec:
replicas: 3
selector:
matchLabels:
app: node-app
template:
metadata:
labels:
app: node-app
spec:
containers:
- name: node-app
image: myregistry/node-app:latest
ports:
- containerPort: 3000
env:
- name: NODE_ENV
value: "production"
resources:
limits:
memory: "256Mi"
cpu: "500m"
requests:
memory: "128Mi"
cpu: "250m"
---
# service.yaml
apiVersion: v1
kind: Service
metadata:
name: node-app-service
spec:
selector:
app: node-app
ports:
- protocol: TCP
port: 80
targetPort: 3000
type: ClusterIP# 应用配置
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
# 验证
kubectl get deployments
kubectl get services
kubectl get pods使用 ConfigMap 和 Secret #
# configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
database_host: "mysql-service"
database_port: "3306"
---
# secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: app-secret
type: Opaque
stringData:
database_user: "admin"
database_password: "password123"HPA (Horizontal Pod Autoscaler) #
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70总结 #
Kubernetes 提供了强大的容器编排能力,是现代云原生应用的基础。