如何在Kubernetes环境中使用Docker镜像部署 EFK (Elastic Search + Filebeat/Fluentd + Kibana) 日志监控系统?本文将示例如何编写Elastic Search的部署文件,部署中间会遇到什么坑,如何解决?(详见末尾!详见末尾!!详见末尾!!!)
上部署文件: 个人在18年预研时编写的,当时的资料是很少的
- es-dep.yaml
# 指定部署类型为Deployment,实际生产时可能会部署为有状态的StatefulSet类型,并使用持久存储。
apiVersion: apps/v1beta1
kind: Deployment
# 设置元数据信息
metadata:
name: es
#namespace: ebk
labels: # (可选)为该Pod添加标签
component: elasticsearch # 标签的key可任意命名
# 具体部署配置项
spec:
selector: # (可选)指定具体的template,如指定则必须与spec.template.metadata.labels匹配,否则会创建不成功;如不指定,则默认是spec.template.metadata.labels
matchLabels:
component: elasticsearch
replicas: 3 # 副本数量为3,可理解为部署3个Pod
template: # 每个副本的模板配置项,k8s会按下面配置创建各个副本
metadata:
labels:
component: elasticsearch
spec:
# 创建一个初始容器,此容器会先于后面的应用容器运行,只有init容器运行成功后,才会运行后面的应用容器,如果运行失败,默认kubernetes会不断重启该Pod,直到Init容器成功运行。
# 下面这种写法仅支持kubernetes1.6以上版本,在此用于为该Pod设置特殊资源请求或限制的最大值
initContainers:
- name: init-sysctl # 容器名,任意指定
image: busybox:1.27.2 # 指定镜像来源及版本号
command: # 容器启动命令,这里要设置vm.max_map_count=262144,否则ES会无法启动。
- sysctl
- -w
- vm.max_map_count=262144
securityContext: # 开启特权,否则上面命令无法执行
privileged: true
# 配置具体的应用容器
containers:
- name: es-node
# 下面镜像来源k8s官方示例推荐,其在官方elasticsearch镜像基础上,对一些配置进行了抽取,此更便于我们的部署配置