K8S学习笔记之控制器Deamonset

关键概念

该控制器会确保每一个节点上部署一个相同的副本,且只部署一个副本。

应用场景

在集群的每个节点上运行存储,比如: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

你可能感兴趣的:(云原生,kubernetes,学习,elasticsearch)