k8s-Daemonset
DaemonSet概述
DaemonSet控制器能够确保k8s集群所有的节点都运行一个相同的pod副本,当向k8s集群中增加node节点时,这个node节点也会自动创建一个pod副本,当node节点从集群移除,这些pod也会自动删除;删除Daemonset也会删除它们创建的pod
DaemonSet工作原理:如何管理Pod?
daemonset的控制器会监听kuberntes的daemonset对象、pod对象、node对象,这些被监听的对象之变动,就会触发syncLoop循环让kubernetes集群朝着daemonset对象描述的状态进行演进。
DaemonSet典型的应用场景
在集群的每个节点上运行存储,比如:glusterd 或 ceph。
在每个节点上运行日志收集组件,比如:flunentd 、 logstash、filebeat等。
在每个节点上运行监控组件,比如:Prometheus、 Node Exporter 、collectd等。
DaemonSet 与 Deployment 的区别
Deployment 部署的副本 Pod 会分布在各个 Node 上,每个 Node 都可能运行好几个副本。
DaemonSet 的不同之处在于:每个 Node 上最多只能运行一个副本。
DaemonSet资源清单文件编写技巧
#查看定义Daemonset资源需要的字段有哪些?
[root@master01 w]# kubectl explain ds KIND: DaemonSet VERSION: apps/v1 DESCRIPTION: DaemonSet represents the configuration of a daemon set. FIELDS: apiVersion <string> #当前资源使用的api版本,跟VERSION: apps/v1保持一致 kind <string> #资源类型,跟KIND: DaemonSet保持一致 metadata <Object> #元数据,定义DaemonSet名字的 spec <Object> #定义容器的 status <Object> #状态信息,不能改
#查看DaemonSet的spec字段如何定义?
[root@master01 w]# kubectl explain ds.spec KIND: DaemonSet VERSION: apps/v1 RESOURCE: spec <Object> DESCRIPTION: The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status DaemonSetSpec is the specification of a daemon set. FIELDS: minReadySeconds <integer> #当新的pod启动几秒种后,再kill掉旧的pod。 revisionHistoryLimit <integer> #历史版本 selector <Object> -required- #用于匹配pod的标签选择器 template <Object> -required- #定义Pod的模板,基于这个模板定义的所有pod是一样的 updateStrategy <Object> #daemonset的升级策略
#查看DaemonSet的spec.template字段如何定义?
#对于template而言,其内部定义的就是pod,pod模板是一个独立的对象
[root@master01 w]# kubectl explain ds.spec.template KIND: DaemonSet VERSION: apps/v1 RESOURCE: template <Object> FIELDS: metadata <Object> spec<Object>
DaemonSet使用案例:部署日志收集组件fluentd
【只是简单演示,日志收集会详细写】
#把fluentd-2-5-1.tar.gz上传到node节点
[root@node01 ~]# docker load -i frontend.tar.gz
[root@master01 w]# cat ds.yaml apiVersion: apps/v1 kind: DaemonSet metadata: name: frontend-ds spec: selector: matchLabels: app: frontend template: metadata: name: labels: app: frontend spec: tolerations: - key: node-role.kubernetes.io/master #容忍度 effect: NoSchedule containers: - name: frontend image: xianchao/fluentd:v2.5.1 imagePullPolicy: IfNotPresent resources: limits: memory: 200Mi requests: cpu: 100m memory: 200Mi volumeMounts: - name: varlog mountPath: /var/log - name: varlibdockercontainers mountPath: /var/lib/docker/containers readOnly: true terminationGracePeriodSeconds: 30 volumes: - name: varlog hostPath: path: /var/log - name: varlibdockercontainers hostPath: path: /var/lib/docker/containers
[root@master01 w]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES frontend-ds-jr7tr 1/1 Running 0 2m43s 172.16.241.67 master01 <none> <none> frontend-ds-ktpn5 1/1 Running 0 2m43s 172.16.196.171 node01 <none> <none> frontend-ds-m87kn 1/1 Running 0 2m43s 172.16.59.197 master02 <none> <none>
#通过上面可以看到在k8s的三个节点均创建了fluentd这个pod
#pod的名字是由控制器的名字-随机数组成的

评论