$ aws cloudformation create-stack --stack-name <name> \ (1)
--template-body file://<template>.yaml \ (2)
--parameters file://<parameters>.json (3)
您可以使用示例 CloudFormation 模板创建的 Amazon Web Services (AWS) 上的 OpenShift Container Platform 集群中添加更多计算机器。
您已使用提供的 AWS CloudFormation 模板 在 AWS 上安装了集群。
您拥有在集群安装期间用于创建计算机器的 JSON 文件和 CloudFormation 模板。如果您没有这些文件,则必须按照 安装步骤 中的说明重新创建它们。
您可以使用示例 CloudFormation 模板创建的 Amazon Web Services (AWS) 上的 OpenShift Container Platform 集群中添加更多计算机器。
CloudFormation 模板创建表示一台计算机器的堆栈。您必须为每台计算机器创建一个堆栈。 |
如果您不使用提供的 CloudFormation 模板创建计算节点,则必须查看提供的信息并手动创建基础架构。如果您的集群未正确初始化,您可能需要联系 Red Hat 支持人员并提供您的安装日志。 |
您已使用 CloudFormation 模板安装了 OpenShift Container Platform 集群,并且可以访问在集群安装期间用于创建计算机器的 JSON 文件和 CloudFormation 模板。
您已安装 AWS CLI。
创建另一个计算堆栈。
启动模板
$ aws cloudformation create-stack --stack-name <name> \ (1)
--template-body file://<template>.yaml \ (2)
--parameters file://<parameters>.json (3)
1 | <name> 是 CloudFormation 堆栈的名称,例如 cluster-workers 。如果您删除集群,则必须提供此堆栈的名称。 |
2 | <template> 是您保存的 CloudFormation 模板 YAML 文件的相对路径和名称。 |
3 | <parameters> 是 CloudFormation 参数 JSON 文件的相对路径和名称。 |
确认模板组件存在
$ aws cloudformation describe-stacks --stack-name <name>
继续创建计算堆栈,直到您为集群创建足够的计算机器。
将机器添加到集群时,会为每个添加的机器生成两个待处理的证书签名请求 (CSR)。您必须确认这些 CSR 已获批准,或者必要时自行批准它们。必须先批准客户端请求,然后再批准服务器请求。
您已将机器添加到集群。
确认集群识别这些机器
$ oc get nodes
NAME STATUS ROLES AGE VERSION
master-0 Ready master 63m v1.30.3
master-1 Ready master 63m v1.30.3
master-2 Ready master 64m v1.30.3
输出列出了您创建的所有机器。
在批准一些 CSR 之前,上述输出可能不包含计算节点(也称为工作节点)。 |
查看待处理的 CSR,并确保您看到为添加到集群的每台机器显示状态为“待处理”或“已批准”的客户端请求。
$ oc get csr
NAME AGE REQUESTOR CONDITION
csr-8b2br 15m system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Pending
csr-8vnps 15m system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Pending
...
在此示例中,两台机器正在加入集群。您可能会在列表中看到更多已批准的 CSR。
如果 CSR 未获批准,在您添加的所有机器的待处理 CSR 状态均为“待处理”后,请批准集群机器的 CSR。
由于 CSR 会自动轮换,因此请在将机器添加到集群后一小时内批准您的 CSR。如果您在一小时内未批准它们,证书将轮换,并且每个节点将存在两个以上的证书。您必须批准所有这些证书。批准客户端 CSR 后,Kubelet 会为服务证书创建一个辅助 CSR,这需要手动批准。然后,如果 Kubelet 请求具有相同参数的新证书,则 `machine-approver` 会自动批准后续的服务证书续订请求。 |
对于在未启用机器 API 的平台(例如裸机和其他用户提供的基础设施)上运行的集群,您必须实现一种自动批准 kubelet 服务证书请求 (CSR) 的方法。如果未批准请求,则 `oc exec`、`oc rsh` 和 `oc logs` 命令将无法成功,因为 API 服务器连接到 kubelet 时需要服务证书。任何联系 Kubelet 端点的操作都需要此证书批准到位。该方法必须监视新的 CSR,确认 CSR 是由 `system:node` 或 `system:admin` 组中的 `node-bootstrapper` 服务帐户提交的,并确认节点的身份。 |
要单独批准它们,请对每个有效的 CSR 运行以下命令
$ oc adm certificate approve <csr_name> (1)
1 | <csr_name> 是当前 CSR 列表中 CSR 的名称。 |
要批准所有待处理的 CSR,请运行以下命令
$ oc get csr -o go-template='{{range .items}}{{if not .status}}{{.metadata.name}}{{"\n"}}{{end}}{{end}}' | xargs --no-run-if-empty oc adm certificate approve
在批准一些 CSR 之前,某些操作符可能无法使用。 |
现在您的客户端请求已获批准,您必须查看添加到集群的每台机器的服务器请求。
$ oc get csr
NAME AGE REQUESTOR CONDITION
csr-bfd72 5m26s system:node:ip-10-0-50-126.us-east-2.compute.internal Pending
csr-c57lv 5m26s system:node:ip-10-0-95-157.us-east-2.compute.internal Pending
...
如果其余 CSR 未获批准且状态为“待处理”,请批准集群机器的 CSR。
要单独批准它们,请对每个有效的 CSR 运行以下命令
$ oc adm certificate approve <csr_name> (1)
1 | <csr_name> 是当前 CSR 列表中 CSR 的名称。 |
要批准所有待处理的 CSR,请运行以下命令
$ oc get csr -o go-template='{{range .items}}{{if not .status}}{{.metadata.name}}{{"\n"}}{{end}}{{end}}' | xargs oc adm certificate approve
批准所有客户端和服务器 CSR 后,机器将具有“就绪”状态。通过运行以下命令验证这一点
$ oc get nodes
NAME STATUS ROLES AGE VERSION
master-0 Ready master 73m v1.30.3
master-1 Ready master 73m v1.30.3
master-2 Ready master 74m v1.30.3
worker-0 Ready worker 11m v1.30.3
worker-1 Ready worker 11m v1.30.3
批准服务器 CSR 后,机器可能需要几分钟才能转换为“就绪”状态。 |