Pod 与 Deployment
Pod
Pod 是 Kubernetes 中最小、最简单的部署单元。
Pod 示例
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:alpine
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 3
periodSeconds: 5
Deployment
Deployment 提供了声明式更新能力,是管理 Pod 的首选方式。
Deployment 定义
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
labels:
app: web
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
伸缩
# 手动伸缩
kubectl scale deployment web-app --replicas=5
# 自动伸缩(HPA)
kubectl autoscale deployment web-app --min=2 --max=10 --cpu-percent=80
更新策略
# 滚动更新
kubectl set image deployment/web-app nginx=nginx:1.26
# 查看更新状态
kubectl rollout status deployment/web-app
# 回滚
kubectl rollout undo deployment/web-app
kubectl rollout history deployment/web-app
ConfigMap 和 Secret
ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
app.properties: |
database.url=jdbc:mysql://db:3306/app
app.name=MyApp
Secret
apiVersion: v1
kind: Secret
metadata:
name: app-secret
type: Opaque
data:
db-password: MTIzNDU2
健康检查
# 存活检查
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
# 就绪检查
readinessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 3
periodSeconds: 5
