kubernetes組件
@(馬克飛象)[k8s]
組件
kubernetes除了必備的dns和網絡組件外,官方推出大量的
cluster-monitoring
,dashboard
,fluentd-elasticsearch
,node-problem-detector
,registry
官方提供的大部分組件,都以NodePort暴露服務,並且只允許在master節點上
heapster
k8s的監控組件,自動伸縮與及Dashboard 都依賴與它.
cd /data
git clone https://github.com/kubernetes/heapster.git
kubectl apply -f /data/heapster/deploy/kube-config/influxdb/
influxdb 默認沒有配置數據持久化, 可以結合各自的數據持久化方案進行部署,以便保留監控歷史
安裝完heapster組件后,可以便捷使用
kubectl top node,
kubectl top pod 列出高負載的資源
kubectl top node -n kube-system
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
10-8-44-35 162m 4% 1045Mi 13%
10-8-50-182 77m 1% 1132Mi 14%
10-8-113-246 156m 3% 674Mi 8%
10-8-36-34 166m 4% 904Mi 11%
kubectl top pod -n kube-system
NAME CPU(cores) MEMORY(bytes)
kube-dns-2924299975-363jm 1m 32Mi
kube-apiserver-10-8-113-246 6m 84Mi
dummy-2088944543-05z36 0m 0Mi
kube-proxy-mcb3t 18m 18Mi
calico-policy-controller-shv0f 4m 16Mi
canal-node-rc2t6 2m 57Mi
dashboard
由kubernetes的UI演變而來, 目前已經集成監控展示與日常的創建與刪除操作, 另一方面,可以通過ui界面來學習kubernetes的使用,認識常用的配置類型
https://github.com/kubernetes/dashboard#kubernetes-dashboard
kubectl get pods --all-namespaces | grep dashboard
kubectl get po,svc --all-namespaces | grep dashboard
kube-system po/kubernetes-dashboard-3095304083-ltq8k 1/1 Running 0 53s
kube-system svc/kubernetes-dashboard 10.105.98.204 <nodes> 80:32624/TCP 53s
通過10.105.98.204 進行訪問
node-problem-detector
node經常會遇到以下問題:
- 硬件問題: cpu 內存 磁盤
- 內核問題: 內核死鎖, 文件系統損壞
- 容器問題: 守護進程無響應
kubernetes集群管理對node的健康狀態是無法感知的, pod依舊會調度到有問題的node上, 通過DaemonSet部署node-problem-detector, 向apiserver上報node的狀態信息,使node的健康狀態對上游管理可見,pod不會再調度到有異常的node上.
wget https://raw.githubusercontent.com/kubernetes/node-problem-detector/master/config/kernel-monitor.json
mkdir config
mv kernel-monitor.json config/
kubectl create configmap node-problem-detector-config --from-file=config/ -n kube-system
wget https://raw.githubusercontent.com/kubernetes/node-problem-detector/master/node-problem-detector.yaml
kubectl apply -f node-problem-detector.yaml -n kube-system
DNS Horizontal Autoscaler
根據apiserver獲取集群的狀態信息, 實現dns服務的水平擴展, 有助於提高dns的服務能力.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/dns-horizontal-autoscaler/dns-horizontal-autoscaler.yaml
fluentd-elasticsearch
fluentd-elasticsearch 是kubernetes 官方提供的容器日志收集方案, 個人也認為,這是目前最好的面向kubernetes日志方案.官網的版本太舊,我制作了一個最新版本的, 只收集容器的日志.
git clone https://github.com/caiwenhao/kube-addons.git
cd kube-addons/fluentd-elasticsearch
kubectl apply -f es-deploy.yaml -f kibana-deploy.yaml -f es-deploy.yaml
kubectl label node 10-8-50-182 alpha.kubernetes.io/fluentd-ds-ready=true
- 通過elasticsearch-cloud-kubernetes,實現es在k8s集群上的部署.
- fluentd 的插件
fluent-plugin-kubernetes_metadata_filter
通過apiserver,當pod創建的時候,建立日志目錄映射關系, 並解析kubernetes日志格式.
進一步優化
把fluent.conf放入configMap
kubectl create configmap fluent --from-file=./fluent.conf -n kube-system