kubernetes 的 DaemonSet
在部署服务时,有一类服务是需要在每台node上都启动一个的(例如,日志收集,网络存储设置等基础服务,最典型的,搭建k8s集群master节点时,需要创建一个网络管理,例如,flannel,这个应用就是以DaemonSet形式部署的)。如果在master上用部署Deployment的方式也能实现,为了保证能调度到每台node,就需要使用affinity来进行关联,需要使用IN条件来选中多个机器的la
·
在部署服务时,有一类服务是需要在每台node上都启动一个的(例如,日志收集,网络存储设置等基础服务,最典型的,搭建k8s集群master节点时,需要创建一个网络管理,例如,flannel,这个应用就是以DaemonSet形式部署的)。如果在master上用部署Deployment的方式也能实现,为了保证能调度到每台node,就需要使用affinity来进行关联,需要使用IN条件来选中多个机器的label。但是k8s提供了更便捷的方式,使用DaemonSet来实现:
以Nginx为例:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: nginx-test
spec:
selector:
matchLabels:
app: web_server_test
template:
metadata:
labels:
app: web_server_test
spec:
# nodeSelector:
# slaveNum: "88"
# affinity:
# nodeAffinity:
# requiredDuringSchedulingIgnoredDuringExecution:
# nodeSelectorTerms:
# - matchExpressions:
# - key: slaveNum
# operator: In
# values:
# - "83"
# - "88"
containers:
- name: nginx
image: nginx:latest
yaml的声明方式和Deployment基本一致,只是去掉了replicas属性。上述yaml在master节点执行之后,会默认的运行到所有node机器上。
如果想指定一台机器,则打开nodeSelector注释内容即可;如果想指定到一台以上的node,但是并不是所有node,则打开affinity注释内容,修改匹配规则即可。
注:DaemonSet 的 pods 是被 DaemonSet controller 创建和调度管理的,并不依赖master的scheduler,因此它没有pending状态
更多推荐
已为社区贡献5条内容
所有评论(0)