添加工作线程节点
使用此过程可将工作器节点添加到 OpenShift 群集。
我们提供此示例过程纯粹是为了提供信息。有关官方程序,请参阅 Red Hat OpenShift 文档 (https://docs.openshift.com/)。
此过程显示了早期绑定的示例。在早期绑定中,您可以生成为现有集群预配置的 ISO。当节点使用该 ISO 启动时,节点会自动访问现有集群。
这会导致一个或多个证书签名请求 (CSR) 从新节点发送到现有群集。CSR 只是获取(现有)群集的客户端证书的请求。您需要明确批准这些请求。获得批准后,现有群集将向新节点提供客户端证书,并允许新节点加入现有群集。
- 登录到用作辅助安装程序客户端的计算机(VM 或 BMS)。在辅助安装程序客户端计算机上,您可以向红帽托管的辅助安装程序服务发出辅助安装程序 API 调用。
- 通过设置将在后续步骤中使用的环境变量来准备部署。
- 设置用于现有群集的相同 SSH 密钥。
在此示例中,我们从其默认位置 ~/.ssh/id_rsa.pub 检索该 SSH 密钥并存储到变量中。
export CLUSTER_SSHKEY=$(cat ~/.ssh/id_rsa.pub)
- 如果您不再拥有映像拉取密钥,请将映像提取密钥从您的红帽帐户下载到本地计算机上。拉取密钥允许您的安装访问为 OpenShift 组件提供容器映像的服务和注册表。
如果您使用的是红帽托管的辅助安装程序,则可以从 https://console.redhat.com/openshift/downloads 页面下载拉取密钥文件(拉取密钥)。将拉取密钥文件复制到辅助安装程序客户端计算机。在此示例中,我们将拉取密钥存储在名为 pull-secret.txt 的文件中。
去除任何空格,将内容转换为 JSON 字符串格式,并存储为环境变量,如下所示:
export PULL_SECRET=$(sed '/^[[:space:]]*$/d' pull-secret.txt | jq -R .)
- 如果您不再拥有离线访问令牌,请从您的红帽帐户复制离线访问令牌。OpenShift 集群管理器 API 令牌允许您(在辅助安装程序客户端计算机上)与红帽托管的辅助安装程序 API 服务进行交互。
令牌是可以复制并粘贴到本地环境变量的字符串。如果您使用的是红帽托管的辅助安装程序,则可以从 https://console.redhat.com/openshift/downloads 复制 API 令牌。
export OFFLINE_ACCESS_TOKEN='<paste offline access token here>'
- 从OFFLINE_ACCESS_TOKEN生成(刷新)令牌。每当发出 API 命令时,您都将使用此生成的令牌。
export TOKEN=$(curl --silent --data-urlencode "grant_type=refresh_token" --data-urlencode "client_id=cloud-services" --data-urlencode "refresh_token=${OFFLINE_ACCESS_TOKEN}" https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token | jq -r .access_token)
注意:此令牌定期过期。当此令牌过期时,每当发出 API 命令时,您都会收到 HTTP 4xx 响应。令牌过期时刷新令牌,或者,在过期前定期刷新令牌。在令牌未过期时刷新令牌并没有什么坏处。
- 获取现有集群的 OpenShift 集群 ID。
例如:将其保存到变量:
oc get clusterversion -o jsonpath='{.items[].spec.clusterID}{"\n"}' 1777102a-1fe1-407a-9441-9d0bad4f5968
export $OS_CLUSTER_ID="1777102a-1fe1-407a-9441-9d0bad4f5968"
- 设置其余的环境变量。
表 1 列出了在此过程中需要设置的所有环境变量,包括前面步骤中描述的环境变量。
表 1:环境变量 变量 描述 示例 CLUSTER_SSHKEY 用于现有群集的(公共)SSH 密钥。您必须对要添加的新节点使用相同的密钥。 – PULL_SECRET 已下载、剥离并转换为 JSON 字符串格式的映像拉取机密。 – OFFLINE_ACCESS_TOKEN 您复制的 OpenShift 集群管理器 API 令牌。 – 令 牌 从OFFLINE_ACCESS_TOKEN生成(刷新)的令牌。 – CLUSTER_NAME 现有群集的名称。 我的集群 CLUSTER_DOMAIN 现有群集的基本域。 Contrail.lan OS_CLUSTER_ID 现有集群的 OpenShift 集群 ID。 1777102A-1FE1-407A-9441-9D0BAD4F5968 AI_URL 辅助安装程序服务的 URL。此示例使用 Red Hat 托管的辅助安装程序。 https://api.openshift.com
- 设置用于现有群集的相同 SSH 密钥。
- 导入现有群集。
curl -X POST "$AI_URL/api/assisted-install/v2/clusters/import" -H "accept: application/json" -H "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" -d "{\"name\":\"$CLUSTER_NAME\",\"openshift_cluster_id\":\"$OS_CLUSTER_ID\",\"api_vip_dnsname\":\"api.$CLUSTER_NAME.$CLUSTER_DOMAIN\"}"
导入群集时,辅助安装程序服务将返回 AddHosts群集的群集 ID。仔细查看响应中嵌入的群集 ID。例如:
"id":"19b809b5-69c4-42d8-9e5e-56aae4aba386"
- 生成发现启动 ISO。您将使用此 ISO 启动要添加到群集的节点。
ISO 会根据您将设置的基础架构环境针对您的基础架构进行自定义。
- 创建描述基础结构环境的文件。在此示例中,我们将其命名为 infra-envs-addhost.json。
cat << EOF > ./infra-envs-addhost.json { "name": "<InfraEnv Name>", "ssh_authorized_key": "$CLUSTER_SSHKEY", "pull_secret": $PULL_SECRET, "cluster_id": "<AddHostsCluster ID>", "openshift_version": "4.8", "user_managed_networking": <same as for existing cluster>, "vip_dhcp_allocation": <same as for existing cluster>, "base_dns_domain": "$CLUSTER_DOMAIN", } EOF
- InfraEnv Name 是您想要称为 InfraEnv 的名称。
- AddHostsCluster ID 是 AddHostsCluster 的群集 ID(在上一步中获取)。
user_managed_networking
并vip_dhcp_allocation
设置为与现有集群相同的值。
- 注册红外线。作为响应,辅助安装程序服务分配一个 InfraEnv ID,并根据指定的基础结构环境构建发现引导 ISO。
curl -X POST "$AI_URL/api/assisted-install/v2/infra-envs" -H "accept: application/json" -H "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" -d @infra-envs-addhosts.json
注册 InfraEnv 时,辅助安装程序服务会返回 InfraEnv ID。请仔细查找响应中嵌入的 InfraEnv ID。例如:
"id":"78d20699-f25b-462c-bc1d-4738590a9344"
将 InfraEnv ID 存储到变量中。例如:
export INFRA_ENV_ID="78d20699-f25b-462c-bc1d-4738590a9344"
- 获取图像下载 URL。
curl -s $AI_URL/api/assisted-install/v2/infra-envs/$INFRA_ENV_ID/downloads/image-url -H "accept: application/json" -H "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" | jq '.url'
- 下载 ISO 并将其保存到文件中。在此示例中,我们将其保存到ai-liveiso-addhosts.iso。
curl -L "<image URL>" -H "Authorization: Bearer $TOKEN" -o ./ai-liveiso-addhosts.iso
- 创建描述基础结构环境的文件。在此示例中,我们将其命名为 infra-envs-addhost.json。
- 使用发现引导 ISO 引导新的工作器节点。选择最适合您的基础架构的引导方法。确保新节点启动时连接到可以访问红帽托管的辅助安装程序的网络。
- 将新节点安装到现有群集。
- 检查新节点以确保其角色设置为辅助角色。
curl -s -X GET --header "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" $AI_URL/api/assisted-install/v2/infra-envs/$INFRA_ENV_ID/hosts | jq '.'
仅当主机角色设置为辅助角色时,才继续操作。
- 获取新节点的主机 ID。
export HOST_ID=$(curl -s -X GET --header "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" $AI_URL/api/assisted-install/v2/infra-envs/$INFRA_ENV_ID/hosts | jq -r '.[].id')
- 安装新节点。
curl -X POST "$AI_URL/api/assisted-install/v2/infra-envs/$INFRA_ENV_ID/hosts/$HOST_ID/actions/install" -H "accept: application/json" -H "Authorization: Bearer $TOKEN" | jq -r
- 检查安装进度。
curl -s -X GET --header "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" $AI_URL/api/assisted-install/v2/infra-envs/$INFRA_ENV_ID/hosts | jq '.'
- 检查新节点以确保其角色设置为辅助角色。
- 新节点重新启动后,它将尝试加入现有群集。这会导致一个或多个证书签名请求 (CSR) 从新节点发送到现有群集。您需要批准 CSR 请求。
- 检查挂起的 CSR。
例如:
root@ai-client:~/contrail# oc get csr -A NAME AGE SIGNERNAME REQUESTOR CONDITION csr-gblnm 20s kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Pending
您可能需要定期重复此命令,直到看到挂起的 CSR。
- 批准 CSR。
例如:
root@ai-client:~/contrail# oc adm certificate approve csr-gblnm certificatesigningrequest.certificates.k8s.io/csr-gblnm approved
- 检查挂起的 CSR。
- 验证新节点是否已在现有群集中启动并正在运行。
oc get nodes