1. 程式人生 > >二進位制安裝kubernetes v1.11.2 (第十九章 部署 EFK 外掛)

二進位制安裝kubernetes v1.11.2 (第十九章 部署 EFK 外掛)

繼續前一章部署。

部署 EFK 外掛

19.1 介紹

EFK,即 elasticsearch,kibana,fluentd

19.2 下載二進位制檔案,參考 第三章

EFK 外掛位於壓縮包的 kubernetes/cluster/addons/fluentd-elasticsearch/ 目錄下

[[email protected] influxdb]# cd /opt/root/k8s/v1.11.2/kubernetes/cluster/addons/fluentd-elasticsearch/
[[email protected]-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 地址
[[email protected]-m1 fluentd-elasticsearch]# cp es-statefulset.yaml{,.orig}
[[email protected]
-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 地址 [[email protected]-m1 fluentd-elasticsearch]# cp fluentd-es-ds.yaml{,.orig} [[email protected]
-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 上
[[email protected]-m1 fluentd-elasticsearch]# kubectl label nodes k8s-n1 beta.kubernetes.io/fluentd-ds-ready=true
node/k8s-n1 labeled

19.5 執行定義檔案

# 執行定義檔案
[[email protected]-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

 

排障

如果發現 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 使定義的檔案生效