k8s-Daemonset

root
233
文章
0
评论
2021年8月17日00:23:57 评论 2723字阅读9分4秒

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的名字是由控制器的名字-随机数组成的

 

继续阅读
历史上的今天
8月
17
weinxin
我的微信
这是我的微信扫一扫
  • 文本由 发表于 2021年8月17日00:23:57
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
k8s-Service Account Kubernetes

k8s-Service Account

k8s-Service Account的授权管理 Service Account也是一种账号,是给运行在Pod里的进程提供了必要的身份证明。需要在Pod定义中指明引用的Service Account,...
k8s-RBAC Kubernetes

k8s-RBAC

k8s-RBAC认证授权策略 RBAC介绍 在Kubernetes中,所有资源对象都是通过API进行操作,他们保存在etcd里。而对etcd的操作我们需要通过访问 kube-apiserver 来实现...
k8s-Secret Kubernetes

k8s-Secret

配置管理中心Secret Secret是什么? Configmap一般是用来存放明文数据的,如配置文件,对于一些敏感数据,如密码、私钥等数据时,要用secret类型 Secret解决了密码、token...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: