1、基础知识
1.1、简介
DaemonSet能够让所有(或者特定)的节点"精确的"运行同一个pod,它一般应用在集群环境中所有节点都必 须运行的守护进程的场景。 我们在部署k8s环境的时候,网络的部署样式就是基于这种DaemonSet的方式,因为对于网络来说,是所有节 点都必须具备的基本能力,而且不能随意中断,否则的话,节点上的容器通信就会出现问题。
1.2、常用的场景-flannel为例
master1 ~]# kubectl -n kube-system get ds NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE kube-flannel-ds 5 5 5 5 5 <none> 5d1h kube-proxy 5 5 5 5 5 kubernetes.io/os=linux 5d1h master1 ~]# cat flannel/kube-flannel.yml apiVersion: apps/v1 kind: DaemonSet
1.3、daemonset常用的服务
当节点加入到K8S集群中,pod会被(DaemonSet)调度到该节点上运行,当节点从K8S集群中被移除, 被DaemonSet调度的pod会被移除,如果删除DaemonSet,所有跟这个DaemonSet相关的pods都会被删 除。 在某种程度上,DaemonSet承担了RC的部分功能,它也能保证相关pods持续运行,如果一个 DaemonSet的Pod被杀死、停止、或者崩溃,那么DaemonSet将会重新创建一个新的副本在这台计算节点上。 常用于后台支撑服务 集群存储守护进程,如:glusterd,ceph 日志收集服务,如:fluentd,logstash 监控服务,如:Prometheus,collectd
1.4、DaemonSet流程图
1.5、资源清单解析
apiVersion: apps/v1 # API群组及版本 kind: DaemonSet # 资源类型特有标识 metadata: name <string> # 资源名称,在作用域中要唯一 namespace <string> # 名称空间;DaemonSet资源隶属名称空间级别 spec: minReadySeconds <integer> # Pod就绪后多少秒内任一容器无crash方可视为“就绪” selector <object> # 标签选择器,必须匹配template字段中Pod模板中的标签 template <object> # Pod模板对象; revisionHistoryLimit <integer> # 滚动更新历史记录数量,默认为10; updateStrategy <Object> # 滚动更新策略 type <string> # 滚动更新类型,可用值有OnDelete和 RollingUpdate; rollingUpdate <Object> # 滚动更新参数,专用于RollingUpdate类型 maxUnavailable <string> # 更新期间可比期望的Pod数量缺少的数量或比例
2、实践1-DaemonSet
2.1、需求
之前我们在Node上启动Pod需要在RC中指定replicas的副本数的值,有些情况下,我们需要在所有节点都运行一个Pod,
因为Node数量会变化,所以Pod的副本数使用RC来指定就不合适了,这个时候Daemon Sets就派上了用场。
简单来说,Daemon Sets就是让一个pod在所有的k8s集群节点上都运行一个。
2.2、定义资源清单
cat >daemonset-test.yml<<'EOF' apiVersion: apps/v1 kind: DaemonSet metadata: name: daemonset-test spec: selector: matchLabels: app: pod-test template: metadata: labels: app: pod-test spec: containers: - name: pod-test image: 192.168.10.33:80/k8s/pod_test:v0.2 EOF
2.2.1、应用资源清单
master1 ]# kubectl apply -f daemonset-test.yml master1 ]# kubectl get ds NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset-test 2 2 2 2 2 <none> 3s master1 ]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES daemonset-test-mhj5l 1/1 Running 0 15s 10.244.3.145 node1 <none> <none> daemonset-test-nzjbg 1/1 Running 0 15s 10.244.4.86 node2 <none> <none>
2.3、DaemonSet对象也支持滚动更新
master1 ]# kubectl set image daemonsets daemonset-test pod-test='192.168.10.33:80/k8s/pod_test:v0.1' &&\
kubectl rollout status daemonset daemonset-test daemonset.apps/daemonset-test image updated Waiting for daemon set "daemonset-test" rollout to finish: 0 out of 2 new pods have been updated... Waiting for daemon set "daemonset-test" rollout to finish: 0 out of 2 new pods have been updated... Waiting for daemon set "daemonset-test" rollout to finish: 1 out of 2 new pods have been updated... Waiting for daemon set "daemonset-test" rollout to finish: 1 out of 2 new pods have been updated... Waiting for daemon set "daemonset-test" rollout to finish: 1 out of 2 new pods have been updated... Waiting for daemon set "daemonset-test" rollout to finish: 1 of 2 updated pods are available... daemon set "daemonset-test" successfully rolled out
3、实践2-node-exporter所有节点上都部署采集数据的功能
3.1、定义资源配置清单
cat > prometheus-node-exporter.yml<<'EOF' apiVersion: apps/v1 kind: DaemonSet metadata: name: daemonset-demo namespace: default labels: app: prometheus component: node-exporter spec: selector: matchLabels: app: prometheus component: node-exporter template: metadata: name: prometheus-node-exporter labels: app: prometheus component: node-exporter spec: containers: - image: 192.168.10.33:80/k8s/node-exporter:v1.2.2 name: prometheus-node-exporter ports: - name: prom-node-exp containerPort: 9100 hostPort: 9100 livenessProbe: tcpSocket: port: prom-node-exp initialDelaySeconds: 3 readinessProbe: httpGet: path: '/metrics' port: prom-node-exp scheme: HTTP initialDelaySeconds: 5 hostNetwork: true hostPID: true EOF
3.2、应用资源清单
master1 ]# kubectl apply -f prometheus-node-exporter.yml daemonset.apps/daemonset-demo created master1 ]# kubectl get ds NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset-demo 2 2 0 2 0 <none> 3s master1 ]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES daemonset-demo-c9ckn 1/1 Running 0 12s 192.168.10.30 node2 <none> <none> daemonset-demo-wcklf 1/1 Running 0 12s 192.168.10.29 node1 <none> <none> # 测试访问是否正常 master1 ]# curl -I 192.168.10.30:9100/metrics HTTP/1.1 200 OK Content-Type: text/plain; version=0.0.4; charset=utf-8 Date: Tue, 21 Mar 2023 14:51:51 GMT master1 ]# curl -I 192.168.10.29:9100/metrics HTTP/1.1 200 OK Content-Type: text/plain; version=0.0.4; charset=utf-8 Date: Tue, 21 Mar 2023 14:51:58 GMT标签:master1,kubectl,控制器,23,DaemonSet,test,pods,daemonset From: https://www.cnblogs.com/ygbh/p/17241655.html