日志采集nfs挂载的问题分析

Docker 采集器目录映射赢得linux 内核的UnionFs,UnionFs 会形成一层cache 目录,去把容器中的文件,联合挂载到本机文件里,比如说

           "Data": {
                "LowerDir": "/var/lib/docker/overlay2/7b6f5149ec9f25d688fc28a2d9c5ec3ff7ef67132982ce22a21b36770bb70ecb-init/diff:/var/lib/docker/overlay2/be20468ee80699be5df23e99126693a6c275899080753717f7fddf611a37be89/diff:/var/lib/docker/overlay2/fdd64e328eacd51bf4d921f9e87e8d1ae8bfb24b05df1e0271c8b4b283dc2e46/diff:/var/lib/docker/overlay2/d1016c270238242f619bc6f2f7afd2c2bdfc5b72f8997d1be16b9cc151a92ff5/diff:/var/lib/docker/overlay2/d0cffa88ce2d8bf45bdb5274341f818fd77a825dec914d8eb63ab7ad088f8a06/diff:/var/lib/docker/overlay2/99202031d190473d1cbfbab7f44184bda5b8d28eb3e17d13aa94f2734c61c558/diff:/var/lib/docker/overlay2/5efeef14dd632f83976db0396f3d918140de0bd3e099d1e06f8debc84032d173/diff:/var/lib/docker/overlay2/dae540b717650f0f246fe68b38f5060dd22590e0d7593427650826d61dd60ed8/diff",
                "MergedDir": "/var/lib/docker/overlay2/7b6f5149ec9f25d688fc28a2d9c5ec3ff7ef67132982ce22a21b36770bb70ecb/merged",
                "UpperDir": "/var/lib/docker/overlay2/7b6f5149ec9f25d688fc28a2d9c5ec3ff7ef67132982ce22a21b36770bb70ecb/diff",
                "WorkDir": "/var/lib/docker/overlay2/7b6f5149ec9f25d688fc28a2d9c5ec3ff7ef67132982ce22a21b36770bb70ecb/work"
            },

但是当我去采集容器内日志的时候发现nfs 文件并没有,nfs 文件挂载位置在

/var/lib/kubelet/pods/86963ebc-aa4a-4256-98e8-7ee5c608ba9d/volumes/kubernetes.io~nfs/mydir

这个目录并不在UnionFs 路径下,于是我看K8s 源码

pkg/volume/nfs/nfs.go下面

func getPath(uid types.UID, volName string, host volume.VolumeHost) string {
	return host.GetPodVolumeDir(uid, utilstrings.EscapeQualifiedName(nfsPluginName), volName)
}

mount 具体模块:


func (nfsMounter *nfsMounter) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
	notMnt, err := mount.IsNotMountPoint(nfsMounter.mounter, dir)
	klog.V(4).Infof("NFS mount set up: %s %v %v", dir, !notMnt, err)
	if err != nil && !os.IsNotExist(err) {
		return err
	}
	if !notMnt {
		return nil
	}
	if err := os.MkdirAll(dir, 0750); err != nil {
		return err
	}
	source := fmt.Sprintf("%s:%s", nfsMounter.server, nfsMounter.exportPath)
	options := []string{}
	if nfsMounter.readOnly {
		options = append(options, "ro")
	}
	mountOptions := util.JoinMountOptions(nfsMounter.mountOptions, options)
	err = nfsMounter.mounter.MountSensitiveWithoutSystemd(source, dir, "nfs", mountOptions, nil)
	if err != nil {
		notMnt, mntErr := mount.IsNotMountPoint(nfsMounter.mounter, dir)
		if mntErr != nil {
			klog.Errorf("IsNotMountPoint check failed: %v", mntErr)
			return err
		}
		if !notMnt {
			if mntErr = nfsMounter.mounter.Unmount(dir); mntErr != nil {
				klog.Errorf("Failed to unmount: %v", mntErr)
				return err
			}
			notMnt, mntErr := mount.IsNotMountPoint(nfsMounter.mounter, dir)
			if mntErr != nil {
				klog.Errorf("IsNotMountPoint check failed: %v", mntErr)
				return err
			}
			if !notMnt {
				// This is very odd, we don't expect it.  We'll try again next sync loop.
				klog.Errorf("%s is still mounted, despite call to unmount().  Will try again next sync loop.", dir)
				return err
			}
		}
		os.Remove(dir)
		return err
	}
	return nil
}

nfs 是作为一个单独模块运行的,与hostpath 不一样,所以说需要去

var/lib/kubelet/pods/86963ebc-aa4a-4256-98e8-7ee5c608ba9d/volumes/kubernetes.io~nfs/

下面去采集

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
登录到要设置成 NFS 服务的那个服务器上 Linux 挂载 NFS 2 设置 NFS 要共享的目录,在命令行输入 vi /etc/exports 后回车 Linux 挂载 NFS 3 进入 vi 的文件编辑窗口,按 i 键切换到编辑模式,输入你想设置的目录位置和权限,如:/var/ftp *(rw,no_root_squash) ;说明:/var/ftp 为共享的目录位置; *(rw,no_root_squash) *为任意IP都可以访问 rw为可进行读写访问 no_root_squash 为拥有这个目录所有者的权限。 Linux 挂载 NFS 4 确认输入正确后,按 Esc 键,回到 vi 的命令模式,依次按 : (冒号) wq 键后回车保存并退出编辑。 Linux 挂载 NFS Linux 挂载 NFS 5 使用 service nfs start 命令启动 NFS 服务(在对 /etc/exports 做了任何修改后都需要重启 NFS 服务,才可以使修改生效,重启命令 service nfs restart) Linux 挂载 NFS 6 至此,服务器上面的设置完成了。 7 开始使用NFS服务的客户端设置,首先还是先使用 PuTTY 登录到要使用 NFS 的电脑上。(为了方便,我都是在一台电脑上操作的) 8 建立 NFS挂载位置的目录(如果目录已经存在忽略此步骤),加入我想挂载到 /var/ftp 这个目录下,那么我先用命令 mkdir /nfs/ftp 创建目录,之后使用 ls /var -l 命令查看 Linux 挂载 NFS 9 挂载 NFS 共享,使用 mount -t nfs -o rw 192.168.109.130:/nfs/ftp /var/ftp 命令完成挂载 10 要想每次启动机器的时候自动挂载,可使用命令 vi /etc/fstab 编辑,在最后面加上 192.168.109.130:/var/ftp /nfs/ftp nfs defaults 0 0 ,保存退出。这样在每次启动的时候就会自动挂载 192.168.109.130:/var/ftp 这个NFS 共享了

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值