K8S学习笔录 - DaemonSet: 在每一个Node上都调度一个Pod

原文连接git

在一些场景下,好比但愿对节点进行性能监控、日志手机等,须要在每一个节点上部署一个相关服务,咱们能够经过亲和性相关功能或者DaemonSet来实现它github

DaemonSet

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
...
复制代码
相关文章
相关标签/搜索