云计算之k8s系列_第二回

本文围绕云计算k8s系列中的rootfs展开。介绍了容器进程文件系统视图改变需伴随挂载操作,rootfs包含操作系统文件等但不包括内核。阐述了容器的‘一致性’,还讲解了docker镜像层概念、不同系统文件系统,以及rootfs分层组成。

云计算之k8s系列——rootfs

在上一回,我们了解了namespace和cgroups,我们已经知道:容器的本质是一种特殊的进程。

问题:容器里的进程看到的文件系统又是什么样子的呢?

即使开启了mount namespace,容器进程看到的文件系统也跟宿主机完全一样。只有在“挂载”这个操作发生之后,进程的视图才会被改变。而在此之前,新创建的容器会直接继承宿主机的各个挂载点。

mount namespace根其他namespace的使用略有不同的地方:它对容器进程视图的改变,一定是伴随着挂载操作才能生效。

我们可以在容器进程启动之前重新挂载它的整个“/”。而由于mount namespace的存在,这个挂载对宿主机不可见,所以容器进程就可以在里面随便折腾了。

chroot实现shell中重新挂载根目录

]# mkdir -p test1/{bin,lib,lib64}
]# cp -v /bin/bash /bin/ls test1/bin/
]# list=`ldd /bin/ls | egrep -o '/lib.*\.[0-9]'`
]# for i in $list; do cp -v $i test1$i; done
]# list=`ldd /bin/bash | egrep -o '/lib.*\.[0-9]'`
]# for i in $list; do cp -v $i test1$i; done
]# chroot test1
]# ls # 看到的是自己创建的几个目录

docker 1.13.1 在centos7.4工作目录讲解

[root@centos7 ~]# ls /var/lib/docker/
image
    docker pull 下来的镜像的配置信息会存储在该文件夹中
containers
    容器启动后,会在该文件夹下生成相应容器ID的文件夹,同时在image/overlay2/layerdb/mounts/下也会产生同名文件夹
network
    存放local-kv.db文件信息,这里是网络的一些配置信息
    [root@centos7 files]# strings local-kv.db | less # 可以查看该宿主机的docker的网络配置信息
overlay2
    因为镜像都是分层设计的,一层一层的镜像信息都会存在该文件夹里,所以,这个文件夹内容比较多,文件夹比较大
plugins
    一些docker相关的插件存放地
swarm
    docker公司的容器编排工具,后来被集成到docker项目中,便于做容器化编排管理的
tmp
trust
volumes
    docker容器挂载的一些信息

ubuntu中联合文件系统utfs

root@ubuntu:~# tree 
    .
    ├── A
    │   ├── a
    │   └── x
    ├── B
    │   ├── b
    │   └── x
    └── C
我们可以看到,目录A和目录B中有相同的文件x,有不同的文件a和b,我们可以将A和B里的文件挂载到C文件夹中
root@ubuntu:~# mount -t aufs -o dirs=./A:./B none ./C
root@ubuntu:~# ls C
    a  b  x
这时,修改C文件夹里的内容,A对应的文件会跟着一起改变,B文件夹里的内容不会跟着改变,dirs后面的路径从上往下开始分层,下面是只读层,不会改变

rootfs

需要明确的是,rootfs只是一个操作系统所包含的文件、配置和目录,并不包括操作系统内核。在linux操作系统中,这两部分是分开的,操作系统只有在开机启动时才会加载指定版本的内核镜像。

什么是容器的“一致性”?

由于rootfs里打包的不只是应用,而是整个操作系统的文件和目录,也就意味着,应用以及它运行所需要的所有依赖,都被封装在了一起。对一个应用来说,操作系统本身才是它运行所需要的完整的“依赖库”。

这种深入到操作系统级别的运行环境一致性,保证了应用在本地开发和远端执行环境的一致性。

docker在镜像的设计中,引入了层的概念。也就是说,用户制作镜像的每一步操作,都会生成一个层,也就是一个增量rootfs

由于aufs文件系统没有集成在红帽系列操作系统中,只有在ubuntu等操作系统中才有此文件系统,在centos中,安装完docker(centos中,1.12.1有devicemapper,1.13.1之后没有见到devicemapper了,改成了overlay2),它的文件系统就被称为devicemapper文件系统,所以启动容器后,也就会分层挂载到/var/lib/docker/devicemapper/mnt目录下

当容器启动后,在对应的分层中有rootfs文件夹,该文件夹中就是完整的操作系统,容器停止后,该目录自动消失,取消挂载

rootfs分层

docker容器的rootfs分层有三部分组成:只读层(ro+wh) + init层(ro+wh) + 可读写层(rw)

wh: whiteout,当删除当前某个文件时,会创建一个隐藏文件,盖住你要删除的文件,也就是说,你删除的这个文件,在下层还是存在的,只是在当前被遮盖了而已。

init 层:以 -init结尾的层,夹在只读层和读写层之间。init是docker项目单独生成的一个内部层,专门用来存放/etc/hosts,/etc/resolv.conf等信息。

补充

docker项目支持的unionfs联合文件系统:
    AuFS:ubuntu
    devicemapper: centos
    overlayfs: ubuntu 和 centos 
    btrfs: SUSE
### 基于 Kubernetes 的云计算毕业设计选题与参考资料 以下是几个基于 Kubernetes 和云计算方向的毕业设计选题建议及其相关内容: #### 1. **基于 Kubernetes 的容器编排优化算法研究** 容器编排是 Kubernetes 的核心功能之一,涉及资源调度、负载均衡等方面。可以针对现有调度策略进行改进或提出新的优化算法。 - 调度优化的目标可能包括提高资源利用率、降低延迟等。 - 使用模拟环境测试不同场景下新算法的表现。 #### 关键技术点 - Kubernetes API[^1] - 自定义调度器开发 - Prometheus 数据采集 ```bash kubectl get nodes --watch ``` #### 2. **基于 Kubernetes 的微服务架构高可用解决方案** 高可用性是现代云原生应用的重要特性。此课题可以从多个角度展开,例如如何通过健康检查机制提升服务稳定性,或者如何利用 Redis 或其他中间件实现分布式缓存和消息队列的高可用。 - 结合 Nginx 反向代理配置动态路由规则。 - 利用 MQ 实现异步通信以增强系统弹性。 #### 技术栈 - Spring Boot 后端框架[^2] - MyBatis 数据库映射 - MySQL 存储层支持 #### 3. **私有云平台的设计与实现——基于 K8S 的 OpenStack 整合** 将 Kubernetes 与 OpenStack 进行集成,构建一个统一管理虚拟机实例和容器的工作流。重点在于解决两者之间的协调问题,比如网络模型兼容性和存储卷挂载方式的选择。 - 用户能够通过 Web UI 查看集群状态并执行基本运维操作。 - 提供 RESTful 接口方便第三方接入。 #### 主要模块 - 私有云平台上报接口 - 日志记录与告警推送体系 - 异常检测逻辑实现 #### 4. **边缘计算环境下 Kubernetes 应用部署模式探索** 边缘节点通常具有带宽受限、断连频繁等特点,因此需要特别考虑应用程序在这些条件下的表现形式。本项目旨在探讨适合边缘侧使用的轻量化镜像制作方法以及离线更新机制。 - 设计一套适用于 IoT 场景的小型化基础镜像模板。 - 测试实际环境中从中心云端同步至本地的过程耗时及成功率。 #### 工具链推荐 - DockerSlim 图像瘦身工具 - Helm Chart 包管理器 #### 5. **自动化 CI/CD 管道建设服务于 Kubernetes 平台之上** 构建持续集成 / 持续交付流水线来加速软件发布周期的同时保持质量控制水平不下降。具体来说就是把 GitLab Runner 执行单元绑定到指定命名空间内的 Pod 上完成任务分配过程。 - Jenkinsfile 描述文件编写指南 - Argo CD 应用程序声明式版本控制器简介 ```yaml apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: guestbook spec: destination: server: https://kubernetes.default.svc namespace: default source: repoURL: https://github.com/argoproj/argo-cd.git targetRevision: HEAD path: examples/guestbook project: default syncPolicy: automated: prune: true selfHeal: true ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值