OpenShift4 - RHCOS(译)

2020-04-20  本文已影响0人  ragpo

关于RHCOS

Red Hat Enterprise Linux CoreOS (RHCOS)代表了下一代的单用途容器操作系统技术。RHCOS是由创建Red Hat Enterprise Linux Atomic Host和CoreOS Container Linux的开发团队创建的,它将Red Hat Enterprise Linux (RHEL)的质量标准与Container Linux的自动化、远程升级特性结合在一起。

RHCOS仅作为OpenShift容器平台4.3的一个组件被支持,适用于所有的OpenShift容器平台机器。RHCOS是OpenShift容器平台控制平面或主机的唯一支持的操作系统。虽然RHCOS是所有集群机器的默认操作系统,但是您可以创建使用RHEL作为其操作系统的 compute 节点(也称为 worker 节点)。RHCOS在OpenShift容器平台上的部署方式有两种:

RHCOS的关键特性

基于RHEL: 底层操作系统主要由RHEL组件组成。支持RHEL的同样质量、安全和控制措施也支持RHCOS。例如,RHCOS软件在RPM包中,每个RHCOS系统都启动一个RHEL内核和一组由systemd init系统管理的服务。

受控不变性: 虽然它包含RHEL组件,但RHCOS的设计比默认的RHEL安装管理更严格。管理是在OpenShift容器平台集群中远程执行的。当您设置您的RHCOS机器时,您只能修改一些系统设置。这种受控制的不变性允许OpenShift容器平台在集群中存储RHCOS系统的最新状态,因此它总是能够创建额外的机器,并根据最新的RHCOS配置执行更新。

crio容器运行时:虽然RHCOS包含运行Docker所需的OCI和libcontainer格式容器的特性,但它合并了crio容器引擎,而不是Docker容器引擎。通过专注于Kubernetes平台所需的特性(如OpenShift容器平台),crio可以提供与Kubernetes不同版本的特定兼容性。与提供更大特性集的容器引擎相比,crio还提供了更小的足迹和更少的攻击面。目前,crio仅作为OpenShift容器平台集群中的容器引擎可用。

容器工具集:对于诸如构建、复制和以其他方式管理容器的任务,RHCOS使用一组兼容的容器工具替换Docker CLI工具。podman CLI工具支持许多容器运行时特性,比如运行、启动、停止、列出和删除容器和容器映像。skopeo CLI工具可以复制、验证和签署图像。您可以使用crictl CLI工具来处理来自crio容器引擎的容器和吊舱。虽然不鼓励在RHCOS中直接使用这些工具,但是可以将它们用于调试目的。

rpm-ostree升级:RHCOS提供使用rpm-ostree系统的事务升级。更新是通过容器映像交付的,并且是OpenShift容器平台更新过程的一部分。部署后,将提取、提取容器映像并将其写入磁盘,然后修改引导装载程序以引导到新版本。机器将以滚动的方式重新启动更新,以确保集群容量受到的影响最小。

通过MachineConfigOperator更新:在OpenShift容器平台中,Machine Config Operator 处理操作系统升级。与通过yum升级来升级单个包不同,rpm-ostree将操作系统的升级作为一个原子单元来交付。新的操作系统部署在升级期间进行,并在下一次重新启动时生效。如果升级出现问题,一次回滚和重新启动将使系统恢复到以前的状态。OpenShift容器平台中的RHCOS升级是在集群更新期间执行的。

对于RHCOS系统,rpm-ostree文件系统的布局具有以下特点:

选择如何配置RHCOS_1

RHCOS被设计成部署在OpenShift容器平台集群上,只需要最少的用户配置。其最基本的形式包括:

因为OpenShift容器平台中的RHCOS系统被设计为在此之后完全由OpenShift容器平台集群管理,所以不鼓励直接更改RHCOS机器。虽然可以出于调试目的对RHCOS机器集群进行有限的直接访问,但是不应该直接配置RHCOS系统。相反,如果您需要在您的OpenShift容器平台节点上添加或更改特性,请考虑通过以下方式进行更改:

下面是一些你可以在 day-1 进行的定制的例子:

为了完成这些任务,您可以扩展openshift-install过程,以包括额外的对象,如MachineConfigs。那些导致创建MachineConfigs的过程可以在集群启动后传递给Machine Config Operator。

安装程序生成的Ignition config文件包含24小时后过期的证书。您必须完成您的集群安装,并保持集群在非降级状态下运行24小时,以确保第一个证书循环已经完成。

选择如何配置RHCOS_2

针对OpenShift容器平台的RHCOS部署之间的差异取决于您是部署在安装程序提供的基础设施上,还是部署在用户提供的基础设施上:

Ignition只有在首次安装RHCOS系统时才能运行。之后,可以使用MachineConfigs提供Ignition配置。

关于Ignition

Ignition是在初始配置期间被RHCOS用来操作磁盘的实用工具。它完成常见的磁盘任务,包括分区磁盘、格式化分区、编写文件和配置用户。在第一次启动时,Ignition从安装介质或您指定的位置读取其配置,并将配置应用到机器上。

无论您是安装集群还是向集群中添加机器,Ignition总是执行OpenShift容器平台集群机器的初始配置。大多数实际的系统设置是在每台机器上进行的。对于每台机器,Ignition将获取RHCOS镜像并启动RHCOS内核。在内核命令行上的选项,识别部署类型和启用了启动的初始Ram磁盘(initramfs)的位置。

Ignition如何工作的

要使用Ignition创建机器,您需要Ignition配置文件。OpenShift容器平台安装程序创建了部署集群所需的Ignition配置文件。这些文件基于您直接或通过安装配置提供信息给install-config.yaml 文件。

Ignition配置机器的方式与cloud-init或Linux Anaconda kickstart等工具配置系统的方式类似,但有一些重要的区别:

Ignition启动顺序

在OpenShift容器平台集群中,RHCOS机器的Ignition过程包括以下几个步骤:

然后,机器就可以加入集群,不需要重新启动。

查看Ignition配置文件

要查看用于部署引导机的Ignition配置文件,请运行以下命令:

$ openshift-install create ignition-configs --dir $HOME/testconfig

在你回答了几个问题之后,bootstrap.ign, master.ign, 和worker.ign文件出现在您输入的目录中。
为了查看 bootstrap.ign文件,通过jq过滤器,以下是该文件的一个片段:

$ cat $HOME/testconfig/bootstrap.ign | jq
\\{
  "ignition": \\{
        "config": \\{},
  "storage": \\{
        "files": [
          \\{
            "filesystem": "root",
            "path": "/etc/motd",
            "user": \\{
              "name": "root"
            },
            "append": true,
            "contents": \\{
              "source": "data:text/plain;charset=utf-8;base64,VGhpcyBpcyB0aGUgYm9vdHN0cmFwIG5vZGU7IGl0IHdpbGwgYmUgZGVzdHJveWVkIHdoZW4gdGhlIG1hc3RlciBpcyBmdWxseSB1cC4KClRoZSBwcmltYXJ5IHNlcnZpY2UgaXMgImJvb3RrdWJlLnNlcnZpY2UiLiBUbyB3YXRjaCBpdHMgc3RhdHVzLCBydW4gZS5nLgoKICBqb3VybmFsY3RsIC1iIC1mIC11IGJvb3RrdWJlLnNlcnZpY2UK",

解码 bootstrap.ign文件内容。将表示该文件内容的base64编码的数据字符串通过管道传输到base64 -d命令。下面是一个例子,使用/etc/motd文件的内容从上面的输出添加到引导机:

$ echo VGhpcyBpcyB0aGUgYm9vdHN0cmFwIG5vZGU7IGl0IHdpbGwgYmUgZGVzdHJveWVkIHdoZW4gdGhlIG1hc3RlciBpcyBmdWxseSB1cC4KClRoZSBwcmltYXJ5IHNlcnZpY2UgaXMgImJvb3RrdWJlLnNlcnZpY2UiLiBUbyB3YXRjaCBpdHMgc3RhdHVzLCBydW4gZS5nLgoKICBqb3VybmFsY3RsIC1iIC1mIC11IGJvb3RrdWJlLnNlcnZpY2UK | base64 -d

This is the bootstrap machine; it will be destroyed when the master is fully up.

The primary service is "bootkube.service". To watch its status, run, e.g.:

journalctl -b -f -u bootkube.service

在master.ign 和 worker.ign 文件上重复这些命令,查看每种机器类型的Ignition配置文件的来源。对于worker.ign,您应该看到类似下面这样的一行。确定它如何从引导机获得Ignition配置:

"source": "https://api.myign.develcluster.example.com:22623/config/worker",

下面是一些你可以从bootstrap.ign文件学到:

安装后更换Ignition配置

Machine Config Pools管理节点集群及其相应的Machine Configs。Machine Configs包含集群的配置信息。列出所有已知的Machine Config Pools:

$ oc get machineconfigpools

NAME   CONFIG                                  UPDATED UPDATING DEGRADED
master master-1638c1aea398413bb918e76632f20799 False   False    False
worker worker-2feef4f8288936489a5a832ca8efe953 False   False    False

列出所有的Machine Config:

$ oc get machineconfig

NAME                                      GENERATEDBYCONTROLLER   IGNITIONVERSION   CREATED   OSIMAGEURL

00-master                                 4.0.0-0.150.0.0-dirty   2.2.0             16m
00-master-ssh                             4.0.0-0.150.0.0-dirty                     16m
00-worker                                 4.0.0-0.150.0.0-dirty   2.2.0             16m
00-worker-ssh                             4.0.0-0.150.0.0-dirty                     16m
01-master-kubelet                         4.0.0-0.150.0.0-dirty   2.2.0             16m
01-worker-kubelet                         4.0.0-0.150.0.0-dirty   2.2.0             16m
master-1638c1aea398413bb918e76632f20799   4.0.0-0.150.0.0-dirty   2.2.0             16m
worker-2feef4f8288936489a5a832ca8efe953   4.0.0-0.150.0.0-dirty   2.2.0             16m

在应用这些MachineConfigs时,Machine Config Operator 的行为与Ignition有所不同。machineconfigs按顺序读取(从00到99)。machineconfigs中的标签标识每个节点(主节点或工作节点)的类型。如果相同的文件出现在多个machineconfig文件中,则最后一个获胜。因此,例如,出现在99文件中的任何文件都将替换出现在00文件中的相同文件。输入的machineconfig对象被合并到一个“呈现的”machineconfig对象中,该对象将被operator用作目标,并且是您可以在machineconfigpool中看到的值。

要查看从一个MachineConfigs中管理哪些文件,请在一个特定的MachineConfigs中查找“Path:”。例如:

$ oc describe machineconfigs 01-worker-container-runtime | grep Path:
            Path:            /etc/containers/registries.conf
            Path:            /etc/containers/storage.conf
            Path:            /etc/crio/crio.conf

如果您想要更改其中一个文件中的设置,例如将crio.conf文件中的pids_limit更改为1500 (pids_limit = 1500),您可以创建一个新的只包含您想要更改的文件的machineconfig。

确保稍后为machineconfig指定一个名称(例如10-worker-container-runtime)。请记住,每个文件的内容都是url样式的数据。然后将新的machineconfig应用于集群。

原文链接
https://docs.openshift.com/container-platform/4.3/architecture/architecture-rhcos.html

上一篇下一篇

猜你喜欢

热点阅读