這種模式就是確保在每一個k8s的node節點上建立一個pod實例,有且僅有一個實例。當node被添加到集羣中,Pod也被添加上去。當node被從集羣移除,這些Pod會被垃圾回收。刪除一個DaemonSet將會清理它建立的Pod。node
DaemonSet 的典型應用場景有:編程
其實 Kubernetes 本身就在用 DaemonSet 運行系統組件。執行以下命令:網絡
kubectl get daemonset --namespace=kube-system kubectl get pods --namespace=kube-system -o wide
能夠看到flannel, kube-proxy等以daemonset形式存在的資源框架
Daemonset對應的屬性例如label,鏡像若是更新那麼須要更新pod. DaemonSet目前有兩種升級策略,能夠經過.spec.updateStrategy.type指定:
OnDelete: 該策略表示當更新了DaemonSet的模板後,只有手動刪除舊的DaemonSet Pod纔會建立新的DaemonSet Pod
RollingUpdate: 該策略表示當更新DaemonSet模板後會自動刪除舊的DaemonSet Pod並建立新的DaemonSetPod編程語言
將應用程序的組件部署到單獨的進程或容器中,以提供隔離和封裝。 使用此模式還可使用異構組件和技術來構建應用程序。ide
此模式之因此稱做「挎鬥」(Sidecar),是由於它相似於三輪摩托車上的挎鬥。 在此模式中,挎鬥附加到父應用程序,爲應用程序提供支持性功能。 此外,挎鬥與父應用程序具備相同的生命週期:與父應用程序一塊兒建立,一塊兒停用。 挎鬥模式有時也稱爲搭檔模式,這是一種分解模式。
挎鬥服務不必定要屬於應用程序的一部分,而只是與應用程序相鏈接。 無論它位於哪一個位置,父應用程序都會跟隨。挎鬥是連同主應用程序一塊兒部署的支持性進程或服務。 以三輪摩托車爲例,挎鬥附加在一輛三輪摩托車上,每輛三輪摩托車有自身的挎鬥。 一樣,挎鬥服務與其父應用程序具備相同的生命週期。 對於應用程序的每一個實例,都會部署一個挎鬥實例,並連同應用程序實例一塊兒託管該挎鬥實例。性能
在運行時環境和編程語言方面,挎鬥與其主應用程序相互獨立,所以,無需爲每種語言開發一個挎鬥。優化
挎鬥能夠訪問主應用程序所能訪問的資源。 例如,一個挎鬥能夠監視該挎鬥和主應用程序使用的系統資源。spa
挎鬥與主應用程序保持密切的距離,所以二者之間的通訊不存在明顯的延遲。設計
即便是對於不提供擴展性機制的應用程序,也仍可使用挎鬥來擴展功能,只需在主應用程序所用的同一主機或子容器中,將挎鬥附加爲自身的進程便可。
挎鬥模式一般與容器一塊兒使用,於是稱做挎鬥容器或搭檔容器。
此外,請考慮是否可以以庫的形式或使用傳統擴展機制實現功能。 特定於語言的庫可能提供更深度的集成和更少的網絡開銷。
須要精細控制特定資源或組件的資源限制。 例如,想要限制特定組件使用的內存量。 可將組件部署爲挎鬥,而後獨立於主應用程序管理內存用量。
當服務須要以不一樣於或獨立於主應用程序的方式縮放時。 若是存在這種狀況,將功能部署爲獨立的服務可能更好。
挎鬥模式適用於許多方案。 一些常見示例:
卸載代理。 將 NGINX 代理放在 node.js 服務實例的前面,以便爲服務提供靜態文件內容