更新日志
- 2019-12-31 初稿,可能完成不了,等到来年了😂
- 2020-01-01
容器优化型操作系统?
GKE 的 Container-Optimized OS
Google 家的 GKE 中的每个节点都是使用 Container-Optimized OS 来运行工作负载,不过仅仅是针对 GCE 来进行优化的,可能在 OpenStack 或者 vSphere 上运行不起来,(瞎猜😂
Container-Optimized OS 是适用于 Compute Engine 虚拟机的操作系统映像,专为运行 Docker 容器而优化。借助 Container-Optimized OS,您可以快速、高效、安全地在 Google Cloud Platform 上启动 Docker 容器。Container-Optimized OS 由 Google 维护,基于 Chromium OS 开放源代码项目。
CoreOS Container Linux
个人认为 CoreOS 的 CoreOS Container Linux 要比 Container-Optimized OS 和 Photon OS 要更加专业,尤其是针对容器来讲, CoreOS 就是专门用来运行容器的,它没有像 yum 或 apt 这样的包管理器来安装软件,在 CoreOS 中你不需要安装软件,因为所有的应用程序都要使用 docker 来打包。
额外提一句,CoreOS 是一个团队,现如今已经被 Red Hat® 收购了,而 Red Hat® 已经被 IBM 收购了,按照关系来讲而 CoreOS 应该是 IBM 的孙子吧🙃。而 CoreOS Container Linux 仅仅是他们维护项目的其中一个,CoreOS 开源的项目还有:
- etcd:
- Clair:
- dex:
- Prometheus:
- flannel:
在 Linux 世界里有大量的发行版可以做为服务器系统使用, 但是这些系统大多部署复杂, 更新系统更是困难重重. 这些都是 CoreOS 试图解决的问题。
特点如下
- 最小化的操作系统: 占用内存很少,比典型的服务器版本 Linux 少占 40%的内存。
- 易于升级: CoreOS 采用双系统分区(主动分区/被动分区)设计而不是采用传统的通过升级包来升级系统,这使得每次升级更加快速,可靠和易于回滚。
- 集成 Docker: CoreOS 默认集成 Docker 并作了很好的支持和优化,省去用户安装,配置,优化 Docker 的时间,极大地方便了用户。
- 易于集群化: CoreOS 本身提供了大型 Docker 容器集群的整体解决方案,通过内置的 fleet 工具在多台系统中部署容器并进行集群化管理。同时通过提供 Discovery Service,便于动态部署和管理集群,解决方案比较成熟。
- 自动化的大规模部署: CoreOS 自身提供的解决方案能够自动地大规模批量部署并操作系统,极大地减少用户工作量。
- 使用 systemd 做为系统服务管理工具,性能比较好,systemd 有现代化的日志功能,同时采用 socket 式与 D-Bus 总线式激活服务.
Photon OS
官方宣传册
PPT 做的不错呦😂
剽窃一段 VMware 官方的文档介绍:
Project Photon OS™ is an open source, minimal Linux container host that is optimized for cloud-native applications, cloud platforms, and VMware infrastructure. Photon OS 3.0 introduces ARM64 support, installer improvements and updated packages. We invite partners, customers, and community members to collaborate on using Photon OS to run high-performance virtual machines and containerized applications.
- Optimized for VMware vSphere®: The Linux kernel is tuned for performance when Photon OS runs on vSphere.
- Support for containers: Photon OS includes the Docker daemon and works with container orchestration frameworks, such as Mesos and Kubernetes.
- Efficient lifecycle management: Photon OS is easy to manage, patch, and update.
- Security hardened: The kernel and other aspects of the operating system are built with an emphasis on security.
For more information, see the datasheet.
Track our progress in earning the Linux Foundation’s Core Infrastructure Initiative’s Best Practices Badge.
可以看出 Photon OS™ 是针对 VMware vSphere® 虚拟化平台进行内核优化的容器专用操作系统,就和 CoreOS 一样。十分适合专门用来运行容器,当作 Kubernetes 集群中的工作负载来使用。
RancherOS
剽窃一段官方的介绍:
RancherOS is the smallest, easiest way to run Docker in production. Every process in RancherOS is a container managed by Docker. This includes system services such as
udev
andsyslog
. Because it only includes the services necessary to run Docker, RancherOS is significantly smaller than most traditional operating systems. By removing unnecessary libraries and services, requirements for security patches and other maintenance are also reduced. This is possible because, with Docker, users typically package all necessary libraries into their containers.Another way in which RancherOS is designed specifically for running Docker is that it always runs the latest version of Docker. This allows users to take advantage of the latest Docker capabilities and bug fixes.
Like other minimalist Linux distributions, RancherOS boots incredibly quickly. Starting Docker containers is nearly instant, similar to starting any other process. This speed is ideal for organizations adopting microservices and autoscaling.
Docker is an open-source platform designed for developers, system admins, and DevOps. It is used to build, ship, and run containers, using a simple and powerful command line interface (CLI). To get started with Docker, please visit the Docker user guide.
RancherOS 是 Rancher 团队所维护的开源项目,也是对标 CoreOS 一样,专门用来运行容器,并且可以运行在生产环境(至少官方做了这么样的承诺,咱也没在生产用过,不好说。在 RancherOS 中所有的进程(包括系统所有的服务,比如 udev 和 syslog)都是用 docker 来管理,这一点要比 CoreOS 更加激进一些,而 CoreOS 还是使用传统 Linux 发行版中的 systemd 来管理系统中的服务。通过移除传统 Linux 发行版中不必要的服务和库来最小化系统,使他专注单一的功能,即运行 docker 容器。
Everything in RancherOS is a Docker container. We accomplish this by launching two instances of Docker. One is what we call System Docker and is the first process on the system. All other system services, like
ntpd
,syslog
, andconsole
, are running in Docker containers. System Docker replaces traditional init systems likesystemd
and is used to launch additional system services.System Docker runs a special container called Docker, which is another Docker daemon responsible for managing all of the user’s containers. Any containers that you launch as a user from the console will run inside this Docker. This creates isolation from the System Docker containers and ensures that normal user commands don’t impact system services.
We created this separation not only for the security benefits, but also to make sure that commands like
docker rm -f $(docker ps -qa)
don’t delete the entire OS.
Everything in RancherOS is a Docker container.
感觉这个要比 CoreOS 更加容器化,甚至使用 docker 取代了 systemd 来管理系统的各种服务。系统启动后运行两个 docker 服务进程,一个是系统 docker ,在此之上在运行系统服务容器,和用户层面的 docker 。不过看一下下面的这张图你就会明白。总的来讲 RancherOS 是使用 docker 来管理整个系统的服务的,包括用户层面的 docker 。
安装体验
咱的虚拟化平台是 VMware vSphere ,因为硬件服务器大多数都是 Dell 的,而 Dell 是 VMware 母公司,对于我司这种传统企业来讲使用 VMware vSphere 这种用户 UI 友好的虚拟化无疑是最好的选择,哈哈😂。其他虚拟化平台比如 OpenStack 安装步骤会有所不同。
Container-Optimized OS
因为仅仅是针对 GCE 进行优化的系统,传统的虚拟化比如 KVM 、 ESXi 可能用不了。另外还需要拿 Chromium OS 的源码来编译镜像,没有现成的 ISO 或者 OVA 虚拟机模板可用,咱就不折腾了。毕竟硬件资源有限,现场编译一个 Chromium OS 也需要十几个小时😥
Photon OS
可以现成编译一个 ISO 镜像,也可以使用官方已经编译好的 ISO 镜像或者 OVA 虚拟机模板。不过也支持常见的公有云,比如 Amazon AMI 、Google GCE Image、Azure VHD。甚至还有 Raspberry Pi3 Image 树莓派3😂
官方文档
官方的安装文档中都给出了各种环境的安装方式,选择自己的环境按照文档一步一步来就行,不过在此注意以下几点。
安装镜像
通用的方案,适用于各种环境,无论是虚拟机还是物理机,由于咱使用的是 VMware vSphere 虚拟化,咱就使用 OVA 格式,因为后者对 vSphere 进行了优化。对于 VMware 用户来讲最好使用 OVA 格式来进行安装。
Pre-installed minimal environment, customized for VMware hypervisor environments. These customizations include a highly sanitized and optimized kernel to give improved boot and runtime performance for containers and Linux applications. Since an OVA is a complete virtual machine definition, we’ve made available a Photon OS OVA that has virtual hardware version 11; this will allow for compatibility with several versions of VMware platforms or allow for the latest and greatest virtual hardware enhancements.
根据官方文档所描述的 OVA 虚拟机模板是针对 VMware hypervisor 虚拟化环境进行优化定制的。
安装
下载好 OVA 虚拟机模板后,登录到 ESXi 或者 vCenter 中直接使用 OVA 创建虚拟机模板即可,对于 VMware® Workstation 1x Pro
可以直接将 OVA 导入成为虚拟机来运行。
1. 导入 OVA 虚拟机模板
2.添加 OVA 虚拟机模板
3. 选择存储
4. 同意许可协议
5.部署选项
- 选择好网络
- 磁盘置备的方式:精简就是使用到的时候再对磁盘进行制令。厚置备就是创建虚拟机的时候对磁盘进行置零,性能会好一些。
6. 即将完成
系统启动
初始用户名是 root
,密码是 changeme
,输入完密码之后会强制要求你更改密码,在输入一次 changeme
之后输入两次修改的密码即可。
登录到系统之后使用 ip addr
命令查看由默认的 DHCP 获取到的方式来查看 IP,然后编辑 sshd_config 配置文件允许 root 登录。不得不说 ESXi 的 Web 控制台实在是太难用了,还是 ssh 上去使用吧。
vi /etc/ssh/sshd_config
把PermitRootLogin
配置项修改为yes
即可- 重启 sshd 服务
systemctl restart sshd
内核
1 | Linux 4.19.79-1.ph3-esx #1-photon SMP Tue Oct 22 23:53:27 UTC 2019 x86_64 GNU/Linux |
目前的内核版本是 4.19.79 ,比 CentOS 7 系那种五年前的 3.18 内核高到不知道哪里去了。不过个人认为,对于容器虚拟化这种依赖于内核特性的技术来讲还是要选择高一点的版本比较好。像 CentOS 那种五年前的 3.18 版本,那时候容器所依赖的很多内核特性在这些版本上还不够成熟。从使用来讲,或外的公有云像 GKE 、AKS、AKE 等都是使用的 4.14 内核版本以上。
4.19 版本有个小问题,就是如果 kube-proxy 使用 IPVS 的话,需要开启相应的内核模块,主要依赖的内核模块有以下
1 | modprobe -- ip_vs |
在 4.19 版本之后 nf_conntrack_ipv4 内核模块替换成了 nf_conntrack ,参看 coreos/bugs#2518
资源占用情况
内存
- 系统初始化启动之后内存仅仅使用了 45Mi
1 | root@photon-machine [ ~ ]# free -h |
- 启动 docker 进程之后的占用情况,也仅仅 109Mi
1 | root@photon-machine [ ~ ]# free -h |
磁盘
使用 OVA 虚拟机模板启动后的虚拟机,磁盘仅仅占用了 515MB ,确实是相当轻量化,这还是包含了 docker。
1 | root@photon-machine [ ~ ]# df -h |
负载
进程和服务
1 | ● photon-machine |
包管理工具
Photon OS 默认的包管理工具是 tdnf ,不过也支持 yum ,两者使用方式有细微的差别,使用的也是相同的软件包源,而且对于国内用户来讲,软件包源在国外服务器上(https://dl.bintray.com/vmware/),速度感人,肉眼可见 KB/s 级别的速度。你懂的,操他奶奶的 GFW,尼玛死了😡,搞网络封锁耽误这人搬砖。安装速度慢得一批,单单下载 50 MB 的软件包就下不下来,不得不用上我那台透明代理的旁路网关。
1 | root@photon-OS [ ~ ]# tdnf upgrade |
- 56.05M / 58776868B 大小的文件,下载了一上午都没搞完……气的我想掀桌子、砸键盘、摔鼠标😑
不过可以根据官方的编译文档,把整个软件包源编译出来 ,放在本地使用,然后添加本的 yum 源码即可。
docker 容器引擎
1 | root@photon-machine [ ~ ]# docker info |
使用体验
总体来讲,除了安装软件速度极慢之外,使用起来和普通的 Linux 发行版无多大差别,系统资源占用比传统的 Linux 发行版要低的多。即便是运行了 docker 进程后系统内存也仅仅占用 100 Mb 左右,而磁盘占用才 500MB 算是比较轻量化的。至于性能方面,目前我还是找不到可以测试对比的方案。
较传统的 Linux 发行版,精简了大量不必要的服务和软件,甚至连 tar 命令都没有……。如果把它当作 kubenetes 工作负载 Node 节点来使用,需要注意的是,kube-proxy 依赖的一些工具并没有安装上。我使用 kubeadm 将该节点加入到集群当中的时候就提示缺少以下几个工具: ipset socat ethtool ebtables
,这些对于 IPVS 都是需要的。最好使用 tdnf 一并安装上,并且开启相应的 IPVS 内核模块。
1 | tdnf install ipset socat ethtool ebtables tar -y |
虽然经过了 3 个版本的更新迭代,但 Photon OS 用于生产环境还需要进行稳定性测试,它不如 CoreOS 那样已经在大规模集群中得到的实践,目前用 Photon OS 的企业我目前还未见到过。而 CoreOS
“作为 Linux 以及开源软件的支持者,我们相信与 CoreOS 这样的开源社区创新先锋合作是非常重要的。我们希望通过这样的合作来为云平台用户带来更多、更灵活的选择。” 微软 Azure 的首席技术官 Mark Russinovich 提到, “CoreOS Linux 与高性能、大规模的微软云相结合,无疑将会促进各种应用服务的创新、以及全球团队的协作。”
“我们已经在上千台物理机上成功部署并运行了 CoreOS Linux。无论从操作系统的安装、升级,还是从容器的管理和应用部署上,她给我们带来了前所未有的体验!对于光音网络这种飞速发展的互联网公司来说,CoreOS 为我们平台的建设提供了有力的技术保障!在使用 CoreOS 的这两年中,我们不再去担心操作系统、Docker 以及 Kubernetes 的兼容性、版本升级以及稳定性,这使得我们可以更专注于应用、业务层上的管理和研发。” 光音网络技术负责人王鹏说,“我们的平台不仅可以跑在自己的物理机上,而且还可以轻松地部署到 AWS 及阿里云上,CoreOS 在这方面功不可没。我们现在很高兴地得知 CoreOS 将强势登陆中国市场,我们对于更好的技术支持和服务无比期待!”
此处引用 CoreOS 官网博客
CoreOS 的稳定性以及生产实践已经相当成熟了,那么接下来就介绍 CoreOS 的使用体验。
CoreOS Container Linux
CoreOS 使用用来创建一套大规模的集群环境,单独使用的意义并不大。而且对于我司的 VMware vSphere 并没有进行优化。所以就按照裸金属部署的方式来安装体验。
官方文档
Cloud Providers
适用于公有云
Bare Metal
适用于物理机
- Using Matchbox
- Booting with iPXE
- Booting with PXE
- Installing to Disk
- Booting from ISO
- Root filesystem placement
Community Platforms
社区提供支持的
These platforms and providers offer support and documentation for running Container Linux.
安装镜像 OVA
下载下来 OVA 虚拟机模板 OVA
安装
和 Photon OS 安装步骤一样,在 ESXi 上导入 OVA 虚拟机模板即可,不过需要在最后一步配置好 OS ,包括主机名、配置文件数配置文件 url、加密的配置文件等等,根据自身需求配好即可。可以参照官方配置文件的文档 。这一步是必须要做的,不然没有 ssh 公钥和密码你是无法登录到系统中的。
注意,官方给了两种配置文件合适,一个是 yaml 一个是 json ,不过在这里要使用
1 | { |
password_hash
可以通过 openssl 命令来生成,把生成的一整串内容填写到上面,包括后面那个点.
1 | ╭─@debian ~ |
ssh_authorized_keys
通过 ssh-keygen 生成,生成的公钥填写在上面。
配置完成之后就把整个内容复制粘贴到第二个框框 CoreOS config data
里
其他设置
系统启动
可能是 coreos config 配置文件没有配好,而导致启动后输入设置的密码提示错误😥,僵硬,只能通过修改 grub 启动参数来跳过了。
- 1.打开 CoreOS 虚拟机电源,并打开控制台。
- 2.当 Boot Loader 提示出现的时候,按下 e 键来编辑 GRUB 菜单。选择第一个 coreos default 编辑。
- 3.添加
coreos.autologin
作为启动参数,并 Ctrl-x 或 F10 重启。这将使控制台跳过登录提示并直接进入用户 core 的 shell。 - 启动进入系统之后输入
sudo passwd
来修改 root 密码。然后切换到 root 用户下passwd core
修改 core 这个用户的密码。修改之后就可以通过 ssh 登录啦😂,比 Photon OS 要折腾一番呀。不过啊,使用 OVA 部署最好结合 could-init 来设置虚拟机的 ssh 密钥,网络,主机名等参数。
资源占用情况
内存
1 | core@localhost ~ $ free -h |
磁盘
CoreOS 的磁盘分区和 Photon OS 略有不同
1 | core@localhost ~ $ df -h |
内核以及发行版信息
1 | Linux localhost 4.19.86-coreos #1 SMP Mon Dec 2 20:13:38 -00 2019 x86_64 Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz GenuineIntel GNU/Linux |
docker 容器引擎
1 | core@localhost ~ $ docker info |
负载
进程和服务
1 | ● localhost |
包管理工具
没得😂,你没看错,确实如此,在 CoreOS 上没有你可以用的包管理器,不像 PhotonOS 那样有个 tdnf/yum 让你爽一把😂。在 CoreOS 一切皆容器。可以看一下 stackexchange.com
这个答案😂:
To do this on a CoreOS box, following the hints from the guide here:
- Boot up the CoreOS box and connect as the
core
user- Run the
/bin/toolbox
command to enter the stock Fedora container.- Install any software you need. To install nano in this case, it would be as simple as doing a
dnf -y install nano
(dnf has replaced yum)- Use nano to edit files. “But wait – I’m in a container!” Don’t worry – the host’s file system is mounted at
/media/root
when inside the container. So just save a sample text file at/media/root/home/core/test.txt
, thenexit
the container, and finally go list the files in/home/core
. Notice your test.txt file?If any part of this is too cryptic or confusing, please ask follow up questions. :-)
官方推荐使用 coreos/toolbox 来安装所需要的软件,这个工具以后再详细讲解一下吧。
使用体验
安装过程要出于安全考虑比 Photon OS 多于个步骤来登录到系统,目前我还没有找到启动的时候添加 ssh 密钥的办法。总的来讲,再 CoreOS 里一切皆容器运行所需要的服务,这种里面要先进的多。下面的 RancherOS 更是将一切皆容器贯彻到底,甚至将 systemd 取代掉,使用 docker 来管理系统服务。
RancherOS
目前 RancherOS 的版本是 v1.5.5
1 | Linux 4.14.138 |
官方文档
Cloud 云平台
Bare Metal & Virtual Servers 裸金属
安装镜像
RancherOS 将各个平台的安装镜像都放在了 GitHub release 页面上。对于 VMware 用户就使用 rancheros-vmware.iso 这个镜像即可。没得 OVA 虚拟机模板只能手动搓一个啦。下载完成之后将这个镜像上传到 vSphere 的数据存储中,按照创建常规虚拟机的方式来创建虚拟机。
安装
使用 ISO 启动之后进入得是一个 liveCD 型得系统,并没有安装虚拟机得磁盘当中,我们需要将 RancherOS 安装到磁盘上。提前准备好 cloud-init 的配置文件,只需要执行 ros install -c cloud-config.yml -d /dev/sda
命令就行啦。-d 参数后面跟着安装到的磁盘。
不过需要像 CoreOS 那样准备给一个 cloud-config.yml
配置文件,将我们得 ssh 公钥和用户密码填写到里面,不过 cloud-config
能配置得选项非常多,在此就不赘述了,等抽空专门写一篇博客来讲讲 cloud-init 的使用。(又挖坑😂,不知何时能填上🙃
1 | [root@rancher rancher]# ros install -c cloud-config.yml -d /dev/sda |
内核以及发行版信息
1 | [root@rancher rancher]# uname -a |
docker 容器引擎
在 RancherOS 中有两套 docker ,一套是用来容器化运行系统服务的,包括用户空间的 docker ,而另一套 docker 就是用户空间的 docker
1 | [root@rancher rancher]# docker info |
rancher 引擎
1 | [root@rancher rancher]# du -sh /var/lib/rancher/engine/* |
资源占用
负载
- 可以看出 RancherOS 运行着大量的
system-docker-containerd-shim
这是因为它将系服务也都容器化来运行,但奇怪的是无法使用 docker 命令来管理这些服务。
内存
- 初始化启动后内存使用了 1224MB😂,要比 CoreOS 和 Photon OS 加起来还多😂
1 | [rancher@rancher ~]$ free -m |
磁盘
由于系统服务是以容器的方式来运行的,而容器内的进程要访问系统文件系统的话就要将这些文件挂载到容器里去,所以会出现这么多的分区情况,不过绝大多数都是容器挂载的数据卷。
1 | [root@rancher rancher]# df -h |
文件系统
1 | [root@rancher rancher]# mount |
系统服务容器化
通过 top 命令和 ps 命令查看系统运行的进程可以发现以下几个重要的进程
top
1 | PID PPID USER STAT VSZ %VSZ %CPU COMMAND |
ros
A system service is a container that can be run in either System Docker or Docker. Rancher provides services that are already available in RancherOS by adding them to the os-services repo. Anything in the
index.yml
file from the repository for the tagged release will be an available system service when using theros service list
command.
RancherOS 移除了 systemd ,取而代之的是使用 ros 来管理系统服务。而相应的系统服务也是采用 docker 的方式来运行,包括用户空间的 docker 也是采用 docker 的方式来运行。
1 | [root@rancher rancher]# ros |
系统进程
- 可以看到,使用
ros service ps
命令来查看正在运行的系统服务,这些服务都是以容器的方式来运行的。比如用户空间里的user-docker
、syslog
、udevd
等等都是以容器的方式来运行的,而不是以传统进程服务来运行的。包括我们安装 RancherOS 到磁盘的时候starting installer container for rancher/os-installer:latest (new)
这个安装程序也是由容器的方式来运行的,把磁盘设备和cloud-init
配置文件一并挂载到容器中。
1 | [root@rancher rancher]# ros service ps |
包管理器
和 CoreOS 一样,RancherOS 也没得相应的包管理器😂,都是采用容器来运行所需的服务,使用 ros
命令来管理相应的服务。如果想要运行一个服务的话,需要使用 ros 来创建相应的容器来运行才可以。而使用 ros 来创建服务
结束
文章写的太仓促了,感觉这些容器优化行操作系统都值得玩一玩得,尤其是 RancherOS 这种将 systemc 取代掉使用 docker 来管理系统服务得牛皮技术,值得研究一哈。因为时间有限,所以就没有详细地展开来将,就等到 2020 年吧😂。祝大家 2020 年元旦快乐,新的一年里……省略千字祝福😝