19.13. 创建自定义资源以安装单个受管集群
此流程告诉您如何手动创建和部署单个受管集群。如果您要创建多个集群(可能是数百个),请使用"为多个受管集群创建 ZTP 自定义资源"中所述的 SiteConfig
方法。
先决条件
- 启用辅助安装程序服务.
确保网络连接:
- hub 中的容器必须能够访问目标裸机主机的 Baseboard Management Controller(BMC)地址。
受管集群必须能够解析并访问 hub 的 API
hostname
和*.app
hostname。hub API 和*.app
主机名示例:console-openshift-console.apps.hub-cluster.internal.domain.com api.hub-cluster.internal.domain.com
hub 必须能够解析并访问受管集群的 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.0 1 spec: releaseImage: quay.io/openshift-release-dev/ocp-release:4.9.0-x86_64 2
为受管集群创建
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: false 1
- 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 managedcluster
True
表示受管集群已就绪。检查代理状态:
$ 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>
这会删除为此集群创建的所有命名空间范围自定义资源。您必须等待
ManagedCluster
CR 删除完成,然后才能继续。- 为受管集群重新创建自定义资源。