6.3. 在断开连接的环境中在裸机上部署托管的 control plane
当您在裸机上置备托管的 control plane 时,您可以使用 Agent 平台。Kubernetes Operator 的 Agent 平台和多集群引擎协同工作,以启用断开连接的部署。Agent 平台使用中央基础架构管理服务将 worker 节点添加到托管的集群中。有关中央基础架构管理服务简介,请参阅 启用中央基础架构管理服务。
6.3.1. 裸机的断开连接的环境架构
下图演示了断开连接的环境的示例架构:
- 配置基础架构服务,包括带有 TLS 支持、Web 服务器和 DNS 的 registry 证书部署,以确保断开连接的部署正常工作。
在
openshift-config
命名空间中创建配置映射。在本例中,配置映射名为registry-config
。配置映射的内容是 Registry CA 证书。配置映射的 data 字段必须包含以下键/值:-
键:
<registry_dns_domain_name>..<port>
,例如registry.hypershiftdomain.lab..5000:
。在指定端口时,请确保在 registry DNS 域名后放置..
。 值: 证书内容
有关创建配置映射的更多信息,请参阅为托管 control plane 的断开连接的安装配置 TLS 证书。
-
键:
-
修改
images.config.openshift.io
自定义资源(CR)规格,并添加名为additionalTrustedCA
的新字段,值为name: registry-config
。 创建一个包含两个数据字段的配置映射。一个字段包含
RAW
格式的registries.conf
文件,另一个字段包含 Registry CA,并命名为ca-bundle.crt
。配置映射属于multicluster-engine
命名空间,配置映射名称在其他对象中引用。如需配置映射的示例,请参阅以下示例配置:apiVersion: v1 kind: ConfigMap metadata: name: custom-registries namespace: multicluster-engine labels: app: assisted-service data: ca-bundle.crt: | -----BEGIN CERTIFICATE----- # ... -----END CERTIFICATE----- registries.conf: | unqualified-search-registries = ["registry.access.redhat.com", "docker.io"] [[registry]] prefix = "" location = "registry.redhat.io/openshift4" mirror-by-digest-only = true [[registry.mirror]] location = "registry.ocp-edge-cluster-0.qe.lab.redhat.com:5000/openshift4" [[registry]] prefix = "" location = "registry.redhat.io/rhacm2" mirror-by-digest-only = true # ... # ...
-
在 multicluster engine Operator 命名空间中,您要创建
multiclusterengine
CR,该 CR 启用 Agent 和hypershift-addon
附加组件。multicluster engine Operator 命名空间必须包含配置映射才能修改断开连接的部署中的行为。命名空间还包含multicluster-engine
、assisted-service
和hypershift-addon-manager
pod。 创建部署托管集群所需的以下对象:
- secret :Secret 包含 pull secret、SSH 密钥和 etcd 加密密钥。
- 配置映射:配置映射包含私有 registry 的 CA 证书。
-
HostedCluster
:HostedCluster
资源定义用户创建的集群的配置。 -
NodePool
:NodePool
资源标识引用用于数据平面的机器的节点池。
-
创建托管集群对象后,HyperShift Operator 会建立
HostedControlPlane
命名空间来容纳 control plane pod。命名空间还托管组件,如 Agents、裸机主机 (BMH)和InfraEnv
资源。之后,您可以创建InfraEnv
资源,并在 ISO 创建后创建 BMH 及其包含基板管理控制器(BMC)凭证的 secret。 -
openshift-machine-api
命名空间中的 Metal3 Operator 会检查新的 BMH。然后,Metal3 Operator 会尝试连接到 BMC 来使用 multicluster engine Operator 命名空间中的AgentServiceConfig
CR 指定的LiveISO
和RootFS
值来启动它们。 -
启动
HostedCluster
资源的 worker 节点后,会启动一个 Agent 容器。此代理与 Assisted Service 建立联系人,它会编配操作以完成部署。最初,您需要将NodePool
资源扩展到HostedCluster
资源的 worker 节点数量。Assisted Service 管理剩余的任务。 - 此时,您需要等待部署过程完成。
6.3.2. 在断开连接的环境中在裸机上部署托管 control plane 的要求
要在断开连接的环境中配置托管的 control plane,您必须满足以下先决条件:
- CPU:提供的 CPU 数量决定了并发运行多少个托管集群。通常,每个节点使用 16 个 CPU 用于 3 个节点。对于最小开发,您可以对 3 个节点使用 12 个 CPU。
- Memory :RAM 量会影响可以托管的托管集群的数量。每个节点使用 48 GB RAM。对于最小开发,18 GB RAM 可能已足够。
Storage:为多集群引擎 Operator 使用 SSD 存储。
- 管理集群: 250 GB.
- Registry:所需的存储取决于托管的发行版本、操作器和镜像的数量。一个可接受的数字可能是 500 GB,最好与托管托管集群的磁盘分开。
- Web 服务器:所需的存储取决于托管的 ISO 和镜像的数量。可接受的数字可能为 500 GB。
生产环境: 对于生产环境,将管理集群、registry 和 Web 服务器分开在不同的磁盘上。本例演示了生产环境的可能配置:
- Registry: 2 TB
- 管理集群:500 GB
- Web 服务器:2 TB
6.3.3. 提取发行镜像摘要
您可以使用标记的镜像提取 OpenShift Container Platform 发行镜像摘要。
流程
运行以下命令来获取镜像摘要:
$ oc adm release info <tagged_openshift_release_image> | grep "Pull From"
将
<tagged_openshift_release_image>
替换为支持的 OpenShift Container Platform 版本标记的镜像,如quay.io/openshift-release-dev/ocp-release:4.14.0-x8_64
。输出示例
Pull From: quay.io/openshift-release-dev/ocp-release@sha256:69d1292f64a2b67227c5592c1a7d499c7d00376e498634ff8e1946bc9ccdddfe
6.3.4. 为托管 control plane 的断开连接的安装配置虚拟机监控程序
以下信息只适用于虚拟机环境。
流程
要部署虚拟管理集群,请输入以下命令访问所需的软件包:
$ sudo dnf install dnsmasq radvd vim golang podman bind-utils net-tools httpd-tools tree htop strace tmux -y
输入以下命令启用并启动 Podman 服务:
$ systemctl enable --now podman
要使用
kcli
部署管理集群和其他虚拟组件,请输入以下命令来安装和配置 hypervisor:$ sudo yum -y install libvirt libvirt-daemon-driver-qemu qemu-kvm
$ sudo usermod -aG qemu,libvirt $(id -un)
$ sudo newgrp libvirt
$ sudo systemctl enable --now libvirtd
$ sudo dnf -y copr enable karmab/kcli
$ sudo dnf -y install kcli
$ sudo kcli create pool -p /var/lib/libvirt/images default
$ kcli create host kvm -H 127.0.0.1 local
$ sudo setfacl -m u:$(id -un):rwx /var/lib/libvirt/images
$ kcli create network -c 192.168.122.0/24 default
启用网络管理器分配程序,以确保虚拟机能够解析所需的域、路由和 registry。要启用网络管理器分配程序,在
/etc/NetworkManager/dispatcher.d/
目录中,创建一个名为forcedns
的脚本,其中包含以下内容:#!/bin/bash export IP="192.168.126.1" 1 export BASE_RESOLV_CONF="/run/NetworkManager/resolv.conf" if ! [[ `grep -q "$IP" /etc/resolv.conf` ]]; then export TMP_FILE=$(mktemp /etc/forcedns_resolv.conf.XXXXXX) cp $BASE_RESOLV_CONF $TMP_FILE chmod --reference=$BASE_RESOLV_CONF $TMP_FILE sed -i -e "s/dns.base.domain.name//" -e "s/search /& dns.base.domain.name /" -e "0,/nameserver/s/nameserver/& $IP\n&/" $TMP_FILE 2 mv $TMP_FILE /etc/resolv.conf fi echo "ok"
创建该文件后,输入以下命令添加权限:
$ chmod 755 /etc/NetworkManager/dispatcher.d/forcedns
-
运行脚本,并验证输出是否返回
ok
。 配置
ksushy
以为虚拟机模拟基板管理控制器 (BMC)。输入以下命令:$ sudo dnf install python3-pyOpenSSL.noarch python3-cherrypy -y
$ kcli create sushy-service --ssl --ipv6 --port 9000
$ sudo systemctl daemon-reload
$ systemctl enable --now ksushy
输入以下命令测试服务是否正常工作:
$ systemctl status ksushy
如果您在开发环境中工作,请将 hypervisor 系统配置为允许环境中通过不同虚拟网络进行各种连接。
注意如果您在生产环境中工作,您必须为
firewalld
服务建立正确的规则,并配置 SELinux 策略来维护安全环境。对于 SELinux,输入以下命令:
$ sed -i s/^SELINUX=.*$/SELINUX=permissive/ /etc/selinux/config; setenforce 0
对于
firewalld
,输入以下命令:$ systemctl disable --now firewalld
对于
libvirtd
,输入以下命令:$ systemctl restart libvirtd
$ systemctl enable --now libvirtd
6.3.5. 裸机上的 DNS 配置
托管集群的 API 服务器作为 NodePort
服务公开。必须存在 api.<hosted_cluster_name>.<base_domain>
的 DNS 条目,它指向可以访问 API 服务器的目标。
DNS 条目可以是一个简单的记录,指向运行托管 control plane 的受管集群中的一个节点。该条目也可以指向部署的负载均衡器,将传入的流量重定向到入口 pod。
DNS 配置示例
api.example.krnl.es. IN A 192.168.122.20 api.example.krnl.es. IN A 192.168.122.21 api.example.krnl.es. IN A 192.168.122.22 api-int.example.krnl.es. IN A 192.168.122.20 api-int.example.krnl.es. IN A 192.168.122.21 api-int.example.krnl.es. IN A 192.168.122.22 `*`.apps.example.krnl.es. IN A 192.168.122.23
如果您要为 IPv6 网络上的断开连接的环境配置 DNS,则配置类似以下示例。
IPv6 网络的 DNS 配置示例
api.example.krnl.es. IN A 2620:52:0:1306::5 api.example.krnl.es. IN A 2620:52:0:1306::6 api.example.krnl.es. IN A 2620:52:0:1306::7 api-int.example.krnl.es. IN A 2620:52:0:1306::5 api-int.example.krnl.es. IN A 2620:52:0:1306::6 api-int.example.krnl.es. IN A 2620:52:0:1306::7 `*`.apps.example.krnl.es. IN A 2620:52:0:1306::10
如果您要为双栈网络上的断开连接的环境配置 DNS,请务必包括 IPv4 和 IPv6 的条目。
双栈网络的 DNS 配置示例
host-record=api-int.hub-dual.dns.base.domain.name,192.168.126.10 host-record=api.hub-dual.dns.base.domain.name,192.168.126.10 address=/apps.hub-dual.dns.base.domain.name/192.168.126.11 dhcp-host=aa:aa:aa:aa:10:01,ocp-master-0,192.168.126.20 dhcp-host=aa:aa:aa:aa:10:02,ocp-master-1,192.168.126.21 dhcp-host=aa:aa:aa:aa:10:03,ocp-master-2,192.168.126.22 dhcp-host=aa:aa:aa:aa:10:06,ocp-installer,192.168.126.25 dhcp-host=aa:aa:aa:aa:10:07,ocp-bootstrap,192.168.126.26 host-record=api-int.hub-dual.dns.base.domain.name,2620:52:0:1306::2 host-record=api.hub-dual.dns.base.domain.name,2620:52:0:1306::2 address=/apps.hub-dual.dns.base.domain.name/2620:52:0:1306::3 dhcp-host=aa:aa:aa:aa:10:01,ocp-master-0,[2620:52:0:1306::5] dhcp-host=aa:aa:aa:aa:10:02,ocp-master-1,[2620:52:0:1306::6] dhcp-host=aa:aa:aa:aa:10:03,ocp-master-2,[2620:52:0:1306::7] dhcp-host=aa:aa:aa:aa:10:06,ocp-installer,[2620:52:0:1306::8] dhcp-host=aa:aa:aa:aa:10:07,ocp-bootstrap,[2620:52:0:1306::9]
6.3.6. 在断开连接的环境中为托管的 control plane 部署 registry
对于开发环境,使用 Podman 容器部署小型自托管的 registry。对于生产环境,部署企业托管的 registry,如 Red Hat Quay、Nexus 或 Artifactory。
流程
要使用 Podman 部署小 registry,请完成以下步骤:
以特权用户身份,访问
${HOME}
目录并创建以下脚本:#!/usr/bin/env bash set -euo pipefail PRIMARY_NIC=$(ls -1 /sys/class/net | grep -v podman | head -1) export PATH=/root/bin:$PATH export PULL_SECRET="/root/baremetal/hub/openshift_pull.json" 1 if [[ ! -f $PULL_SECRET ]];then echo "Pull Secret not found, exiting..." exit 1 fi dnf -y install podman httpd httpd-tools jq skopeo libseccomp-devel export IP=$(ip -o addr show $PRIMARY_NIC | head -1 | awk '{print $4}' | cut -d'/' -f1) REGISTRY_NAME=registry.$(hostname --long) REGISTRY_USER=dummy REGISTRY_PASSWORD=dummy KEY=$(echo -n $REGISTRY_USER:$REGISTRY_PASSWORD | base64) echo "{\"auths\": {\"$REGISTRY_NAME:5000\": {\"auth\": \"$KEY\", \"email\": \"sample-email@domain.ltd\"}}}" > /root/disconnected_pull.json mv ${PULL_SECRET} /root/openshift_pull.json.old jq ".auths += {\"$REGISTRY_NAME:5000\": {\"auth\": \"$KEY\",\"email\": \"sample-email@domain.ltd\"}}" < /root/openshift_pull.json.old > $PULL_SECRET mkdir -p /opt/registry/{auth,certs,data,conf} cat <<EOF > /opt/registry/conf/config.yml version: 0.1 log: fields: service: registry storage: cache: blobdescriptor: inmemory filesystem: rootdirectory: /var/lib/registry delete: enabled: true http: addr: :5000 headers: X-Content-Type-Options: [nosniff] health: storagedriver: enabled: true interval: 10s threshold: 3 compatibility: schema1: enabled: true EOF openssl req -newkey rsa:4096 -nodes -sha256 -keyout /opt/registry/certs/domain.key -x509 -days 3650 -out /opt/registry/certs/domain.crt -subj "/C=US/ST=Madrid/L=San Bernardo/O=Karmalabs/OU=Guitar/CN=$REGISTRY_NAME" -addext "subjectAltName=DNS:$REGISTRY_NAME" cp /opt/registry/certs/domain.crt /etc/pki/ca-trust/source/anchors/ update-ca-trust extract htpasswd -bBc /opt/registry/auth/htpasswd $REGISTRY_USER $REGISTRY_PASSWORD podman create --name registry --net host --security-opt label=disable --replace -v /opt/registry/data:/var/lib/registry:z -v /opt/registry/auth:/auth:z -v /opt/registry/conf/config.yml:/etc/docker/registry/config.yml -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry" -e "REGISTRY_HTTP_SECRET=ALongRandomSecretForRegistry" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -v /opt/registry/certs:/certs:z -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key docker.io/library/registry:latest [ "$?" == "0" ] || !! systemctl enable --now registry
- 1
- 将
PULL_SECRET
的位置替换为您设置的适当位置。
将脚本文件命名为
registry.sh
并保存。运行脚本时,它会拉取以下信息:- registry 名称,基于 hypervisor 主机名
- 所需的凭证和用户访问详情
通过添加执行标记来调整权限,如下所示:
$ chmod u+x ${HOME}/registry.sh
要在没有任何参数的情况下运行脚本,请输入以下命令:
$ ${HOME}/registry.sh
脚本将启动服务器。该脚本使用
systemd
服务来管理目的。如果需要管理该脚本,您可以使用以下命令:
$ systemctl status
$ systemctl start
$ systemctl stop
registry 的根目录位于 /opt/registry
目录中,包含以下子目录:
-
certs
包含 TLS 证书。 -
auth
包含凭据。 -
data
包含 registry 镜像。 -
conf
包含 registry 配置。
6.3.7. 在断开连接的环境中为托管 control plane 设置管理集群
要设置 OpenShift Container Platform 管理集群,您可以使用 dev-scripts,或者基于虚拟机,您可以使用 kcli
工具。以下指令特定于 kcli
工具。
流程
确保正确的网络已准备好在虚拟机监控程序中使用。网络将托管管理和托管集群。输入以下
kcli
命令:$ kcli create network -c 192.168.126.0/24 -P dhcp=false -P dns=false -d 2620:52:0:1306::0/64 --domain dns.base.domain.name --nodhcp dual
其中:
-
-c
指定网络的 CIDR。 -
-P dhcp=false
配置网络来禁用 DHCP,该 DHCP 由您配置的dnsmasq
处理。 -
-P dns=false
配置网络来禁用 DNS,该 DNS 也由您配置的dnsmasq
处理。 -
--domain
将域设置为搜索。 -
dns.base.domain.name
是 DNS 基本域名。 -
dual
是您要创建的网络的名称。
-
创建网络后,查看以下输出:
[root@hypershiftbm ~]# kcli list network Listing Networks... +---------+--------+---------------------+-------+------------------+------+ | Network | Type | Cidr | Dhcp | Domain | Mode | +---------+--------+---------------------+-------+------------------+------+ | default | routed | 192.168.122.0/24 | True | default | nat | | ipv4 | routed | 2620:52:0:1306::/64 | False | dns.base.domain.name | nat | | ipv4 | routed | 192.168.125.0/24 | False | dns.base.domain.name | nat | | ipv6 | routed | 2620:52:0:1305::/64 | False | dns.base.domain.name | nat | +---------+--------+---------------------+-------+------------------+------+
[root@hypershiftbm ~]# kcli info network ipv6 Providing information about network ipv6... cidr: 2620:52:0:1306::/64 dhcp: false domain: dns.base.domain.name mode: nat plan: kvirt type: routed
确保 pull secret 和
kcli
计划文件已就位,以便您可以部署 OpenShift Container Platform 管理集群:-
确认 pull secret 与
kcli
计划位于同一个文件夹中,并且 pull secret 文件名为openshift_pull.json
。 在
mgmt-compact-hub-dual.yaml
文件中添加kcli
计划,其中包含 OpenShift Container Platform 定义。确保更新文件内容以匹配您的环境:plan: hub-dual force: true version: stable tag: "4.x.y-x86_64" 1 cluster: "hub-dual" dualstack: true domain: dns.base.domain.name api_ip: 192.168.126.10 ingress_ip: 192.168.126.11 service_networks: - 172.30.0.0/16 - fd02::/112 cluster_networks: - 10.132.0.0/14 - fd01::/48 disconnected_url: registry.dns.base.domain.name:5000 disconnected_update: true disconnected_user: dummy disconnected_password: dummy disconnected_operators_version: v4.14 disconnected_operators: - name: metallb-operator - name: lvms-operator channels: - name: stable-4.14 disconnected_extra_images: - quay.io/user-name/trbsht:latest - quay.io/user-name/hypershift:BMSelfManage-v4.14-rc-v3 - registry.redhat.io/openshift4/ose-kube-rbac-proxy:v4.10 dualstack: true disk_size: 200 extra_disks: [200] memory: 48000 numcpus: 16 ctlplanes: 3 workers: 0 manifests: extra-manifests metal3: true network: dual users_dev: developer users_devpassword: developer users_admin: admin users_adminpassword: admin metallb_pool: dual-virtual-network metallb_ranges: - 192.168.126.150-192.168.126.190 metallb_autoassign: true apps: - users - lvms-operator - metallb-operator vmrules: - hub-bootstrap: nets: - name: ipv6 mac: aa:aa:aa:aa:10:07 - hub-ctlplane-0: nets: - name: ipv6 mac: aa:aa:aa:aa:10:01 - hub-ctlplane-1: nets: - name: ipv6 mac: aa:aa:aa:aa:10:02 - hub-ctlplane-2: nets: - name: ipv6 mac: aa:aa:aa:aa:10:03
- 1
- 使用您要使用的支持的 OpenShift Container Platform 版本替换
4.x.y
。
-
确认 pull secret 与
要置备管理集群,请输入以下命令:
$ kcli create cluster openshift --pf mgmt-compact-hub-dual.yaml
后续步骤
接下来,配置 Web 服务器。
6.3.8. 在断开连接的环境中为托管 control plane 配置 web 服务器
您需要配置额外的 web 服务器来托管与您要部署为托管集群的 OpenShift Container Platform 版本关联的 Red Hat Enterprise Linux CoreOS (RHCOS) 镜像。
流程
要配置 Web 服务器,请完成以下步骤:
输入以下命令从您要使用的 OpenShift Container Platform 发行版本中提取
openshift-install
二进制文件:$ oc adm -a ${LOCAL_SECRET_JSON} release extract --command=openshift-install "${LOCAL_REGISTRY}/${LOCAL_REPOSITORY}:${OCP_RELEASE}-${ARCHITECTURE}"
运行以下脚本:该脚本在
/opt/srv
目录中创建文件夹。文件夹包含用于置备 worker 节点的 RHCOS 镜像。#!/bin/bash WEBSRV_FOLDER=/opt/srv ROOTFS_IMG_URL="$(./openshift-install coreos print-stream-json | jq -r '.architectures.x86_64.artifacts.metal.formats.pxe.rootfs.location')" 1 LIVE_ISO_URL="$(./openshift-install coreos print-stream-json | jq -r '.architectures.x86_64.artifacts.metal.formats.iso.disk.location')" 2 mkdir -p ${WEBSRV_FOLDER}/images curl -Lk ${ROOTFS_IMG_URL} -o ${WEBSRV_FOLDER}/images/${ROOTFS_IMG_URL##*/} curl -Lk ${LIVE_ISO_URL} -o ${WEBSRV_FOLDER}/images/${LIVE_ISO_URL##*/} chmod -R 755 ${WEBSRV_FOLDER}/* ## Run Webserver podman ps --noheading | grep -q websrv-ai if [[ $? == 0 ]];then echo "Launching Registry pod..." /usr/bin/podman run --name websrv-ai --net host -v /opt/srv:/usr/local/apache2/htdocs:z quay.io/alosadag/httpd:p8080 fi
下载完成后,容器将运行以托管 Web 服务器上的镜像。容器使用官方 HTTPd 镜像的一种变体,它也能够与 IPv6 网络一起使用。
6.3.9. 在断开连接的环境中为托管 control plane 配置镜像镜像
镜像镜像(mirror)是从外部 registry (如 registry.redhat.com
或 quay.io
)获取镜像的过程,并将其存储在私有 registry 中。
在以下步骤中,使用 oc-mirror
工具,它是一个使用 ImageSetConfiguration
对象的二进制文件。在文件中,您可以指定以下信息:
-
要镜像的 OpenShift Container Platform 版本。版本位于
quay.io
中。 - 要镜像的额外 Operator。单独选择软件包。
- 要添加到存储库中的额外镜像。
先决条件
在启动镜像过程前,请确保 registry 服务器正在运行。
流程
要配置镜像镜像,请完成以下步骤:
-
确保
${HOME}/.docker/config.json
文件已使用您要从镜像(mirror)的 registry 更新,并使用您要将镜像推送到的私有 registry。 通过使用以下示例,创建一个
ImageSetConfiguration
对象以用于镜像。根据需要替换值,使其与您的环境匹配:apiVersion: mirror.openshift.io/v1alpha2 kind: ImageSetConfiguration storageConfig: registry: imageURL: registry.<dns.base.domain.name>:5000/openshift/release/metadata:latest 1 mirror: platform: channels: - name: candidate-4.17 minVersion: 4.x.y-build 2 maxVersion: 4.x.y-build 3 type: ocp kubeVirtContainer: true 4 graph: true additionalImages: - name: quay.io/karmab/origin-keepalived-ipfailover:latest - name: quay.io/karmab/kubectl:latest - name: quay.io/karmab/haproxy:latest - name: quay.io/karmab/mdns-publisher:latest - name: quay.io/karmab/origin-coredns:latest - name: quay.io/karmab/curl:latest - name: quay.io/karmab/kcli:latest - name: quay.io/user-name/trbsht:latest - name: quay.io/user-name/hypershift:BMSelfManage-v4.17 - name: registry.redhat.io/openshift4/ose-kube-rbac-proxy:v4.10 operators: - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.17 packages: - name: lvms-operator - name: local-storage-operator - name: odf-csi-addons-operator - name: odf-operator - name: mcg-operator - name: ocs-operator - name: metallb-operator - name: kubevirt-hyperconverged 5
输入以下命令启动镜像过程:
$ oc-mirror --v2 --config imagesetconfig.yaml docker://${REGISTRY}
镜像过程完成后,有一个名为
oc-mirror-workspace/results-XXXXXX/
的新文件夹,其中包含要应用到托管的集群的 IDMS 和目录源。通过配置
imagesetconfig.yaml
文件,对 OpenShift Container Platform 的每日或 CI 版本进行镜像,如下所示:apiVersion: mirror.openshift.io/v2alpha1 kind: ImageSetConfiguration mirror: platform: graph: true release: registry.ci.openshift.org/ocp/release:4.x.y-build 1 kubeVirtContainer: true 2 # ...
输入以下命令将更改应用到文件:
$ oc-mirror --v2 --config imagesetconfig.yaml docker://${REGISTRY}
- 按照 在断开连接的网络中安装 中的步骤来镜像最新的多集群引擎 Operator 镜像。
6.3.10. 在管理集群中应用对象
镜像过程完成后,您需要在管理集群中应用两个对象:
-
ImageContentSourcePolicy
(ICSP) 或ImageDigestMirrorSet
(IDMS) - 目录源
使用 oc-mirror
工具时,输出工件位于名为 oc-mirror-workspace/results-XXXXXX/
的文件夹。
ICSP 或 IDMS 启动 MachineConfig
更改,它不会重启您的节点,而是在每个节点上重启 kubelet。节点标记为 READY
后,您需要应用新生成的目录源。
目录源在 openshift-marketplace
Operator 中启动操作,如下载目录镜像并处理它来检索该镜像中包含的所有 PackageManifests
。
流程
要检查新源,请使用新的
CatalogSource
作为源运行以下命令:$ oc get packagemanifest
要应用工件,请完成以下步骤:
输入以下命令创建 ICSP 或 IDMS 工件:
$ oc apply -f oc-mirror-workspace/results-XXXXXX/imageContentSourcePolicy.yaml
等待节点就绪,然后输入以下命令:
$ oc apply -f catalogSource-XXXXXXXX-index.yaml
镜像 OLM 目录并配置托管集群以指向镜像。
当您使用
management
(默认)OLMCatalogPlacement 模式时,用于 OLM 目录的镜像流不会自动满足管理集群中 ICSP 中的覆盖信息。-
如果使用原始名称和标签将 OLM 目录正确镜像到内部 registry,请将
hypershift.openshift.io/olm-catalogs-is-registry-overrides
注解添加到HostedCluster
资源。格式为"sr1=dr1,sr2=dr2"
,其中源 registry 字符串是一个键,目标 registry 是一个值。 要绕过 OLM 目录镜像流机制,请使用
HostedCluster
资源上的以下四个注解直接指定用于 OLM Operator 目录的四个镜像的地址:-
hypershift.openshift.io/certified-operators-catalog-image
-
hypershift.openshift.io/community-operators-catalog-image
-
hypershift.openshift.io/redhat-marketplace-catalog-image
-
hypershift.openshift.io/redhat-operators-catalog-image
-
-
如果使用原始名称和标签将 OLM 目录正确镜像到内部 registry,请将
在这种情况下,镜像流不会被创建,您必须在 Operator 更新中刷新内部镜像以拉取(pull)时更新注解值。
后续步骤
通过完成 为托管 control plane 断开连接的安装部署多集群引擎 Operator 中的步骤来部署多集群引擎 Operator。
6.3.11. 为托管 control plane 的断开连接的安装部署 multicluster engine Operator
Kubernetes Operator 的多集群引擎在跨供应商部署集群时会扮演重要角色。如果您没有安装 multicluster engine Operator,请参阅以下文档来了解安装它的先决条件和步骤:
6.3.11.1. 部署 AgentServiceConfig 资源
AgentServiceConfig
自定义资源是 Assisted Service add-on 的基本组件,它是 multicluster engine Operator 的一部分。它负责裸机集群部署。启用附加组件后,您将部署 AgentServiceConfig
资源来配置附加组件。
除了配置 AgentServiceConfig
资源外,还需要包含额外的配置映射,以确保多集群引擎 Operator 在断开连接的环境中正常工作。
流程
通过添加以下配置映射来配置自定义 registry,其中包含自定义部署断开连接的详情:
apiVersion: v1 kind: ConfigMap metadata: name: custom-registries namespace: multicluster-engine labels: app: assisted-service data: ca-bundle.crt: | -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- registries.conf: | unqualified-search-registries = ["registry.access.redhat.com", "docker.io"] [[registry]] prefix = "" location = "registry.redhat.io/openshift4" mirror-by-digest-only = true [[registry.mirror]] location = "registry.dns.base.domain.name:5000/openshift4" 1 [[registry]] prefix = "" location = "registry.redhat.io/rhacm2" mirror-by-digest-only = true # ... # ...
- 1
- 将
dns.base.domain.name
替换为 DNS 基本域名。
对象包含两个字段:
- Custom CAs:此字段包含加载到部署不同进程的证书颁发机构(CA)。
-
Registry:
Registries.conf
字段包含有关需要从镜像 registry 而不是原始源 registry 使用的镜像和命名空间的信息。
通过添加
AssistedServiceConfig
对象来配置 Assisted Service,如下例所示:apiVersion: agent-install.openshift.io/v1beta1 kind: AgentServiceConfig metadata: annotations: unsupported.agent-install.openshift.io/assisted-service-configmap: assisted-service-config 1 name: agent namespace: multicluster-engine spec: mirrorRegistryRef: name: custom-registries 2 databaseStorage: storageClassName: lvms-vg1 accessModes: - ReadWriteOnce resources: requests: storage: 10Gi filesystemStorage: storageClassName: lvms-vg1 accessModes: - ReadWriteOnce resources: requests: storage: 20Gi osImages: 3 - cpuArchitecture: x86_64 4 openshiftVersion: "4.14" rootFSUrl: http://registry.dns.base.domain.name:8080/images/rhcos-414.92.202308281054-0-live-rootfs.x86_64.img 5 url: http://registry.dns.base.domain.name:8080/images/rhcos-414.92.202308281054-0-live.x86_64.iso version: 414.92.202308281054-0 - cpuArchitecture: x86_64 openshiftVersion: "4.15" rootFSUrl: http://registry.dns.base.domain.name:8080/images/rhcos-415.92.202403270524-0-live-rootfs.x86_64.img url: http://registry.dns.base.domain.name:8080/images/rhcos-415.92.202403270524-0-live.x86_64.iso version: 415.92.202403270524-0
- 1
metadata.annotations["unsupported.agent-install.openshift.io/assisted-service-configmap"]
注解引用 Operator 使用的配置映射名称来自定义行为。- 2
spec.mirrorRegistryRef.name
注解指向包含 Assisted Service Operator 使用断开连接的 registry 信息的配置映射。此配置映射在部署过程中添加这些资源。- 3
spec.osImages
字段包含可供此 Operator 部署的不同版本。这个字段是必须的。本例假设您已下载了RootFS
和LiveISO
文件。- 4
- 为您要部署的每个 OpenShift Container Platform 版本添加
cpuArchitecture
子部分。在本例中,cpuArchitecture
子部分包含在 4.14 和 4.15 中。 - 5
- 在
rootFSUrl
和url
字段中,将dns.base.domain.name
替换为 DNS 基域名称。
通过将所有对象串联到一个文件中,并将它们应用到管理集群,以部署它们。要做到这一点,请输入以下命令:
$ oc apply -f agentServiceConfig.yaml
命令会触发两个容器集。
输出示例
assisted-image-service-0 1/1 Running 2 11d 1 assisted-service-668b49548-9m7xw 2/2 Running 5 11d 2
后续步骤
通过完成 为托管 control plane 断开连接的安装配置 TLS 证书 中的步骤来配置 TLS 证书。
6.3.12. 为托管 control plane 的断开连接的安装配置 TLS 证书
为确保断开连接的部署中正常工作,您需要在管理集群中配置 registry CA 证书,并为托管集群配置 worker 节点。
6.3.12.1. 将 registry CA 添加到管理集群中
要将 registry CA 添加到管理集群中,请完成以下步骤。
流程
创建类似以下示例的配置映射:
apiVersion: v1 kind: ConfigMap metadata: name: <config_map_name> 1 namespace: <config_map_namespace> 2 data: 3 <registry_name>..<port>: | 4 -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- <registry_name>..<port>: | -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- <registry_name>..<port>: | -----BEGIN CERTIFICATE----- -----END CERTIFICATE-----
对集群范围的对象
image.config.openshift.io
进行补丁,使其包含以下规格:spec: additionalTrustedCA: - name: registry-config
因此,control plane 节点可以从私有 registry 检索镜像,HyperShift Operator 可以为托管集群部署提取 OpenShift Container Platform 有效负载。
修补对象的过程可能需要几分钟才能完成。
6.3.12.2. 将 registry CA 添加到托管集群的 worker 节点
要让托管的集群中的 data plane worker 可以从私有 registry 检索镜像,您需要将 registry CA 添加到 worker 节点。
流程
在
hc.spec.additionalTrustBundle
文件中,添加以下规格:spec: additionalTrustBundle: - name: user-ca-bundle 1
- 1
user-ca-bundle
条目是您在下一步中创建的配置映射。
在创建
HostedCluster
对象的同一命名空间中,创建user-ca-bundle
配置映射。配置映射类似以下示例:apiVersion: v1 data: ca-bundle.crt: | // Registry1 CA -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- // Registry2 CA -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- // Registry3 CA -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- kind: ConfigMap metadata: name: user-ca-bundle namespace: <hosted_cluster_namespace> 1
- 1
- 指定创建
HostedCluster
对象的命名空间。
6.3.13. 在裸机上创建托管集群
托管的集群是一个 OpenShift Container Platform 集群,其 control plane 和 API 端点托管在管理集群中。托管的集群包括控制平面和它的对应的数据平面。
6.3.13.1. 部署托管集群对象
通常,HyperShift Operator 会创建 HostedControlPlane
命名空间。但是,在这种情况下,您要在 HyperShift Operator 开始协调 HostedCluster
对象前包括所有对象。然后,当 Operator 启动协调过程时,它会找到所有对象。
流程
使用有关命名空间的以下信息创建 YAML 文件:
--- apiVersion: v1 kind: Namespace metadata: creationTimestamp: null name: <hosted_cluster_namespace>-<hosted_cluster_name> 1 spec: {} status: {} --- apiVersion: v1 kind: Namespace metadata: creationTimestamp: null name: <hosted_cluster_namespace> 2 spec: {} status: {}
创建一个 YAML 文件,其中包含以下有关配置映射和 secret 的信息,以包含在
HostedCluster
部署中:--- apiVersion: v1 data: ca-bundle.crt: | -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- kind: ConfigMap metadata: name: user-ca-bundle namespace: <hosted_cluster_namespace> 1 --- apiVersion: v1 data: .dockerconfigjson: xxxxxxxxx kind: Secret metadata: creationTimestamp: null name: <hosted_cluster_name>-pull-secret 2 namespace: <hosted_cluster_namespace> 3 --- apiVersion: v1 kind: Secret metadata: name: sshkey-cluster-<hosted_cluster_name> 4 namespace: <hosted_cluster_namespace> 5 stringData: id_rsa.pub: ssh-rsa xxxxxxxxx --- apiVersion: v1 data: key: nTPtVBEt03owkrKhIdmSW8jrWRxU57KO/fnZa8oaG0Y= kind: Secret metadata: creationTimestamp: null name: <hosted_cluster_name>-etcd-encryption-key 6 namespace: <hosted_cluster_namespace> 7 type: Opaque
创建包含 RBAC 角色的 YAML 文件,以便 Assisted Service 代理可以与托管的 control plane 位于同一个
HostedControlPlane
命名空间中,并仍然由集群 API 管理:apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: creationTimestamp: null name: capi-provider-role namespace: <hosted_cluster_namespace>-<hosted_cluster_name> 1 2 rules: - apiGroups: - agent-install.openshift.io resources: - agents verbs: - '*'
创建一个 YAML 文件,其中包含有关
HostedCluster
对象的信息,根据需要替换值:apiVersion: hypershift.openshift.io/v1beta1 kind: HostedCluster metadata: name: <hosted_cluster_name> 1 namespace: <hosted_cluster_namespace> 2 spec: additionalTrustBundle: name: "user-ca-bundle" olmCatalogPlacement: guest imageContentSources: 3 - source: quay.io/openshift-release-dev/ocp-v4.0-art-dev mirrors: - registry.<dns.base.domain.name>:5000/openshift/release 4 - source: quay.io/openshift-release-dev/ocp-release mirrors: - registry.<dns.base.domain.name>:5000/openshift/release-images 5 - mirrors: ... ... autoscaling: {} controllerAvailabilityPolicy: SingleReplica dns: baseDomain: <dns.base.domain.name> 6 etcd: managed: storage: persistentVolume: size: 8Gi restoreSnapshotURL: null type: PersistentVolume managementType: Managed fips: false networking: clusterNetwork: - cidr: 10.132.0.0/14 - cidr: fd01::/48 networkType: OVNKubernetes serviceNetwork: - cidr: 172.31.0.0/16 - cidr: fd02::/112 platform: agent: agentNamespace: <hosted_cluster_namespace>-<hosted_cluster_name> 7 8 type: Agent pullSecret: name: <hosted_cluster_name>-pull-secret 9 release: image: registry.<dns.base.domain.name>:5000/openshift/release-images:4.x.y-x86_64 10 11 secretEncryption: aescbc: activeKey: name: <hosted_cluster_name>-etcd-encryption-key 12 type: aescbc services: - service: APIServer servicePublishingStrategy: type: LoadBalancer - service: OAuthServer servicePublishingStrategy: type: Route - service: OIDC servicePublishingStrategy: type: Route - service: Konnectivity servicePublishingStrategy: type: Route - service: Ignition servicePublishingStrategy: type: Route sshKey: name: sshkey-cluster-<hosted_cluster_name> 13 status: controlPlaneEndpoint: host: "" port: 0
在
HostedCluster
对象中添加注解,指向 OpenShift Container Platform 发行版本中的 HyperShift Operator 发行版本:输入以下命令来获取镜像有效负载:
$ oc adm release info registry.<dns.base.domain.name>:5000/openshift-release-dev/ocp-release:4.x.y-x86_64 | grep hypershift
其中
<dns.base.domain.name>
是 DNS 基本域名,4.x.y
是您要使用的支持的 OpenShift Container Platform 版本。输出示例
hypershift sha256:31149e3e5f8c5e5b5b100ff2d89975cf5f7a73801b2c06c639bf6648766117f8
使用 OpenShift Container Platform Images 命名空间,输入以下命令检查摘要:
podman pull registry.<dns.base.domain.name>:5000/openshift-release-dev/ocp-v4.0-art-dev@sha256:31149e3e5f8c5e5b5b100ff2d89975cf5f7a73801b2c06c639bf6648766117f8
其中
<dns.base.domain.name>
是 DNS 基本域名。输出示例
podman pull registry.dns.base.domain.name:5000/openshift/release@sha256:31149e3e5f8c5e5b5b100ff2d89975cf5f7a73801b2c06c639bf6648766117f8 Trying to pull registry.dns.base.domain.name:5000/openshift/release@sha256:31149e3e5f8c5e5b5b100ff2d89975cf5f7a73801b2c06c639bf6648766117f8... Getting image source signatures Copying blob d8190195889e skipped: already exists Copying blob c71d2589fba7 skipped: already exists Copying blob d4dc6e74b6ce skipped: already exists Copying blob 97da74cc6d8f skipped: already exists Copying blob b70007a560c9 done Copying config 3a62961e6e done Writing manifest to image destination Storing signatures 3a62961e6ed6edab46d5ec8429ff1f41d6bb68de51271f037c6cb8941a007fde
HostedCluster
对象中设置的发行镜像必须使用摘要而不是标签;例如,quay.io/openshift-release-dev/ocp-release@sha256:e3ba11bd1e5e8ea5a0b36a75791c90f29afb0fdbe4125be4e48f69c76a5c47a0
。
通过将 YAML 文件串联到一个文件中,并将它们应用到管理集群来创建它们。要做到这一点,请输入以下命令:
$ oc apply -f 01-4.14-hosted_cluster-nodeport.yaml
输出示例
NAME READY STATUS RESTARTS AGE capi-provider-5b57dbd6d5-pxlqc 1/1 Running 0 3m57s catalog-operator-9694884dd-m7zzv 2/2 Running 0 93s cluster-api-f98b9467c-9hfrq 1/1 Running 0 3m57s cluster-autoscaler-d7f95dd5-d8m5d 1/1 Running 0 93s cluster-image-registry-operator-5ff5944b4b-648ht 1/2 Running 0 93s cluster-network-operator-77b896ddc-wpkq8 1/1 Running 0 94s cluster-node-tuning-operator-84956cd484-4hfgf 1/1 Running 0 94s cluster-policy-controller-5fd8595d97-rhbwf 1/1 Running 0 95s cluster-storage-operator-54dcf584b5-xrnts 1/1 Running 0 93s cluster-version-operator-9c554b999-l22s7 1/1 Running 0 95s control-plane-operator-6fdc9c569-t7hr4 1/1 Running 0 3m57s csi-snapshot-controller-785c6dc77c-8ljmr 1/1 Running 0 77s csi-snapshot-controller-operator-7c6674bc5b-d9dtp 1/1 Running 0 93s csi-snapshot-webhook-5b8584875f-2492j 1/1 Running 0 77s dns-operator-6874b577f-9tc6b 1/1 Running 0 94s etcd-0 3/3 Running 0 3m39s hosted-cluster-config-operator-f5cf5c464-4nmbh 1/1 Running 0 93s ignition-server-6b689748fc-zdqzk 1/1 Running 0 95s ignition-server-proxy-54d4bb9b9b-6zkg7 1/1 Running 0 95s ingress-operator-6548dc758b-f9gtg 1/2 Running 0 94s konnectivity-agent-7767cdc6f5-tw782 1/1 Running 0 95s kube-apiserver-7b5799b6c8-9f5bp 4/4 Running 0 3m7s kube-controller-manager-5465bc4dd6-zpdlk 1/1 Running 0 44s kube-scheduler-5dd5f78b94-bbbck 1/1 Running 0 2m36s machine-approver-846c69f56-jxvfr 1/1 Running 0 92s oauth-openshift-79c7bf44bf-j975g 2/2 Running 0 62s olm-operator-767f9584c-4lcl2 2/2 Running 0 93s openshift-apiserver-5d469778c6-pl8tj 3/3 Running 0 2m36s openshift-controller-manager-6475fdff58-hl4f7 1/1 Running 0 95s openshift-oauth-apiserver-dbbc5cc5f-98574 2/2 Running 0 95s openshift-route-controller-manager-5f6997b48f-s9vdc 1/1 Running 0 95s packageserver-67c87d4d4f-kl7qh 2/2 Running 0 93s
当托管集群可用时,输出类似以下示例。
输出示例
NAMESPACE NAME VERSION KUBECONFIG PROGRESS AVAILABLE PROGRESSING MESSAGE clusters hosted-dual hosted-admin-kubeconfig Partial True False The hosted control plane is available
6.3.13.2. 为托管集群创建 NodePool 对象
NodePool
是与托管集群关联的一组可扩展的 worker 节点。NodePool
机器架构在特定池中保持一致,独立于 control plane 的机器架构。
流程
使用有关
NodePool
对象的以下信息创建 YAML 文件,根据需要替换值:apiVersion: hypershift.openshift.io/v1beta1 kind: NodePool metadata: creationTimestamp: null name: <hosted_cluster_name> \1 namespace: <hosted_cluster_namespace> \2 spec: arch: amd64 clusterName: <hosted_cluster_name> management: autoRepair: false \3 upgradeType: InPlace \4 nodeDrainTimeout: 0s platform: type: Agent release: image: registry.<dns.base.domain.name>:5000/openshift/release-images:4.x.y-x86_64 \5 replicas: 2 6 status: replicas: 2
- 1
- 将
<hosted_cluster_name>
替换为您的托管集群。 - 2
- 将
<hosted_cluster_namespace>
替换为托管集群命名空间的名称。 - 3
autoRepair
字段设置为false
,因为如果删除了该节点,则不会重新创建该节点。- 4
upgradeType
设置为InPlace
,这表示在升级过程中重复使用相同的裸机节点。- 5
- 此
NodePool
中包含的所有节点都基于以下 OpenShift Container Platform 版本:4.x.y-x86_64
。将<dns.base.domain.name>
值替换为您的 DNS 基本域名,并将4.x.y
值替换为您要使用的支持的 OpenShift Container Platform 版本。 - 6
- 您可以将
replicas
值设置为2
,以在托管集群中创建两个节点池副本。
运行以下命令来创建
NodePool
对象:$ oc apply -f 02-nodepool.yaml
输出示例
NAMESPACE NAME CLUSTER DESIRED NODES CURRENT NODES AUTOSCALING AUTOREPAIR VERSION UPDATINGVERSION UPDATINGCONFIG MESSAGE clusters hosted-dual hosted 0 False False 4.x.y-x86_64
6.3.13.3. 为托管集群创建 InfraEnv 资源
InfraEnv
资源是一个 Assisted Service 对象,其中包含重要详情,如 pullSecretRef
和 sshAuthorizedKey
。这些详情用于创建为托管集群自定义的 Red Hat Enterprise Linux CoreOS (RHCOS) 引导镜像。
您可以托管多个 InfraEnv
资源,各自采用特定类型的主机。例如,您可能想要在具有更大 RAM 容量的主机间划分服务器场。
流程
使用以下有关
InfraEnv
资源的信息创建一个 YAML 文件,根据需要替换值:apiVersion: agent-install.openshift.io/v1beta1 kind: InfraEnv metadata: name: <hosted_cluster_name> namespace: <hosted-cluster-namespace>-<hosted_cluster_name> 1 2 spec: pullSecretRef: 3 name: pull-secret sshAuthorizedKey: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDk7ICaUE+/k4zTpxLk4+xFdHi4ZuDi5qjeF52afsNkw0w/glILHhwpL5gnp5WkRuL8GwJuZ1VqLC9EKrdmegn4MrmUlq7WTsP0VFOZFBfq2XRUxo1wrRdor2z0Bbh93ytR+ZsDbbLlGngXaMa0Vbt+z74FqlcajbHTZ6zBmTpBVq5RHtDPgKITdpE1fongp7+ZXQNBlkaavaqv8bnyrP4BWahLP4iO9/xJF9lQYboYwEEDzmnKLMW1VtCE6nJzEgWCufACTbxpNS7GvKtoHT/OVzw8ArEXhZXQUS1UY8zKsX2iXwmyhw5Sj6YboA8WICs4z+TrFP89LmxXY0j6536TQFyRz1iB4WWvCbH5n6W+ABV2e8ssJB1AmEy8QYNwpJQJNpSxzoKBjI73XxvPYYC/IjPFMySwZqrSZCkJYqQ023ySkaQxWZT7in4KeMu7eS2tC+Kn4deJ7KwwUycx8n6RHMeD8Qg9flTHCv3gmab8JKZJqN3hW1D378JuvmIX4V0= 4
运行以下命令来创建
InfraEnv
资源:$ oc apply -f 03-infraenv.yaml
输出示例
NAMESPACE NAME ISO CREATED AT clusters-hosted-dual hosted 2023-09-11T15:14:10Z
6.3.13.4. 为托管集群创建 worker 节点
如果您在裸机平台上工作,创建 worker 节点至关重要,以确保正确配置了 BareMetalHost
中的详情。
如果使用虚拟机,您可以完成以下步骤,为 Metal3 Operator 创建空 worker 节点以使用。要做到这一点,您可以使用 kcli
工具。
流程
如果这不是您第一次尝试创建 worker 节点,您必须首先删除之前的设置。要做到这一点,请输入以下命令删除计划:
$ kcli delete plan <hosted_cluster_name> 1
- 1
- 将
<hosted_cluster_name>
替换为托管集群的名称。-
当系统提示您确认是否要删除计划时,请键入
y
。 - 确认您看到指出计划已删除的消息。
-
当系统提示您确认是否要删除计划时,请键入
输入以下命令创建虚拟机:
输入以下命令来创建第一个虚拟机:
$ kcli create vm \ -P start=False \1 -P uefi_legacy=true \2 -P plan=<hosted_cluster_name> \3 -P memory=8192 -P numcpus=16 \4 -P disks=[200,200] \5 -P nets=["{\"name\": \"<network>\", \"mac\": \"aa:aa:aa:aa:11:01\"}"] \6 -P uuid=aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1101 \ -P name=<hosted_cluster_name>-worker0 7
- 1
- 如果您不希望虚拟机(VM)在创建时自动启动,请包含
start=False
。 - 2
- 包含
uefi_legacy=true
,以指示您将使用 UEFI 传统引导来确保与之前的 UEFI 实现兼容。 - 3
- 将
<hosted_cluster_name>
替换为托管集群的名称。plan=<hosted_cluster_name>
语句指示计划名称,它将一组机器识别为集群。 - 4
- 包含
memory=8192
和numcpus=16
参数,以指定虚拟机的资源,包括 RAM 和 CPU。 - 5
- 包含
disk=[200,200]
,以指示您在虚拟机中创建两个精简配置的磁盘。 - 6
- 包括
nets=[{"name": "<network>", "mac": "aa:aa:aa:02:13"}]
以提供网络详情,包括要连接的网络名称、ipv4
、ipv6
或dual
)以及主接口的 MAC 地址。 - 7
- 将
<hosted_cluster_name>
替换为托管集群的名称。
输入以下命令来创建第二个虚拟机:
$ kcli create vm \ -P start=False \1 -P uefi_legacy=true \2 -P plan=<hosted_cluster_name> \3 -P memory=8192 -P numcpus=16 \4 -P disks=[200,200] \5 -P nets=["{\"name\": \"<network>\", \"mac\": \"aa:aa:aa:aa:11:02\"}"] \6 -P uuid=aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1102 -P name=<hosted_cluster_name>-worker1 7
- 1
- 如果您不希望虚拟机(VM)在创建时自动启动,请包含
start=False
。 - 2
- 包含
uefi_legacy=true
,以指示您将使用 UEFI 传统引导来确保与之前的 UEFI 实现兼容。 - 3
- 将
<hosted_cluster_name>
替换为托管集群的名称。plan=<hosted_cluster_name>
语句指示计划名称,它将一组机器识别为集群。 - 4
- 包含
memory=8192
和numcpus=16
参数,以指定虚拟机的资源,包括 RAM 和 CPU。 - 5
- 包含
disk=[200,200]
,以指示您在虚拟机中创建两个精简配置的磁盘。 - 6
- 包括
nets=[{"name": "<network>", "mac": "aa:aa:aa:02:13"}]
以提供网络详情,包括要连接的网络名称、ipv4
、ipv6
或dual
)以及主接口的 MAC 地址。 - 7
- 将
<hosted_cluster_name>
替换为托管集群的名称。
输入以下命令来创建第三个虚拟机:
$ kcli create vm \ -P start=False \1 -P uefi_legacy=true \2 -P plan=<hosted_cluster_name> \3 -P memory=8192 -P numcpus=16 \4 -P disks=[200,200] \5 -P nets=["{\"name\": \"<network>\", \"mac\": \"aa:aa:aa:aa:11:03\"}"] \6 -P uuid=aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa1103 -P name=<hosted_cluster_name>-worker2 7
- 1
- 如果您不希望虚拟机(VM)在创建时自动启动,请包含
start=False
。 - 2
- 包含
uefi_legacy=true
,以指示您将使用 UEFI 传统引导来确保与之前的 UEFI 实现兼容。 - 3
- 将
<hosted_cluster_name>
替换为托管集群的名称。plan=<hosted_cluster_name>
语句指示计划名称,它将一组机器识别为集群。 - 4
- 包含
memory=8192
和numcpus=16
参数,以指定虚拟机的资源,包括 RAM 和 CPU。 - 5
- 包含
disk=[200,200]
,以指示您在虚拟机中创建两个精简配置的磁盘。 - 6
- 包括
nets=[{"name": "<network>", "mac": "aa:aa:aa:02:13"}]
以提供网络详情,包括要连接的网络名称、ipv4
、ipv6
或dual
)以及主接口的 MAC 地址。 - 7
- 将
<hosted_cluster_name>
替换为托管集群的名称。
输入
restart ksushy
命令来重启ksushy
工具,以确保工具检测到您添加的虚拟机:$ systemctl restart ksushy
输出示例
+---------------------+--------+-------------------+----------------------------------------------------+-------------+---------+ | Name | Status | Ip | Source | Plan | Profile | +---------------------+--------+-------------------+----------------------------------------------------+-------------+---------+ | hosted-worker0 | down | | | hosted-dual | kvirt | | hosted-worker1 | down | | | hosted-dual | kvirt | | hosted-worker2 | down | | | hosted-dual | kvirt | +---------------------+--------+-------------------+----------------------------------------------------+-------------+---------+
6.3.13.5. 为托管集群创建裸机主机
裸机主机 是一个 openshift-machine-api
对象,其中包含物理和逻辑详情,以便它可以被 Metal3 Operator 识别。这些详细信息与其他 Assisted Service 对象关联,称为代理(agent)。
先决条件
在创建裸机主机和目标节点前,您必须让目标机器就绪。
流程
要创建裸机主机,请完成以下步骤:
使用以下信息创建 YAML 文件:
因为至少有一个 secret 包含裸机主机凭证,所以您需要为每个 worker 节点至少创建两个对象。
apiVersion: v1 kind: Secret metadata: name: <hosted_cluster_name>-worker0-bmc-secret \1 namespace: <hosted_cluster_namespace>-<hosted_cluster_name> \2 data: password: YWRtaW4= \3 username: YWRtaW4= \4 type: Opaque # ... apiVersion: metal3.io/v1alpha1 kind: BareMetalHost metadata: name: <hosted_cluster_name>-worker0 namespace: <hosted_cluster_namespace>-<hosted_cluster_name> \5 labels: infraenvs.agent-install.openshift.io: <hosted_cluster_name> \6 annotations: inspect.metal3.io: disabled bmac.agent-install.openshift.io/hostname: <hosted_cluster_name>-worker0 \7 spec: automatedCleaningMode: disabled \8 bmc: disableCertificateVerification: true \9 address: redfish-virtualmedia://[192.168.126.1]:9000/redfish/v1/Systems/local/<hosted_cluster_name>-worker0 \10 credentialsName: <hosted_cluster_name>-worker0-bmc-secret \11 bootMACAddress: aa:aa:aa:aa:02:11 \12 online: true 13
- 1
- 将
<hosted_cluster_name>
替换为您的托管集群。 - 2 5
- 将
<hosted_cluster_name>
替换为您的托管集群。将<hosted_cluster_namespace>
替换为托管集群命名空间的名称。 - 3
- 以 Base64 格式指定基板管理控制器(BMC)的密码。
- 4
- 以 Base64 格式指定 BMC 的用户名。
- 6
- 将
<hosted_cluster_name>
替换为您的托管集群。infraenvs.agent-install.openshift.io
字段充当 Assisted Installer 和BareMetalHost
对象之间的链接。 - 7
- 将
<hosted_cluster_name>
替换为您的托管集群。bmac.agent-install.openshift.io/hostname
字段表示部署期间采用的节点名称。 - 8
automatedCleaningMode
字段可防止 Metal3 Operator 擦除节点。- 9
disableCertificateVerification
字段设为true
,以从客户端绕过证书验证。- 10
- 将
<hosted_cluster_name>
替换为您的托管集群。address
字段表示 worker 节点的 BMC 地址。 - 11
- 将
<hosted_cluster_name>
替换为您的托管集群。credentialsName
字段指向存储用户和密码凭证的 secret。 - 12
bootMACAddress
字段指示节点从其启动的接口 MAC 地址。- 13
online
字段定义在BareMetalHost
对象创建后节点的状态。
输入以下命令部署
BareMetalHost
对象:$ oc apply -f 04-bmh.yaml
在此过程中,您可以查看以下输出:
此输出显示进程正在尝试访问节点:
输出示例
NAMESPACE NAME STATE CONSUMER ONLINE ERROR AGE clusters-hosted hosted-worker0 registering true 2s clusters-hosted hosted-worker1 registering true 2s clusters-hosted hosted-worker2 registering true 2s
此输出显示节点正在启动:
输出示例
NAMESPACE NAME STATE CONSUMER ONLINE ERROR AGE clusters-hosted hosted-worker0 provisioning true 16s clusters-hosted hosted-worker1 provisioning true 16s clusters-hosted hosted-worker2 provisioning true 16s
此输出显示节点成功启动:
输出示例
NAMESPACE NAME STATE CONSUMER ONLINE ERROR AGE clusters-hosted hosted-worker0 provisioned true 67s clusters-hosted hosted-worker1 provisioned true 67s clusters-hosted hosted-worker2 provisioned true 67s
节点启动后,注意命名空间中的代理,如下例所示:
输出示例
NAMESPACE NAME CLUSTER APPROVED ROLE STAGE clusters-hosted aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa0411 true auto-assign clusters-hosted aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa0412 true auto-assign clusters-hosted aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa0413 true auto-assign
代理代表可用于安装的节点。要将节点分配给托管集群,请扩展节点池。
6.3.13.6. 扩展节点池
创建裸机主机后,其状态会从 Registering
变为 Provisioning
再变为 Provisioned
。节点以代理的 LiveISO
开头,以及名为 agent
的默认 pod。该代理负责从 Assisted Service Operator 接收说明来安装 OpenShift Container Platform 有效负载。
流程
要扩展节点池,请输入以下命令:
$ oc -n <hosted_cluster_namespace> scale nodepool <hosted_cluster_name> --replicas 3
其中:
-
<hosted_cluster_namespace>
是托管集群命名空间的名称。 -
<hosted_cluster_name>
是托管集群的名称。
-
在扩展过程完成后,请注意代理被分配给托管集群:
输出示例
NAMESPACE NAME CLUSTER APPROVED ROLE STAGE clusters-hosted aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa0411 hosted true auto-assign clusters-hosted aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa0412 hosted true auto-assign clusters-hosted aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa0413 hosted true auto-assign
另请注意,节点池副本已设置:
输出示例
NAMESPACE NAME CLUSTER DESIRED NODES CURRENT NODES AUTOSCALING AUTOREPAIR VERSION UPDATINGVERSION UPDATINGCONFIG MESSAGE clusters hosted hosted 3 False False 4.x.y-x86_64 Minimum availability requires 3 replicas, current 0 available
使用您要使用的支持的 OpenShift Container Platform 版本替换
4.x.y
。- 等待节点加入集群。在此过程中,代理会为其阶段和状态提供更新。