# useradd kni
执行以下步骤以准备供应程序节点。
通过 ssh
登录到供应程序节点。
创建一个非 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 ''"
以新用户身份登录到供应程序节点
# su - kni
使用 Red Hat Subscription Manager 注册供应程序节点
$ 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
设置供应程序节点的 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
设置供应节点的公有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)
设置供应节点的私有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
和provisioning
网络的桥接
$ 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
"
根据需要,将 |
如果需要,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
在网页浏览器中,导航到使用用户预配的基础设施在裸机上安装。在步骤1中,点击下载拉取密钥。将内容粘贴到pull-secret.txt
文件中,并将内容保存到kni
用户的home目录。
所有OpenShift Container Platform集群节点都必须位于公有子网中。IBM Cloud® Bare Metal (Classic)在子网上不提供DHCP服务器。请在供应节点上单独设置它。
您必须重置在准备供应节点时定义的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 网络上的私有IP地址。将<prvn_pub_ip> 替换为供应节点在baremetal 网络上的公有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>
替换为供应节点的ID。
要检索<prvn_pub_ip>
的值,请执行
$ ibmcloud sl hardware detail <id> --output JSON | jq .primaryIpAddress -r
将<id>
替换为供应节点的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地址。
将每个节点的公有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
使用伪装将provisioning
添加到外部区域
$ sudo firewall-cmd --change-zone=provisioning --zone=external --permanent
此步骤可确保对管理子网的IPMI调用的网络地址转换。
重新加载firewalld
配置
$ sudo firewall-cmd --reload
使用安装程序的stable-4.x
版本和您选择的架构来部署OpenShift Container Platform的普遍可用的稳定版本
$ export VERSION=stable-4.17
$ 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}')
检索安装程序后,下一步是解压它。
设置环境变量
$ 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
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 (1)
username: <user>
password: <password>
bootMACAddress: <NIC1_mac_address> (2)
rootDeviceHints:
deviceName: "/dev/sda"
pullSecret: '<pull_secret>'
sshKey: '<ssh_pub_key>'
1 | bmc.address 提供了一个privilegelevel 配置设置,其值为OPERATOR 。这是IBM Cloud® Bare Metal (Classic)基础设施所必需的。 |
2 | 添加相应节点的私有provisioning 网络NIC的MAC地址。 |
您可以使用
将 |
创建一个目录来存储集群配置
$ mkdir ~/clusterconfigs
将install-config.yaml
文件复制到该目录
$ cp install-config.yaml ~/clusterconfigs
确保在安装OpenShift Container Platform集群之前关闭所有裸机节点的电源
$ ipmitool -I lanplus -U <user> -P <password> -H <management_server_ip> power off
如果以前部署尝试中遗留了旧的引导资源,请将其删除
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
install-config
参数有关install-config.yaml
文件的必需参数、hosts
参数和bmc
参数,请参见下表。
参数 | 默认值 | 描述 | ||
---|---|---|---|---|
|
集群的域名。例如, |
|||
|
|
节点的启动模式。选项包括 |
||
|
引导节点的静态网络 DNS。在裸机网络上没有动态主机配置协议 (DHCP) 服务器时,使用静态 IP 地址部署集群时,必须设置此值。如果不设置此值,安装程序将使用 |
|||
|
引导虚拟机的静态 IP 地址。在裸机网络上没有 DHCP 服务器时,使用静态 IP 地址部署集群时,必须设置此值。 |
|||
|
引导虚拟机的网关的静态 IP 地址。在裸机网络上没有 DHCP 服务器时,使用静态 IP 地址部署集群时,必须设置此值。 |
|||
|
|
|||
|
|
|||
metadata: name: |
要赋予 OpenShift Container Platform 集群的名称。例如, |
|||
networking: machineNetwork: - cidr: |
外部网络的公共 CIDR(无类别域间路由)。例如, |
|||
compute: - name: worker |
即使没有节点,OpenShift Container Platform 集群也需要为计算节点提供名称。 |
|||
compute: replicas: 2 |
Replicas 设置 OpenShift Container Platform 集群中计算节点的数量。 |
|||
controlPlane: name: master |
OpenShift Container Platform 集群需要为控制平面节点提供名称。 |
|||
controlPlane: replicas: 3 |
Replicas 设置作为 OpenShift Container Platform 集群一部分包含的控制平面节点的数量。 |
|||
|
连接到预配网络的节点上的网络接口名称。对于 OpenShift Container Platform 4.9 及更高版本,请使用 |
|||
|
用于没有平台配置的机器池的默认配置。 |
|||
|
(可选) Kubernetes API 通信的虚拟 IP 地址。 此设置必须在
|
|||
|
|
|
||
|
(可选) 入口流量的虚拟 IP 地址。 此设置必须在
|
参数 | 默认值 | 描述 |
---|---|---|
|
|
定义预配网络上节点的 IP 范围。 |
|
|
用于预配的网络的 CIDR。在不使用预配网络上的默认地址范围时,此选项是必需的。 |
|
|
集群中运行预配服务的 IP 地址。默认为预配子网的第三个 IP 地址。例如, |
|
|
安装程序部署控制平面(主)节点时,引导虚拟机上运行预配服务的 IP 地址。默认为预配子网的第二个 IP 地址。例如, |
|
|
连接到裸机网络的虚拟机的裸机桥的名称。 |
|
|
连接到预配网络的 |
|
定义集群的主机架构。有效值为 |
|
|
用于没有平台配置的机器池的默认配置。 |
|
|
用于覆盖引导节点默认操作系统的镜像的 URL。URL 必须包含镜像的 SHA-256 哈希值。例如: |
|
|
|
|
|
将此参数设置为环境中使用的相应 HTTP 代理。 |
|
|
将此参数设置为环境中使用的相应 HTTPS 代理。 |
|
|
将此参数设置为环境中代理使用的适当排除列表。 |
hosts
参数是用于构建集群的独立裸机资产列表。
名称 | 默认值 | 描述 | ||
---|---|---|---|---|
|
要与详细信息关联的 |
|||
|
裸机节点的角色。 |
|||
|
基板管理控制器的连接详细信息。有关更多详细信息,请参阅 BMC寻址部分。 |
|||
|
主机用于预配网络的网卡的 MAC 地址。Ironic 使用
|
|||
|
设置此可选参数以配置主机的网络接口。有关更多详细信息,请参阅“(可选)配置主机网络接口”。 |
rootDeviceHints
参数使安装程序能够将 Red Hat Enterprise Linux CoreOS (RHCOS) 镜像预配到特定设备。安装程序按照发现设备的顺序检查设备,并将发现的值与提示值进行比较。安装程序使用第一个与提示值匹配的已发现设备。配置可以组合多个提示,但设备必须匹配所有提示才能使安装程序选择它。
子字段 | 描述 |
---|---|
|
包含 Linux 设备名称(例如 |
|
包含 SCSI 总线地址(如 |
|
包含特定于供应商的设备标识符的字符串。提示可以是实际值的子字符串。 |
|
包含设备供应商或制造商名称的字符串。提示可以是实际值的子字符串。 |
|
包含设备序列号的字符串。提示必须与实际值完全匹配。 |
|
表示设备以千兆字节为单位的最小大小的整数。 |
|
包含唯一存储标识符的字符串。提示必须与实际值完全匹配。 |
|
包含唯一存储标识符(附加了供应商扩展名)的字符串。提示必须与实际值完全匹配。 |
|
包含唯一的供应商存储标识符的字符串。提示必须与实际值完全匹配。 |
|
布尔值,指示设备是否应为旋转磁盘 (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"
创建 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