apiVersion: v1
kind: Namespace
metadata:
name: openshift-lifecycle-agent
annotations:
workload.openshift.io/allowed: management
要为单节点 OpenShift 集群的基于镜像的安装做准备,您必须完成以下任务:
使用生命周期代理创建种子镜像。
验证所有软件组件是否满足所需版本。有关更多信息,请参见“基于镜像的安装和部署的软件先决条件”。
使用生命周期代理从种子集群生成种子镜像。您可以使用 OpenShift CLI (oc
) 或 Web 控制台安装生命周期代理。
您可以使用 OpenShift CLI (oc
) 安装生命周期代理。
您已安装 OpenShift CLI (oc
)。
您已以具有 cluster-admin
权限的用户身份登录。
为生命周期代理创建一个 `Namespace` 对象 YAML 文件
apiVersion: v1
kind: Namespace
metadata:
name: openshift-lifecycle-agent
annotations:
workload.openshift.io/allowed: management
通过运行以下命令创建 `Namespace` CR
$ oc create -f <namespace_filename>.yaml
为生命周期代理创建一个 `OperatorGroup` 对象 YAML 文件
apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
name: openshift-lifecycle-agent
namespace: openshift-lifecycle-agent
spec:
targetNamespaces:
- openshift-lifecycle-agent
通过运行以下命令创建OperatorGroup
CR
$ oc create -f <operatorgroup_filename>.yaml
为生命周期代理创建Subscription
CR
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: openshift-lifecycle-agent-subscription
namespace: openshift-lifecycle-agent
spec:
channel: "stable"
name: lifecycle-agent
source: redhat-operators
sourceNamespace: openshift-marketplace
通过运行以下命令创建Subscription
CR
$ oc create -f <subscription_filename>.yaml
要验证安装是否成功,请运行以下命令检查 CSV 资源
$ oc get csv -n openshift-lifecycle-agent
NAME DISPLAY VERSION REPLACES PHASE
lifecycle-agent.v4.17.0 Openshift Lifecycle Agent 4.17.0 Succeeded
运行以下命令验证生命周期代理是否已启动并运行
$ oc get deploy -n openshift-lifecycle-agent
NAME READY UP-TO-DATE AVAILABLE AGE
lifecycle-agent-controller-manager 1/1 1 1 14s
您可以使用 OpenShift Container Platform Web 控制台安装生命周期代理。
您已以具有 cluster-admin
权限的用户身份登录。
在 OpenShift Container Platform Web 控制台中,导航到**Operators** → **OperatorHub**。
从可用 Operators 列表中搜索**生命周期代理**,然后单击**Install**。
在**Install Operator**页面上的**A specific namespace on the cluster**下,选择**openshift-lifecycle-agent**。
单击**Install**。
确认安装成功
单击**Operators** → **Installed Operators**。
确保生命周期代理列在**openshift-lifecycle-agent**项目中,且**Status**为**InstallSucceeded**。
在安装过程中,Operator 可能会显示**Failed**状态。如果安装稍后以**InstallSucceeded**消息成功,您可以忽略**Failed**消息。 |
如果 Operator 未成功安装
单击**Operators** → **Installed Operators**,并检查**Operator Subscriptions**和**Install Plans**选项卡中**Status**下的任何故障或错误。
单击**Workloads** → **Pods**,并检查**openshift-lifecycle-agent**项目中 Pod 的日志。
您必须在安装时完成此过程。 |
将MachineConfig
应用于种子集群以创建单独的分区,并在预安装过程中将使用的两个ostree
stateroots 之间共享/var/lib/containers
分区。
应用MachineConfig
以创建单独的分区
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
labels:
machineconfiguration.openshift.io/role: master
name: 98-var-lib-containers-partitioned
spec:
config:
ignition:
version: 3.2.0
storage:
disks:
- device: /dev/disk/by-path/pci-<root_disk> (1)
partitions:
- label: var-lib-containers
startMiB: <start_of_partition> (2)
sizeMiB: <partition_size> (3)
filesystems:
- device: /dev/disk/by-partlabel/var-lib-containers
format: xfs
mountOptions:
- defaults
- prjquota
path: /var/lib/containers
wipeFilesystem: true
systemd:
units:
- contents: |-
# Generated by Butane
[Unit]
Before=local-fs.target
Requires=systemd-fsck@dev-disk-by\x2dpartlabel-var\x2dlib\x2dcontainers.service
After=systemd-fsck@dev-disk-by\x2dpartlabel-var\x2dlib\x2dcontainers.service
[Mount]
Where=/var/lib/containers
What=/dev/disk/by-partlabel/var-lib-containers
Type=xfs
Options=defaults,prjquota
[Install]
RequiredBy=local-fs.target
enabled: true
name: var-lib-containers.mount
1 | 指定根磁盘。 |
2 | 以 MiB 为单位指定分区的起始位置。如果值太小,安装将失败。 |
3 | 为分区指定至少 500 GB 的最小大小,以确保预缓存映像有足够的磁盘空间。如果值太小,安装后的部署将失败。 |
您可以从具有与您的裸机主机相同的硬件以及类似的目标集群配置的单节点 OpenShift 集群创建种子映像。但是,从种子集群生成的种子映像不能包含任何特定于集群的配置。
下表列出了您必须和必须不包含在种子映像中的组件、资源和配置
集群配置 | 包含在种子映像中 |
---|---|
性能配置文件 |
是 |
目标集群的 |
是 |
IP 版本 [1] |
是 |
一组 Day 2 Operators,包括生命周期代理和 OADP Operator |
是 |
断开连接的注册表配置 [2] |
是 |
有效的代理配置 [3] |
是 |
FIPS 配置 |
是 |
主磁盘上用于容器存储的专用分区,其大小与目标集群匹配 |
是 |
本地卷
|
否 |
此版本不支持双栈网络。
如果种子集群安装在断开连接的环境中,则目标集群也必须安装在断开连接的环境中。
种子集群和目标集群上的代理配置不必匹配。
下表列出了使用 RAN DU 配置文件时,您必须和必须不包含在种子映像中的组件、资源和配置
资源 | 包含在种子映像中 |
---|---|
作为 Day 0 安装一部分应用的所有额外清单 |
是 |
所有 Day 2 Operator 订阅 |
是 |
|
是 |
|
是 |
|
是 |
|
是 |
|
是 |
|
如果在 |
|
否 |
|
否 |
以下资源和配置列表可以作为额外清单应用,也可以使用 RHACM 策略应用
ClusterLogForwarder.yaml
ReduceMonitoringFootprint.yaml
SriovFecClusterConfig.yaml
PtpOperatorConfigForEvent.yaml
DefaultCatsrc.yaml
PtpConfig.yaml
SriovNetwork.yaml
如果您使用的是 GitOps ZTP,请使用 RHACM 策略启用这些资源,以确保可以在整个集群生命周期中应用配置更改。 |
使用生命周期代理从托管集群生成种子映像。Operator 检查所需的系统配置,在生成种子映像之前执行任何必要的系统清理,并启动映像生成。种子映像生成包括以下任务
停止集群 Operators
准备种子映像配置
生成并将种子映像推送到SeedGenerator
CR 中指定的映像存储库
恢复集群 Operators
使种子集群证书过期
为种子集群生成新证书
恢复和更新种子集群上的SeedGenerator
CR
种子集群上未安装 RHACM 和 Kubernetes Operator 的多集群引擎。
您已在种子集群上配置了共享容器目录。
您已在种子集群上安装了 OADP Operator 和生命周期代理的最低版本。
确保在种子集群上未配置持久卷。
如果使用本地存储 Operator,请确保种子集群上不存在LocalVolume
CR。
如果使用 LVM 存储,请确保种子集群上不存在LVMCluster
CR。
如果使用 OADP,请确保种子集群上不存在DataProtectionApplication
CR。
将托管集群与中心分离,以删除种子集群中任何 RHACM 特定的资源,这些资源不应包含在种子镜像中。
运行以下命令手动分离种子集群:
$ oc delete managedcluster sno-worker-example
等待托管集群被移除。集群移除后,创建正确的SeedGenerator
CR。生命周期代理会清理 RHACM 工件。
如果您使用的是 GitOps ZTP,请从kustomization.yaml
中移除种子集群的SiteConfig
CR 来分离您的集群。
如果您拥有一个kustomization.yaml
文件,其中引用了多个SiteConfig
CR,请从kustomization.yaml
中移除种子集群的SiteConfig
CR。
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
generators:
#- example-seed-sno1.yaml
- example-target-sno2.yaml
- example-target-sno3.yaml
如果您拥有一个kustomization.yaml
文件,其中引用了一个SiteConfig
CR,请从kustomization.yaml
中移除种子集群的SiteConfig
CR,并添加generators: {}
这一行。
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
generators: {}
在您的 Git 仓库中提交kustomization.yaml
的更改,并将更改推送到您的仓库。
ArgoCD 管道会检测到这些更改并移除托管集群。
创建Secret
对象,以便您可以将种子镜像推送到您的注册表。
运行以下命令创建身份验证文件:
$ MY_USER=myuserid
$ AUTHFILE=/tmp/my-auth.json
$ podman login --authfile ${AUTHFILE} -u ${MY_USER} quay.io/${MY_USER}
$ base64 -w 0 ${AUTHFILE} ; echo
将输出复制到openshift-lifecycle-agent
命名空间中名为seedgen
的Secret
YAML 文件中的seedAuth
字段。
apiVersion: v1
kind: Secret
metadata:
name: seedgen (1)
namespace: openshift-lifecycle-agent
type: Opaque
data:
seedAuth: <encoded_AUTHFILE> (2)
1 | Secret 资源必须具有name: seedgen 和namespace: openshift-lifecycle-agent 字段。 |
2 | 指定一个 base64 编码的 authfile,用于向注册表写入访问权限,以便推送生成的种子镜像。 |
运行以下命令应用Secret
:
$ oc apply -f secretseedgenerator.yaml
创建SeedGenerator
CR。
apiVersion: lca.openshift.io/v1
kind: SeedGenerator
metadata:
name: seedimage (1)
spec:
seedImage: <seed_container_image> (2)
1 | SeedGenerator CR 的名称必须为seedimage 。 |
2 | 指定容器镜像 URL,例如quay.io/example/seed-container-image:<tag> 。建议使用<seed_cluster_name>:<ocp_version> 格式。 |
运行以下命令生成种子镜像:
$ oc apply -f seedgenerator.yaml
在生命周期代理生成种子镜像期间,集群会重启并失去 API 功能。应用 |
如果您想生成更多种子镜像,则必须使用您想要从中生成种子镜像的版本来配置新的种子集群。
集群恢复并可用后,您可以运行以下命令检查SeedGenerator
CR 的状态:
$ oc get seedgenerator -o yaml
status:
conditions:
- lastTransitionTime: "2024-02-13T21:24:26Z"
message: Seed Generation completed
observedGeneration: 1
reason: Completed
status: "False"
type: SeedGenInProgress
- lastTransitionTime: "2024-02-13T21:24:26Z"
message: Seed Generation completed
observedGeneration: 1
reason: Completed
status: "True"
type: SeedGenCompleted (1)
observedGeneration: 1
1 | 种子镜像生成已完成。 |