淺談K8S DaemonSet

更新於 發佈於 閱讀時間約 6 分鐘

今天繼續來說明一個很重要的元件:DaemonSet

所謂daemonset,簡單來說就是在每個節點上部署一個Pod副本。當今天有新的主機節點加入時,就自動再上面部署一個Pod副本。移除節點時,也會自動將Pod副本移除。

與一般Pod副本不同的是,DaemonSet類型的Pod是由DeamonSet controller提前決定Pod要部署在那個地方運行。

一個蘿蔔一個坑

一個蘿蔔一個坑

Note: 如果要指定那個節點不能讓DeamonSet Pod部署時,可以對該節點打上taint

1. 架構

raw-image

DaemonSet 是 Kubernetes 中一種工作負載的形式,確保所有(或部分)節點運行特定 Pod 的複本。它們通常用於部署系統守護程序、日誌收集器或其他背景任務,以確保集群中的每個節點運行這些 Pod。

DaemonSet 的主要特點包括:

  1. 節點關聯性: DaemonSet 使用節點選擇器(nodeSelector)或節點親和性規則來確定應該在哪些節點上安排 Pod。
  2. 維護和擴展: 當節點添加或移除時,DaemonSet 會自動調整,確保每個節點上都運行一個 Pod。
  3. 自我修復: 如果節點故障或新增節點,DaemonSet 會自動替換受影響節點上的 Pod,以保持所需的狀態。
  4. 集群級部署: DaemonSet 確保特定的 Pod 在所有合格的節點上運行,非常適用於處理集群級任務。

DaemonSet 是 Kubernetes 中的一個關鍵資源,用於管理背景服務,確保特定的 Pod 在集群中的每個節點上運行。

2. 測試

#-----------------------------------------------
# S2-1. 在每一個節點部署一個nginx pod
#-----------------------------------------------
[master]# kubectl create ns nginx-ds
[master]# vim nginx-ds.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: nginx-ds
namespace: nginx-ds
spec:
selector:
matchLabels:
k8s-app: nginx
template:
metadata:
labels:
k8s-app: nginx
spec:
containers:
- image: nginx:1.7.9
name: nginx
ports:
- name: http
containerPort: 80

[master]# kubectl create -f nginx-ds.yaml -n nginx-ds
[master]# kubectl get nodes; kubectl get pod -l k8s-app=nginx -o wide -n nginx-ds
raw-image
#-----------------------------------------------
# S2-2. 確認節點是否有打上taints
#-----------------------------------------------
[master]# kubectl describe node master01 | grep Taints
[master]# kubectl describe node master02 | grep Taints
[master]# kubectl describe node master03 | grep Taints
[master]# kubectl describe node worker01 | grep Taints
[master]# kubectl describe node worker02| grep Taints
raw-image

3. 如何確保每個Node都只有一個被管理的Pod

每個節點都自動安排一個服務

每個節點都自動安排一個服務

  • DaemonSet controller從ETCD取得所有的Node列表,對每個node做review
  • 根據CRD的定義是否有schedule相關的配置,然後分別檢查Node是否符合要求
  • 在可運行的Pod節點上檢查是否已經有對應的Pod存在。如果沒有就在該Node建立Pod。如果有且數量大於1就會把多餘的Pod從節點上刪除。


4. 常見的應用情境

每個節點都需要監控

  • 日誌收集和監控:當你需要在每個節點上運行一個日誌或監控代理,DaemonSet可以確保每個節點都有這個代理運行,從而集中收集系統日誌或應用程序指標。例如Prometheus監控集群,在每個節點上都運行一個node-exporter來收集監控節點的訊息,或是fluented, logstash。在每個節點上運行以收集容器的日誌。
  • 網路代理:對於需要節點級網路代理的應用程序,如CNI,你可以使用DaemonSet確保每個節點都運行這個代理。例如flannel, calico。在每個節點上運行為Pod提供網路服務
  • 分佈式存儲:當你需要在每個節點上運行分佈式存儲代理,以實現數據持久性和可用性,DaemonSet也非常適用。例如glusterd, ceph 要部署在每個節點上以提供持久性儲存。
  • 應用程式資料庫:對於某些應用程式,每個節點可能需要本地存儲或快取資料庫的副本。DaemonSet可以確保這些副本在每個節點上運行。
  • Node-Level操作:當你需要執行僅涉及單個節點的操作時,如特定節點的升級或清理,DaemonSet可以幫助你在每個節點上執行操作。


5. 結論

DaemonSet在許多容器化的應用服務是很常見的,這裡簡單說明了一些基本觀念與常見的情境,不管是管理或是開發人員都可以在理解這些觀念後對於容器化應用的運營和管理提供了極大的幫助。熟練 DaemonSet 的使用,也有助於確保服務在整個集群中保持一致性。


留言
avatar-img
留言分享你的想法!
avatar-img
超健忘閒人的沙龍
15會員
40內容數
記錄IT社畜的自我學習筆記,如同專題名稱,主要是怕自已忘記自已做過什麼、學到什麼。索性就分享我自已在學習Kubernetes這條路上的各種測試、學習心得。
2024/05/08
本文將介紹如何在Gitlab上部署和註冊runner,以進行CI/CD測試。透過Docker-compose方式進行部署,同時注意安裝時的一些注意事項。建議學習者至少掌握一種以上的Pipeline工具,以滿足實務上的需求。
Thumbnail
2024/05/08
本文將介紹如何在Gitlab上部署和註冊runner,以進行CI/CD測試。透過Docker-compose方式進行部署,同時注意安裝時的一些注意事項。建議學習者至少掌握一種以上的Pipeline工具,以滿足實務上的需求。
Thumbnail
2024/04/19
上一篇說明了如何在Kubernetes上建立基本的MySQL standalone,並加入phpmyadmin(PMA)來進行圖形化的管理,本篇就再進階一步,實作MySQL replication架構(master-salve),並進行驗證是否成功。
Thumbnail
2024/04/19
上一篇說明了如何在Kubernetes上建立基本的MySQL standalone,並加入phpmyadmin(PMA)來進行圖形化的管理,本篇就再進階一步,實作MySQL replication架構(master-salve),並進行驗證是否成功。
Thumbnail
2024/04/09
本文記錄如何在Kubernetes環境下,部署Standalone架構的MySQL Database,並透過phpmyadmin進行管理。這篇文章將分成MySQL部署在K8S內的優勢、部署MySQL DB standalone、部署PhpMyAdmin (PMA)、結論四個部分進行說明與實作的流程。
Thumbnail
2024/04/09
本文記錄如何在Kubernetes環境下,部署Standalone架構的MySQL Database,並透過phpmyadmin進行管理。這篇文章將分成MySQL部署在K8S內的優勢、部署MySQL DB standalone、部署PhpMyAdmin (PMA)、結論四個部分進行說明與實作的流程。
Thumbnail
看更多
你可能也想看
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
提供一條簡單公式、一套盤點思路,幫助你快速算出去日本自助旅遊需要準備多少日幣現金!
Thumbnail
提供一條簡單公式、一套盤點思路,幫助你快速算出去日本自助旅遊需要準備多少日幣現金!
Thumbnail
從官網可以知道,我們在建立一組高可用的Kubernetes Cluster時,針對ETCD有二種做法,一種是與Master節點共用,另一種則是將ETCD再獨立出來三個節點成為一組Cluster來進行運作。 本文將說明如何建置出外部的ETCD Cluster,並以Static Pod的方式運行與管理
Thumbnail
從官網可以知道,我們在建立一組高可用的Kubernetes Cluster時,針對ETCD有二種做法,一種是與Master節點共用,另一種則是將ETCD再獨立出來三個節點成為一組Cluster來進行運作。 本文將說明如何建置出外部的ETCD Cluster,並以Static Pod的方式運行與管理
Thumbnail
本篇將補完上一篇所提到關於StatefulSet的實作部份。
Thumbnail
本篇將補完上一篇所提到關於StatefulSet的實作部份。
Thumbnail
本篇將說明關於StatefulSet的基本概念
Thumbnail
本篇將說明關於StatefulSet的基本概念
Thumbnail
本文將說明關於Local volume 與hostPath二種類型的差異與一些注意事項。
Thumbnail
本文將說明關於Local volume 與hostPath二種類型的差異與一些注意事項。
Thumbnail
最近有採購幾台 server ,正在進行一些設定的作業,把這些過程都保留下來,之後要再設定就可以回來查看了~~~ 目標 在 Centos Linux 主機上移除 Podman ,並安裝 Docker 解決 首先先確認 Centos 的版本,是 Debian or Fedora cat /
Thumbnail
最近有採購幾台 server ,正在進行一些設定的作業,把這些過程都保留下來,之後要再設定就可以回來查看了~~~ 目標 在 Centos Linux 主機上移除 Podman ,並安裝 Docker 解決 首先先確認 Centos 的版本,是 Debian or Fedora cat /
Thumbnail
宣告式管理是一種管理方法,其中您描述系統或資源的期望狀態,而不必關心實際如何達到該狀態。kubectl apply 命令在 Kubernetes 中實現了這種宣告式管理方式,以下是執行指令時的運作流程...
Thumbnail
宣告式管理是一種管理方法,其中您描述系統或資源的期望狀態,而不必關心實際如何達到該狀態。kubectl apply 命令在 Kubernetes 中實現了這種宣告式管理方式,以下是執行指令時的運作流程...
Thumbnail
什麼是 Kubernetes Deployment? 一樣先來個官網解說 A Deployment provides declarative updates for Pods and ReplicaSets. You describe a desired state in a Deployment,
Thumbnail
什麼是 Kubernetes Deployment? 一樣先來個官網解說 A Deployment provides declarative updates for Pods and ReplicaSets. You describe a desired state in a Deployment,
Thumbnail
什麼是Kubernetes Service? 先來個官網的解說 A Kubernetes Service is an abstraction which defines a logical set of Pods and a policy by which to access them. 白話文就是
Thumbnail
什麼是Kubernetes Service? 先來個官網的解說 A Kubernetes Service is an abstraction which defines a logical set of Pods and a policy by which to access them. 白話文就是
Thumbnail
Kubernetes是現代應用程序開發和部署的重要技術,而Pod是Kubernetes中最小的部署單位。Pod是一個或多個container的集合,它們共享一個網路命名空間和一個網路接口。Pod不僅提供了一個簡單而強大的container環境,還可以用於實現多種container編排方案,例如負載平
Thumbnail
Kubernetes是現代應用程序開發和部署的重要技術,而Pod是Kubernetes中最小的部署單位。Pod是一個或多個container的集合,它們共享一個網路命名空間和一個網路接口。Pod不僅提供了一個簡單而強大的container環境,還可以用於實現多種container編排方案,例如負載平
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News