系列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文件

相关推荐
cui__OaO17 分钟前
Linux软件编程--线程
linux·开发语言·线程·互斥锁·死锁·信号量·嵌入式学习
小狗爱吃黄桃罐头18 分钟前
正点原子【第四期】Linux之驱动开发篇学习笔记-1.1 Linux驱动开发与裸机开发的区别
linux·驱动开发·学习
小晶晶京京1 小时前
day34-LNMP详解
linux·运维·服务器
画个太阳作晴天1 小时前
A12预装app
linux·服务器·前端
fengyehongWorld1 小时前
Linux crontab定时任务
linux·运维
shuangrenlong2 小时前
ubuntu更新chrome版本
linux·chrome·ubuntu
碎像2 小时前
Linux上配置环境变量
linux·运维·服务器
40kuai3 小时前
kubernetes中数据存储etcd
容器·kubernetes·etcd
敲上瘾3 小时前
Linux系统cgroups资源精细化控制基础
linux·测试工具·docker·压力测试·cgroups
起个昵称吧3 小时前
线程相关编程、线程间通信、互斥锁
linux·算法