首页 > 其他分享 >[k8s]使用nfs挂载pod的应用日志文件

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

时间:2023-03-15 10:11:06浏览次数:45  
标签:name apps nfs myapp home pod k8s

前言

某些特殊场景下应用日志无法通过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文件

标签:name,apps,nfs,myapp,home,pod,k8s
From: https://www.cnblogs.com/XY-Heruo/p/17217497.html

相关文章

  • K8S对外服务之Ingress
    一、Ingress简介service的作用体现在两个方面,对集群内部,它不断跟踪pod的变化,更新endpoint(端点)中对应pod的对象,提供了ip不断变化的pod的服务发现机制;对集群外部,他类似负载......
  • K8S的安全机制
    前言:机制Kubernetes作为一个分布式集群的管理工具,保证集群的安全性是其一个重要的任务。APIServer是集群内部各个组件通信的中介,也是外部控制的入口。所以Kubernetes......
  • K8S中Helm _
    前言在我们yum管理工具,主要解决的是包之间的依赖问题,而我们的helm工具是安装服务的问题,在我们的k8s中的包管理工具helm,它可以通过一些仓库去下载一些我们想要yalm文件,我们......
  • 在k8s中,怎么模拟负载,利用HPA进行自动扩缩容的场景?
    1、通过下面的定义创建应用的podapiVersion:apps/v1kind:Deploymentmetadata:name:php-apachespec:selector:matchLabels:run:php-apachet......
  • 开源免费:分享powershell读写k8s的etcd的脚本库
      powershelletcdreadwriteputgetdelkubernetesk8s读写博客园---【前言】--- 篡改记忆=写入你脑仁,这是一项可怕的技术!它可以很容易把猫的爸爸,篡改成狗狗......
  • K8S部署应用详解
    #前言首先以SpringBoot应用为例介绍一下k8s的发布步骤。1.从代码仓库下载代码,比如GitLab;2.接着是进行打包,比如使用Maven;3.编写Dockerfile文件,把步骤2产生的包制作成镜像......
  • K8s
    k8s安装想用K8s,还得先会Docker吗?其实完全没必要Docker安装和加入K8S安装k8s、docker ......
  • 聊聊如何在K8S中实现会话保持
    前言故事的起因是朋友所在的部门最近基于auth2实现单点登录,他们在测试环境单点登录,运行得好好的,但他们把单点登录上到预发布环境,发现单点登录不好使了。他们有部分系统是......
  • K8S-Helm
    一.helm概述1.1什么是helm在没使用helm之前,向kubernetes部署应用,我们要依次部署deployment、svc等,步骤较繁琐。随着很多项目微服务化,复杂的应用在容器中部署以......
  • 基于Kubernetes(k8s)部署Dubbo+Nacos服务
    一、说明本文介绍基于Kubernetes(k8s)环境集成阿里云私有镜像仓库来部署一套Dubbo+Nacos的微服务系统,并使用KubernetesDNS以及port-forward的方式来打通网络......