原文连接git
在一些场景下,好比但愿对节点进行性能监控、日志手机等,须要在每一个节点上部署一个相关服务,咱们能够经过亲和性相关功能或者DaemonSet来实现它github
type DaemonSet struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` // DaemonSet的具体定义 Spec DaemonSetSpec `json:"spec,omitempty"` // DaemonSet的当前状态,只读 Status DaemonSetStatus `json:"status,omitempty"` } type DaemonSetSpec struct { // Label选择器,用于查找被这个DaemonSet管理的Pod // 必须与Template中配置Pod的Label一致 Selector *metav1.LabelSelector `json:"selector"` // Pod的具体定义 Template v1.PodTemplateSpec `json:"template"` // Pod更新的策略配置 UpdateStrategy DaemonSetUpdateStrategy `json:"updateStrategy,omitempty"` // Pod就绪前的最小等待时间,默认为0,即一切准备好以后当即可用 MinReadySeconds int32 `json:"minReadySeconds,omitempty"` // 保留的Pod的历史版本数量,默认是10 RevisionHistoryLimit *int32 `json:"revisionHistoryLimit,omitempty"` } type DaemonSetUpdateStrategy struct { // DaemonSet中Pod的升级策略,包括RollingUpdate和OnDelete,默认是RollingUpdate Type DaemonSetUpdateStrategyType `json:"type,omitempty"` // 滚动升级配置 RollingUpdate *RollingUpdateDaemonSet `json:"rollingUpdate,omitempty"` } type RollingUpdateDaemonSet struct { // 最大不可用数,能够是具体数字,能够是百分比,默认是1,不能是0 // 配置以后,更新升级时会先中止掉指定数量的Pod,而后启动新的Pod,成功以后删除掉旧的Pod,继续更新剩余的其余Pod MaxUnavailable *intstr.IntOrString `json:"maxUnavailable,omitempty"` } 复制代码
apiVersion: apps/v1 kind: DaemonSet metadata: name: ab labels: app: ab spec: selector: matchLabels: app: ab template: metadata: labels: app: ab spec: containers: - name: ab image: jordi/ab args: - -n100 - -c10 - -k - -r - URL 复制代码
这个配置使用了docker-apache-benchmark这个Docker,实现一个简单的压力测试的功能。docker
因为这个容器中在前台运行的命令就是ab,因此当命令执行完以后,容器就会自动结束,此时Pod也会报异常,而后被DaemonSet干掉从新建立一个新的出来。apache
实际上这种场景更偏向于定时任务,然而这里也能用吧,毕竟什么都不用配置就能够达到每台机器分配一个Pod的效果。json
跑起来以后的状况以下api
$ kubectl get ds/ab -o wide NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE CONTAINERS IMAGES SELECTOR ab 2 2 2 2 2 <none> 59s ab jordi/ab app=ab $ kubectl get pods -l app=ab -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES ab-5gsbr 1/1 Running 0 85s 172.40.0.2 tx <none> <none> ab-g9rzd 1/1 Running 0 85s 172.32.0.3 ks <none> <none> $ kubectl logs ds/ab Found 2 pods, using pod/ab-5gsbr This is ApacheBench, Version 2.3 <$Revision: 1826891 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.mi0ffice.cn (be patient) Completed 100 requests Completed 200 requests Completed 300 requests Completed 400 requests ... 复制代码