
- Kubernetes 教程
- Kubernetes - 首頁
- Kubernetes - 概述
- Kubernetes - 架構
- Kubernetes - 設定
- Kubernetes - 映象
- Kubernetes - 作業
- Kubernetes - 標籤和選擇器
- Kubernetes - 名稱空間
- Kubernetes - 節點
- Kubernetes - 服務
- Kubernetes - Pod
- Kubernetes - 複製控制器
- Kubernetes - 副本集
- Kubernetes - 部署
- Kubernetes - 卷
- Kubernetes - 金鑰
- Kubernetes - 網路策略
- 高階 Kubernetes
- Kubernetes - API
- Kubernetes - Kubectl
- Kubernetes - Kubectl 命令
- Kubernetes - 建立應用程式
- Kubernetes - 應用程式部署
- Kubernetes - 自動伸縮
- Kubernetes - 儀表盤設定
- Kubernetes - 監控
- Kubernetes 有用資源
- Kubernetes - 快速指南
- Kubernetes - 有用資源
- Kubernetes - 討論
Kubernetes - 監控
監控是管理大型叢集的關鍵元件之一。為此,我們有許多工具。
使用 Prometheus 進行監控
它是一個監控和警報系統。它是在 SoundCloud 構建的,並在 2012 年開源。它能夠很好地處理多維資料。
Prometheus 有多個元件參與監控 -
Prometheus - 它是核心元件,負責抓取和儲存資料。
Prometheus 節點探測器 - 獲取主機級別的指標並將其暴露給 Prometheus。
Ranch-eye - 是一個 haproxy,並將 cAdvisor 統計資料暴露給 Prometheus。
Grafana - 資料視覺化。
InfuxDB - 時間序列資料庫,專門用於儲存來自 rancher 的資料。
Prom-ranch-exporter - 它是一個簡單的 node.js 應用程式,有助於查詢 Rancher 伺服器以獲取服務堆疊的狀態。

Sematext Docker 代理
它是一個現代的、支援 Docker 的指標、事件和日誌收集代理。它作為一個小容器執行在每個 Docker 主機上,併為所有叢集節點和容器收集日誌、指標和事件。它會發現所有容器(一個 Pod 可能包含多個容器),包括 Kubernetes 核心服務的容器,如果核心服務部署在 Docker 容器中。部署後,所有日誌和指標都將立即可用。
將代理部署到節點
Kubernetes 提供 DeamonSets,確保將 Pod 新增到叢集中。
配置 SemaText Docker 代理
它透過環境變數進行配置。
如果您還沒有,請在 apps.sematext.com 獲取免費帳戶。
建立一個型別為“Docker”的 SPM 應用程式以獲取 SPM 應用程式令牌。SPM 應用程式將儲存您的 Kubernetes 效能指標和事件。
建立一個 Logsene 應用程式以獲取 Logsene 應用程式令牌。Logsene 應用程式將儲存您的 Kubernetes 日誌。
編輯 DaemonSet 定義中的 LOGSENE_TOKEN 和 SPM_TOKEN 的值,如下所示。
獲取最新的 sematext-agent-daemonset.yml(原始純文字)模板(如下所示)。
將其儲存在磁碟上的某個位置。
將 SPM_TOKEN 和 LOGSENE_TOKEN 佔位符替換為您自己的 SPM 和 Logsene 應用程式令牌。
建立 DaemonSet 物件
apiVersion: extensions/v1beta1 kind: DaemonSet metadata: name: sematext-agent spec: template: metadata: labels: app: sematext-agent spec: selector: {} dnsPolicy: "ClusterFirst" restartPolicy: "Always" containers: - name: sematext-agent image: sematext/sematext-agent-docker:latest imagePullPolicy: "Always" env: - name: SPM_TOKEN value: "REPLACE THIS WITH YOUR SPM TOKEN" - name: LOGSENE_TOKEN value: "REPLACE THIS WITH YOUR LOGSENE TOKEN" - name: KUBERNETES value: "1" volumeMounts: - mountPath: /var/run/docker.sock name: docker-sock - mountPath: /etc/localtime name: localtime volumes: - name: docker-sock hostPath: path: /var/run/docker.sock - name: localtime hostPath: path: /etc/localtime
使用 kubectl 執行 Sematext Agent Docker
$ kubectl create -f sematext-agent-daemonset.yml daemonset "sematext-agent-daemonset" created
Kubernetes 日誌
Kubernetes 容器的日誌與 Docker 容器日誌沒有太大區別。但是,Kubernetes 使用者需要檢視已部署 Pod 的日誌。因此,為日誌搜尋提供 Kubernetes 特定的資訊非常有用,例如 -
- Kubernetes 名稱空間
- Kubernetes Pod 名稱
- Kubernetes 容器名稱
- Docker 映象名稱
- Kubernetes UID
使用 ELK Stack 和 LogSpout
ELK 堆疊包括 Elasticsearch、Logstash 和 Kibana。為了收集並將日誌轉發到日誌平臺,我們將使用 LogSpout(儘管還有其他選項,例如 FluentD)。
以下程式碼顯示瞭如何在 Kubernetes 上設定 ELK 叢集併為 ElasticSearch 建立服務 -
apiVersion: v1 kind: Service metadata: name: elasticsearch namespace: elk labels: component: elasticsearch spec: type: LoadBalancer selector: component: elasticsearch ports: - name: http port: 9200 protocol: TCP - name: transport port: 9300 protocol: TCP
建立複製控制器
apiVersion: v1 kind: ReplicationController metadata: name: es namespace: elk labels: component: elasticsearch spec: replicas: 1 template: metadata: labels: component: elasticsearch spec: serviceAccount: elasticsearch containers: - name: es securityContext: capabilities: add: - IPC_LOCK image: quay.io/pires/docker-elasticsearch-kubernetes:1.7.1-4 env: - name: KUBERNETES_CA_CERTIFICATE_FILE value: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt - name: NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - name: "CLUSTER_NAME" value: "myesdb" - name: "DISCOVERY_SERVICE" value: "elasticsearch" - name: NODE_MASTER value: "true" - name: NODE_DATA value: "true" - name: HTTP_ENABLE value: "true" ports: - containerPort: 9200 name: http protocol: TCP - containerPort: 9300 volumeMounts: - mountPath: /data name: storage volumes: - name: storage emptyDir: {}
Kibana URL
對於 Kibana,我們提供 Elasticsearch URL 作為環境變數。
- name: KIBANA_ES_URL value: "http://elasticsearch.elk.svc.cluster.local:9200" - name: KUBERNETES_TRUST_CERT value: "true"
Kibana UI 將可以透過容器埠 5601 和相應的宿主/節點埠組合訪問。開始時,Kibana 中不會有任何資料(這是預期的,因為您還沒有推送任何資料)。