Kubernetes 控制器资源调度机制
标签与选择器机制
通过标签(Label)和选择器(Selector)实现资源关联与管理
标签配置
- 在资源metadata.labels字段配置
- 命令行操作:
kubectl label <resource-type> <resource-name> <key=value> --overwrite # 修改现有标签 --show-labels # 显示全部标签 -A -l 'env=prod' # 跨命名空间查询 -l 'tier in (frontend,backend)' # 多值匹配 -l 'env=prod,app=web' # 多条件匹配
选择器应用
- 在资源spec.selector字段配置
- 命令行使用同上
Deployment控制器
基础操作
# 创建Deployment kubectl create deploy web-server --image=nginx:1.7.9 # 查看资源状态 kubectl get deploy kubectl get rs kubectl get pods --show-labels
滚动更新
# 更新镜像版本 kubectl set image deploy/web-server nginx=nginx:1.9.1 # 查看更新状态 kubectl rollout status deploy web-server kubectl describe deploy web-server
版本回退
# 查看历史版本 kubectl rollout history deploy/web-server # 回退操作 kubectl rollout undo deploy/web-server kubectl rollout undo deploy/web-server --to-revision=2
扩缩容
# 调整副本数量 kubectl scale deploy/web-server --replicas=5
更新暂停与恢复
kubectl rollout pause deploy/web-server kubectl rollout resume deploy/web-server
配置示例
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-server
spec:
replicas: 3
selector:
matchLabels:
app: web
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:1.9.1
StatefulSet控制器
特性:
- 稳定网络标识:Pod名称格式<statefulset-name>-<ordinal>
- 持久化存储:通过volumeClaimTemplate实现
- 有序部署:按索引顺序创建/删除Pod
无头服务配置
apiVersion: v1
kind: Service
metadata:
name: db-service
spec:
clusterIP: None
selector:
app: database
StatefulSet配置
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: db-node
spec:
serviceName: db-service
replicas: 3
template:
metadata:
labels:
app: database
spec:
containers:
- name: db
image: mysql:5.7
volumeMounts:
- name: data
mountPath: /var/lib/mysql
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: ssd
resources:
requests:
storage: 10Gi
DaemonSet控制器
配置示例
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: log-collector
spec:
selector:
matchLabels:
name: log-agent
template:
metadata:
labels:
name: log-agent
spec:
tolerations:
- key: node-role.kubernetes.io/master
effect: NoSchedule
containers:
- name: fluentd
image: fluentd:latest
volumeMounts:
- name: host-logs
mountPath: /host/log
volumes:
- name: host-logs
hostPath:
path: /var/log
节点选择
spec:
template:
spec:
nodeSelector:
logging: enabled
HPA自动扩缩容
指标服务部署
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
HPA配置
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: app-scaler
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: web-app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 60
