K8sController-DaemonSet(在每个Node上仅运行一个Pod)

基于K8s 1.31

DaemonSet概述

DS的常见场景

  • 在每个Node上运行一个共享存储的驱动守护进程,比如ceph driver
  • 在每个Node上运行一个日志采集程序,采集Node上全部日志,比如flaunted
  • 在每个Node上运行一个性能采集程序

配置信息

apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd
spec:
# 修订历史最大数量 默认10
revisionHistoryLimit: 10
# 最短就绪时间 默认0
minReadySeconds: 5
# 更新策略
updateStrategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
selector:
matchLabels:
app: fluentd
template:
metadata:
labels:
app: fluentd
spec:
containers:
- name: fluentd
image: fluentd
resources:
limits:
memory: 200Mi
cpu: 100m
requests:
memory: 200Mi
cpu: 100m
volumeMounts:
- mountPath: /var/log
name: varlog
volumes:
- name: varlog
hostPath:
path: /var/log

更新策略

spec:
# 更新策略
strategy:
type: RollingUpdate
rollingUpdate:
# Pod总数量超过副本数量最大值
maxSurge: 1
# 不可用状态的Pod最大上限
maxUnavailable: 1
  • Recreate:表示Deployment在更新Pod,会先“kill”旧版本Pod,等旧版本全部终止之后,才会常见新的Pod
  • RollingUpdate:更新的方式逐个更新

回滚

kubectl rollout hostory ds <deploymentname>

# 查看特定的版本
kubectl rollout hostory ds <deploymentname> --revision=3

# 回滚
kubectl rollout undo ds <deployname>

# 回滚指定版本
kubectl rollout undo ds <deployname> --to-version=3