kubernetes集群日志管理系统部署方案

安装前请下载各种所需yaml文件

1、安装 elasticsearch 组件

1.1 创建名称空间

#elasticsearch、fluentd、kibana都会安装到此空间下

kubectl apply -f kube-logging.yaml

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

kubectl get namespaces | grep kube-logging
[root@k8s-master ~]# kubectl get namespaces | grep kube-logging
kube-logging           Active   5h25m
[root@k8s-master ~]# 

1.3 安装 elasticsearch 相关服务

1.3.1 创建 headless service 服务

创建一个 headless service 的 Kubernetes 服务,服务名称是 elasticsearch,这个服务将为 3 个Pod 定义一个 DNS 域。headless service 不具备负载均衡也没有 IP

kubectl apply -f elasticsearch_svc.yaml
kubectl get svc -n kube-logging

[root@k8s-master ~]# kubectl get svc -n kube-logging
NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
elasticsearch   ClusterIP   None            <none>        9200/TCP,9300/TCP   5h26m
kibana          NodePort    10.98.127.253   <none>        5601:30059/TCP      5h23m
[root@k8s-master ~]# 

1.3.2 通过 statefulset 创建 elasticsearch 集群

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

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

#所有机器都执行
yum install nfs-utils -y  #yum 安装 nfs 
systemctl start nfs #启动 nfs 服务
systemctl enable nfs.service #设置 nfs 开机自启动 

#在 master1 上创建一个 nfs 共享目录 
mkdir /data/v1 -p 

#编辑/etc/exports 文件
cat >> /etc/exports << EOF
/data/v1 *(rw,no_root_squash)
EOF

#加载配置,使配置生效 
exportfs -arv 
systemctl restart nfs

1.4 创建 nfs 作为存储的供应商

1.4.1、 拉去镜像

#所有node节点拉去此镜像
docker pull registry.cn-hangzhou.aliyuncs.com/759035366/nfs-subdir-external-provisioner:v4.0.0

1.4.2、创建 sa

kubectl apply -f serviceaccount.yaml

1.4.3、对 sa 做 rbac 授权

kubectl apply -f rbac.yaml

1.4.4、创建

kubectl apply -f deployment.yaml
kubectl get pods | grep nfs

1.4.5、创建 stoorageclass

kubectl apply -f class.yaml

1.5 安装 elasticsearch 集群

kubectl apply -f elasticsearch-statefulset.yaml #更新资源清单文件 
kubectl get pods -n kube-logging
kubectl get pv,pvc -n kube-logging

[root@k8s-master ~]# kubectl get pods -n kube-logging
NAME                      READY   STATUS    RESTARTS      AGE
es-cluster-0              1/1     Running   0             5h33m
es-cluster-1              1/1     Running   0             5h33m
es-cluster-2              1/1     Running   0             5h33m
[root@k8s-master ~]# 

[root@k8s-master efk]#  kubectl get pv,pvc -n kube-logging
NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                            STORAGECLASS       REASON   AGE
persistentvolume/pvc-330d3905-bd55-47a5-b60f-6d2dd19cc59a   10Gi       RWO            Delete           Bound    kube-logging/data-es-cluster-2   do-block-storage            3h8m
persistentvolume/pvc-50ef3671-a617-4b1b-b215-e08b64ad61d8   10Gi       RWO            Delete           Bound    kube-logging/data-es-cluster-1   do-block-storage            3h8m
persistentvolume/pvc-71c98dbe-4dd0-480b-9a5c-0b6937b76c93   10Gi       RWO            Delete           Bound    kube-logging/data-es-cluster-0   do-block-storage            3h8m

NAME                                      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS       AGE
persistentvolumeclaim/data-es-cluster-0   Bound    pvc-71c98dbe-4dd0-480b-9a5c-0b6937b76c93   10Gi       RWO            do-block-storage   3h8m
persistentvolumeclaim/data-es-cluster-1   Bound    pvc-50ef3671-a617-4b1b-b215-e08b64ad61d8   10Gi       RWO            do-block-storage   3h8m
persistentvolumeclaim/data-es-cluster-2   Bound    pvc-330d3905-bd55-47a5-b60f-6d2dd19cc59a   10Gi       RWO            do-block-storage   3h8m

kubectl port-forward es-cluster-0 9200:9200 --namespace=kube-logging #执行完毕后
在另外的终端窗口中,执行如下请求,新开一个 master1 终端:
curl http://localhost:9200/_cluster/state?pretty

2. 安装 kibana 可视化 UI 界面

kubectl apply -f kibana.yaml  #更新资源清单文件

kubectl edit svc kibana -n kube-logging  
#修改 service 的 type 类型为 NodePort
#把 type: ClusterIP 变成 type: NodePort  保存退出之后

kubectl get pods,svc -n kube-logging #查看暴露端口

[root@k8s-master ~]# kubectl get pods,svc -n kube-logging
NAME                          READY   STATUS    RESTARTS      AGE
pod/es-cluster-0              1/1     Running   0             5h37m
pod/es-cluster-1              1/1     Running   0             5h37m
pod/es-cluster-2              1/1     Running   0             5h37m
pod/kibana-7d99fd798b-6hh6q   1/1     Running   0             5h34m

NAME                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
service/elasticsearch   ClusterIP   None            <none>        9200/TCP,9300/TCP   5h37m
service/kibana          NodePort    10.98.127.253   <none>        5601:30059/TCP      5h34m
[root@k8s-master ~]# 

在浏览器中打开 http://<任意节点 IP>:暴露端口 即可,如果看到如下欢迎界面证明 Kibana 已经成功

3、安装 fluentd 组件

使用 daemonset 控制器部署 fluentd 组件,这样可以保证集群中的每个节点都可以运行同样fluentd 的 pod 副本,这样就可以收集 k8s 集群中每个节点的日志,在 k8s 集群中,容器应用程序的输入输出日志会重定向到 node 节点里的 json 文件中,fluentd 可以 tail 和过滤以及把日志转换成指定的格式发送到 elasticsearch 集群中。除了容器日志,fluentd 也可以采集 kubelet、kube-proxy、docker 的日志。

kubectl apply -f fluentd.yaml  #更新资源清单文件
kubectl get pods -n kube-logging

[root@k8s-master ~]# kubectl get pods -n kube-logging
NAME                      READY   STATUS    RESTARTS      AGE
es-cluster-0              1/1     Running   0             5h40m
es-cluster-1              1/1     Running   0             5h40m
es-cluster-2              1/1     Running   0             5h40m
fluentd-2nzgv             1/1     Running   0             5h30m
fluentd-gkkx5             1/1     Running   1 (24m ago)   5h30m
kibana-7d99fd798b-6hh6q   1/1     Running   0             5h38m
[root@k8s-master ~]# 

Fluentd 启动成功后,我们可以前往 Kibana 的 Dashboard 页面中 在浏览器中打开 http://<任意节点 IP>:暴露端口 即可,如果看到如下欢迎界面证明 Kibana 已经成功

kubernetes集群日志管理系统部署方案_第1张图片

4、测试收集 pod 容器日志

登录到 kibana 的控制面板,在 discover 处的搜索栏中输入
kubernetes.pod_name:counter,这将过滤名为的 Pod 的日志数据 counter,如下所示:

cat > pod.yaml << EOF
apiVersion: v1
kind: Pod
metadata:
  name: counter
spec:
  containers:
  - name: count
    image: busybox
    imagePullPolicy: IfNotPresent
    args: [/bin/sh, -c,'i=0; while true; do echo "$i: $(date)"; i=$((i+1)); sleep 1; done']
EOF

kubectl apply -f pod.yaml

kubernetes集群日志管理系统部署方案_第2张图片

关于使用方面自己去研究!

你可能感兴趣的:(kubernetes,docker容器相关,linux,kubernetes)