K8s集群部署Loki采集,用NFS持久存储,日志保留7天
k8s部署loki日志采集,自定义存储位置并保留7天
Kubernetes集群部署好后,就可以部署相关业务服务了,各个容器的日志可以帮助排错,问题快速定位,ELK太繁琐,但是速度快,一般loki就够用了,loki可以较快的安装调试,占用很少的服务器资源,安装的loki日志会默认存储在/var/log/docker里面,一直保留,本次也是使用helm安装loki日志采集器,不用繁琐的过程
1、什么是Helm
Helm 是一个 Kubernetes 包管理工具,它可以帮助你定义、安装和升级复杂的 Kubernetes 应用程序。Helm 使用一组名为 "Charts" 的包来简化应用程序的部署和管理。
关键概念
1.Charts:Helm Chart 是一组描述 Kubernetes 资源的文件集合。它们定义了一个应用程序的资源,如 Deployments、Services、ConfigMaps 等。Chart 可以包含参数化的配置,使得同一个 Chart 可以在不同的环境中使用不同的配置。
2.Repositories:Helm Chart 可以托管在公共或私有的 Chart 仓库中。类似于 Linux 包管理中的软件仓库,Helm Chart 仓库是存储和分发 Charts 的地方。
3.Releases:当你使用 Helm 部署一个 Chart 时,会创建一个 Release。Release 是 Chart 的运行实例,可以理解为 Chart 在 Kubernetes 集群中的一个部署实例。每次部署、升级或回滚一个 Chart,都会生成一个新的 Release 版本。
简单使用
安装,使用 Helm 安装预先配置好的应用程序 Chart
helm install <release-name> <chart>
升级和回滚,Helm 允许升级已经部署的应用程序,并且可以回滚到之前的版本
helm upgrade <release-name> <chart>
helm rollback <release-name> <revision>
查看已安装的
helm list --all-namespaces
2、安装NFS
NFS(Network File System,网络文件系统)是一种分布式文件系统协议,允许用户通过网络访问远程计算机上的文件系统,就像访问本地存储一样,也是通过挂载(mount)方式
创建好需要的路径,并放开权限,NFS的服务需要关闭防火墙等等
mkdir -p /data/kubernetes
chown nobody.nobody /data/kubernetes/
chmod -R /data/kubernetes
安装
yum install nfs-utils -y
systemctl stop rpcbind.service
systemctl stop nfs-utils.service
systemctl stop nfs-server.service
systemctl start nfs-server.service
systemctl start nfs-utils.service
systemctl start rpcbind.service
systemctl enable nfs-server.service
showmount -e 127.0.0.1
在NFS服务器端使用命令 showmount -e 127.0.0.1 报错, 提示:clnt_create: RPC: Program not registered 在服务器上先停止rpcbind 然后在停止nfs 最后在重启rpcbind和nfs,一定要按顺序启动和停止
权限加进去
vim /etc/exports
/data/kubernetes *(rw,sync,no_root_squash)
好后可以使用exportfs -rv查看,正常就会显示
[root@nfs ~]# exportfs -rv
exporting *:/data/kubernetes
去每一台的集群节点上执行挂载的命令,挂载完成后通过df -hT查看磁盘空间,里面就有已挂载的
mount -o rw NFSip:/data/kubernetes/ /data/kubernetes/
3、安装loki设置存储
首先,确保你已经安装了 Helm。如果没有安装,可以通过以下命令安装:
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
然后,添加 Loki 的 Helm 仓库:
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
创建PV和PVC
这里就不赘述概念了,先有PV,后有PVC
提前创建一个loki的namespace
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: loki-pv
spec:
capacity:
storage: 500Gi
accessModes:
- ReadWriteMany
nfs:
path: /data/kubernetes
server: <NFS_SERVER_IP>
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: loki-pvc
namespace: loki
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 500Gi
volumeName: loki-pv
安装自定义的loki
创建一个 values.yaml
文件,自定义一些 Loki 的配置:
image:
repository: grafana/loki #docker.io被限制,镜像地址自行调整
tag: "2.7.1" # Loki的版本可以根据需要调整
persistence:
enabled: true
storageClassName: "" #storageClass,回收策略是Delete
accessModes:
- ReadWriteMany
size: 500Gi #大小根据pv自己控制
existingClaim: loki-pvc #pvc的名字
annotations: {}
finalizers:
- kubernetes.io/pvc-protection
storage:
type: filesystem
filesystem:
directory: /data/loki
loki:
config:
schema_config:
configs:
- from: 2020-10-24
store: boltdb-shipper
object_store: filesystem
schema: v11
index:
prefix: index_
period: 24h
storage_config:
boltdb_shipper:
shared_store: filesystem
filesystem:
directory: /data/loki
limits_config:
retention_period: 168h #保留时长
nfs:
enabled: true
server: NFSip
path: /data/kubernetes #替换为NFS服务器共享的路径
安装
helm install loki grafana/loki-stack --namespace loki -f values.yaml
需要修改Loki的yaml,在 Loki 的 StatefulSet 中,volumes
部分定义了 Loki 容器将使用的存储卷。有三个卷:tmp
、config
和 storage
。其中,tmp
和 storage
都被定义为 emptyDir
,这意味着它们是在节点本地存储的临时目录,并且当 Pod 重新启动时,这些数据将会丢失。对于持久化存储来说,emptyDir
并不适合,因为不能保证数据在 Pod 重启后的持久性。需要将 storage
卷替换为一个指向 PVC 的持久化卷
spec:
volumes:
- name: tmp
emptyDir: {}
- name: config
secret:
secretName: loki
defaultMode: 420
- name: storage
emptyDir: {} #原本的
---
spec:
volumes:
- name: tmp
emptyDir: {}
- name: config
secret:
secretName: loki
defaultMode: 420
- name: storage
persistentVolumeClaim:
claimName: loki-pvc #加上我们的pvc
重启容器即可
使用及其路由
使用Helm创建的时候,Service已经创建完成,我们只需要创建一个ingress来代理Service,不通版本的K8s创建yaml不一样,要根据具体的版本调整
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: loki-ingress
namespace: loki
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/client-max-body-size: 10M
nginx.ingress.kubernetes.io/proxy-body-size: 10M
nginx.ingress.kubernetes.io/proxy-connect-timeout: '300'
nginx.ingress.kubernetes.io/proxy-read-timeout: '300'
nginx.ingress.kubernetes.io/proxy-send-timeout: '300'
spec:
ingressClassName: nginx
rules:
- host: loki.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: loki
port:
number: 3100
完成后正常访问域名给到的反馈是404 page not found
4、接入Grafana
登录Grafana,接入Data Source,添加一个Loki
在URL一项填入Ingress的域名
查看日志,已经采集到了
随便找一台节点,查看日志存储的信息
报错盘点
容器loki-0启动报错err="mkdir /data/loki: permission denied"
需要授权777,或者重新挂载
更多推荐
所有评论(0)