以 DaemonSet 方式執行 Boatswain 來監控您的 Kubernetes

在一個 Kubernetes 叢集中,每個節點(node)都有一個容器執行時(container runtime)來產生在 Pod 中的容器。Kubernetes 支援各種容器執行時,包括:

因此,如果該 Kubernetes 叢集使用 Docker 作為容器執行時,我們可以在節點上安裝 Boatswain 來監控其狀態以及收集容器節點上的日誌。

注意:本文中的示例只用於實驗目的,我們仍然不建議在任何用於 production 環境的 Kubernetes 叢集中使用 Boatswain

在 Kubernetes 裡的 DaemonSet

Kubernetes 中,我們可以將執行 Boatswain 的 pod 部署為 DaemonSet。與可以在不同節點上執行多個 Pod 的 Deployment 不同,DaemonSet 確保每個所選的節點上都執行一個 pod,即使有新的節點加入到叢集裡,只要符合條件,那個新的節點也會部署該 pod。DaemonSet 對於在節點上執行叢集儲存,日誌收集和監控程序特別有用。

以 DaemonSet 方式執行 Boatswain

以下是在 Kubernetes 叢集中設置 Boatswain DaemonSet 的步驟。

  1. 建立名叫 Boatswain 的命名空間
  2. 設置一個 Boatswain token 的 secret
  3. 設置 Boatswain DaemonSet 的配置文件
  4. 執行 Boatswain DaemonSet

建立名叫 Boatswain 的命名空間

首先創建一個新的命名空間,將 Boatswain 的設置與現有設置分開。

kubectl create namespace boatswain

設置一個 Boatswain token 的 secret

將執行 Boatswain 所的 token 儲為 secret 並稱之稱為 boatwain,以後在 DaemonSet 的配置文件中使用。

kubectl create secret generic boatswain --from-literal=token=<TO_BE_REPLACED> -n boatswain

設置 Boatswain DaemonSet 的配置文件

以下是 DaemonSet 的配置文件。

daemon-set.yaml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: boatswain
  namespace: boatswain
spec:
  selector:
    matchLabels:
      name: boatswain
  template:
    metadata:
      labels:
        name: boatswain
    spec:
      containers:
      - name: boatswain
        image: boatswainio/boatswain:<latest or tag>
        env:
        - name: BOATSWAIN_TOKEN
          valueFrom:
            secretKeyRef:
              name: boatswain
              key: token
        - name: BOATSWAIN_PERIOD
          value: "default"
        securityContext:
          capabilities:
            add: ["NET_ADMIN"]
        volumeMounts:
          - name: dockersock
            mountPath: "/var/run/docker.sock"
      volumes:
      - name: dockersock
        hostPath:
          path: /var/run/docker.sock
      hostNetwork: true
      hostPID: true
      restartPolicy: Always
      nodeSelector:
        kubernetes.io/hostname: <hostname of the selected node>

在保存yaml文件之前:

  1. 在第17行處填上 Boatswain 的版本。
  2. 填上要安裝 Boatswain 的目標節點主機名,或刪除行37和38以在所有節點上進行安裝。

執行 Boatswain DaemonSet

執行以下命令啟動 Boatswain DaemonSet

kubectl create -f daemon-set.yaml

檢查 DaemonSet 的狀態。

1
2
3
[ykyuen@camus ~]$ kubectl get ds -n boatswain
NAME        DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                                                        AGE
boatswain   1         1         1       1            1           kubernetes.io/hostname=gke-boatswain-default-pool-v2-1234abcd-5678   52s

現在可以在 Boatswain 上閱讀節點的狀態與日誌。

Kubernetes 的節點狀態

Kubernetes 的節點狀態

總結

以上的示例示範了如何安裝 Boatswain 來監控 Kuberenetes 叢集。但目前它可能無法顯示與網絡有關的指標(已在上面的 GKE 群集中確認)。 這可能與叢集的安全設置有關,到目前為止,我們尚未對此問題進行進一步調查。此外,若果在所有節點上運行 Boatswain 可能會令到使用量在幾個小時內便達到 Beta 試用版的2GB數據限制,所以其實作用不大。如果您有任何建議或想法,請告訴我們。😀