K8S技術社區正式上線啦!後臺留言個人微信號加入K8S技術群,找到志同道合的小夥伴!
對於企業來說,日誌的重要性不言而喻,日誌收集分析展示平臺的選擇,這裡給出幾點選擇ELK的理由。ELK是一套非常成熟的系統,她本身的構架非常適合Kubernetes集群,這裡官網當中也是選用的 Elasticsearch作為Sample的,GitHub上下載的kubernetes二進位包中本身就有這個.yaml文件,所以使用ELK作為收集日誌的理由相當充分。
對於任何基礎設施或後端服務系統,日誌都是極其重要的。對於受Google內部容器管理系統Borg啟發而催生出的Kubernetes項目來說,自然少不了對Logging的支持。在「 Logging Overview 「中,官方概要介紹了Kubernetes上的幾個層次的Logging方案,並給出Cluster-level logging的參考架構:
Kubernetes還給出了參考實現:
– Logging Backend: Elastic Search stack(包括: Kibana )
– Logging-agent: fluentd
介紹
1. Fluentd是一個開源收集事件和日誌系統,用與各node節點日誌數據的收集、處理等等。
2. ElasticSearch是一個開源的,基於Lucene的搜索伺服器。它提供了一個分布式多用戶能力的全文搜尋引擎,基於RESTful web接口。
3. Kibana是一個開源的用於數據可視化的web UI工具,可使用它對日誌進行高效的搜索、可視化、分析等各種操作。
流程
每個node節點上面的fluentd監控並收集該節點上面的系統日誌,並將處理過後的日誌信息發送給ElasticSearch,Elasticsearch匯總各個node節點的日誌信息,最後結合Kibana 實現web UI界面的數據展示。
安裝實現
1.確保K8S集群正常工作(當然這是必須的....)
2.fluentd.yaml文件編寫,這裡要實現每個節點都能有fluentd跑起來,只需要將kind設置為DaemonSet即可。
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: fluentd-elasticsearch
namespace: kube-system
labels:
k8s-app: fluentd-logging
spec:
template:
metadata:
labels:
name: fluentd-elasticsearch
spec:
containers:
- name: fluentd-elasticsearch
image: gcr.io/google-containers/fluentd-elasticsearch:1.20
resources:
limits:
memory: 200Mi
requests:
cpu: 100m
memory: 200Mi
volumeMounts:
- name: varlog
mountPath: /var/log
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
readOnly: true
terminationGracePeriodSeconds: 30
volumes:
- name: varlog
hostPath:
path: /var/log
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers
3.elasticsearch-rc.yaml&elasticsearch-svc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: elasticsearch-logging-v1
namespace: kube-system
labels:
k8s-app: elasticsearch-logging
version: v1
kubernetes.io/cluster-service: "true"
spec:
replicas: 2
selector:
k8s-app: elasticsearch-logging
version: v1
template:
metadata:
labels:
k8s-app: elasticsearch-logging
version: v1
kubernetes.io/cluster-service: "true"
spec:
containers:
- image: gcr.io/google-containers/elasticsearch:v2.4.1
name: elasticsearch-logging
resources:
# need more cpu upon initialization, therefore burstable class
limits:
cpu: 1000m
requests:
cpu: 100m
ports:
- containerPort: 9200
name: db
protocol: TCP
- containerPort: 9300
name: transport
protocol: TCP
volumeMounts:
- name: es-persistent-storage
mountPath: /data
volumes:
- name: es-persistent-storage
emptyDir: {}
apiVersion: v1
kind: Service
metadata:
name: elasticsearch-logging
namespace: kube-system
labels:
k8s-app: elasticsearch-logging
kubernetes.io/cluster-service: "true"
kubernetes.io/name: "Elasticsearch"
spec:
ports:
- port: 9200
protocol: TCP
targetPort: db
selector:
k8s-app: elasticsearch-logging
4.kibana-rc.yaml&kibana-svc.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: kibana-logging
namespace: kube-system
labels:
k8s-app: kibana-logging
kubernetes.io/cluster-service: "true"
spec:
replicas: 1
selector:
matchLabels:
k8s-app: kibana-logging
template:
metadata:
labels:
k8s-app: kibana-logging
spec:
containers:
- name: kibana-logging
image: gcr.io/google-containers/kibana:v4.6.1
resources:
# keep request = limit to keep this container in guaranteed class
limits:
cpu: 100m
requests:
cpu: 100m
env:
- name: "ELASTICSEARCH_URL"
value: "http://elasticsearch-logging:9200"
- name: "KIBANA_BASE_URL"
value: "/api/v1/proxy/namespaces/kube-system/services/kibana-logging"
ports:
- containerPort: 5601
name: ui
protocol: TCP
apiVersion: v1
kind: Service
metadata:
name: kibana-logging
namespace: kube-system
labels:
k8s-app: kibana-logging
kubernetes.io/cluster-service: "true"
kubernetes.io/name: "Kibana"
spec:
ports:
- port: 5601
protocol: TCP
targetPort: ui
selector:
k8s-app: kibana-logging
5.kubectl create -f ****** ,這裡可自由發揮。
本文轉自:
http://www.cnblogs.com/zhangjiayong/p/6203025.html
2017年7月24日~25日,2017 OpenStack Days China官方盛典即將在北京國家會議中心盛大召開。在K8S技術社區近日的評論點讚贏取免費門票(原價600¥)活動中,以下點讚前10名的朋友贏得免費門票1張!
恭喜10位!
請以上獲獎的朋友通過微信群或公眾號後臺 聯繫取票!
K8S技術社區,CNCF(Cloud Native Computing Foundation)官方授權Meetup承辦組織,打造一流的Kubernetes技術乾貨分享平臺。