19.13. 创建自定义资源以安装单个受管集群
此流程告诉您如何手动创建和部署单个受管集群。如果您要创建多个集群(可能是数百个),请使用"为多个受管集群创建 ZTP 自定义资源"中所述的 SiteConfig 方法。
先决条件
- 启用辅助安装程序服务.
确保网络连接:
- hub 中的容器必须能够访问目标裸机主机的 Baseboard Management Controller(BMC)地址。
受管集群必须能够解析并访问 hub 的 API
hostname和*.apphostname。hub API 和*.app主机名示例:console-openshift-console.apps.hub-cluster.internal.domain.com api.hub-cluster.internal.domain.comhub 必须能够解析并访问受管集群的 API 和
*.app主机名。以下是受管集群 API 和*.app主机名的示例:console-openshift-console.apps.sno-managed-cluster-1.internal.domain.com api.sno-managed-cluster-1.internal.domain.com- 可以从目标裸机主机访问的 DNS 服务器。
受管集群的目标裸机主机,至少具有以下硬件:
- 4 个 CPU 或 8 个 vCPU
- 32 GiB RAM
- root 文件系统 120 GiB 磁盘
在断开连接的环境中工作时,发行镜像需要被镜像(mirror)。使用这个命令镜像镜像:
oc adm release mirror -a <pull_secret.json> --from=quay.io/openshift-release-dev/ocp-release:{{ mirror_version_spoke_release }} --to={{ provisioner_cluster_registry }}/ocp4 --to-release-image={{ provisioner_cluster_registry }}/ocp4:{{ mirror_version_spoke_release }}您已将用于生成 spoke 集群 ISO 的 ISO 和
rootfs镜像到 HTTP 服务器,并配置用于从中拉取镜像的设置。镜像必须与
ClusterImageSet的版本匹配。若要部署 4.9.0 版本,需要将rootfs和 ISO 设置为 4.9.0。
流程
为每个需要部署的特定集群版本创建一个
ClusterImageSet。ClusterImageSet具有以下格式:apiVersion: hive.openshift.io/v1 kind: ClusterImageSet metadata: name: openshift-4.9.0-rc.01 spec: releaseImage: quay.io/openshift-release-dev/ocp-release:4.9.0-x86_642 为受管集群创建
Namespace定义:apiVersion: v1 kind: Namespace metadata: name: <cluster_name>1 labels: name: <cluster_name>2 创建
BMC Secret自定义资源:apiVersion: v1 data: password: <bmc_password>1 username: <bmc_username>2 kind: Secret metadata: name: <cluster_name>-bmc-secret namespace: <cluster_name> type: Opaque创建
Image Pull Secret自定义资源:apiVersion: v1 data: .dockerconfigjson: <pull_secret>1 kind: Secret metadata: name: assisted-deployment-pull-secret namespace: <cluster_name> type: kubernetes.io/dockerconfigjson- 1
- OpenShift Container Platform pull secret。必须经过 base-64 编码。
创建
AgentClusterInstall自定义资源:apiVersion: extensions.hive.openshift.io/v1beta1 kind: AgentClusterInstall metadata: # Only include the annotation if using OVN, otherwise omit the annotation annotations: agent-install.openshift.io/install-config-overrides: '{"networking":{"networkType":"OVNKubernetes"}}' name: <cluster_name> namespace: <cluster_name> spec: clusterDeploymentRef: name: <cluster_name> imageSetRef: name: <cluster_image_set>1 networking: clusterNetwork: - cidr: <cluster_network_cidr>2 hostPrefix: 23 machineNetwork: - cidr: <machine_network_cidr>3 serviceNetwork: - <service_network_cidr>4 provisionRequirements: controlPlaneAgents: 1 workerAgents: 0 sshPublicKey: <public_key>5 注意如果要在此时为受管集群配置静态 IP,请参阅本文档中的步骤为受管集群配置静态 IP 地址。
创建
ClusterDeployment自定义资源:apiVersion: hive.openshift.io/v1 kind: ClusterDeployment metadata: name: <cluster_name> namespace: <cluster_name> spec: baseDomain: <base_domain>1 clusterInstallRef: group: extensions.hive.openshift.io kind: AgentClusterInstall name: <cluster_name> version: v1beta1 clusterName: <cluster_name> platform: agentBareMetal: agentSelector: matchLabels: cluster-name: <cluster_name> pullSecretRef: name: assisted-deployment-pull-secret- 1
- 受管集群的基域。
创建
KlusterletAddonConfig自定义资源:apiVersion: agent.open-cluster-management.io/v1 kind: KlusterletAddonConfig metadata: name: <cluster_name> namespace: <cluster_name> spec: clusterName: <cluster_name> clusterNamespace: <cluster_name> clusterLabels: cloud: auto-detect vendor: auto-detect applicationManager: enabled: true certPolicyController: enabled: false iamPolicyController: enabled: false policyController: enabled: true searchCollector: enabled: false1 - 1
- 设置为
true以启用 KlusterletAddonConfig 或false来禁用 KlusterletAddonConfig。禁用searchCollector。
创建
ManagedCluster自定义资源:apiVersion: cluster.open-cluster-management.io/v1 kind: ManagedCluster metadata: name: <cluster_name> spec: hubAcceptsClient: true创建
InfraEnv自定义资源:apiVersion: agent-install.openshift.io/v1beta1 kind: InfraEnv metadata: name: <cluster_name> namespace: <cluster_name> spec: clusterRef: name: <cluster_name> namespace: <cluster_name> sshAuthorizedKey: <public_key>1 agentLabels:2 location: "<label-name>" pullSecretRef: name: assisted-deployment-pull-secret创建
BareMetalHost自定义资源:apiVersion: metal3.io/v1alpha1 kind: BareMetalHost metadata: name: <cluster_name> namespace: <cluster_name> annotations: inspect.metal3.io: disabled labels: infraenvs.agent-install.openshift.io: "<cluster_name>" spec: bootMode: "UEFI" bmc: address: <bmc_address>1 disableCertificateVerification: true credentialsName: <cluster_name>-bmc-secret bootMACAddress: <mac_address>2 automatedCleaningMode: disabled online: true另外,您可以添加
bmac.agent-install.openshift.io/hostname: <host-name>作为注解,以设置受管集群的主机名。如果您没有添加注解,则主机名将默认为 DHCP 服务器或本地主机的主机名。- 创建自定义资源后,将生成的自定义资源的整个目录推送到您为存储自定义资源创建的 Git 存储库。
后续步骤
要置备其他集群,请对每个集群重复此步骤。
19.13.1. 为受管集群配置静态 IP 地址 复制链接链接已复制到粘贴板!
另外,在创建 AgentClusterInstall 自定义资源后,您可以为受管集群配置静态 IP 地址。
您必须先创建此自定义资源,然后才能创建 ClusterDeployment 自定义资源。
先决条件
-
部署并配置
AgentClusterInstall自定义资源。
流程
创建
NMStateConfig自定义资源:apiVersion: agent-install.openshift.io/v1beta1 kind: NMStateConfig metadata: name: <cluster_name> namespace: <cluster_name> labels: sno-cluster-<cluster-name>: <cluster_name> spec: config: interfaces: - name: eth0 type: ethernet state: up ipv4: enabled: true address: - ip: <ip_address>1 prefix-length: <public_network_prefix>2 dhcp: false dns-resolver: config: server: - <dns_resolver>3 routes: config: - destination: 0.0.0.0/0 next-hop-address: <gateway>4 next-hop-interface: eth0 table-id: 254 interfaces: - name: "eth0"5 macAddress: <mac_address>6 -
在创建
BareMetalHost自定义资源时,请确保其 mac 地址与NMStateConfig目标裸机主机中的 mac 地址匹配。 在创建
InfraEnv自定义资源时,引用InfraEnv自定义资源中的NMStateConfig自定义资源中的标签:apiVersion: agent-install.openshift.io/v1beta1 kind: InfraEnv metadata: name: <cluster_name> namespace: <cluster_name> spec: clusterRef: name: <cluster_name> namespace: <cluster_name> sshAuthorizedKey: <public_key> agentLabels:1 location: "<label-name>" pullSecretRef: name: assisted-deployment-pull-secret nmStateConfigLabelSelector: matchLabels: sno-cluster-<cluster-name>: <cluster_name> # Match this label- 1
- 设置要匹配的标签。代理引导时应用标签。
19.13.2. 用于置备集群的自动发现镜像 ISO 流程 复制链接链接已复制到粘贴板!
创建自定义资源后,会自动执行以下操作:
- 在目标机器上生成并启动发现镜像 ISO 文件。
- 当 ISO 文件成功在目标机器上启动时,它会报告目标计算机的硬件信息。
- 在所有主机被发现后,会安装 OpenShift Container Platform。
-
当 OpenShift Container Platform 完成安装后,hub 在目标集群上安装
klusterlet服务。 - 请求的附加组件服务安装在目标集群中。
当在受管集群的 hub 上创建 Agent 自定义资源时,发现镜像 ISO 过程会完成。
19.13.3. 检查受管集群状态 复制链接链接已复制到粘贴板!
通过检查集群状态,确保集群置备成功。
先决条件
-
所有自定义资源都已配置并置备,在受管集群的 hub 上创建
Agent自定义资源。
流程
检查受管集群的状态:
$ oc get managedclusterTrue表示受管集群已就绪。检查代理状态:
$ oc get agent -n <cluster_name>使用
describe命令,提供代理条件的深入描述。支持的状态包括BackendError、InputError、ValidationsFailing、InFailed和AgentIsConnected。这些状态与Agent和AgentClusterInstall自定义资源相关。$ oc describe agent -n <cluster_name>检查集群置备状态:
$ oc get agentclusterinstall -n <cluster_name>使用
describe命令提供集群置备状态的深入描述:$ oc describe agentclusterinstall -n <cluster_name>检查受管集群的附加服务的状态:
$ oc get managedclusteraddon -n <cluster_name>检索受管集群的
kubeconfig文件的身份验证信息:$ oc get secret -n <cluster_name> <cluster_name>-admin-kubeconfig -o jsonpath={.data.kubeconfig} | base64 -d > <directory>/<cluster_name>-kubeconfig
19.13.4. 为断开连接的环境配置受管集群 复制链接链接已复制到粘贴板!
完成前面的步骤后,按照以下步骤为断开连接的环境配置受管集群。
先决条件
- 断开连接的 Red Hat Advanced Cluster Management (RHACM) 2.3 安装。
-
在 HTTPD 服务器上托管
rootfs和iso镜像。
流程
创建包含镜像 registry 配置的
ConfigMap:apiVersion: v1 kind: ConfigMap metadata: name: assisted-installer-mirror-config namespace: assisted-installer labels: app: assisted-service data: ca-bundle.crt: <certificate>1 registries.conf: |2 unqualified-search-registries = ["registry.access.redhat.com", "docker.io"] [[registry]] location = <mirror_registry_url>3 insecure = false mirror-by-digest-only = true这会更新
AgentServiceConfig自定义资源中的mirrorRegistryRef,如下所示:输出示例
apiVersion: agent-install.openshift.io/v1beta1 kind: AgentServiceConfig metadata: name: agent namespace: assisted-installer spec: databaseStorage: volumeName: <db_pv_name> accessModes: - ReadWriteOnce resources: requests: storage: <db_storage_size> filesystemStorage: volumeName: <fs_pv_name> accessModes: - ReadWriteOnce resources: requests: storage: <fs_storage_size> mirrorRegistryRef: name: 'assisted-installer-mirror-config' osImages: - openshiftVersion: <ocp_version> rootfs: <rootfs_url>1 url: <iso_url>2 对于断开连接的安装,您必须部署可通过断开连接的网络访问的 NTP 时钟。您可以配置 chrony 作为服务器,编辑
/etc/chrony.conf文件,并添加以下允许的 IPv6 范围:# Allow NTP client access from local network. #allow 192.168.0.0/16 local stratum 10 bindcmdaddress :: allow 2620:52:0:1310::/64
19.13.5. 为断开连接的环境配置 IPv6 地址 复制链接链接已复制到粘贴板!
另外,当创建 AgentClusterInstall 自定义资源时,也可以为受管集群配置 IPv6 地址。
流程
在
AgentClusterInstall自定义资源中,修改 IPv6 地址的clusterNetwork和serviceNetwork:apiVersion: extensions.hive.openshift.io/v1beta1 kind: AgentClusterInstall metadata: # Only include the annotation if using OVN, otherwise omit the annotation annotations: agent-install.openshift.io/install-config-overrides: '{"networking":{"networkType":"OVNKubernetes"}}' name: <cluster_name> namespace: <cluster_name> spec: clusterDeploymentRef: name: <cluster_name> imageSetRef: name: <cluster_image_set> networking: clusterNetwork: - cidr: "fd01::/48" hostPrefix: 64 machineNetwork: - cidr: <machine_network_cidr> serviceNetwork: - "fd02::/112" provisionRequirements: controlPlaneAgents: 1 workerAgents: 0 sshPublicKey: <public_key>-
使用您定义的 IPv6 地址更新
NMStateConfig自定义资源。
19.13.6. 受管集群故障排除 复制链接链接已复制到粘贴板!
使用这个流程诊断受管集群中可能出现的任何安装问题。
流程
检查受管集群的状态:
$ oc get managedcluster输出示例
NAME HUB ACCEPTED MANAGED CLUSTER URLS JOINED AVAILABLE AGE SNO-cluster true True True 2d19h如果
AVAILABLE列中的状态为True,受管集群由 hub 管理。如果
AVAILABLE列中的状态为Unknown,则受管集群不会由 hub 管理。使用以下步骤继续检查 以了解更多信息。检查
AgentClusterInstall安装状态:$ oc get clusterdeployment -n <cluster_name>输出示例
NAME PLATFORM REGION CLUSTERTYPE INSTALLED INFRAID VERSION POWERSTATE AGE Sno0026 agent-baremetal false Initialized 2d14h如果
INSTALLED列中的状态为false,则安装会失败。如果安装失败,请输入以下命令查看
AgentClusterInstall资源的状态:$ oc describe agentclusterinstall -n <cluster_name> <cluster_name>解决错误并重置集群:
删除集群的受管集群资源:
$ oc delete managedcluster <cluster_name>删除集群的命名空间:
$ oc delete namespace <cluster_name>这会删除为此集群创建的所有命名空间范围自定义资源。您必须等待
ManagedClusterCR 删除完成,然后才能继续。- 为受管集群重新创建自定义资源。