15.2. 为 OpenShift Container Platform 安装设置环境
15.2.1. 在 IBM Cloud Bare Metal (Classic) 基础架构上准备 provisioner 节点
执行以下步骤准备 provisioner 节点。
流程
-
通过
ssh
登录到 provisioner 节点。 创建非 root 用户(
kni
)并为该用户提供sudo
权限:# useradd kni
# passwd kni
# echo "kni ALL=(root) NOPASSWD:ALL" | tee -a /etc/sudoers.d/kni
# chmod 0440 /etc/sudoers.d/kni
为新用户创建
ssh
密钥:# su - kni -c "ssh-keygen -f /home/kni/.ssh/id_rsa -N ''"
以新用户身份登录到 provisioner 节点:
# su - kni
使用 Red Hat Subscription Manager 注册 provisioner 节点:
$ sudo subscription-manager register --username=<user> --password=<pass> --auto-attach
$ sudo subscription-manager repos --enable=rhel-8-for-x86_64-appstream-rpms \ --enable=rhel-8-for-x86_64-baseos-rpms
注意有关 Red Hat Subscription Manager 的详情,请参考 使用和配置 Red Hat Subscription Manager。
安装以下软件包:
$ sudo dnf install -y libvirt qemu-kvm mkisofs python3-devel jq ipmitool
修改用户,将
libvirt
组添加到新创建的用户:$ sudo usermod --append --groups libvirt kni
启动
firewalld
:$ sudo systemctl start firewalld
启用
firewalld
:$ sudo systemctl enable firewalld
启动
http
服务:$ sudo firewall-cmd --zone=public --add-service=http --permanent
$ sudo firewall-cmd --reload
启动并启用
libvirtd
服务:$ sudo systemctl enable libvirtd --now
设置 provisioner 节点的 ID:
$ PRVN_HOST_ID=<ID>
您可以使用以下
ibmcloud
命令查看 ID:$ ibmcloud sl hardware list
设置公共子网的 ID:
$ PUBLICSUBNETID=<ID>
您可以使用以下
ibmcloud
命令查看 ID:$ ibmcloud sl subnet list
设置专用子网的 ID:
$ PRIVSUBNETID=<ID>
您可以使用以下
ibmcloud
命令查看 ID:$ ibmcloud sl subnet list
设置 provisioner 节点公共 IP 地址:
$ PRVN_PUB_IP=$(ibmcloud sl hardware detail $PRVN_HOST_ID --output JSON | jq .primaryIpAddress -r)
为公共网络设置 CIDR:
$ PUBLICCIDR=$(ibmcloud sl subnet detail $PUBLICSUBNETID --output JSON | jq .cidr)
为公共网络设置 IP 地址和 CIDR:
$ PUB_IP_CIDR=$PRVN_PUB_IP/$PUBLICCIDR
为公共网络设置网关:
$ PUB_GATEWAY=$(ibmcloud sl subnet detail $PUBLICSUBNETID --output JSON | jq .gateway -r)
设置 provisioner 节点的专用 IP 地址:
$ PRVN_PRIV_IP=$(ibmcloud sl hardware detail $PRVN_HOST_ID --output JSON | \ jq .primaryBackendIpAddress -r)
为专用网络设置 CIDR:
$ PRIVCIDR=$(ibmcloud sl subnet detail $PRIVSUBNETID --output JSON | jq .cidr)
设置专用网络的 IP 地址和 CIDR:
$ PRIV_IP_CIDR=$PRVN_PRIV_IP/$PRIVCIDR
为专用网络设置网关:
$ PRIV_GATEWAY=$(ibmcloud sl subnet detail $PRIVSUBNETID --output JSON | jq .gateway -r)
为
baremetal
设置网桥并置备
网络:$ sudo nohup bash -c " nmcli --get-values UUID con show | xargs -n 1 nmcli con delete nmcli connection add ifname provisioning type bridge con-name provisioning nmcli con add type bridge-slave ifname eth1 master provisioning nmcli connection add ifname baremetal type bridge con-name baremetal nmcli con add type bridge-slave ifname eth2 master baremetal nmcli connection modify baremetal ipv4.addresses $PUB_IP_CIDR ipv4.method manual ipv4.gateway $PUB_GATEWAY nmcli connection modify provisioning ipv4.addresses 172.22.0.1/24,$PRIV_IP_CIDR ipv4.method manual nmcli connection modify provisioning +ipv4.routes \"10.0.0.0/8 $PRIV_GATEWAY\" nmcli con down baremetal nmcli con up baremetal nmcli con down provisioning nmcli con up provisioning init 6 "
注意对于
eth1
和eth2
,根据需要替换相应的接口名称。如果需要,通过 SSH 重新连接到
provisioner
节点:# ssh kni@provisioner.<cluster-name>.<domain>
验证连接网桥是否已正确创建:
$ sudo nmcli con show
输出示例
NAME UUID TYPE DEVICE baremetal 4d5133a5-8351-4bb9-bfd4-3af264801530 bridge baremetal provisioning 43942805-017f-4d7d-a2c2-7cb3324482ed bridge provisioning virbr0 d9bca40f-eee1-410b-8879-a2d4bb0465e7 bridge virbr0 bridge-slave-eth1 76a8ed50-c7e5-4999-b4f6-6d9014dd0812 ethernet eth1 bridge-slave-eth2 f31c3353-54b7-48de-893a-02d2b34c4736 ethernet eth2
创建
pull-secret.txt
文件:$ vim pull-secret.txt
在 Web 浏览器中,导航到 Install on Bare Metal with user-provisioned infrastructure。在第 1 步中,点击 Download pull secret。将内容粘贴到
pull-secret.txt
文件中,并将内容保存到kni
用户的主目录中。
15.2.2. 配置公共子网
所有 OpenShift Container Platform 集群节点都必须位于公共子网中。IBM Cloud® Bare Metal (Classic) 不会在子网上提供 DHCP 服务器。在 provisioner 节点上单独设置它。
您必须重置准备 provisioner 节点时定义的 BASH 变量。在准备完置备程序节点后,重新引导置备程序节点将删除之前设置的 BASH 变量。
流程
安装
dnsmasq
:$ sudo dnf install dnsmasq
打开
dnsmasq
配置文件:$ sudo vi /etc/dnsmasq.conf
在
dnsmasq
配置文件中添加以下配置:interface=baremetal except-interface=lo bind-dynamic log-dhcp dhcp-range=<ip_addr>,<ip_addr>,<pub_cidr> 1 dhcp-option=baremetal,121,0.0.0.0/0,<pub_gateway>,<prvn_priv_ip>,<prvn_pub_ip> 2 dhcp-hostsfile=/var/lib/dnsmasq/dnsmasq.hostsfile
- 1
- 设置 DHCP 范围。将
<ip_addr>
实例替换为一个来自公共子网的未使用的 IP 地址,以便baremetal
网络的dhcp-range
并以相同的 IP 地址开始和结尾。将<pub_cidr>
替换为公共子网的 CIDR。 - 2
- 设置 DHCP 选项。将
<pub_gateway>
替换为baremetal
网络的网关 IP 地址。将<prvn_priv_ip>
替换为provisioning
网络上 provisioner 节点的专用 IP 地址的 IP 地址。将<prvn_pub_ip>
替换为baremetal
网络中 provisioner 节点的公共 IP 地址的 IP 地址。
要检索
<pub_cidr>
的值,请执行:$ ibmcloud sl subnet detail <publicsubnetid> --output JSON | jq .cidr
将
<publicsubnetid>
替换为公共子网的 ID。要检索
<pub_gateway>
的值,请执行:$ ibmcloud sl subnet detail <publicsubnetid> --output JSON | jq .gateway -r
将
<publicsubnetid>
替换为公共子网的 ID。要检索
<prvn_priv_ip>
的值,请执行:$ ibmcloud sl hardware detail <id> --output JSON | \ jq .primaryBackendIpAddress -r
将
<id>
替换为 provisioner 节点的 ID。要检索
<prvn_pub_ip>
的值,请执行:$ ibmcloud sl hardware detail <id> --output JSON | jq .primaryIpAddress -r
将
<id>
替换为 provisioner 节点的 ID。获取集群的硬件列表:
$ ibmcloud sl hardware list
获取每个节点的 MAC 地址和 IP 地址:
$ ibmcloud sl hardware detail <id> --output JSON | \ jq '.networkComponents[] | \ "\(.primaryIpAddress) \(.macAddress)"' | grep -v null
将
<id>
替换为节点的 ID。输出示例
"10.196.130.144 00:e0:ed:6a:ca:b4" "141.125.65.215 00:e0:ed:6a:ca:b5"
记录公共网络的 MAC 地址和 IP 地址。单独记录专用网络的 MAC 地址,稍后您将在
install-config.yaml
文件中使用它。对每个节点重复这个过程,直到您拥有公共baremetal
网络的所有公共 MAC 和 IP 地址,以及私有provisioning
网络的 MAC 地址。将每个节点的 public
baremetal
网络的 MAC 和 IP 地址对添加到dnsmasq.hostsfile
文件中:$ sudo vim /var/lib/dnsmasq/dnsmasq.hostsfile
输入示例
00:e0:ed:6a:ca:b5,141.125.65.215,master-0 <mac>,<ip>,master-1 <mac>,<ip>,master-2 <mac>,<ip>,worker-0 <mac>,<ip>,worker-1 ...
将
<mac>,<ip>
替换为相应节点名称的公共 MAC 地址和公共 IP 地址。启动
dnsmasq
:$ sudo systemctl start dnsmasq
启用
dnsmasq
,以便在引导节点时启动:$ sudo systemctl enable dnsmasq
验证
dnsmasq
是否正在运行:$ sudo systemctl status dnsmasq
输出示例
● dnsmasq.service - DNS caching server. Loaded: loaded (/usr/lib/systemd/system/dnsmasq.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2021-10-05 05:04:14 CDT; 49s ago Main PID: 3101 (dnsmasq) Tasks: 1 (limit: 204038) Memory: 732.0K CGroup: /system.slice/dnsmasq.service └─3101 /usr/sbin/dnsmasq -k
使用 UDP 协议打开端口
53
和67
:$ sudo firewall-cmd --add-port 53/udp --permanent
$ sudo firewall-cmd --add-port 67/udp --permanent
使用 masquerade 为外部区添加
置备
:$ sudo firewall-cmd --change-zone=provisioning --zone=external --permanent
这一步可确保将 IPMI 调用的网络地址转换为管理子网。
重新载入
firewalld
配置:$ sudo firewall-cmd --reload
15.2.3. 检索 OpenShift Container Platform 安装程序
使用安装程序的 stable-4.x
版本和您选择的架构来部署 OpenShift Container Platform 的一般稳定版本:
$ export VERSION=stable-4.11
$ export RELEASE_ARCH=<architecture>
$ export RELEASE_IMAGE=$(curl -s https://mirror.openshift.com/pub/openshift-v4/$RELEASE_ARCH/clients/ocp/$VERSION/release.txt | grep 'Pull From: quay.io' | awk -F ' ' '{print $3}')
15.2.4. 提取 OpenShift Container Platform 安装程序
在获取安装程序后,下一步是提取它。
流程
设置环境变量:
$ export cmd=openshift-baremetal-install
$ export pullsecret_file=~/pull-secret.txt
$ export extract_dir=$(pwd)
获取
oc
二进制文件:$ curl -s https://mirror.openshift.com/pub/openshift-v4/clients/ocp/$VERSION/openshift-client-linux.tar.gz | tar zxvf - oc
解压安装程序:
$ sudo cp oc /usr/local/bin
$ oc adm release extract --registry-config "${pullsecret_file}" --command=$cmd --to "${extract_dir}" ${RELEASE_IMAGE}
$ sudo cp openshift-baremetal-install /usr/local/bin
15.2.5. 配置 install-config.yaml 文件
install-config.yaml
文件需要一些额外的详情。大多数信息用于指导安装程序,从而让集群足够了解可用的 IBM Cloud® Bare Metal (Classic) 硬件,以便它可以完全管理它。在裸机上安装和在 IBM Cloud Bare Metal (Classic) 上安装之间的材料区别在于,您必须在 install-config.yaml
文件的 BMC 部分中明确设置 IPMI 的权限级别。
流程
配置
install-config.yaml
。更改适当的变量以匹配环境,包括pullSecret
和sshKey
。apiVersion: v1 baseDomain: <domain> metadata: name: <cluster_name> networking: machineNetwork: - cidr: <public-cidr> networkType: OVNKubernetes compute: - name: worker replicas: 2 controlPlane: name: master replicas: 3 platform: baremetal: {} platform: baremetal: apiVIP: <api_ip> ingressVIP: <wildcard_ip> provisioningNetworkInterface: <NIC1> provisioningNetworkCIDR: <CIDR> hosts: - name: openshift-master-0 role: master bmc: address: ipmi://10.196.130.145?privilegelevel=OPERATOR 1 username: root password: <password> bootMACAddress: 00:e0:ed:6a:ca:b4 2 rootDeviceHints: deviceName: "/dev/sda" - name: openshift-worker-0 role: worker bmc: address: ipmi://<out-of-band-ip>?privilegelevel=OPERATOR 3 username: <user> password: <password> bootMACAddress: <NIC1_mac_address> 4 rootDeviceHints: deviceName: "/dev/sda" pullSecret: '<pull_secret>' sshKey: '<ssh_pub_key>'
注意您可以使用
ibmcloud
命令行实用程序来检索密码。$ ibmcloud sl hardware detail <id> --output JSON | \ jq '"(.networkManagementIpAddress) (.remoteManagementAccounts[0].password)"'
将
<id>
替换为节点的 ID。创建用于存储集群配置的目录:
$ mkdir ~/clusterconfigs
将
install-config.yaml
文件复制到目录中:$ cp install-config.yaml ~/clusterconfig
在安装 OpenShift Container Platform 集群前,请确保关闭所有裸机节点:
$ ipmitool -I lanplus -U <user> -P <password> -H <management_server_ip> power off
如果以前的部署尝试中保留了旧的 bootstrap 资源,请删除旧的 bootstrap 资源:
for i in $(sudo virsh list | tail -n +3 | grep bootstrap | awk {'print $2'}); do sudo virsh destroy $i; sudo virsh undefine $i; sudo virsh vol-delete $i --pool $i; sudo virsh vol-delete $i.ign --pool $i; sudo virsh pool-destroy $i; sudo virsh pool-undefine $i; done
15.2.6. 其他 install-config
参数
下表列出了 install-config.yaml
文件所需的 参数
、hosts 参数和 bmc
参数。
参数 | default | 描述 |
---|---|---|
|
集群的域名。例如: | |
|
|
节点的引导模式。选项为 |
| bootstrap 虚拟机的静态 IP 地址。当 bare-metal 网络中没有 DHCP 服务器时部署使用静态 IP 地址的集群时,必须设置这个值。 | |
| bootstrap 虚拟机网关的静态 IP 地址。当 bare-metal 网络中没有 DHCP 服务器时部署使用静态 IP 地址的集群时,必须设置这个值。 | |
|
| |
|
| |
metadata: name: |
提供给 OpenShift Container Platform 集群的名称。例如: | |
networking: machineNetwork: - cidr: |
外部网络的公共 CIDR(Classless Inter-Domain Routing)。例如: | |
compute: - name: worker | OpenShift Container Platform 集群需要为 worker(或计算节点)节点提供一个名称,即使没有节点也是如此。 | |
compute: replicas: 2 | replicas 设置 OpenShift Container Platform 集群中 worker(或计算)节点的数量。 | |
controlPlane: name: master | OpenShift Container Platform 集群需要一个 control plane(master)节点的名称。 | |
controlPlane: replicas: 3 | replicas 设置作为 OpenShift Container Platform 集群一部分的 control plane(master)节点数量。 | |
|
连接到 provisioning 网络的节点上的网络接口名称。对于 OpenShift Container Platform 4.9 及更新的版本,使用 | |
| 用于没有平台配置的机器池的默认配置。 | |
| (可选)用于 Kubernetes API 通信的虚拟 IP 地址。
此设置必须在 | |
|
|
|
| (可选)入口流量的虚拟 IP 地址。
此设置必须在 |
参数 | default | 描述 |
---|---|---|
|
| 定义 provisioning 网络上节点的 IP 范围。 |
|
| 用于置备的网络的 CIDR。在 provisioning 网络中不使用默认地址范围时需要这个选项。 |
|
|
运行置备服务的集群中的 IP 地址。默认为 provisioning 子网的第三个 IP 地址。例如: |
|
|
在安装程序部署 control plane(master)节点时运行置备服务的 bootstrap 虚拟机上的 IP 地址。默认为 provisioning 子网的第二个 IP 地址。例如: |
|
| 附加到裸机网络的虚拟机监控程序的裸机网桥名称。 |
|
|
附加到 provisioning 网络的 |
|
定义集群的主机架构。有效值为 | |
| 用于没有平台配置的机器池的默认配置。 | |
|
用于覆盖 bootstrap 节点的默认操作系统镜像的 URL。URL 必须包含镜像的 SHA-256 哈希。例如: | |
|
| |
| 将此参数设置为环境中使用的适当 HTTP 代理。 | |
| 将此参数设置为环境中使用的适当 HTTPS 代理。 | |
| 将此参数设置为适合环境中代理使用的排除项。 |
主机
hosts
参数是用于构建集群的独立裸机资产列表。
名称 | default | 描述 |
---|---|---|
|
与详细信息 | |
|
裸机节点的角色。 | |
| 基板管理控制器的连接详情。如需了解更多详细信息,请参阅 BMC 寻址部分。 | |
|
主机用于 provisioning 网络的 NIC 的 MAC 地址。Ironic 使用 注意 如果您禁用了 provisioning 网络,则必须从主机提供有效的 MAC 地址。 | |
| 设置此可选参数来配置主机的网络接口。如需了解更多详细信息,请参阅"(可选)配置主机网络接口"。 |
15.2.7. Root 设备提示
rootDeviceHints
参数可让安装程序将 Red Hat Enterprise Linux CoreOS(RHCOS)镜像置备到特定的设备。安装程序会按照发现设备的顺序检查设备,并将发现的值与 hint 值进行比较。安装程序使用第一个与 hint 值匹配的发现设备。配置可以组合多个 hint,但设备必须与所有提示匹配,以便安装程序进行选择。
子字段 | 描述 |
---|---|
|
包含类似 |
|
包含类似 |
| 包含特定厂商的设备标识符的字符串。hint 可以是实际值的子字符串。 |
| 包含该设备厂商或制造商名称的字符串。hint 可以是实际值的子字符串。 |
| 包含设备序列号的字符串。hint 必须与实际值完全匹配。 |
| 以 GB 为单位代表设备的最小大小的整数。 |
| 包含唯一存储标识符的字符串。hint 必须与实际值完全匹配。 |
| 包含唯一存储标识符的字符串,并附加厂商扩展。hint 必须与实际值完全匹配。 |
| 包含唯一厂商存储标识符的字符串。hint 必须与实际值完全匹配。 |
| 指明该设备为旋转磁盘(true)还是非旋转磁盘(false)的布尔值。 |
示例用法
- name: master-0 role: master bmc: address: ipmi://10.10.0.3:6203 username: admin password: redhat bootMACAddress: de:ad:be:ef:00:40 rootDeviceHints: deviceName: "/dev/sda"
15.2.8. 创建 OpenShift Container Platform 清单
创建 OpenShift Container Platform 清单。
$ ./openshift-baremetal-install --dir ~/clusterconfigs create manifests
INFO Consuming Install Config from target directory WARNING Making control-plane schedulable by setting MastersSchedulable to true for Scheduler cluster settings WARNING Discarding the OpenShift Manifest that was provided in the target directory because its dependencies are dirty and it needs to be regenerated
15.2.9. 通过 OpenShift Container Platform 安装程序部署集群
运行 OpenShift Container Platform 安装程序:
$ ./openshift-baremetal-install --dir ~/clusterconfigs --log-level debug create cluster
15.2.10. 安装后
在部署过程中,您可以通过向安装目录文件夹中的 .openshift_install.log
日志文件发出 tail
命令来检查安装的整体状态:
$ tail -f /path/to/install-dir/.openshift_install.log