系列3:基于Centos-8.6 Kubernetes使用nfs挂载pod的应用日志文件

每日禅语

古代,一位官员被革职遣返,心中苦闷无处排解,便来到一位禅师的法堂。禅师静静地听完了此人的倾诉,将他带入自己的禅房之中。禅师指着桌上的一瓶水,微笑着对官员说:​"你看这瓶水,它已经放置在这里许久了,每天都有尘埃、灰烬落在里面,但它依然澄清透明。你知道这是何故吗?​"官员思索了良久,似有所悟:​"所有的灰尘都沉淀到瓶底了。​"禅师点了点头,说道:​"世间烦恼之事数之不尽,有些事越想忘掉却越挥之不去,那就索性记住它好了。就像瓶中水,如果你不停地振荡它,就会使整瓶水都不得安宁,混浊一片;如果你愿意慢慢地、静静地让它们沉淀下来,用宽广的胸怀容纳它们,那么心灵不但并未因此受到污染,反而更加纯净。​"官员恍然大悟。观水学做人,时常自省,便能和光同尘,愈深邃愈安静;便能至柔而有骨,执着而穿石,以"天下之至柔,驰骋天下之至坚"​。时常自省,便能灵活处世,不拘泥于形式,因时而变,因势而变,因器而变,因机而动,生机无限;时常自省,便能清澈透明,纤尘不染;时常自省,便能润泽万物,有容乃大,通达而广济天下,奉献而不图回报

文章背景

一般常用的日志挂载方式有elk,grafana等工具连接查看,但是这些方式都是需要充足的资源的,而且部署方式比较麻烦。但是搭建k8s集群以后,日志分布在不同的机器上面,需要用一种简单便捷的日志收集方式统一收集到一台机器上面做日志查看。对于自己学习或者是公司的内部系统需要做应用的日志收集,使用nfs的日志收集方式无不是一种简单且便捷的方式,本文以nfs作为远程存储,统一存放pod日志。

1.安装nfs服务(所有节点)

复制代码
yum install -y nfs-utils rpcbind

2.创建共享目录设置日志收集服务器地址

本文所有日志都收集在172.17.12.24服务器上面,在24服务上面创建共享目录

复制代码
mkdir -p /home/apps/nfs
chmod -R 755 /home/apps/nfs

3.编辑 /etc/exports,添加以下内容

复制代码
/home/apps/nfs/  *(rw,no_root_squash,sync)

4.使配置生效

复制代码
exportfs -r

5.启动服务(所有节点)

复制代码
systemctl start rpcbind
systemctl start nfs
systemctl enable rpcbind
systemctl enable nfs

6.创建pv(k8s集群控制节点操作)

复制代码
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-nfs-prod-24
  namespace: prod
  labels:
    env: uat
spec:
  capacity:
    storage: 60Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: ""
  nfs:
    path: /home/apps/nfs/
    server: 172.17.12.24

7.创建pvc(k8s集群控制节点操作)

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

8.配置pod使用pvc(k8s集群控制节点操作)

复制代码
---
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-prod-24
      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

9.启动并且查看日志

使用yaml文件创建deployment和service

kubectl create -f myapp.yaml

查看pod是否启动

kubectl get pods

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

相关推荐
SPC的存折11 小时前
1、Redis数据库基础
linux·运维·服务器·数据库·redis·缓存
小疙瘩12 小时前
只是记录自己发布若依分离系统到linux过程中遇到的问题
linux·运维·服务器
Mr.王83513 小时前
Kubernetes宿主机本地盘池化管理
ceph·云原生·容器·kubernetes
我是伪码农13 小时前
外卖餐具智能推荐
linux·服务器·前端
皮皮林55114 小时前
强烈建议大家使用 Linux 做开发?
linux
IMPYLH14 小时前
Linux 的 od 命令
linux·运维·服务器·bash
Kk.080215 小时前
Linux(十一)fork实例练习、文件操作示例及相关面试题目分享
linux·运维·算法
数据雕塑家16 小时前
Linux下大文件切割与合并实战:解决FAT32文件系统传输限制
linux·运维·服务器
IMPYLH16 小时前
Linux 的 nice 命令
linux·运维·服务器·bash
l1o3v1e4ding17 小时前
排查linux CentOS7.6的mysql磁盘 I/O 延迟过高问题
linux·运维·mysql