![]() |
从容的排球 · elasticsearch中四种常见的相关度 ...· 1 年前 · |
![]() |
近视的菠萝 · postgresql - Postgres ...· 1 年前 · |
![]() |
喝醉的板栗 · 短视频app哪个好?十大高人气排行榜推荐! ...· 1 年前 · |
![]() |
爱吹牛的柑橘 · PrintPreviewControl ...· 1 年前 · |
![]() |
爱看书的乌冬面 · Window Trigger on ...· 2 年前 · |
容器技术 集群技术 镜像 openshift |
https://access.redhat.com/documentation/zh-cn/openshift_container_platform/4.9/html-single/images/index |
![]() |
曾经爱过的机器猫
1 年前 |
Increase visibility into IT operations to detect and resolve technical issues before they impact your business.
Learn More Go to InsightsEngage with our Red Hat Product Security team, access security updates, and ensure your environments are not exposed to any known security vulnerabilities. Product Security Center
Keep your systems secure with Red Hat's specialized responses to security vulnerabilities. View Responses
摘要
当您设置为创建和管理容器化软件时,务必要理解容器、镜像和镜像流等重要概念。镜像包含一组准备就绪可运行的软件,容器是容器镜像的一个运行实例。镜像流提供了一种方法来存储相同基本镜像的不同版本。这些不同版本通过相同镜像名称的不同标签(tag)来表示。
OpenShift Container Platform 中的容器基于 OCI 或 Docker 格式的容器
镜像
创建。镜像是一种二进制文件,包含运行单一容器的所有要求以及描述其需求和功能的元数据。
您可以将其视为一种打包技术。容器只能访问其镜像中定义的资源,除非创建时授予容器其他访问权限。通过将同一镜像部署到跨越多个主机的多个容器内,并在它们之间进行负载平衡,OpenShift 容器平台可以为镜像中打包的服务提供冗余和横向扩展。
您可以直接使用
podman
或
Docker
CLI 构建镜像,但 OpenShift Container Platform 也提供了构建程序(builder)镜像,这有助于通过将您的代码或配置添加到现有镜像来创建新镜像。
由于应用程序会随时间发展,因此单个镜像名称实际上可以指代同一镜像的许多不同版本。每个不同的镜像都会有一个代表它的唯一哈希值(一个较长的十六进制值,如
fd44297e2ddb050ec4f…
),它通常会被缩短为一个 12 位长的值(如
fd44297e2ddb
)。
您可以
创建
,
管理
,并
使用
容器镜像。
镜像 registry 是一个可存储和提供容器镜像的内容服务器。例如:
registry.redhat.io
registry 包含一个或多个镜像存储库的集合,其中包含一个或多个标记的镜像。红帽在
registry.redhat.io
上为订阅者提供了一个 registry。OpenShift Container Platform 还可提供其内部 registry,用于管理自定义容器镜像。
镜像存储库是相关容器镜像和标识它们的标签(tag)的集合。例如,OpenShift Container Platform Jenkins 镜像位于以下存储库中:
docker.io/openshift/jenkins-2-centos7
镜像标签(tag)是应用于存储库中容器镜像的标签,用于将特定镜像与镜像流中的其他镜像区分开来。标签通常代表某种版本号。例如,这里
:v3.11.59-2
是标签:
registry.access.redhat.com/openshift3/jenkins-2-rhel7:v3.11.59-2
您可以向镜像添加其他标签。例如,可为镜像分配
:v3.11.59-2
和
:latest
标签。
OpenShift Container Platform 提供
oc tag
命令,该命令类似于
docker tag
命令,但是在镜像流上运行,而非直接在镜像上运行。
镜像 ID 是 SHA(安全哈希算法)代码,可用于拉取(pull)镜像。SHA 镜像 ID 不能更改。特定 SHA 标识符会始终引用完全相同的容器镜像内容。例如:
docker.io/openshift/jenkins-2-centos7@sha256:ab312bda324
OpenShift Container Platform 应用程序的基本单元称为容器。
Linux 容器技术
是一种轻量型机制,用于隔离运行中的进程,使它们只能跟指定的资源交互。容器一词被定义为容器镜像的特定运行或暂停实例。
在一个单一的主机上可以包括多个容器来运行多个不同的应用程序实例,且相互间无法看到其他应用程序的进程、文件、网络等。通常情况下,每个容器提供一项服务,常称为微服务,如 Web 服务器或数据库,但容器也可用于任意工作负载。
多年来,Linux 内核一直在整合容器技术的能力。Docker 项目为主机上的 Linux 容器开发了便捷的管理接口。最近,
开放容器计划
还为容器格式和容器运行时制定了开放标准。OpenShift Container Platform 和 Kubernetes 增加了在多主机安装之间编排 OCI 和 Docker 格式容器的功能。
尽管在使用 OpenShift Container Platorm 时,您不会直接与容器运行时交互,但了解这些容器运行时的功能和术语非常重要,有助于了解它们在 OpenShift Container Platform 中的作用以及您的应用程序在容器内的运作方式。
podman
等工具可用于替代
docker
命令行工具来直接运行和管理容器。利用
podman
,您可独立于 OpenShift Container Platform 对容器进行试验。
镜像流及其关联标签提供了一个用于从 OpenShift Container Platform 中引用容器镜像的抽象集。镜像流及其标签用于查看可用镜像,确保您使用所需的特定镜像,即使存储库中的镜像发生变化也是如此。 镜像流不含实际镜像数据,它提供了相关镜像的一个单独的虚拟视图,类似于镜像存储库。 您可配置构建(Build)和部署(Depolyment)来监测一个镜像流的通知。当新的镜像被添加时,执行相应的构建或部署。 例如,如果部署正在使用某个镜像并且创建了该镜像的新版本,则会自动执行部署以获取镜像的新版本。 但是,如果部署或构建所用的 imagestreamtag 没有更新,则即使更新了容器镜像 registry 中的容器镜像,构建或部署仍会继续使用之前的,已知良好的镜像。 源镜像可存储在以下任一位置: OpenShift Container Platform 集成的 registry。 一个外部 registry,如 registry.redhat.io 或 quay.io。 OpenShift Container Platform 集群中的其他镜像流。 当您定义引用镜像流标签的对象时,如构建或部署配置,您将指向镜像流标签而不是存储库。您在构建或部署应用程序时,OpenShift Container Platform 会使用 imagestreamtag 来查询 Docker 存储库,以找到相应的镜像 ID,并使用正确的镜像。 镜像流元数据会与其他集群信息一起存储在 etcd 实例中。 使用镜像流有以下几大优势: 您可以添加标签、回滚标签和快速处理镜像,而无需使用命令行重新执行 push 操作。 当一个新镜像被推送(push)到 registry 时,可触发构建和部署。另外,OpenShift Container Platform 还针对 Kubernetes 对象等其他资源提供了通用触发器。 您可以为定期重新导入标记标签。如果源镜像已更改,则这个更改会被发现并反应在镜像流中。取决于构建或部署的具体配置,这可能会触发构建和/或部署流程。 您可使用细粒度访问控制来共享镜像,快速向整个团队分发镜像。 如果源更改,imagestreamtag 仍将指向已知良好的镜像版本,以确保您的应用程序不会意外中断。 您可以通过镜像流对象的权限配置安全性,以了解谁可以查看和使用镜像。 在集群级别上缺少读取或列出镜像权限的用户仍可使用镜像流来检索项目中标记的镜像。 您可以 管理 镜像流,将镜像流 与 Kubernetes 资源一起使用 ,并 触发镜像流更新 。
镜像流标签是指向镜像流中镜像的命名指针。镜像流标签与容器镜像标签类似。
镜像流镜像允许您从标记了特定容器镜像的特定镜像流中检索该镜像。镜像流镜像是一个 API 资源对象,用于收集一些有关特定镜像 SHA 标识符的元数据。
镜像流触发器(imagestream trigger)会在镜像流标签更改时引发特定操作。例如,导入可导致标签值变化。当有部署、构建或其他资源监听这些信息时,就会启动触发器。
在初始启动时,Operator 会创建默认样本资源来初始化镜像流和模板的创建过程。您可以使用 Cluster Samples Operator 管理存储在
openshift
命名空间中的示例镜像流和模板。
作为集群管理员,您可以使用 Cluster Samples Operator:
配置 Operator
。
使用带有备用 registry 的 Operator
。
模板是要复制的对象的定义。您可以使用 模板 来构建和部署配置。
作为开发人员,您可以使用 Ruby on Rails 进行: 编写应用程序: 设置数据库。 创建欢迎页面。 为 OpenShift Container Platform 配置应用程序。 将您的应用存储在 Git 中。 在 OpenShift Container Platform 中部署应用程序: 创建数据库服务。 创建 frontend 服务。 为应用程序创建路由。
Cluster Samples Operator 运行在
openshift
命名空间中,用于安装和更新基于 Red Hat Enterprise Linux (RHEL) 的 OpenShift Container Platform 镜像流和 OpenShift Container Platform 模板。
在安装过程中,Operator 会为自己创建默认配置对象,然后创建示例镜像流和模板,包括快速启动模板。
为便于从需要凭证的其他 registry 中导入镜像流,集群管理员可在镜像导入所需的
openshift
命名空间中创建包含 Docker
config.json
文件内容的额外 secret。
Cluster Samples Operator 配置是一个集群范围的资源,其部署包含在
openshift-cluster-samples-operator
命名空间中。
Cluster Samples Operator 的镜像包含关联的 OpenShift Container Platform 发行版本的镜像流和模板定义。在创建或更新每个示例时,Cluster Sample Operator 包含一个注解(annotation),用于注明 OpenShift Container Platform 的版本。Operator 使用此注解来确保每个示例与发行版本匹配。清单(inventory)以外的示例会与跳过的示例一样被忽略。对任何由 Operator 管理的示例进行的修改(版本注解被修改或删除),都将会被自动恢复。
Jenkins 镜像实际上自安装后便已是镜像有效负载的一部分,并直接标记(tag)到镜像流中。
Cluster Samples Operator 配置资源包含一个终结器(finalizer),它会在删除时清除以下内容:
Operator 管理的镜像流。
Operator 管理的模板。
Operator 生成的配置资源。
集群状态资源。
删除样本资源后,Samples Operator 会使用默认配置重新创建资源。
Cluster Samples Operator 默认配置为
Managed
,或者配置了全局代理。在
Managed
状态下,Cluster Samples Operator 会主动管理其资源并保持组件的活跃状态,以便从 registry 中拉取示例镜像流和镜像,并确保安装了必要的示例模板。
在某些情况下,Cluster Samples Operator 会将自身引导为
Removed
,包括:
如果 Cluster Samples Operator 在全新安装后初始启动时三分钟后仍无法访问
registry.redhat.io
。
如果 Cluster Samples Operator 检测到它位于 IPv6 网络中。
镜像控制器配置参数
阻止使用默认镜像 registry 或通过
samplesRegistry
设置
指定的镜像 registry 创建镜像流。
对于 OpenShift Container Platform,默认的镜像 registry 是
registry.redhat.io
。
但是,如果 Cluster Samples Operator 检测到它位于 IPv6 网络上,并且配置了 OpenShift Container Platform 全局代理,则 IPv6 检查会替换所有检查。因此,Cluster Samples Operator 会将自身引导为
Removed
。
registry.redhat.io
目前不支持 IPv6 安装。Cluster Samples Operator 从
registry.redhat.io
中提取大多数示例镜像流和镜像。
当无法访问
registry.redhat.io
时,当网络限制已存在时,Boostrapping 为
Removed
有助于进行受限网络安装。当网络访问受限时,Bootstrapping 为
Removed
可让集群管理员有更多时间决定是否需要样本,因为 Cluster Samples Operator 不提交当管理状态设置为
Removed
时示例镜像流导入失败的警报。当 Cluster Samples Operator 启动为
Managed
并尝试安装示例镜像流时,它会在安装失败时在初始安装后 2 小时启动警报。
当一个集群旨在作为受限网络或断开连接而安装的集群,如果其存在网络连接,则 Cluster Samples Operator 会从
registry.redhat.io
中安装内容,因为可以访问它。如果您希望 Cluster Samples Operator 仍然引导为
Removed
,以便延迟样本安装,直到您决定了需要安装哪个样本、如何设置镜像等,请按照有关使用带有备用 registry 以及自定义节点(均在 additional resources 部分中链接)的 Samples Operator 的说明来覆盖 Cluster Samples Operator 默认配置,以便最初以
Removed
的形式出现。
您必须将以下额外 YAML 文件放到由
openshift-install create manifest
创建的
openshift
目录中:
带有
managementState: Removed
的 Cluster Samples Operator YAML 文件示例:
apiVersion: samples.operator.openshift.io/v1 kind: Config metadata: name: cluster spec: architectures: - x86_64 managementState: Removed
在创建或更新示例镜像流后,Cluster Samples Operator 会监控每个镜像流标签镜像导入的进度。
如果导入失败,Cluster Samples Operator 会通过镜像流镜像导入 API(与
oc import-image
命令使用的 API 相同)。重新尝试导入大约每 15 分钟进行一次,直到导入成功,或者 Cluster Samples Operator 的配置已更改为镜像流被添加到
skippedImagestreams
列表中,或者管理状态变为
Removed
。
如果在安装过程中删除了 Cluster Samples Operator,您可以
使用带有备用 registry 的 Cluster Samples Operator
,以便导入内容,然后将 Cluster Samples Operator 设置为
Managed
来获取示例。
确保在带有初始网络访问权限的受限网络安装中将 Cluster Samples Operator 引导为
Removed
,直到您决定需要哪些样本,请按照
自定义节点
来覆盖 Cluster Samples Operator 默认配置,最初以
Removed
的形式出现。
要在断开连接的环境中托管示例,请按照
使用带有备用 registry 的 Cluster Samples Operator
的说明进行操作。
在安装过程中,OpenShift Container Platform 在
openshift-cluster-samples-operator
命名空间中创建一个名为
imagestreamtag-to-image
的配置映射。
imagestreamtag-to-image
配置映射包含每个镜像流标签的条目(填充镜像)。
配置映射中 data 字段中每个条目的键格式为
<image_stream_name>_<image_stream_tag_name>
。
在断开连接的 OpenShift Container Platform 安装过程中,Cluster Samples Operator 的状态被设置为
Removed
。如果您将其改为
Managed
,它会安装示例。
在网络限制或断开连接的环境中使用示例可能需要通过网络访问服务。某些示例服务包括:Github、Maven Central、npm、RubyGems、PyPi 等。这可能需要执行额外的步骤,让集群 samples operator 对象能够访问它们所需的服务。
您可以使用此配置映射作为导入镜像流所需的镜像的引用。
在 Cluster Samples Operator 被设置为
Removed
时,您可以创建镜像的 registry,或决定您要使用哪些现有镜像 registry。
使用新的配置映射作为指南来镜像您要镜像的 registry 的示例。
将没有镜像的任何镜像流添加到 Cluster Samples Operator 配置对象的
skippedImagestreams
列表中。
将 Cluster Samples Operator 配置对象的
samplesRegistry
设置为已镜像的 registry。
然后,将 Cluster Samples Operator 设置为
Managed
来安装您已镜像的镜像流。
如需了解详细信息,请参阅
使用带有备用或镜像 registry 的 Cluster Samples Operator 镜像流
。
示例资源提供以下配置字段:
参数 | 描述 | |||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2.2.1. 配置限制
当 Cluster Samples Operator 开始支持多个架构时,则在处于
2.2.2. Conditions示例资源将在所处状态下保持以下条件:
2.3. 访问 Cluster Samples Operator 配置
您可以使用提供的参数编辑文件来配置 Cluster Samples Operator。
安装 OpenShift CLI (
$ oc edit configs.samples.operator.openshift.io/cluster -o yaml Cluster Samples Operator 配置类似以下示例: apiVersion: samples.operator.openshift.io/v1 kind: Config ... 2.4. 从 Cluster Samples Operator 中删除已弃用的镜像流标签
Cluster Samples Operator 在镜像流中保留已弃用的镜像流标签,因为用户可能有使用已弃用的镜像流标签的部署。
您可以使用
$ oc tag -d <image_stream_name:tag> 第 3 章 使用带有备用 registry 的 Cluster Samples Operator您可以通过创建镜像 registry 来将 Cluster Samples Operator 与备用 registry 搭配使用。 您必须可以访问互联网来获取所需的容器镜像。在这一流程中,您要将镜像 registry 放在可访问您的网络以及互联网的镜像(mirror)主机上。 3.1. 关于镜像 registry
您可以镜像 OpenShift Container Platform 安装所需的镜像,以及容器镜像 registry 的后续产品更新,如 Red Hat Quay、JFrog Artifactory、Sonatype Nexus Repository 或 Harbor。如果您无法访问大型容器 registry,可以使用
mirror registry for Red Hat OpenShift
,它是包括在 OpenShift Container Platform 订阅中的一个小型容器 registry。
您可以使用支持
Docker v2-2
的任何容器 registry,如 Red Hat Quay,
mirror registry for Red Hat OpenShift
, Artifactory, Sonatype Nexus Repository, 或 Harbor。无论您所选 registry 是什么,都会将互联网上红帽托管站点的内容镜像到隔离的镜像 registry 相同。镜像内容后,您要将每个集群配置为从镜像 registry 中检索此内容。
OpenShift Container Platform 集群的内部 registry 不能用作目标 registry,因为它不支持没有标签的推送(在镜像过程中需要这个功能)。
如果选择的容器 registry 不是
mirror registry for Red Hat OpenShift
,则需要集群中置备的每台机器都可以访问它。如果 registry 无法访问,安装、更新或常规操作(如工作负载重新定位)可能会失败。因此,您必须以高度可用的方式运行镜像 registry,镜像 registry 至少必须与 OpenShift Container Platform 集群的生产环境可用性相匹配。
使用 OpenShift Container Platform 镜像填充镜像 registry 时,可以遵循以下两种情况。如果您的主机可以同时访问互联网和您的镜像 registry,而不能访问您的集群节点,您可以直接从该机器中镜像该内容。这个过程被称为
连接的镜像(mirror)
。如果没有这样的主机,则必须将该镜像文件镜像到文件系统中,然后将该主机或者可移动介质放入受限环境中。这个过程被称为
断开连接的镜像
。
对于已镜像的 registry,若要查看拉取镜像的来源,您必须查看
3.1.1. 准备镜像主机在创建镜像 registry 前,您必须准备镜像(mirror)主机。 3.1.2. 通过下载二进制文件安装 OpenShift CLI
您可以安装 OpenShift CLI(
在 Linux 上安装 OpenShift CLI
您可以按照以下流程在 Linux 上安装 OpenShift CLI(
$ tar xvf <file>
将
$ echo $PATH
安装 OpenShift CLI 后,可以使用
$ oc <command> 在 Windows 上安装 OpenShift CLI
您可以按照以下流程在 Windows 上安装 OpenShift CLI(
C:\> path
安装 OpenShift CLI 后,可以使用
C:\> oc <command> 在 macOS 上安装 OpenShift CLI
您可以按照以下流程在 macOS 上安装 OpenShift CLI(
$ echo $PATH
安装 OpenShift CLI 后,可以使用
$ oc <command> 3.2. 配置允许对容器镜像进行镜像的凭证
创建容器镜像 registry 凭证文件,允许将红帽的镜像镜像到您的镜像环境中。
您已将镜像 registry 配置为在断开连接的环境中使用。
在安装主机上完成以下步骤:
从 Red Hat OpenShift Cluster Manager 下载
$ echo -n '<user_name>:<password>' | base64 -w0 1
BGVtbYk3ZHAtqXs=
3.3. 镜像 OpenShift Container Platform 镜像存储库
镜像要在集群安装或升级过程中使用的 OpenShift Container Platform 镜像仓库。
您的镜像主机可访问互联网。
您已将镜像 registry 配置为在受限网络中使用,并可访问您配置的证书和凭证。
您已从
Red Hat OpenShift Cluster Manager 下载了 pull secret
,并已修改为包含镜像存储库身份验证信息。
如果您使用没有设置 Subject Alternative Name 的自签名证书,则必须在这个过程中使用
x509: certificate relies on legacy Common Name field, use SANs or temporarily enable Common Name matching with GODEBUG=x509ignoreCN=0 流程 在镜像主机上完成以下步骤: 查看 OpenShift Container Platform 下载页面 ,以确定您要安装的 OpenShift Container Platform 版本,并决定 Repository Tags 页中的相应标签(tag)。 设置所需的环境变量: 导出发行版本信息: $ OCP_RELEASE=<release_version>
对于
$ LOCAL_REGISTRY='<local_registry_host_name>:<local_registry_host_port>'
对于
$ LOCAL_REPOSITORY='<local_repository_name>'
对于
$ PRODUCT_REPO='openshift-release-dev'
对于生产环境版本,必须指定
$ LOCAL_SECRET_JSON='<path_to_pull_secret>'
对于
$ RELEASE_NAME="ocp-release"
对于生产环境版本,您必须指定
$ ARCHITECTURE=<server_architecture> 导出托管镜像的目录的路径: $ REMOVABLE_MEDIA_PATH=<path> 1
imageContentSources
部分。您的镜像信息与您的镜像存储库相对应,您必须在安装过程中将
imageContentSources
部分添加到
install-config.yaml
文件中。
将镜像镜像到可移动介质的目录中:
$ oc adm release mirror -a ${LOCAL_SECRET_JSON} --to-dir=${REMOVABLE_MEDIA_PATH}/mirror quay.io/${PRODUCT_REPO}/${RELEASE_NAME}:${OCP_RELEASE}-${ARCHITECTURE} 将介质上传到受限网络环境中,并将镜像上传到本地容器 registry。 $ oc image mirror -a ${LOCAL_SECRET_JSON} --from-dir=${REMOVABLE_MEDIA_PATH}/mirror "file://openshift/release:${OCP_RELEASE}*" ${LOCAL_REGISTRY}/${LOCAL_REPOSITORY} 1
如果本地容器 registry 连接到镜像主机,请运行以下命令: $ oc adm release extract -a ${LOCAL_SECRET_JSON} --command=openshift-install "${LOCAL_REGISTRY}/${LOCAL_REPOSITORY}:${OCP_RELEASE}-${ARCHITECTURE}"
重要
要确保将正确的镜像用于您选择的 OpenShift Container Platform 版本,您必须从镜像内容中提取安装程序。
您必须在有活跃互联网连接的机器上执行这个步骤。
如果您位于断开连接的环境中,请使用
$ openshift-install 3.4. 使用带有备用或镜像 registry 的 Cluster Samples Operator 镜像流
$ oc get is <imagestream> -n openshift -o json | jq .spec.tags[].from.name | grep registry.redhat.io 镜像 registry.redhat.io 中与您需要的任何镜像流关联的镜像 $ oc image mirror registry.redhat.io/rhscl/ruby-25-rhel7:latest ${MIRROR_ADDR}/rhscl/ruby-25-rhel7:latest 创建集群的镜像配置对象: $ oc create configmap registry-config --from-file=${MIRROR_ADDR_HOSTNAME}..5000=$path/ca.crt -n openshift-config 在集群的镜像配置对象中,为镜像添加所需的可信 CA: $ oc patch image.config.openshift.io/cluster --patch '{"spec":{"additionalTrustedCA":{"name":"registry-config"}}}' --type=merge
更新 Cluster Samples Operator 配置对象中的
$ oc edit configs.samples.operator.openshift.io -n openshift-cluster-samples-operator
注意
这是必要的,因为镜像流导入过程在此刻不使用镜像(mirro)或搜索机制。
将所有未镜像的镜像流添加到 Cluster Samples Operator 配置对象的
3.4.1. 协助镜像的 Cluster Samples Operator
在安装过程中,OpenShift Container Platform 在
第 4 章 创建镜像了解如何基于就绪可用的预构建镜像来创建自己的容器镜像。这一过程包括学习编写镜像、定义镜像元数据、测试镜像以及使用自定义构建程序工作流创建可用于 OpenShift Container Platform 的镜像的最佳实践。创建完镜像后,您可将其推送到内部 registry。 4.1. 学习容器最佳实践在创建 OpenShift Container Platform 上运行的容器镜像时,镜像创建者需考虑诸多最佳实践,以确保为镜像的使用者提供良好体验。镜像原则上不可变且应按原样使用,所以请遵守以下准则,以确保您的镜像高度可用,且易于在 OpenShift Container Platform 上使用。 4.1.1. 常规容器镜像准则无论容器镜像是否在 OpenShift Container Platform 中使用,在创建容器镜像时都需要遵循以下指导信息。 重复利用镜像
您的镜像尽可能使用
在标签内维持兼任性
在为自己的镜像添加标签时,建议尽量在标签内保持向后兼容性。例如,如果您提供名为
避免多进程
不要在同一容器中启动多个服务,如数据库和
在 wrapper 脚本中使用
|
变量 | 描述 |
---|---|
LABEL io.openshift.tags mongodb,mongodb24,nosql
io.openshift.wants
指定标签列表,如果您未向容器镜像附带给定标签,则生成工具和 UI 可使用该列表提供相关建议。例如,如果容器镜像需要
mysql
和
redis
,而您未向容器镜像附带
redis
标签,则 UI 可能会建议您将此镜像添加到部署中。
LABEL io.openshift.wants mongodb,redis
io.k8s.description
该标签可用于向容器镜像用户提供有关此镜像所提供服务或功能的更详细信息。然后 UI 可结合使用此描述与容器镜像名称,为最终用户提供更人性化的信息。
LABEL io.k8s.description The MySQL 5.5 Server with master-slave replication support
io.openshift.non-scalable
镜像可以使用此变量来表明它不支持扩展。UI 然后将这一信息传达给该镜像的用户。不可扩展表示
replicas
值的最初设置不应超过
1
。
LABEL io.openshift.non-scalable true
io.openshift.min-memory
和
io.openshift.min-cpu
该标签建议容器镜像正常工作可能需要的资源量。UI 可能会警告用户:部署此容器镜像可能会超出其用户配额。值必须与 Kubernetes 数量兼容。
LABEL io.openshift.min-memory 16Gi LABEL io.openshift.min-cpu 4 |
Source-to-Image (S2I) 是一种框架,它可以轻松地将应用程序源代码作为输入,生成可运行编译的应用程序的新镜像。 使用 S2I 构建可重复生成的容器镜像的主要优点是便于开发人员使用。作为构建器镜像作者,您必须理解两个基本概念,构建过程和 S2I 脚本,才能让您的镜像提供最佳的 S2I 性能。
构建过程包含以下三个基本元素,这些元素组合成最终的容器镜像:
Source-to-image(S2I)脚本
构建器镜像
S2I 生成带有构建器镜像的 Dockerfile 作为第一个
FROM
指令。然后,由 S2I 生成的 Dockerfile 会被传递给 Buildah。
您可以使用任何编程语言编写 S2I 脚本,只要脚本可在构建器镜像中执行。S2I 支持多种提供
assemble
/
run
/
save-artifacts
脚本的选项。每次构建时按以下顺序检查所有这些位置:
构建配置中指定的脚本。
在应用程序源
.s2i/bin
目录中找到的脚本。
在默认镜像 URL 中找到的带有
io.openshift.s2i.scripts-url
标签的脚本。
镜像中指定的
io.openshift.s2i.scripts-url
标签和构建配置中指定的脚本都可以采用以下形式之一:
image:///path_to_scripts_dir
:镜像中 S2I 脚本所处目录的绝对路径
file:///path_to_scripts_dir
:主机上 S2I 脚本所处目录的相对或绝对路径
http(s)://path_to_scripts_dir
:S2I 脚本所处目录的 URL
表 4.2. S2I 脚本
脚本 | 描述 | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
#!/bin/bash # restore build artifacts if [ "$(ls /tmp/s2i/artifacts/ 2>/dev/null)" ]; then mv /tmp/s2i/artifacts/* $HOME/. # move the application source mv /tmp/s2i/src $HOME/src # build application artifacts pushd ${HOME} make all # install the artifacts make install
#!/bin/bash # run the application /opt/application/run.sh
#!/bin/bash pushd ${HOME} if [ -d deps ]; then # all deps contents to tar stream tar cf - deps
#!/bin/bash # inform the user how to use the image cat <<EOF This is a S2I sample builder image, to use it, install https://github.com/openshift/source-to-image S2I 镜像创建教程 4.4. 关于测试 source-to-image 镜像
作为 Source-to-Image (S2I) 构建程序镜像创建者,您可在本地测试 S2I 镜像,并使用 OpenShift Container Platform 构建系统进行自动化测试和连续集成。
为了成功运行 S2I 构建,S2I 需要存在
4.4.1. 了解测试要求
4.4.2. 生成脚本和工具
S2I 工具随附功能强大的生成工具,可加快新 S2I 镜像的创建过程。
$ s2i create _<image name>_ _<destination directory>_
所生成的
4.4.3. 本地测试
本地运行 S2I 镜像测试的最简单方法是使用所生成的
IMAGE_NAME = openshift/ruby-20-centos7 CONTAINER_ENGINE := $(shell command -v podman 2> /dev/null | echo docker) build: ${CONTAINER_ENGINE} build -t $(IMAGE_NAME) . .PHONY: test test: ${CONTAINER_ENGINE} build -t $(IMAGE_NAME)-candidate . IMAGE_NAME=$(IMAGE_NAME)-candidate test/run 4.4.4. 基本测试工作流
$ podman build -t <builder_image_name> 如果使用 Docker,请运行以下命令: $ docker build -t <builder_image_name>
以下步骤描述测试 S2I 镜像构建程序的默认工作流:
验证
$ podman run <builder_image_name> . 如果使用 Docker,请运行以下命令: $ docker run <builder_image_name> . 构建镜像: $ s2i build file:///path-to-sample-app _<BUILDER_IMAGE_NAME>_ _<OUTPUT_APPLICATION_IMAGE_NAME>_
save-artifacts
,请再次运行第 2 步,验证保存和恢复工件是否正常工作。
运行容器:
如果使用 Podman,请运行以下命令:
$ podman run <output_application_image_name> 如果使用 Docker,请运行以下命令: $ docker run <output_application_image_name>
4.4.5. 使用 OpenShift Container Platform 构建镜像
有了
第 5 章 管理镜像5.1. 管理镜像概述您可通过 OpenShift Container Platform 与镜像交互并设置镜像流,具体取决于镜像 registry 所处的位置、这些 registry 的任何身份验证要求以及您预期的构建和部署性能。 5.1.1. 镜像概述镜像流包含由标签识别的任意数量的容器镜像。提供相关镜像的单一虚拟视图,类似于容器镜存储库。 通过监控镜像流,构建和部署可在添加或修改新镜像时收到通知,并通过分别执行构建或部署来作出反应。 5.2. 标记镜像以下章节提供在容器镜像上下文中使用镜像标签(tag)的概述和说明,以便使用 OpenShift Container Platform 镜像流及其标签。 5.2.1. 镜像标签
镜像标签(tag)是应用于存储库中容器镜像的标签,用于将特定镜像与镜像流中的其他镜像区分开来。标签通常代表某种版本号。例如,这里
registry.access.redhat.com/openshift3/jenkins-2-rhel7:v3.11.59-2
您可以向镜像添加其他标签。例如,可为镜像分配
5.2.2. 镜像标签惯例
镜像随时间不断发展,其标签反应了这一点。一般来说,镜像标签会始终指向最新镜像构建。
如果标签名称中嵌入太多信息,如
表 5.1. 镜像标签命名惯例
|
![]() |
近视的菠萝 · postgresql - Postgres error on insert - ERROR: invalid byte sequence for encoding "UTF8": 0x00 - Sta 1 年前 |
![]() |
喝醉的板栗 · 短视频app哪个好?十大高人气排行榜推荐! - 知乎 1 年前 |