原文連接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 ... 複製代碼