Kubernetes(k8s)Helm v3 部署 EFK 日志系统
# Kubernetes(k8s)Helm v3 部署 EFK 日志系统
# 查看K8S集群
在这里使用的是kubernetes v1.21.1的版本部署。
[root@k8s-master-node1 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master-node1 Ready control-plane,master,worker 15h v1.21.1
k8s-worker-node1 Ready worker 15h v1.21.1
# 安装Helm3
通过tar包安装helm3 ,查看当前的helm版本。
[root@k8s-master-node1 ~]# wget https://get.helm.sh/helm-v3.5.4-linux-amd64.tar.gz
[root@k8s-master-node1 ~]# tar xf helm-v3.5.4-linux-amd64.tar.gz
[root@k8s-master-node1 ~]# mv linux-amd64/helm /usr/local/sbin/helm
[root@k8s-master-node1 ~]# helm version
version.BuildInfo{Version:"v3.7.1", GitCommit:"1d11fcb5d3f3bf00dbe6fe31b8412839a96b3dc4", GitTreeState:"clean", GoVersion:"go1.16.9"}
# 添加公用的仓库
配置helm微软源地址
配置helm阿里源地址
[root@k8s-master-node1 ~]# helm repo add stable http://mirror.azure.cn/kubernetes/charts
[root@k8s-master-node1 ~]# helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
"aliyun" has been added to your repositories
[root@k8s-master-node1 ~]# helm repo list
NAME URL
stable http://mirror.azure.cn/kubernetes/charts/
aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
# 部署Elasticsearch
ES 集群环境
- es-master 搭建一个 elasticsearch 至少需要 3 个 Pod 以防止集群脑裂
- es-data 数据节点至少需要 2 个 Pod 。数据节点将保留数据、接收查询和索引请求
- es-client 做为协调 elasticsearch 集群。至少需要 2 个。用于集群连接,并充当 HTTP 代理。如果不使用 es-clinet 那么 es-data 充当协调,尽量避免在较大的集群上这样做。
- 这里我没有使用NFS 类型的 StorageClass 来做持久化存储,当然如果你是线上环境建议使用 Local PV 或者 Ceph RBD 之类的存储来持久化 Elasticsearch 的数据
从官方的仓库拉取elasticsearch的chart包。
- 如果主机内存小可以将replicas的副本设置为1,则默认
- 这里关闭pvc存储。
[root@k8s-master-node1 opt]# mkdir efk && cd efk
[root@k8s-master-node1 efk]# kubectl create namespace efk
[root@k8s-master-node1 efk]# helm fetch stable/elasticsearch
[root@k8s-master-node1 efk]# tar zxvf elasticsearch-1.32.5.tgz
[root@k8s-master-node1 efk]# cd elasticsearch/
[root@k8s-master-node1 elasticsearch]# ls
Chart.yaml ci README.md templates values.yaml
将persistence的enabled选项设置为false,有则用true。
[root@k8s-master-node1 elasticsearch]# vim values.yaml
persistence:
enabled: false
accessMode: ReadWriteOnce
name: data
size: "4Gi"
# storageClass: "ssd"
helm安装elasticsearch指定命名空间指定value文件。
[root@k8s-master-node1 elasticsearch]# helm install els1 --namespace=efk -f values.yaml stable/elasticsearch
[root@k8s-master-node1 elasticsearch]# kubectl get pods -n efk
NAME READY STATUS RESTARTS AGE
els1-elasticsearch-client-69bd9656b4-hhtr5 1/1 Running 0 176m
els1-elasticsearch-client-69bd9656b4-qq89w 1/1 Running 2 176m
els1-elasticsearch-data-0 1/1 Running 0 176m
els1-elasticsearch-data-1 1/1 Running 2 175m
els1-elasticsearch-master-0 1/1 Running 2 176m
els1-elasticsearch-master-1 1/1 Running 0 175m
els1-elasticsearch-master-2 1/1 Running 2 174m
# 部署Fluentd
要收集 Kubernetes 集群的日志,直接用 DasemonSet 控制器来部署 Fluentd 应用,这样,它就可以从 Kubernetes 节点上采集日志,确保在集群中的每个节点上始终运行一个 Fluentd 容器。
从官方的仓库拉取fluentd的chart包。
[root@k8s-master-node1 efk]# helm fetch stable/fluentd-elasticsearch
[root@k8s-master-node1 efk]# tar zxvf fluentd-elasticsearch-2.0.7.tgz
[root@k8s-master-node1 efk]# cd fluentd-elasticsearch/
[root@k8s-master-node1 fluentd-elasticsearch]# ls
Chart.yaml OWNERS README.md templates values.yaml
修改elasticsearch的连接地址,可以通过查看efk命名空间的svc,找到elasticsearch的地址。
[root@k8s-master-node1 fluentd-elasticsearch]# kubectl get svc -n efk
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
els1-elasticsearch-client ClusterIP 10.96.188.11 <none> 9200/TCP 3h4m
els1-elasticsearch-discovery ClusterIP None <none> 9300/TCP 3h4m
[root@k8s-master-node1 fluentd-elasticsearch]# vim values.yaml
elasticsearch:
host: '10.96.188.11' #将这里的默认修改成elasticsearch的ip
port: 9200
scheme: 'http'
ssl_version: TLSv1_2
buffer_chunk_limit: 2M
buffer_queue_limit: 8
logstash_prefix: 'logstash'
helm安装fluentd指定命名空间指定value文件。
[root@k8s-master-node1 fluentd-elasticsearch]# helm install flu1 --namespace=efk -f values.yaml stable/fluentd-elasticsearch
[root@k8s-master-node1 fluentd-elasticsearch]# kubectl get pods -n efk
NAME READY STATUS RESTARTS AGE
els1-elasticsearch-client-69bd9656b4-hhtr5 1/1 Running 0 3h6m
els1-elasticsearch-client-69bd9656b4-qq89w 1/1 Running 2 3h6m
els1-elasticsearch-data-0 1/1 Running 0 3h6m
els1-elasticsearch-data-1 1/1 Running 2 3h5m
els1-elasticsearch-master-0 1/1 Running 2 3h6m
els1-elasticsearch-master-1 1/1 Running 0 3h5m
els1-elasticsearch-master-2 1/1 Running 2 3h4m
flu1-fluentd-elasticsearch-4vbcv 1/1 Running 0 56m
flu1-fluentd-elasticsearch-mbpd4 1/1 Running 0 56m
注意:
这里面涉及到一个镜像gcr.io/google-containers/fluentd-elasticsearch:v2.3.2,国内网络无法访问可以拉取阿里云的镜像然后修改,包括后面的kibana镜像也一样的操作。
然后需要使用save -o 导出来分发到其他节点上传镜像。
[root@k8s-master-node1 fluentd-elasticsearch]# docker pull registry.aliyuncs.com/google_containers/fluentd-elasticsearch:v2.3.2 [root@k8s-master-node1 fluentd-elasticsearch]# docker tag registry.aliyuncs.com/google_containers/fluentd-elasticsearch:v2.3.2 gcr.io/google-containers/fluentd-elasticsearch:v2.3.2 [root@k8s-master-node1 ~]# docker save -o fluentd-elasticsearch.tar gcr.io/google-containers/fluentd-elasticsearch:v2.3.2 [root@k8s-master-node1 ~]# scp fluentd-elasticsearch.tar k8s-worker-node1:/root/ [root@k8s-worker-node1 ~]# docker load -i fluentd-elasticsearch.tar
# 部署Kibana
修改kibana文件(注意kibana的版本一定要与elasticsearch一致)
Kibana 是Elastic Search 的数据分析及可视化平台, 能够用来搜索、查看存储在ElasticSearch索引中的数据。
它可以通过各种图表进行高级数据分析及展示,用户基于Web GUI可以快速创建仪表板( dashboard )实时显示ElasticSearch 的查询结果。
从官方的仓库拉取kibana的chart包。
[root@k8s-master-node1 efk]# helm fetch stable/kibana
[root@k8s-master-node1 efk]# tar zxvf kibana-3.2.8.tgz
[root@k8s-master-node1 efk]# cd kibana/
[root@k8s-master-node1 kibana]# ls
Chart.yaml ci OWNERS README.md templates values.yaml
通过查看k8s集群的clusterip,跟elasticsearch一样的clusterip。
[root@k8s-master-node1 kibana]# vim values.yaml
files:
kibana.yml:
## Default Kibana configuration from kibana-docker.
server.name: kibana
server.host: "0"
## For kibana < 6.6, use elasticsearch.url instead
elasticsearch.hosts: http://10.96.188.11:9200
helm安装kibana指定命名空间指定value文件。
[root@k8s-master-node1 kibana]# helm install kibana --namespace=efk -f values.yaml stable/kibana
[root@k8s-master-node1 efk]# kubectl get pods -n efk
NAME READY STATUS RESTARTS AGE
els1-elasticsearch-client-69bd9656b4-hhtr5 1/1 Running 0 3h24m
els1-elasticsearch-client-69bd9656b4-qq89w 1/1 Running 2 3h24m
els1-elasticsearch-data-0 1/1 Running 0 3h24m
els1-elasticsearch-data-1 1/1 Running 2 3h23m
els1-elasticsearch-master-0 1/1 Running 2 3h24m
els1-elasticsearch-master-1 1/1 Running 0 3h23m
els1-elasticsearch-master-2 1/1 Running 2 3h22m
flu1-fluentd-elasticsearch-4vbcv 1/1 Running 0 74m
flu1-fluentd-elasticsearch-mbpd4 1/1 Running 0 74m
kibana-56fdd4b5c-57hzr 1/1 Running 0 64m
将kibana的services暴露端口服务修改ClusterIP为NodePort。
[root@k8s-master-node1 efk]# kubectl get svc -n efk
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
els1-elasticsearch-client ClusterIP 10.96.188.11 <none> 9200/TCP 3h24m
els1-elasticsearch-discovery ClusterIP None <none> 9300/TCP 3h24m
kibana NodePort 10.96.214.238 <none> 443:59247/TCP 65m
通过界面访问http://192.168.1.3:59247。
# 创建索引
创建好索引模式之后,即可通过“ Discover ”搜索数据,或者在“ Visualize ”界面中定义可视化图形,并将它们集成于可在“ Dashboard ”中创建的仪表板里。
以下就是2022年3月06号的日志。