kubernetes DaemonSet資源對象

What is a DaemonSet?

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

Writing a DaemonSet Spec

Required Fields(必須字段)

apiVersion,kind,metadata.specgit

Pod Template

.spec.template.spec字段的必須字段,便是pod template. 除了當嵌套的時候不須要apiVersionkind字段,其餘跟pod模板徹底同樣。github

同時RestartPolicy 只能設置爲 Always, 不指定,默認爲 Always.api

Pod Selector

spec.selector 支持兩種匹配:分佈式

  • matchLabelside

  • matchExpressionsui

當兩種匹配方式都配置的時候,匹配結果爲交集.spa

Running Pods on Only Some Nodes

當指定.spec.template.spec.nodeSelector, DaemonSet controller 將會在nodeSelector匹配的節點上建立pod。一樣當你指定.spec.template.spec.affinity 後, DaemonSet controller 會在 node affinity匹配的節點上建立pod。若是都沒有指定,DaemonSet controller 在全部node節點上建立pod..net

How Daemon Pods are Scheduled

被DaemonSet controller建立的pod會默認指定.spec.nodeName,因此pod會被k8s的調度器忽略. 因此:日誌

  • unschedulable 字段不會被 DaemonSet controller識別。

  • 當k8s的調度器沒有啓動的時候,DaemonSet controller也能工做。

Communicating with Daemon Pods

跟DaemonSet建立的pod通訊方法:

  • Push: DaemonSet建立的pod被配置成更新配置到其餘服務,它們不須要客戶端。

  • NodeIP and Known Port: DaemonSet 建立的pod使用 hostPort, 因此經過node IP就能夠通訊。

  • DNS:

  • Service:

Updating a DaemonSet

若是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支持滾動升級。

Alternatives to DaemonSet

Init Scripts

Bare Pods

Static Pods

靜態pods不會被 kubectl 或者其餘 Kubernetes API 客戶端所管理. 由於靜態pod不依賴於 apiserver。

本文出自於

What is a DaemonSet?

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。

Writing a DaemonSet Spec

Required Fields(必須字段)

apiVersion,kind,metadata.spec

Pod Template

.spec.template.spec字段的必須字段,便是pod template. 除了當嵌套的時候不須要apiVersionkind字段,其餘跟pod模板徹底同樣。

同時RestartPolicy 只能設置爲 Always, 不指定,默認爲 Always.

Pod Selector

spec.selector 支持兩種匹配:

  • matchLabels

  • matchExpressions

當兩種匹配方式都配置的時候,匹配結果爲交集.

Running Pods on Only Some Nodes

當指定.spec.template.spec.nodeSelector, DaemonSet controller 將會在nodeSelector匹配的節點上建立pod。一樣當你指定.spec.template.spec.affinity 後, DaemonSet controller 會在 node affinity匹配的節點上建立pod。若是都沒有指定,DaemonSet controller 在全部node節點上建立pod.

How Daemon Pods are Scheduled

被DaemonSet controller建立的pod會默認指定.spec.nodeName,因此pod會被k8s的調度器忽略. 因此:

  • unschedulable 字段不會被 DaemonSet controller識別。

  • 當k8s的調度器沒有啓動的時候,DaemonSet controller也能工做。

Communicating with Daemon Pods

跟DaemonSet建立的pod通訊方法:

  • Push: DaemonSet建立的pod被配置成更新配置到其餘服務,它們不須要客戶端。

  • NodeIP and Known Port: DaemonSet 建立的pod使用 hostPort, 因此經過node IP就能夠通訊。

  • DNS:

  • Service:

Updating a DaemonSet

若是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支持滾動升級。

Alternatives to DaemonSet

Init Scripts

Bare Pods

Static Pods

靜態pods不會被 kubectl 或者其餘 Kubernetes API 客戶端所管理. 由於靜態pod不依賴於 apiserver。

本文出自於

What is a DaemonSet?

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。

Writing a DaemonSet Spec

Required Fields(必須字段)

apiVersion,kind,metadata.spec

Pod Template

.spec.template.spec字段的必須字段,便是pod template. 除了當嵌套的時候不須要apiVersionkind字段,其餘跟pod模板徹底同樣。

同時RestartPolicy 只能設置爲 Always, 不指定,默認爲 Always.

Pod Selector

spec.selector 支持兩種匹配:

  • matchLabels

  • matchExpressions

當兩種匹配方式都配置的時候,匹配結果爲交集.

Running Pods on Only Some Nodes

當指定.spec.template.spec.nodeSelector, DaemonSet controller 將會在nodeSelector匹配的節點上建立pod。一樣當你指定.spec.template.spec.affinity 後, DaemonSet controller 會在 node affinity匹配的節點上建立pod。若是都沒有指定,DaemonSet controller 在全部node節點上建立pod.

How Daemon Pods are Scheduled

被DaemonSet controller建立的pod會默認指定.spec.nodeName,因此pod會被k8s的調度器忽略. 因此:

  • unschedulable 字段不會被 DaemonSet controller識別。

  • 當k8s的調度器沒有啓動的時候,DaemonSet controller也能工做。

Communicating with Daemon Pods

跟DaemonSet建立的pod通訊方法:

  • Push: DaemonSet建立的pod被配置成更新配置到其餘服務,它們不須要客戶端。

  • NodeIP and Known Port: DaemonSet 建立的pod使用 hostPort, 因此經過node IP就能夠通訊。

  • DNS:

  • Service:

Updating a DaemonSet

若是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支持滾動升級。

Alternatives to DaemonSet

Init Scripts

Bare Pods

Static Pods

靜態pods不會被 kubectl 或者其餘 Kubernetes API 客戶端所管理. 由於靜態pod不依賴於 apiserver。

本文出自於https://blog.csdn.net/ptmozhu/article/details/71101950

相關文章
相關標籤/搜索