容器操作系统-Container Linux

Posted rtoax

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了容器操作系统-Container Linux相关的知识,希望对你有一定的参考价值。

容器操作系统

荣涛
2021年11月8日

文档修改日志

日期修改内容修改人备注
2021年11月8日创建荣涛
2021年11月9日添加荣涛Fedora CoreOS

1. 引言

1.1. 什么是容器 Linux?

基于容器的基础设施的引入是一种范式转变。容器优化的 Linux 发行版是云原生基础架构的最佳基础。

  • 最小操作系统映像仅包含运行容器所需的工具。没有包管理器,没有配置漂移。
  • 在不可变的文件系统上交付操作系统消除了一整类安全漏洞。
  • 自动原子更新意味着您可以获得最新的安全更新和开源技术。

Container Linux 提供了现代容器原生操作系统的几个关键部分,最显着的是一个完全不可变的、容器优化的 Linux 主机,它包括自动的“空中”更新,以更轻松地保持大型部署的最新状态。

1.2. 容器Linux

产品厂商备注支持架构构建工具
Bottlerocket亚马逊web服务器
FlatcarCisco等配置Ignitionaarch64
CoreOS红帽红帽2018年收购
Fedora CoreOS红帽CoreOS继任者aarch64,x86_64ostree,ignition
OpenShift红帽企业K8s平台

2. CoreOS

CoreOS 成立于 2013 年,其使命是提高互联网的安全性和可靠性。该团队构建了云原生开源软件和产品,使公司能够在任何环境中安全可靠地运行其应用程序。

红帽在 2018 年初收购了 CoreOS, 随后分享了产品和项目集成的计划。

CoreOS 开发了开源工具,这些工具是现代分布式系统的基本构建块。开源组件继续被自由使用和开发,以支持云原生分布式系统。作为 Red Hat 的一部分,诸如etcd(分布式键值存储)、Container Linux(以容器为中心的轻量级操作系统)、Kubernetes(容器编排器)、Prometheus(容器监控系统)等项目继续由 CoreOS 团队开发,世界上最大的开源软件公司。

CoreOS是一款OS,但它是一款面向云的轻量级OS。CoreOS是以Linux系统为基础,为了建设数据中心的需要,而从Linux底层进行了内核裁减。CoreOS提供了一系列的机制和工具来保证CoreOS组建的云环境是安全,可靠和最新的。CoreOS设计之初就定位于可以提供一种动态缩放和管理集群的能力,可以方便管理类似google 这种庞大数据中心的集群。

CoreOS的基础以及CoreOS与其他Linux系统的区别

  • CoreOS是以安全性、一致性、可靠性为设计目标的一款操作系统。
  • CoreOS采用主动/被动双分区方案来实现自动更新。自动更新以单一体为单位,而不是通过逐包替换的方式进行。
  • CoreOS使用Linux容器在更高抽象层次上管理服务,而没有采用通过yum或者APT工具做包的安装管理。单一的服务代码以及它所有的依赖会被打包到一个容器中,打包进入容器后就可以运行在单一的CoreOS机器,也可以运行在CoreOS集群中。
  • Linux容器提供与完整虚拟机相似的功能。但是容器聚焦在应用程序层次,而不是整个虚拟主机层次。因为容器不能运行独立的Linux内核,不需要一个中间件层,因此它几乎没有性能上的开销。低性能开销的特质意味着可以部署更少的机器、使用配置低的机器就可以完成虚拟机同样的功能,从而降低成本。

CoreOS几乎可以运行在包括Vagrant, Amazon EC2, QEMU/KVM, VMware, OpenStack的任何平台,甚至在未安装任何软件的裸机硬件环境都可以。

因为CoreOS的设计初衷只为运行应用容器,因此需要安装很少系统级别的依赖包即可。相比典型的Linux服务器,这就意味着CoreOS需要很低耗的CPU和高效的RAM即可满足需求。

2.1. Systemd概述

Systemd并不是CoreOS特有的服务。本质上说Systemd是没有依附于任何一个Linux发行版的独立项目,但是很多发行版Linux都在青睐Systemd管理服务的优势,所以CoreOS选择了它。Fleet是管理CoreOS和部署app的工具。有了Fleet,你就可以把整个CoreOS集群当做一台节点来处理。

Systemd是CoreOS用于初始化系统的工具。它能提供许多强大的功能,例如启动服务、停止服务、监控和重启进程等。在CoreOS中,Systemd既可以用来管理Docker容器的生命周期,又可以管理不同系统的启动任务。

要想进一步学习Systemd,必须要深入查看一系列关于Systemd的博客。不过,在此我们只讨论需要CoreOS上的Docker容器上操作所需要的一些Systemd知识。

更多关于Systemd的内容,可以参考官方文档

2.1.1. Unit文件

Systemd为每一个守护进程记录一个初始化结构文件,我们称之为Unit文件。Systemd系统取代了传统系统为每一个守护进程初始化一次脚本的做法。这样的记录会有很多不同种类的Unit文件,但是我们只会关注可以运行Docker容器的服务类型Unit文件。

下面列表,按照顺序是一个服务Unit(service unit)生命周期内的过程,以及作用描述:

  • ExecStartPre: ExecStart之前运行的命令(指定在启动执行 ExecStart 的命令前的准备工作,可以有多个,如前面第二个例子中所示,所有命令会按照文件中书写的顺序依次被执行。编者注)
  • ExecStart:运行这个Unit最主要的命令(这个参数是几乎每个 .service 文件都会有的,指定服务启动的主要命令,在每个配置文件中只能使用一次。编者注)
  • ExecStartPost:ExecStart 运行完成后要执行的命令(指定在启动执行 ExecStart 的命令后的收尾工作,也可以有多个。编者注)
  • ExecReload:当使用 systemctl重新加载服务所需执行的命令
  • ExecStop:通过执行systemctl 确认Unit服务失败或者停止时执行的命令
  • ExecStopPost:ExecStop 执行完成之后所执行的命令(指定在 ExecStop 命令执行后的收尾工作,也可以有多个。编者注)
  • RestartSec:在重启服务之前系统休眠时间(很有效的防止失败服务少于100ms重启一次)(如果服务需要被重启,这个参数的值为服务被重启前的等待秒数。编者注)

下面我们演示创建一个Hello_world.service的简单Unit文件:

[Unit]
Description=HelloWorldApp
After=docker.service
Requires=docker.service

[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker rm busybox1
ExecStartPre=/usr/bin/docker pull busybox
ExecStart=/usr/bin/docker run --rm --name busybox1 busybox /bin/sh -c "while true; do echo Hello World; sleep 1; done"
ExecStop=/usr/bin/docker stop busybox1

[Install]
WantedBy=multi-user.target

3. Fedora CoreOS

Fedora CoreOS 是一个自动更新的最小操作系统,用于安全、大规模地运行容器化工作负载。它目前可在多个平台上使用。

正如我们之前宣布的那样Fedora CoreOS是 CoreOS Container Linux 的正式继任者。Fedora CoreOS 是一个新的 Fedora 版本,专为安全、大规模地运行容器化工作负载而构建。它将Container Linux 的配​​置工具和自动更新模型与Atomic Host 的封装技术、OCI 支持和SELinux 安全性相结合。有关 Fedora CoreOS 理念、目标和设计的更多信息,请参阅预览版公告Fedora CoreOS 文档

我们希望您尝试 Fedora CoreOS 并参与其中。您可以向问题跟踪器报告错误和缺失的功能,并在Fedora Discourse、开发邮件列表、Freenode 上的 #fedora-coreos 或我们的每周 IRC 会议中讨论 Fedora CoreOS 。

JSON文件

https://groups.google.com/g/coreos-user/c/zgqkG88DS3U/m/PFP9yrKbAgAJ?pli=1

bgil...@redhat.com
20 Jun 2018, 22:09:02
to CoreOS User
Hi all,

As we’ve previously announced, we’ve been working on plans for a successor to Container Linux under Red Hat stewardship.  We’re now pleased to announce the official launch of the Fedora CoreOS project under the Fedora banner.

Fedora CoreOS will maintain our commitment to the user experience that Container Linux provides today: an automatically updating, minimal, monolithic, container-focused operating system, designed for clusters but also operable standalone, optimized for Kubernetes but also great without it.  It’s also an unparalleled opportunity to revisit some of CoreOS’s early technical decisions, apply lessons we’ve learned over the years, and integrate some of the innovative technology developed by Red Hat and the Fedora community.

We don’t yet know all the details of how Fedora CoreOS will look.  Some of the technologies will change (no one at CoreOS will miss update_engine) and some will not (Ignition!).  We’ll be able to build on the packaging and maintenance work done every day in the Fedora project, while pursuing our own packaging choices and processes where that makes sense.  We’re also excited to join the Fedora community, whose long experience building developer and user communities at scale provides a wonderful opportunity to grow the CoreOS ecosystem.

Meanwhile, we will continue to maintain Container Linux into 2020, and for at least a year after Fedora CoreOS is available.  In-place upgrades from Container Linux to Fedora CoreOS will not be possible, but we will provide tooling and documentation to make the transition as painless as we can.  Existing Container Linux communication channels -- the issue tracker and the coreos-user and coreos-dev mailing lists -- will continue unchanged for the lifetime of Container Linux.

Finally, Fedora CoreOS will serve as the community upstream of Red Hat CoreOS, Red Hat’s new immutable, container-centric operating system bringing automated operations to the Red Hat OpenShift product line.

We’re excited to invite everyone in the Container Linux community to join the new Fedora CoreOS communication channels -- the cor...@lists.fedoraproject.org mailing list, the Discourse discussion board, and #fedora-coreos on freenode -- and help us design and build Fedora CoreOS.

--Benjamin Gilbert

3.1. Package List

https://getfedora.org/en/coreos?stream=stable

Release Date: Nov 02, 2021

ignition2.12.0 kernel5.14.11 moby-engine20.10.8 podman3.4.0 rpm-ostree2021.11 systemd248.7
398 packages (collapse); 2 added (expand); 27 upgraded (expand);

3.2. OSTree

https://ostreedev.github.io/ostree/

Fedora 衍生品使用 rpm-ostree(如下所述); 使用 OSTree 有 3 个变体:

4. Bottlerocket

网址:https://aws.amazon.com/bottlerocket/
源码:https://github.com/bottlerocket-os/bottlerocket

Bottlerocket 是一种基于 Linux 的开源操作系统,由 Amazon Web Services 专门为运行容器而构建Bottlerocket 仅包含运行容器所需的基本软件,并确保底层软件始终安全。使用 Bottlerocket,客户可以通过在升级或更换节点时一致地应用配置设置来减少维护开销并自动化他们的工作流程。

Bottlerocket 现在一般可以免费用作 Amazon Elastic Compute Cloud (EC2) 的 Amazon Machine Image (AMI)。

4.1. 优势

  • 增加容器应用的正常运行时间:Bottlerocket 的更新只需一步即可应用,并且可以在必要时回滚,从而降低错误率并提高容器应用程序的正常运行时间。相比之下,通用操作系统通常是逐包更新的。

  • 开源开发模型支持自定义构建:Bottlerocket 的开放式开发模型使客户和合作伙伴能够生成自定义构建,例如,支持其首选编排器的构建。这些自定义构建中的更改可以回馈以包含到 Bottlerocket 开源项目中。

  • 降低管理开销和运营成本:可以使用 Amazon EKS 等容器编排服务自动更新 Bottlerocket,从而降低管理开销并降低运营成本。

  • 提高安全性和资源利用率:Bottlerocket 仅包含运行容器的必要软件,与通用操作系统相比,可提高资源利用率并减少攻击面

  • 通过 AWS 集成优化性能:AWS 提供的 Bottlerocket 构建经过优化,可在 Amazon EC2 上运行,并支持最新的 Amazon EC2 实例功能。它们还内置了与 AWS 服务的集成,用于容器编排、注册表和可观察性。

  • 3年支持:在宣布全面上市后,AWS 提供的 Bottlerocket 版本提供了三年的支持。AWS 支持计划涵盖这些 AWS 提供的构建,无需增加成本。此外,Bottlerocket GitHub 上提供了社区支持。

5. OP-TEE

开放便携式可信执行环境:隔离性,占用空间小,便携性

OP-TEE 是实现Arm TrustZone 技术的开源可信执行环境 (TEE) 。OP-TEE 已被移植到许多 Arm设备和平台。最初它是由 ST-Ericsson 开发的专有 TEE 解决方案,后来转移到 STMicroelectronics。

早在 2013 年,linaro 就成立了安全工作组 (SWG):SWG 最初的主要任务之一是开展开源 TEE 项目。在与各种 TEE 供应商交谈后,Linaro 开始与 STMicroelectronics 合作,将他们的 TEE 解决方案从专有 TEE 转变为开源 TEE。经过几个月的重构和重写代码的主要部分,使其与 BSD 2-Clause 许可证兼容,它于 2014 年夏天左右向公众发布。

2015 年,OP-TEE 项目的所有权从 STMicroelectronics 转移到 Linaro。2015 年至 2019 年期间,Linaro 是该项目的所有者,维护工作与 Linaro 的成员一起共享。2019 年末,Linaro 将 OP-TEE 项目转移到TrustedFirmware.org项目,该项目从那时起一直是管理机构。Linaro 仍然负责安排发布、处理安全事件等。但是在开发和功能方面,有许多公司为该项目做出了贡献。

6. Flatcar Container Linux

Flatcar Container Linux 是一个容器优化的操作系统,它提供了一个最小的操作系统映像,其中只包含运行容器所需的工具。操作系统通过一个不可变的文件系统提供,并包括自动原子更新。

Flatcar Container Linux 运行在大多数云提供商、虚拟化平台和裸机服务器上。

Flatcar Container Linux 是 CoreOS Container Linux 的替代品。如果您是正在寻找替代品的 CoreOS Container Linux 用户,请查看我们的从 CoreOS Container Linux 迁移的指南 ,或者您可以 直接从 CoreOS Container Linux进行 更新

6.1. 裸金属安装

可以通过不同方式在裸机上安装 Flatcar:使用 ISO 映像、从 PXE 或 iPXE 引导,甚至在现有 Linux 系统上运行安装脚本。

6.2. 配置工具

Ignition 是在首次启动时配置 Flatcar Container Linux 的推荐方式。Ignition 使用 JSON 配置文件,建议从 Container Linux ConfigYAML 格式生成,该格式具有附加功能。该 Container 的Linux配置Transpiler一个集装箱的Linux配置转换为点火配置。

6.3. Flatcar Container Linux 启动流程

https://www.flatcar-linux.org/docs/latest/provisioning/ignition/boot-process/

7. OpenShift

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6URyDhZw-1636806541305)(_v_images/20211108193719078_15815.png =1026x)]
上图来源

8. 参考链接


Copyright (C) CESTC Com.

以上是关于容器操作系统-Container Linux的主要内容,如果未能解决你的问题,请参考以下文章

Linux Container

无法启动服务 prometheus:oci 运行时错误:container_linux.go:235:启动容器进程导致“容器初始化过早退出”

Docker下载镜像并创建容器运行

Servlet容器container

CannotStartContainerError:API 错误(400):OCI 运行时创建失败:container_linux.go:348:导致启动容器进程

docker入门LXCwindows container 和 Hyper知识基础实用情况