学习笔记五:在k8s中安装EFK组件

在k8s中安装EFK组件

安装elasticsearch

查看k8s版本

python 复制代码
kubectl get node -owide

上传压缩包

把elasticsearch-7-12-1.tar.gz、fluentd-containerd.tar.gz、 kibana-7-12-1.tar.gz上传到k8snode1机器上,手动解压

python 复制代码
ctr -n=k8s.io images import elasticsearch-7-12-1.tar.gz 
ctr -n=k8s.io images import kibana-7-12-1.tar.gz 
ctr -n=k8s.io images import fluentd-containerd.tar.gz

把nfs-subdir-external-provisioner.tar.gz上传到k8snode1上,手动解压。

python 复制代码
ctr -n=k8s.io images import nfs-subdir-external-provisioner.tar.gz

把fluentd-containerd.tar.gz上传到k8smaster1机器上,手动解压

python 复制代码
ctr -n=k8s.io images import fluentd-containerd.tar.gz

安装elasticsearch组件

创建kube-logging名称空间

python 复制代码
cat kube-logging.yaml 
python 复制代码
kind: Namespace
apiVersion: v1
metadata:
  name: kube-logging
python 复制代码
kubectl apply -f kube-logging.yaml

查看kube-logging名称空间是否创建成功

python 复制代码
kubectl get namespaces | grep kube-logging

安装elasticsearch组件

创建headless service服务

python 复制代码
cat elasticsearch_svc.yaml 
python 复制代码
kind: Service
apiVersion: v1
metadata:
  name: elasticsearch
  namespace: kube-logging
  labels:
    app: elasticsearch
spec:
  selector:
    app: elasticsearch
  clusterIP: None
  ports:
    - port: 9200
      name: rest
    - port: 9300
      name: inter-node
python 复制代码
kubectl apply -f elasticsearch_svc.yaml 

查看elasticsearch的service是否创建成功

python 复制代码
kubectl get services --namespace=kube-logging

现在已经为 Pod 设置了无头服务和一个稳定的域名.elasticsearch.kube-logging.svc.cluster.local,接下来我们通过 StatefulSet来创建具体的 Elasticsearch的Pod 应用。

创建Storageclass,实现存储类动态供给

安装nfs服务,选择k8s集群的k8smaster1节点,k8s集群的k8smaster1节点的ip是192.168.40.110

master和node都安装nfs

python 复制代码
yum install nfs-utils -y
systemctl start nfs
systemctl enable nfs.service

在k8smaster1上创建一个nfs共享目录

python 复制代码
mkdir /data/v1 -p

编辑/etc/exports文件

python 复制代码
vim /etc/exports
/data/v1 192.168.40.0/24(rw,no_root_squash)

加载配置,使配置生效

python 复制代码
exportfs -arv
systemctl restart nfs

创建stoorageclass

python 复制代码
cat class.yaml
python 复制代码
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: do-block-storage
provisioner: example.com/nfs
python 复制代码
kubectl apply -f class.yaml

注:provisioner: example.com/nfs

该值需要和nfs provisioner配置的PROVISIONER_NAME处的value值保持一致

创建nfs作为存储的供应商

创建运行nfs-provisioner需要的sa账号

python 复制代码
cat serviceaccount.yaml
python 复制代码
apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-provisioner
python 复制代码
kubectl apply -f serviceaccount.yaml

对sa授权 :

python 复制代码
kubectl create clusterrolebinding nfs-provisioner-clusterrolebinding --clusterrole=cluster-admin --serviceaccount=default:nfs-provisioner

通过deployment创建pod用来运行nfs-provisioner

通过百度网盘分享的文件:deployment.yaml

链接:https://pan.baidu.com/s/1ZstWt4fBVRLIAi3abIDSJw?pwd=dn6y

提取码:dn6y

python 复制代码
vim deployment.yaml

image: registry.cn-beijing.aliyuncs.com/mydlq/nfs-subdir-external-provisioner:v4.0.0

需要修改nfs服务端所在的ip地址,nfs服务端共享的目录

python 复制代码
          env:
            - name: PROVISIONER_NAME
              value: example.com/nfs
            - name: NFS_SERVER
              value: 192.168.40.110
#这个需要写nfs服务端所在的ip地址,大家需要写自己安装了nfs服务的机器ip
            - name: NFS_PATH
              value: /data/v1
#这个是nfs服务端共享的目录
      volumes:
        - name: nfs-client-root
          nfs:
            server: 192.168.40.110
            path: /data/v1
python 复制代码
kubectl apply -f deployment.yaml

验证nfs是否创建成功

python 复制代码
kubectl get pods | grep nfs
#如异常可查看pod细节
#kubectl get pods -A
#kubectl describe pod nfs-provisioner

显示如下说明创建成功:

更新资源清单文件

通过百度网盘分享的文件:elasticsearch-statefulset.yaml

链接:https://pan.baidu.com/s/1sSTBqML5ttK-3lOefu-rig?pwd=fxpj

提取码:fxpj

python 复制代码
kubectl apply -f elasticsearch-statefulset.yaml

查看是否有3个es-cluster

在kube-logging的名称空间中定义了一个es-cluster的StatefulSet。

然后,我们使用serviceName 字段与我们之前创建的headless ElasticSearch服务相关联。

这样可以确保可以使用以下DNS地址访问StatefulSet中的每个Pod:

es-cluster-[0,1,2].elasticsearch.kube-logging.svc.cluster.local,其中[0,1,2]与Pod分配的序号数相对应。

我们指定3个replicas(3个Pod副本),将selector matchLabels 设置为app: elasticseach。

该.spec.selector.matchLabels和.spec.template.metadata.labels字段必须匹配。
查看es的pod是否创建成功

python 复制代码
kubectl get pods -n kube-logging

pod部署完成之后,可以通过REST API检查elasticsearch集群是否部署成功,使用下面的命令将本地端口9200转发到 Elasticsearch 节点(如es-cluster-0)对应的端口:

python 复制代码
kubectl get svc -n kube-logging

安装kibana组件

通过百度网盘分享的文件:kibana.yaml

链接:https://pan.baidu.com/s/1VmsJ8-NQKozZqteNQRfSOA?pwd=j9lq

提取码:j9lq

python 复制代码
cat kibana.yaml 
python 复制代码
kubectl apply -f kibana.yaml

检查kibana

python 复制代码
kubectl get pods -n kube-logging
kubectl get svc -n kube-logging

修改service的type类型为NodePort:

python 复制代码
kubectl edit svc kibana -n kube-logging
python 复制代码
把type: ClusterIP变成type: NodePort
保存退出
python 复制代码
kubectl get svc -n kube-logging

在浏览器中打开http://<k8s集群任意节点IP>:32462即可,如果看到如下欢迎界面证明 Kibana 已经成功部署到了Kubernetes集群之中。

安装fluentd组件

我们使用daemonset控制器部署fluentd组件,这样可以保证集群中的每个节点都可以运行同样fluentd的pod副本,这样就可以收集k8s集群中每个节点的日志,在k8s集群中,容器应用程序的输入输出日志会重定向到node节点里的json文件中

fluentd可以tail和过滤以及把日志转换成指定的格式发送到elasticsearch集群中。除了容器日志,fluentd也可以采集kubelet、kube-proxy、docker的日志

python 复制代码
cat fluentd.yaml 

通过百度网盘分享的文件:fluentd.yaml

链接:https://pan.baidu.com/s/1PHNeM3mSxb9BjplsBZecSw?pwd=9ih7

提取码:9ih7

python 复制代码
kubectl apply -f fluentd.yaml
kubectl get pods -n kube-logging

Fluentd 启动成功后,我们可以前往 Kibana 的 Dashboard 页面中,点击左侧的Discover,可以看到如下配置页面:

在这里可以配置我们需要的 Elasticsearch 索引,前面 Fluentd 配置文件中我们采集的日志使用的是 logstash 格式,这里只需要在文本框中输入logstash-*即可匹配到 Elasticsearch 集群中的所有日志数据,然后点击下一步,进入以下页面:

点击next step,出现如下

选择@timestamp,创建索引

点击左侧的discover,可看到如下

相关推荐
序属秋秋秋1 小时前
《C++初阶之内存管理》【内存分布 + operator new/delete + 定位new】
开发语言·c++·笔记·学习
许白掰1 小时前
Linux入门篇学习——Linux 工具之 make 工具和 makefile 文件
linux·运维·服务器·前端·学习·编辑器
B1nna2 小时前
Docker学习
学习·docker·容器
quant_19863 小时前
R语言如何接入实时行情接口
开发语言·经验分享·笔记·python·websocket·金融·r语言
promising-w8 小时前
【运算放大器专题】基础篇
嵌入式硬件·学习
宝山哥哥8 小时前
网络信息安全学习笔记1----------网络信息安全概述
网络·笔记·学习·安全·网络安全
前端开发与ui设计的老司机8 小时前
从UI设计到数字孪生实战:构建智慧教育的个性化学习平台
学习·ui
X Y O8 小时前
神经网络初步学习3——数据与损失
人工智能·神经网络·学习
逼子格9 小时前
逻辑门电路Multisim电路仿真汇总——硬件工程师笔记
笔记·硬件工程师·multisim·电路仿真·逻辑门·硬件工程师学习·电路图
@Hwang9 小时前
【ESP32-IDF笔记】09-UART配置和使用
笔记·esp32·uart·esp32s3·esp32-idf