[k8s]使用nfs挂载pod的应用日志文件

简介: [k8s]使用nfs挂载pod的应用日志文件

前言

某些特殊场景下应用日志无法通过elk、grafana等工具直接查看,需要将日志文件挂载出来再处理。本文以nfs作为远程存储,统一存放pod日志。

  • 系统版本:CentOS 7 x86-64
  • 宿主机IP网段:10.10.17.190/27,服务端IP:10.10.17.191

1. 安装配置nfs

  1. 挑一台宿主机作为nfs服务端,安装相关服务
yum install -y nfs-utils rpcbind
  1. 创建共享目录并设置权限
mkdir -p /home/apps/nfs
chmod -R 755 /home/apps/nfs
  1. 编辑 /etc/exports,添加以下内容
/home/apps/nfs/ 10.10.17.190/27(rw,no_root_squash,no_all_squash,sync)
  1. 使配置生效
exportfs -r
  1. 启动服务。(如果有防火墙,需要先在防火墙开放相关端口)
systemctl start rpcbind
systemctl start nfs
systemctl enable rpcbind
systemctl enable nfs
  1. 在服务端检查是否正常
# 查看端口是否生效
rpcinfo -p
# 查看服务端是否可连接
showmount -e localhost
  1. 找另一台服务器作为客户端测试
# 查看端口是否生效
rpcinfo -p
# 查看服务端是否可连接
showmount -e localhost
# 安装客户端程序
yum install -y rpcbind nfs-utils
# 查看远端是否可连接
showmount -e 10.10.17.191
# 建立挂载目录
mkdir -p /home/apps/nfs
mount -t nfs 10.10.17.191:/home/apps/nfs /home/apps/nfs -o nolock,nfsvers=3,vers=3
# 解除挂载
umount /home/apps/nfs

2. 创建PV

创建pv,容量限制为60GiB。标签和容量根据实际情况调整。注意修改nfs相关配置为实际nfs地址。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-nfs
  namespace: default
  labels:
    env: uat
spec:
  capacity:
    storage: 60Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: ""
  nfs:
    path: /home/apps/nfs/
    server: 10.10.17.191

3. 创建pvc

创建pvc,通过标签绑定到pv。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-nfs
  namespace: default
spec:
  accessModes:    # 访问模式
    - ReadWriteMany
  volumeMode: Filesystem    # 存储卷模式
  resources:    # 资源请求
    requests:
      storage: 30Gi
  storageClassName: ""
  selector:
    matchLabels:
      env: "uat"

4. 配置pod使用pvc

下面的示例为创建deployment和相应的service,使用nodeAffinity优先调度到指定的服务器。从内网私有化部署的harbor拉取docker镜像,并配置harbor账号的secret。使用Downward API获取pod名称,以pod名称作为挂载子目录名称

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      affinity:
        nodeAffinity:    # pod调度
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            preference:
              matchExpressions:
              - key: type
                operator: In
                values:
                - "app"
              - key: env
                operator: In
                values:
                - "uat"
      containers:
      - name: myapp
        image: harbor.neiwang.com/demo/myapp:1.0.2
        imagePullPolicy: IfNotPresent
        ports:
        - name: main-http
          containerPort: 8201
        - name: main-dubbo
          containerPort: 28201
        env:
        - name: POD_NAME    # 使用Downward API获取POD名称
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.name
        envFrom:    # 引用configMap中的环境变量
          - configMapRef:
              name: cm-common
          - configMapRef:
              name: cm-spring
        volumeMounts:
        - mountPath: /app/log
          name: logdir
          subPathExpr: myapp/$(POD_NAME)    # 使用子目录, 便于定位指定pod的日志
      volumes:
        - name: logdir
          persistentVolumeClaim:
            claimName: pvc-nfs
      imagePullSecrets:    # 从私有harbor仓库拉取镜像需要配置账户信息的secret
      - name: registry-harbor
---
apiVersion: v1
kind: Service
metadata:
  name: svc-myapp
spec:
  selector:
    app: myapp
  ports:
    - name: main-http
      protocol: TCP
      port: 8201
      targetPort: 8201
    - name: main-dubbo
      protocol: TCP
      port: 28201
      targetPort: 28201

使用yaml文件创建deployment和service

kubectl create -f myapp.yaml

查看pod是否启动

kubectl get pods

到nfs服务端查看是否有新生成的pod文件

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
7月前
|
SQL 人工智能 监控
SLS Copilot 实践:基于 SLS 灵活构建 LLM 应用的数据基础设施
本文将分享我们在构建 SLS SQL Copilot 过程中的工程实践,展示如何基于阿里云 SLS 打造一套完整的 LLM 应用数据基础设施。
2055 96
|
10月前
|
监控 安全 Linux
AWK在网络安全中的高效应用:从日志分析到威胁狩猎
本文深入探讨AWK在网络安全中的高效应用,涵盖日志分析、威胁狩猎及应急响应等场景。通过实战技巧,助力安全工程师将日志分析效率提升3倍以上,构建轻量级监控方案。文章详解AWK核心语法与网络安全专用技巧,如时间范围分析、多条件过滤和数据脱敏,并提供性能优化与工具集成方案。掌握AWK,让安全工作事半功倍!
363 0
|
存储 监控 算法
基于 PHP 语言的滑动窗口频率统计算法在公司局域网监控电脑日志分析中的应用研究
在当代企业网络架构中,公司局域网监控电脑系统需实时处理海量终端设备产生的连接日志。每台设备平均每分钟生成 3 至 5 条网络请求记录,这对监控系统的数据处理能力提出了极高要求。传统关系型数据库在应对这种高频写入场景时,性能往往难以令人满意。故而,引入特定的内存数据结构与优化算法成为必然选择。
322 3
|
SQL 数据库
【YashanDB知识库】应用绑定参数的慢查询,慢日志抓取不到
【YashanDB知识库】应用绑定参数的慢查询,慢日志抓取不到
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
395 0
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
301 1
|
Kubernetes 持续交付 开发工具
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
780 2
|
SQL 分布式计算 Serverless
基于阿里云 EMR Serverless Spark 版快速搭建OSS日志分析应用
基于阿里云 EMR Serverless Spark 版快速搭建OSS日志分析应用
338 0
|
存储 Linux 网络安全
【Azure 存储服务】如何把开启NFS 3.0协议的Azure Blob挂载在Linux VM中呢?(NFS: Network File System 网络文件系统)
【Azure 存储服务】如何把开启NFS 3.0协议的Azure Blob挂载在Linux VM中呢?(NFS: Network File System 网络文件系统)
240 0
|
域名解析 Unix Linux
AIX上如何正确挂载Linux 的nfs共享目录分享篇
AIX上如何正确挂载Linux 的nfs共享目录分享篇
876 1

推荐镜像

更多
下一篇
开通oss服务