继续前一章部署。
部署 EFK 插件
19.1 介绍
EFK,即 elasticsearch,kibana,fluentd
19.2 下载二进制文件,参考 第三章
EFK 插件位于压缩包的 kubernetes/cluster/addons/fluentd-elasticsearch/ 目录下
[root@k8s-m1 influxdb]# cd /opt/root/k8s/v1.11.2/kubernetes/cluster/addons/fluentd-elasticsearch/ [root@k8s-m1 fluentd-elasticsearch]# ls *.yaml es-service.yaml es-statefulset.yaml fluentd-es-configmap.yaml fluentd-es-ds.yaml kibana-deployment.yaml kibana-service.yaml
19.3 修改 image 地址
# 修改 es-statefulset.yaml 的 images 地址 [root@k8s-m1 fluentd-elasticsearch]# cp es-statefulset.yaml{,.orig} [root@k8s-m1 fluentd-elasticsearch]# diff es-statefulset.yaml{,.orig} 76c76 < - image: longtds/elasticsearch:v5.6.4 --- > - image: k8s.gcr.io/elasticsearch:v5.6.4 # 修改 fluentd-es-ds.yaml 的 images 地址 [root@k8s-m1 fluentd-elasticsearch]# cp fluentd-es-ds.yaml{,.orig} [root@k8s-m1 fluentd-elasticsearch]# diff fluentd-es-ds.yaml{,.orig} 80c80 < image: netonline/fluentd-elasticsearch:v2.0.4 --- > image: k8s.gcr.io/fluentd-elasticsearch:v2.0.4
19.4 DaemonSet fluentd-es 只会调度到设置了标签 beta.kubernetes.io/fluentd-ds-ready=true 的 Node,需要在期望运行 fluentd 的 Node 上设置该标签
# 我们期望其运行在 k8s-n1 node 上 [root@k8s-m1 fluentd-elasticsearch]# kubectl label nodes k8s-n1 beta.kubernetes.io/fluentd-ds-ready=true node/k8s-n1 labeled
19.5 执行定义文件
# 执行定义文件 [root@k8s-m1 fluentd-elasticsearch]# kubectl apply -f . service/elasticsearch-logging created serviceaccount/elasticsearch-logging created clusterrole.rbac.authorization.k8s.io/elasticsearch-logging created clusterrolebinding.rbac.authorization.k8s.io/elasticsearch-logging created statefulset.apps/elasticsearch-logging created configmap/fluentd-es-config-v0.1.4 created serviceaccount/fluentd-es created clusterrole.rbac.authorization.k8s.io/fluentd-es created clusterrolebinding.rbac.authorization.k8s.io/fluentd-es created daemonset.apps/fluentd-es-v2.0.4 created deployment.apps/kibana-logging created service/kibana-logging created
19.6 查看 pod 状态,如果发现 image 下载失败,可以通过手动方式 pull 下来,然后修改tag
# 比如 fluentd-elasticsearch:v2.0.4 下载失败,通过在 k8s-n1 上执行下面命令处理 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/fluentd-elasticsearch:v2.0.4 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/fluentd-elasticsearch:v2.0.4 netonline/fluentd-elasticsearch:v2.0.4 # 比如 手动下载 kibana 的命令 /opt/k8s/bin/docker pull registry.cn-hangzhou.aliyuncs.com/acs-sample/kibana:5.5.1 /opt/k8s/bin/docker pull registry.cn-hangzhou.aliyuncs.com/acs-sample/kibana:6.1.3 /opt/k8s/bin/docker tag registry.cn-hangzhou.aliyuncs.com/acs-sample/kibana:5.5.1 docker.elastic.co/kibana/kibana:5.6.4
扫描二维码关注公众号,回复:
4143851 查看本文章
排障
如果发现 elasticsearch-logging 容器异常退出,可以通过下面两种方式查看日志
- 1. kubectl logs pod podname 查看pod输出的日志
- 2. /var/log/messages 查看系统日志。如果pod因为系统内存等问题异常退出时,会有把日志记录在这里
因为内存不足引起的退出,可以修改 jvm.options 文件中 -Xms 和 -Xmx 的值,减少内存占用,具体方法如下
1.修改es-statefulset.yaml文件,让elasticsearch启动并暂停。注:es的镜像是用centos做的,容器异常退出的时候,也可以在 yaml 里面 加入/sbin/init命令运行容器 containers: - image: registry.cn-hangzhou.aliyuncs.com/google_containers/elasticsearch:v5.6.4 command: ["/sbin/init"] 2.把config/jvm.options内容复制一份到/opt/root/k8s/v1.11.2/kubernetes/cluster/addons/fluentd-elasticsearch/es-image/config,并修改-Xms、-Xmx的值 3.修改/opt/root/k8s/v1.11.2/kubernetes/cluster/addons/fluentd-elasticsearch/es-image/Dockerfile 引用当前node上已有的elasticsearch镜像 把修改后的jvm.options复制到镜像里面 修改后的内容如下: #FROM docker.elastic.co/elasticsearch/elasticsearch:5.6.4 FROM registry.cn-hangzhou.aliyuncs.com/google_containers/elasticsearch:v5.6.4 VOLUME ["/data"] EXPOSE 9200 9300 #COPY elasticsearch_logging_discovery run.sh bin/ COPY config/jvm.options config/ USER root RUN chown -R elasticsearch:elasticsearch ./ CMD ["bin/run.sh"] 4.重新生成镜像 /opt/k8s/bin/docker build -t myself/images/elasticsearch:v1.0.1 . 5.修改es-statefulset.yaml,注释掉刚才的command: ["/sbin/init"],修改image为myself/images/elasticsearch:v1.0.1 6.kubectl apply -f es-statefulset.yaml 使定义的文件生效