Adding EFK logging stack
This commit is contained in:
parent
e53d3fe9c8
commit
8218b9970f
19 changed files with 333 additions and 0 deletions
|
@ -63,3 +63,4 @@
|
||||||
any_errors_fatal: true
|
any_errors_fatal: true
|
||||||
roles:
|
roles:
|
||||||
- { role: kubernetes-apps, tags: apps }
|
- { role: kubernetes-apps, tags: apps }
|
||||||
|
- { role: kubernetes-apps/efk, tags: [ apps, efk ] }
|
||||||
|
|
|
@ -204,3 +204,5 @@ kpm_packages: []
|
||||||
rkt_version: 1.21.0
|
rkt_version: 1.21.0
|
||||||
etcd_deployment_type: docker
|
etcd_deployment_type: docker
|
||||||
kubelet_deployment_type: docker
|
kubelet_deployment_type: docker
|
||||||
|
|
||||||
|
efk_enabled: false
|
||||||
|
|
|
@ -82,6 +82,15 @@ kubedns_image_repo: "gcr.io/google_containers/kubedns-amd64"
|
||||||
kubedns_image_tag: "{{ kubedns_version }}"
|
kubedns_image_tag: "{{ kubedns_version }}"
|
||||||
test_image_repo: busybox
|
test_image_repo: busybox
|
||||||
test_image_tag: latest
|
test_image_tag: latest
|
||||||
|
elasticsearch_version: "v2.4.1"
|
||||||
|
elasticsearch_image_repo: "gcr.io/google_containers/elasticsearch"
|
||||||
|
elasticsearch_image_tag: "{{ elasticsearch_version }}"
|
||||||
|
fluentd_version: "1.22"
|
||||||
|
fluentd_image_repo: "gcr.io/google_containers/fluentd-elasticsearch"
|
||||||
|
fluentd_image_tag: "{{ fluentd_version }}"
|
||||||
|
kibana_version: "v4.6.1"
|
||||||
|
kibana_image_repo: "gcr.io/google_containers/kibana"
|
||||||
|
kibana_image_tag: "{{ kibana_version }}"
|
||||||
|
|
||||||
downloads:
|
downloads:
|
||||||
netcheck_server:
|
netcheck_server:
|
||||||
|
@ -203,6 +212,21 @@ downloads:
|
||||||
repo: "{{ exechealthz_image_repo }}"
|
repo: "{{ exechealthz_image_repo }}"
|
||||||
tag: "{{ exechealthz_image_tag }}"
|
tag: "{{ exechealthz_image_tag }}"
|
||||||
sha256: "{{ exechealthz_digest_checksum|default(None) }}"
|
sha256: "{{ exechealthz_digest_checksum|default(None) }}"
|
||||||
|
elasticsearch:
|
||||||
|
container: true
|
||||||
|
repo: "{{ elasticsearch_image_repo }}"
|
||||||
|
tag: "{{ elasticsearch_image_tag }}"
|
||||||
|
sha256: "{{ elasticsearch_digest_checksum|default(None) }}"
|
||||||
|
fluentd:
|
||||||
|
container: true
|
||||||
|
repo: "{{ fluentd_image_repo }}"
|
||||||
|
tag: "{{ fluentd_image_tag }}"
|
||||||
|
sha256: "{{ fluentd_digest_checksum|default(None) }}"
|
||||||
|
kibana:
|
||||||
|
container: true
|
||||||
|
repo: "{{ kibana_image_repo }}"
|
||||||
|
tag: "{{ kibana_image_tag }}"
|
||||||
|
sha256: "{{ kibana_digest_checksum|default(None) }}"
|
||||||
|
|
||||||
download:
|
download:
|
||||||
container: "{{ file.container|default('false') }}"
|
container: "{{ file.container|default('false') }}"
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
---
|
||||||
|
elasticsearch_cpu_limit: 1000m
|
||||||
|
elasticsearch_mem_limit: 0M
|
||||||
|
elasticsearch_cpu_requests: 100m
|
||||||
|
elasticsearch_mem_requests: 0M
|
||||||
|
elasticsearch_service_port: 9200
|
7
roles/kubernetes-apps/efk/elasticsearch/meta/main.yml
Normal file
7
roles/kubernetes-apps/efk/elasticsearch/meta/main.yml
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
dependencies:
|
||||||
|
- role: download
|
||||||
|
file: "{{ downloads.elasticsearch }}"
|
||||||
|
# TODO: bradbeam add in curator
|
||||||
|
# https://github.com/Skillshare/kubernetes-efk/blob/master/configs/elasticsearch.yml#L94
|
||||||
|
# - role: download
|
||||||
|
# file: "{{ downloads.curator }}"
|
35
roles/kubernetes-apps/efk/elasticsearch/tasks/main.yml
Normal file
35
roles/kubernetes-apps/efk/elasticsearch/tasks/main.yml
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
---
|
||||||
|
- name: "ElasticSearch | Write ES deployment"
|
||||||
|
template:
|
||||||
|
src: elasticsearch-deployment.yml.j2
|
||||||
|
dest: "{{ kube_config_dir }}/elasticsearch-deployment.yaml"
|
||||||
|
register: es_deployment_manifest
|
||||||
|
|
||||||
|
- name: "ElasticSearch | Create ES deployment"
|
||||||
|
kube:
|
||||||
|
filename: "{{kube_config_dir}}/elasticsearch-deployment.yaml"
|
||||||
|
kubectl: "{{bin_dir}}/kubectl"
|
||||||
|
name: "elasticsearch-logging-v1"
|
||||||
|
namespace: "{{system_namespace}}"
|
||||||
|
resource: "rc"
|
||||||
|
state: "{{ item | ternary('latest','present') }}"
|
||||||
|
#state: "latest"
|
||||||
|
with_items: "{{ es_deployment_manifest.changed }}"
|
||||||
|
run_once: true
|
||||||
|
|
||||||
|
- name: "ElasticSearch | Write ES service "
|
||||||
|
template:
|
||||||
|
src: elasticsearch-service.yml.j2
|
||||||
|
dest: "{{ kube_config_dir }}/elasticsearch-service.yaml"
|
||||||
|
register: es_service_manifest
|
||||||
|
|
||||||
|
- name: "ElasticSearch | Create ES service"
|
||||||
|
kube:
|
||||||
|
filename: "{{kube_config_dir}}/elasticsearch-service.yaml"
|
||||||
|
kubectl: "{{bin_dir}}/kubectl"
|
||||||
|
name: "elasticsearch-logging"
|
||||||
|
namespace: "{{system_namespace}}"
|
||||||
|
resource: "svc"
|
||||||
|
state: "{{ item | ternary('latest','present') }}"
|
||||||
|
with_items: "{{ es_service_manifest.changed }}"
|
||||||
|
run_once: true
|
|
@ -0,0 +1,51 @@
|
||||||
|
---
|
||||||
|
# https://raw.githubusercontent.com/kubernetes/kubernetes/v1.5.2/cluster/addons/fluentd-elasticsearch/es-controller.yaml
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ReplicationController
|
||||||
|
metadata:
|
||||||
|
name: elasticsearch-logging-v1
|
||||||
|
namespace: "{{ system_namespace }}"
|
||||||
|
labels:
|
||||||
|
k8s-app: elasticsearch-logging
|
||||||
|
version: "{{ elasticsearch_image_tag }}"
|
||||||
|
kubernetes.io/cluster-service: "true"
|
||||||
|
spec:
|
||||||
|
replicas: 2
|
||||||
|
selector:
|
||||||
|
k8s-app: elasticsearch-logging
|
||||||
|
version: "{{ elasticsearch_image_tag }}"
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
k8s-app: elasticsearch-logging
|
||||||
|
version: "{{ elasticsearch_image_tag }}"
|
||||||
|
kubernetes.io/cluster-service: "true"
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: "{{ elasticsearch_image_repo }}:{{ elasticsearch_image_tag }}"
|
||||||
|
name: elasticsearch-logging
|
||||||
|
resources:
|
||||||
|
# need more cpu upon initialization, therefore burstable class
|
||||||
|
limits:
|
||||||
|
cpu: {{ elasticsearch_cpu_limit }}
|
||||||
|
{% if elasticsearch_mem_limit is defined and elasticsearch_mem_limit != "0M" %}
|
||||||
|
mem: {{ elasticsearch_mem_limit }}
|
||||||
|
{% endif %}
|
||||||
|
requests:
|
||||||
|
cpu: {{ elasticsearch_cpu_requests }}
|
||||||
|
{% if elasticsearch_mem_requests is defined and elasticsearch_mem_requests != "0M" %}
|
||||||
|
mem: {{ elasticsearch_mem_requests }}
|
||||||
|
{% endif %}
|
||||||
|
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: {}
|
|
@ -0,0 +1,18 @@
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: elasticsearch-logging
|
||||||
|
namespace: "{{ system_namespace }}"
|
||||||
|
labels:
|
||||||
|
k8s-app: elasticsearch-logging
|
||||||
|
kubernetes.io/cluster-service: "true"
|
||||||
|
kubernetes.io/name: "Elasticsearch"
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- port: {{ elasticsearch_service_port }}
|
||||||
|
protocol: TCP
|
||||||
|
targetPort: db
|
||||||
|
selector:
|
||||||
|
k8s-app: elasticsearch-logging
|
||||||
|
|
5
roles/kubernetes-apps/efk/fluentd/defaults/main.yml
Normal file
5
roles/kubernetes-apps/efk/fluentd/defaults/main.yml
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
fluentd_cpu_limit: 0m
|
||||||
|
fluentd_mem_limit: 200Mi
|
||||||
|
fluentd_cpu_requests: 100m
|
||||||
|
fluentd_mem_requests: 200Mi
|
3
roles/kubernetes-apps/efk/fluentd/meta/main.yml
Normal file
3
roles/kubernetes-apps/efk/fluentd/meta/main.yml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
dependencies:
|
||||||
|
- role: download
|
||||||
|
file: "{{ downloads.fluentd }}"
|
17
roles/kubernetes-apps/efk/fluentd/tasks/main.yml
Normal file
17
roles/kubernetes-apps/efk/fluentd/tasks/main.yml
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
---
|
||||||
|
- name: "Fluentd | Write fluentd daemonset"
|
||||||
|
template:
|
||||||
|
src: fluentd-ds.yml.j2
|
||||||
|
dest: "{{ kube_config_dir }}/fluentd-ds.yaml"
|
||||||
|
register: fluentd_ds_manifest
|
||||||
|
|
||||||
|
- name: "Fluentd | Create fluentd daemonset"
|
||||||
|
kube:
|
||||||
|
filename: "{{kube_config_dir}}/fluentd-ds.yaml"
|
||||||
|
kubectl: "{{bin_dir}}/kubectl"
|
||||||
|
name: "fluentd-es-v{{ fluentd_version }}"
|
||||||
|
namespace: "{{system_namespace}}"
|
||||||
|
resource: "ds"
|
||||||
|
state: "{{ item | ternary('latest','present') }}"
|
||||||
|
with_items: "{{ fluentd_ds_manifest.changed }}"
|
||||||
|
run_once: true
|
|
@ -0,0 +1,49 @@
|
||||||
|
---
|
||||||
|
# https://raw.githubusercontent.com/kubernetes/kubernetes/v1.5.2/cluster/addons/fluentd-elasticsearch/es-controller.yaml
|
||||||
|
apiVersion: extensions/v1beta1
|
||||||
|
kind: DaemonSet
|
||||||
|
metadata:
|
||||||
|
name: "fluentd-es-v{{ fluentd_version }}"
|
||||||
|
namespace: "{{ system_namespace }}"
|
||||||
|
labels:
|
||||||
|
k8s-app: fluentd-es
|
||||||
|
kubernetes.io/cluster-service: "true"
|
||||||
|
version: "v{{ fluentd_version }}"
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
k8s-app: fluentd-es
|
||||||
|
kubernetes.io/cluster-service: "true"
|
||||||
|
version: "v{{ fluentd_version }}"
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: fluentd-es
|
||||||
|
image: "{{ fluentd_image_repo }}:{{ fluentd_image_tag }}"
|
||||||
|
command:
|
||||||
|
- '/bin/sh'
|
||||||
|
- '-c'
|
||||||
|
- '/usr/sbin/td-agent 2>&1 >> /var/log/fluentd.log'
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
{% if fluentd_cpu_limit is defined and fluentd_cpu_limit != "0m" %}
|
||||||
|
mem: {{ fluentd_cpu_limit }}
|
||||||
|
{% endif %}
|
||||||
|
memory: {{ fluentd_mem_limit }}
|
||||||
|
requests:
|
||||||
|
cpu: {{ fluentd_cpu_requests }}
|
||||||
|
memory: {{ fluentd_mem_requests }}
|
||||||
|
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
|
7
roles/kubernetes-apps/efk/kibana/defaults/main.yml
Normal file
7
roles/kubernetes-apps/efk/kibana/defaults/main.yml
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
---
|
||||||
|
kibana_cpu_limit: 100m
|
||||||
|
kibana_mem_limit: 0M
|
||||||
|
kibana_cpu_requests: 100m
|
||||||
|
kibana_mem_requests: 0M
|
||||||
|
kibana_service_port: 5601
|
||||||
|
kibaba_base_url: "/api/v1/proxy/namespaces/kube-system/services/kibana-logging"
|
3
roles/kubernetes-apps/efk/kibana/meta/main.yml
Normal file
3
roles/kubernetes-apps/efk/kibana/meta/main.yml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
dependencies:
|
||||||
|
- role: download
|
||||||
|
file: "{{ downloads.kibana }}"
|
34
roles/kubernetes-apps/efk/kibana/tasks/main.yml
Normal file
34
roles/kubernetes-apps/efk/kibana/tasks/main.yml
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
---
|
||||||
|
- name: "Kibana | Write Kibana deployment"
|
||||||
|
template:
|
||||||
|
src: kibana-deployment.yml.j2
|
||||||
|
dest: "{{ kube_config_dir }}/kibana-deployment.yaml"
|
||||||
|
register: kibana_deployment_manifest
|
||||||
|
|
||||||
|
- name: "Kibana | Create Kibana deployment"
|
||||||
|
kube:
|
||||||
|
filename: "{{kube_config_dir}}/kibana-deployment.yaml"
|
||||||
|
kubectl: "{{bin_dir}}/kubectl"
|
||||||
|
name: "kibana-logging"
|
||||||
|
namespace: "{{system_namespace}}"
|
||||||
|
resource: "rc"
|
||||||
|
state: "{{ item | ternary('latest','present') }}"
|
||||||
|
with_items: "{{ kibana_deployment_manifest.changed }}"
|
||||||
|
run_once: true
|
||||||
|
|
||||||
|
- name: "Kibana | Write Kibana service "
|
||||||
|
template:
|
||||||
|
src: kibana-service.yml.j2
|
||||||
|
dest: "{{ kube_config_dir }}/kibana-service.yaml"
|
||||||
|
register: kibana_service_manifest
|
||||||
|
|
||||||
|
- name: "Kibana | Create Kibana service"
|
||||||
|
kube:
|
||||||
|
filename: "{{kube_config_dir}}/kibana-service.yaml"
|
||||||
|
kubectl: "{{bin_dir}}/kubectl"
|
||||||
|
name: "kibana-logging"
|
||||||
|
namespace: "{{system_namespace}}"
|
||||||
|
resource: "svc"
|
||||||
|
state: "{{ item | ternary('latest','present') }}"
|
||||||
|
with_items: "{{ kibana_service_manifest.changed }}"
|
||||||
|
run_once: true
|
|
@ -0,0 +1,46 @@
|
||||||
|
---
|
||||||
|
# https://raw.githubusercontent.com/kubernetes/kubernetes/v1.5.2/cluster/addons/fluentd-kibana/kibana-controller.yaml
|
||||||
|
apiVersion: extensions/v1beta1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: kibana-logging
|
||||||
|
namespace: "{{ system_namespace }}"
|
||||||
|
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: "{{ kibana_image_repo }}:{{ kibana_image_tag }}"
|
||||||
|
resources:
|
||||||
|
# keep request = limit to keep this container in guaranteed class
|
||||||
|
limits:
|
||||||
|
cpu: {{ kibana_cpu_limit }}
|
||||||
|
{% if kibana_mem_limit is defined and kibana_mem_limit != "0M" %}
|
||||||
|
mem: {{ kibana_mem_limit }}
|
||||||
|
{% endif %}
|
||||||
|
requests:
|
||||||
|
cpu: {{ kibana_cpu_requests }}
|
||||||
|
{% if kibana_mem_requests is defined and kibana_mem_requests != "0M" %}
|
||||||
|
mem: {{ kibana_mem_requests }}
|
||||||
|
{% endif %}
|
||||||
|
env:
|
||||||
|
- name: "ELASTICSEARCH_URL"
|
||||||
|
value: "http://elasticsearch-logging:{{ elasticsearch_service_port }}"
|
||||||
|
{% if kibana_base_url is defined and kibana_base_url != "" %}
|
||||||
|
- name: "KIBANA_BASE_URL"
|
||||||
|
value: "{{ kibana_base_url }}"
|
||||||
|
{% endif %}
|
||||||
|
ports:
|
||||||
|
- containerPort: 5601
|
||||||
|
name: ui
|
||||||
|
protocol: TCP
|
|
@ -0,0 +1,18 @@
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: kibana-logging
|
||||||
|
namespace: "{{ system_namespace }}"
|
||||||
|
labels:
|
||||||
|
k8s-app: kibana-logging
|
||||||
|
kubernetes.io/cluster-service: "true"
|
||||||
|
kubernetes.io/name: "Kibana"
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- port: {{ kibana_service_port }}
|
||||||
|
protocol: TCP
|
||||||
|
targetPort: ui
|
||||||
|
selector:
|
||||||
|
k8s-app: kibana-logging
|
||||||
|
|
4
roles/kubernetes-apps/efk/meta/main.yml
Normal file
4
roles/kubernetes-apps/efk/meta/main.yml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
dependencies:
|
||||||
|
- role: kubernetes-apps/efk/elasticsearch
|
||||||
|
- role: kubernetes-apps/efk/fluentd
|
||||||
|
- role: kubernetes-apps/efk/kibana
|
|
@ -18,3 +18,6 @@ dependencies:
|
||||||
tags: [download, netchecker]
|
tags: [download, netchecker]
|
||||||
- {role: kubernetes-apps/ansible, tags: apps}
|
- {role: kubernetes-apps/ansible, tags: apps}
|
||||||
- {role: kubernetes-apps/kpm, tags: [apps, kpm]}
|
- {role: kubernetes-apps/kpm, tags: [apps, kpm]}
|
||||||
|
- role: kubernetes-apps/efk
|
||||||
|
when: efk_enabled
|
||||||
|
tags: [ apps, efk ]
|
||||||
|
|
Loading…
Reference in a new issue