前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kubernetes K8S之资源控制器Daemonset详解

Kubernetes K8S之资源控制器Daemonset详解

作者头像
踏歌行
发布2020-10-15 15:26:51
1.9K0
发布2020-10-15 15:26:51
举报
文章被收录于专栏:踏歌行的专栏踏歌行的专栏

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

主机配置规划

服务器名称(hostname)

系统版本

配置

内网IP

外网IP(模拟)

k8s-master

CentOS7.7

2C/4G/20G

172.16.1.110

10.0.0.110

k8s-node01

CentOS7.7

2C/4G/20G

172.16.1.111

10.0.0.111

k8s-node02

CentOS7.7

2C/4G/20G

172.16.1.112

10.0.0.112

什么是控制器

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不会被调度到其他节点。使用示例如下:

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

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

DaemonSet示例

yaml文件

代码语言:javascript
复制
 1 [root@k8s-master controller]# pwd
 2 /root/k8s_practice/controller
 3 [root@k8s-master controller]# cat daemonset.yaml 
 4 apiVersion: apps/v1
 5 kind: DaemonSet
 6 metadata:
 7   name: fluentd-elasticsearch
 8   namespace: default
 9   labels:
10     k8s-app: fluentd-logging
11 spec:
12   selector:
13     matchLabels:
14       name: fluentd-elasticsearch
15   template:
16     metadata:
17       labels:
18         name: fluentd-elasticsearch
19     spec:
20       tolerations:
21       # 允许在master节点运行
22       - key: node-role.kubernetes.io/master
23         effect: NoSchedule
24       containers:
25       - name: fluentd-elasticsearch
26         image: registry.cn-beijing.aliyuncs.com/google_registry/fluentd:v2.5.2
27         resources:
28           limits:
29             cpu: 1
30             memory: 200Mi
31           requests:
32             cpu: 100m
33             memory: 200Mi
34         volumeMounts:
35         - name: varlog
36           mountPath: /var/log
37         - name: varlibdockercontainers
38           mountPath: /var/lib/docker/containers
39           readOnly: true
40       # 优雅关闭应用,时间设置。超过该时间会强制关闭【可选项】,默认30秒
41       terminationGracePeriodSeconds: 30
42       volumes:
43       - name: varlog
44         hostPath:
45           path: /var/log
46       - name: varlibdockercontainers
47         hostPath:
48           path: /var/lib/docker/containers

运行daemonset,并查看状态

代码语言:javascript
复制
 1 [root@k8s-master controller]# kubectl apply -f daemonset.yaml 
 2 daemonset.apps/fluentd-elasticsearch created
 3 [root@k8s-master controller]# 
 4 [root@k8s-master controller]# kubectl get daemonset -o wide
 5 NAME                    DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE   CONTAINERS              IMAGES                                                            SELECTOR
 6 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
 7 [root@k8s-master controller]# 
 8 [root@k8s-master controller]# kubectl get pod -o wide
 9 NAME                          READY   STATUS    RESTARTS   AGE   IP            NODE         NOMINATED NODE   READINESS GATES
10 fluentd-elasticsearch-52b8z   1/1     Running   0          95s   10.244.2.92   k8s-node02   <none>           <none>
11 fluentd-elasticsearch-fps95   1/1     Running   0          95s   10.244.0.46   k8s-master   <none>           <none>
12 fluentd-elasticsearch-pz8j7   1/1     Running   0          95s   10.244.4.83   k8s-node01   <none>           <none>

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

相关阅读

1、Kubernetes K8S之通过yaml创建pod与pod文件常用字段详解

2、Kubernetes K8S之资源控制器RC、RS、Deployment详解

3、Kubernetes K8S之资源控制器StatefulSets详解

完毕!


———END———

如果觉得不错就关注下呗 (-^O^-) !

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 主机配置规划
  • 什么是控制器
  • DaemonSet
  • DaemonSet示例
  • 相关阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档