Kubernetes K8S之资源控制器Daemonset详解
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,例如 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不会被调度到其他节点。使用示例如下:
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文件
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,并查看状态
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^-) !