关键概念
该控制器会确保每一个节点上部署一个相同的副本,且只部署一个副本。
应用场景
在集群的每个节点上运行存储,比如:glusterd 或 ceph。
在每个节点上运行日志收集组件,比如:flunentd 、 logstash、filebeat 等。
在每个节点上运行监控组件,比如:Prometheus、 Node Exporter 、collectd 等。
了解工作原理:如何管理 Pod
daemonset 的控制器会监听 kuberntes 的 daemonset 对象、pod 对象、node 对象,这些被监听的对象之变动,就会触发 syncLoop 循环让 kubernetes 集群朝着 daemonset 对象描述的状态进行演进。
资源清单解释
# kubectl explain ds.spec
没有replicas字段
minReadySeconds <integer> #当新的 pod 启动几秒种后,再 kill 掉旧的pod。
revisionHistoryLimit <integer> #历史版本
selector <Object> -required- #用于匹配 pod 的标签选择器
template <Object> -required- #定义 Pod 的模板,基于这个模板定义的所有 pod 是一样的
updateStrategy <Object> #daemonset 的升级策略
# kubectl explain ds.spec.updateStrategy
rollingUpdate <Object> # 只支持RollingUpdate
Rolling update config params. Present only if type = "RollingUpdate".
type <string>
Type of daemon set update. Can be "RollingUpdate" or "OnDelete". Default is
RollingUpdate.
表示rollingUpdate 更新策略只支持 maxUnavailabe,先删除在更新;
因为我们不支持一个节点运行两个pod,因此需要先删除一个,在更新一个。
字段详述
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd-elasticsearch
namespace: kube-system
labels:
k8s-app: fluentd-logging
spec:
selector:
matchLabels:
name: fluentd-elasticsearch
template:
metadata:
labels:
name: fluentd-elasticsearch
spec:
tolerations: # 定义容忍度,使其调度到master节点
- key: node-role.kubernetes.io/master # master节点的污点
effect: NoSchedule
containers:
- name: fluentd-elasticsearch
image: xianchao/fluentd:v2.5.1
imagePullPolicy: IfNotPresent
resources: # 定义资源限额
limits:
cpu: 500m
memory: 512Mi
requests:
cpu: 200m
memory: 215Mi
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
测试:部署日志组件
日志收集组件-fluentd
# 上传镜像,一定要在涉及到的所有节点上传镜像(包括master节点)
vim ds-fluentd.yaml
kubectl apply -f ds-fluentd.yaml
# 查看
kubectl get ds -n kube-system
kubectl get pods -n kube-system
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd-elasticsearch
namespace: kube-system
labels:
k8s-app: fluentd-logging
spec:
selector:
matchLabels:
name: fluentd-elasticsearch
template:
metadata:
labels:
name: fluentd-elasticsearch
spec:
tolerations:
- key: node-role.kubernetes.io/master
effect: NoSchedule
containers:
- name: fluentd-elasticsearch
image: xianchao/fluentd:v2.5.1
resources:
limits:
cpu: 500m
memory: 512Mi
requests:
cpu: 200m
memory: 215Mi
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