DaemonSet可以讓全部(或者一些特定)的Node節點運行同一個pod。當節點加入到kubernetes集羣中,pod會被(DaemonSet)調度到該節點上運行,當節點從kubernetes集羣中被移除,被(DaemonSet)調度的pod會被移除,若是刪除DaemonSet,全部跟這個DaemonSet相關的pods都會被刪除。
在使用kubernetes來運行應用時,不少時候咱們須要在一個區域(zone)或者全部Node上運行同一個守護進程(pod),例如以下場景:
每一個Node上運行一個分佈式存儲的守護進程,例如glusterd,ceph
每一個Node上運行日誌採集器,例如fluentd,logstash
每一個Node上運行監控的採集端,例如Prometheus Node Exporter,collectd等
在簡單的狀況下,一個DaemonSet能夠覆蓋全部的Node,來實現Only-One-Pod-Per-Node這種情形;在有的狀況下,咱們對不一樣的計算節點進行標記,或者把kubernetes的集羣節點分爲多個zone,DaemonSet也能夠在每一個zone上實現Only-One-Pod-Per-Node。node
apiVersion,kind,metadata.specgit
.spec.template 是.spec字段的必須字段,便是pod template. 除了當嵌套的時候不須要apiVersion 或 kind字段,其餘跟pod模板徹底同樣。github
同時RestartPolicy 只能設置爲 Always, 不指定,默認爲 Always.api
spec.selector 支持兩種匹配:分佈式
matchLabelside
matchExpressionsui
當兩種匹配方式都配置的時候,匹配結果爲交集.spa
當指定.spec.template.spec.nodeSelector, DaemonSet controller 將會在nodeSelector匹配的節點上建立pod。一樣當你指定.spec.template.spec.affinity 後, DaemonSet controller 會在 node affinity匹配的節點上建立pod。若是都沒有指定,DaemonSet controller 在全部node節點上建立pod..net
被DaemonSet controller建立的pod會默認指定.spec.nodeName,因此pod會被k8s的調度器忽略. 因此:日誌
unschedulable 字段不會被 DaemonSet controller識別。
當k8s的調度器沒有啓動的時候,DaemonSet controller也能工做。
跟DaemonSet建立的pod通訊方法:
Push: DaemonSet建立的pod被配置成更新配置到其餘服務,它們不須要客戶端。
NodeIP and Known Port: DaemonSet 建立的pod使用 hostPort, 因此經過node IP就能夠通訊。
DNS:
Service:
若是node labels 改變, DaemonSet 會迅速添加pod到新匹配的node,刪除再也不匹配節點上的pod。
你能夠修改DaemonSet建立的pod. 然而,不是全部的字段均可以修改 。同時DaemonSet controller仍然使用以前的模板當新增長節點的時候。
刪除 DaemonSet時,若是kubectl指定--cascade=false, 建立的pods 會保留在node節點上. 你能夠用不一樣的模板建立新的DaemonSet。新建立的DaemonSet經過相同的標籤會識別以前的pod,DaemonSet不會修改或者刪除以前建立的pod, 你能夠手動刪除以前的pod來使DaemonSet自動建立新的pod。
Kubernetes 1.6版本及之後, DaemonSet支持滾動升級。
靜態pods不會被 kubectl 或者其餘 Kubernetes API 客戶端所管理. 由於靜態pod不依賴於 apiserver。
本文出自於
DaemonSet可以讓全部(或者一些特定)的Node節點運行同一個pod。當節點加入到kubernetes集羣中,pod會被(DaemonSet)調度到該節點上運行,當節點從kubernetes集羣中被移除,被(DaemonSet)調度的pod會被移除,若是刪除DaemonSet,全部跟這個DaemonSet相關的pods都會被刪除。
在使用kubernetes來運行應用時,不少時候咱們須要在一個區域(zone)或者全部Node上運行同一個守護進程(pod),例如以下場景:
每一個Node上運行一個分佈式存儲的守護進程,例如glusterd,ceph
每一個Node上運行日誌採集器,例如fluentd,logstash
每一個Node上運行監控的採集端,例如Prometheus Node Exporter,collectd等
在簡單的狀況下,一個DaemonSet能夠覆蓋全部的Node,來實現Only-One-Pod-Per-Node這種情形;在有的狀況下,咱們對不一樣的計算節點進行標記,或者把kubernetes的集羣節點分爲多個zone,DaemonSet也能夠在每一個zone上實現Only-One-Pod-Per-Node。
apiVersion,kind,metadata.spec
.spec.template 是.spec字段的必須字段,便是pod template. 除了當嵌套的時候不須要apiVersion 或 kind字段,其餘跟pod模板徹底同樣。
同時RestartPolicy 只能設置爲 Always, 不指定,默認爲 Always.
spec.selector 支持兩種匹配:
matchLabels
matchExpressions
當兩種匹配方式都配置的時候,匹配結果爲交集.
當指定.spec.template.spec.nodeSelector, DaemonSet controller 將會在nodeSelector匹配的節點上建立pod。一樣當你指定.spec.template.spec.affinity 後, DaemonSet controller 會在 node affinity匹配的節點上建立pod。若是都沒有指定,DaemonSet controller 在全部node節點上建立pod.
被DaemonSet controller建立的pod會默認指定.spec.nodeName,因此pod會被k8s的調度器忽略. 因此:
unschedulable 字段不會被 DaemonSet controller識別。
當k8s的調度器沒有啓動的時候,DaemonSet controller也能工做。
跟DaemonSet建立的pod通訊方法:
Push: DaemonSet建立的pod被配置成更新配置到其餘服務,它們不須要客戶端。
NodeIP and Known Port: DaemonSet 建立的pod使用 hostPort, 因此經過node IP就能夠通訊。
DNS:
Service:
若是node labels 改變, DaemonSet 會迅速添加pod到新匹配的node,刪除再也不匹配節點上的pod。
你能夠修改DaemonSet建立的pod. 然而,不是全部的字段均可以修改 。同時DaemonSet controller仍然使用以前的模板當新增長節點的時候。
刪除 DaemonSet時,若是kubectl指定--cascade=false, 建立的pods 會保留在node節點上. 你能夠用不一樣的模板建立新的DaemonSet。新建立的DaemonSet經過相同的標籤會識別以前的pod,DaemonSet不會修改或者刪除以前建立的pod, 你能夠手動刪除以前的pod來使DaemonSet自動建立新的pod。
Kubernetes 1.6版本及之後, DaemonSet支持滾動升級。
靜態pods不會被 kubectl 或者其餘 Kubernetes API 客戶端所管理. 由於靜態pod不依賴於 apiserver。
本文出自於
DaemonSet可以讓全部(或者一些特定)的Node節點運行同一個pod。當節點加入到kubernetes集羣中,pod會被(DaemonSet)調度到該節點上運行,當節點從kubernetes集羣中被移除,被(DaemonSet)調度的pod會被移除,若是刪除DaemonSet,全部跟這個DaemonSet相關的pods都會被刪除。
在使用kubernetes來運行應用時,不少時候咱們須要在一個區域(zone)或者全部Node上運行同一個守護進程(pod),例如以下場景:
每一個Node上運行一個分佈式存儲的守護進程,例如glusterd,ceph
每一個Node上運行日誌採集器,例如fluentd,logstash
每一個Node上運行監控的採集端,例如Prometheus Node Exporter,collectd等
在簡單的狀況下,一個DaemonSet能夠覆蓋全部的Node,來實現Only-One-Pod-Per-Node這種情形;在有的狀況下,咱們對不一樣的計算節點進行標記,或者把kubernetes的集羣節點分爲多個zone,DaemonSet也能夠在每一個zone上實現Only-One-Pod-Per-Node。
apiVersion,kind,metadata.spec
.spec.template 是.spec字段的必須字段,便是pod template. 除了當嵌套的時候不須要apiVersion 或 kind字段,其餘跟pod模板徹底同樣。
同時RestartPolicy 只能設置爲 Always, 不指定,默認爲 Always.
spec.selector 支持兩種匹配:
matchLabels
matchExpressions
當兩種匹配方式都配置的時候,匹配結果爲交集.
當指定.spec.template.spec.nodeSelector, DaemonSet controller 將會在nodeSelector匹配的節點上建立pod。一樣當你指定.spec.template.spec.affinity 後, DaemonSet controller 會在 node affinity匹配的節點上建立pod。若是都沒有指定,DaemonSet controller 在全部node節點上建立pod.
被DaemonSet controller建立的pod會默認指定.spec.nodeName,因此pod會被k8s的調度器忽略. 因此:
unschedulable 字段不會被 DaemonSet controller識別。
當k8s的調度器沒有啓動的時候,DaemonSet controller也能工做。
跟DaemonSet建立的pod通訊方法:
Push: DaemonSet建立的pod被配置成更新配置到其餘服務,它們不須要客戶端。
NodeIP and Known Port: DaemonSet 建立的pod使用 hostPort, 因此經過node IP就能夠通訊。
DNS:
Service:
若是node labels 改變, DaemonSet 會迅速添加pod到新匹配的node,刪除再也不匹配節點上的pod。
你能夠修改DaemonSet建立的pod. 然而,不是全部的字段均可以修改 。同時DaemonSet controller仍然使用以前的模板當新增長節點的時候。
刪除 DaemonSet時,若是kubectl指定--cascade=false, 建立的pods 會保留在node節點上. 你能夠用不一樣的模板建立新的DaemonSet。新建立的DaemonSet經過相同的標籤會識別以前的pod,DaemonSet不會修改或者刪除以前建立的pod, 你能夠手動刪除以前的pod來使DaemonSet自動建立新的pod。
Kubernetes 1.6版本及之後, DaemonSet支持滾動升級。
靜態pods不會被 kubectl 或者其餘 Kubernetes API 客戶端所管理. 由於靜態pod不依賴於 apiserver。
本文出自於https://blog.csdn.net/ptmozhu/article/details/71101950