Kubernetes K8S之资源控制器Daemonset详解

Kubernetes的资源控制器Daemonset详解与示例

主机配置规划

Kubernetes K8S之资源控制器Daemonset详解

什么是控制器

kubernetes中内建了很多controller(控制器),这些相当于一个状态机,用来控制pod的具体状态和行为。

部分控制器类型如下:

  • ReplicationController 和 ReplicaSet
  • Deployment
  • DaemonSet
  • StatefulSet
  • Job/CronJob
  • HorizontalPodAutoscaler
DaemonSet

DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本。当有节点加入集群时,会为他们新增一个 Pod。当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。

DaemonSet 的一些典型用法:

  • 在每个节点上运行集群存储 DaemonSet,例如 glusterd、ceph。
  • 在每个节点上运行日志收集 DaemonSet,例如 fluentd、logstash。
  • 在每个节点上运行监控 DaemonSet,例如 Prometheus Node Exporter、Flowmill、Sysdig 代理、collectd、Dynatrace OneAgent、AppDynamics 代理、Datadog 代理、New Relic 代理、Ganglia gmond 或者 Instana 代理。

一个简单的用法是在所有的节点上都启动一个 DaemonSet,并作为每种类型的 daemon 使用。

一个稍微复杂的用法是单独对每种 daemon 类型使用一种DaemonSet。这样有多个 DaemonSet,但具有不同的标识,并且对不同硬件类型具有不同的内存、CPU 要求。

备注:DaemonSet 中的 Pod 可以使用 hostPort,从而可以通过节点 IP 访问到 Pod;因为DaemonSet模式下Pod不会被调度到其他节点。使用示例如下:

ports:  - name: httpd    containerPort: 80    #除非绝对必要,否则不要为 Pod 指定 hostPort。 将 Pod 绑定到hostPort时,它会限制 Pod 可以调度的位置数;DaemonSet除外    #一般情况下 containerPort与hostPort值相同    hostPort: 8090     #可以通过宿主机+hostPort的方式访问该Pod。例如:pod在/调度到了k8s-node02【172.16.1.112】,那么该Pod可以通过172.16.1.112:8090方式进行访问。    protocol: TCP  

可参见:「Kubernetes K8S之通过yaml创建pod与pod文件常用字段详解」

DaemonSet示例

yaml文件

[root@k8s-master controller]# pwd  /root/k8s_practice/controller  [root@k8s-master controller]# cat daemonset.yaml  apiVersion: apps/v1  kind: DaemonSet  metadata:    name: fluentd-elasticsearch    namespace: default    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          effect: NoSchedule        containers:        - name: fluentd-elasticsearch          image: registry.cn-beijing.aliyuncs.com/google_registry/fluentd:v2.5.2          resources:            limits:              cpu: 1              memory: 200Mi            requests:              cpu: 100m              memory: 200Mi          volumeMounts:          - name: varlog            mountPath: /var/log          - name: varlibdockercontainers            mountPath: /var/lib/docker/containers            readOnly: true        # 优雅关闭应用,时间设置。超过该时间会强制关闭【可选项】,默认30秒        terminationGracePeriodSeconds: 30        volumes:        - name: varlog          hostPath:            path: /var/log        - name: varlibdockercontainers          hostPath:            path: /var/lib/docker/containers  

运行daemonset,并查看状态

[root@k8s-master controller]# kubectl apply -f daemonset.yaml  daemonset.apps/fluentd-elasticsearch created  [root@k8s-master controller]#  [root@k8s-master controller]# kubectl get daemonset -o wide  NAME                    DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE   CONTAINERS              IMAGES                                                            SELECTOR  fluentd-elasticsearch   3         3         3       3            3           <none>          92s   fluentd-elasticsearch   registry.cn-beijing.aliyuncs.com/google_registry/fluentd:v2.5.2   name=fluentd-elasticsearch  [root@k8s-master controller]#  [root@k8s-master controller]# kubectl get pod -o wide  NAME                          READY   STATUS    RESTARTS   AGE   IP            NODE         NOMINATED NODE   READINESS GATES  fluentd-elasticsearch-52b8z   1/1     Running   0          95s   10.244.2.92   k8s-node02   <none>           <none>  fluentd-elasticsearch-fps95   1/1     Running   0          95s   10.244.0.46   k8s-master   <none>           <none>  fluentd-elasticsearch-pz8j7   1/1     Running   0          95s   10.244.4.83   k8s-node01   <none>           <none>  

由上可见,在k8s集群所有节点包括master节点都运行了daemonset的pod。

原文出处:zhangblog -> http://www.zhangblog.com/2020/09/02/kubernetes11/

本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如果侵犯你的利益,请发送邮箱到 [email protected],我们会很快的为您处理。
超哥软件库 » Kubernetes K8S之资源控制器Daemonset详解